@vibekiln/cutline-mcp-cli 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/auth/callback.d.ts +1 -1
- package/dist/auth/callback.js +9 -1
- package/dist/commands/login.js +4 -1
- package/dist/commands/serve.d.ts +4 -0
- package/dist/commands/serve.js +19 -6
- package/dist/commands/setup.js +17 -8
- package/dist/index.js +4 -2
- package/dist/servers/{chunk-RUCYK3TR.js → chunk-FHWY2TYO.js} +349 -89
- package/dist/servers/chunk-Q5V4VTF5.js +3180 -0
- package/dist/servers/{chunk-KMUSQOTJ.js → chunk-WTLGBZBN.js} +15 -1
- package/dist/servers/cutline-server.js +1218 -4011
- package/dist/servers/{data-client-RY2DCLME.js → data-client-3OADPXXN.js} +45 -3
- package/dist/servers/exploration-server.js +1 -1
- package/dist/servers/integrations-server.js +2 -2
- package/dist/servers/output-server.js +1 -1
- package/dist/servers/premortem-server.js +30 -65
- package/dist/servers/slopburn-server.js +10069 -0
- package/dist/servers/tools-server.js +67 -6
- package/package.json +5 -3
- package/server.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
+
__dataClientInternals,
|
|
2
3
|
addEdges,
|
|
3
4
|
addEntity,
|
|
4
5
|
addNodes,
|
|
5
6
|
addTestCases,
|
|
7
|
+
attachDeepDiveToEngagement,
|
|
6
8
|
cfApplyEdits,
|
|
7
9
|
cfBuildAndUploadPdf,
|
|
8
10
|
cfChatWithPersona,
|
|
@@ -21,15 +23,18 @@ import {
|
|
|
21
23
|
cfPremortemKick,
|
|
22
24
|
cfPremortemRun,
|
|
23
25
|
cfPremortemStart,
|
|
26
|
+
cfPremortemStatus,
|
|
24
27
|
cfRegenAssumptions,
|
|
25
28
|
cfRegenExperiments,
|
|
26
29
|
cfSaveWikiMarkdown,
|
|
30
|
+
createEngagement,
|
|
27
31
|
createExplorationSession,
|
|
28
32
|
createPremortem,
|
|
29
33
|
createTemplate,
|
|
30
34
|
deleteAllNodes,
|
|
31
35
|
deleteBinding,
|
|
32
36
|
deleteGraphData,
|
|
37
|
+
enqueueVerificationCycleJob,
|
|
33
38
|
generateReadinessReportViaProxy,
|
|
34
39
|
getAllBindings,
|
|
35
40
|
getAllEdges,
|
|
@@ -38,9 +43,12 @@ import {
|
|
|
38
43
|
getAllNodesLight,
|
|
39
44
|
getBindingsForEntity,
|
|
40
45
|
getChat,
|
|
46
|
+
getDiscoverabilityAgenda,
|
|
47
|
+
getEngagement,
|
|
41
48
|
getEntitiesWithEmbeddings,
|
|
42
49
|
getEntityById,
|
|
43
50
|
getExplorationSession,
|
|
51
|
+
getGeneratedTestArtifactBundle,
|
|
44
52
|
getGraphMetadata,
|
|
45
53
|
getIdeaReport,
|
|
46
54
|
getNodesByCategories,
|
|
@@ -50,23 +58,35 @@ import {
|
|
|
50
58
|
getPersona,
|
|
51
59
|
getPodcastIntroductions,
|
|
52
60
|
getPremortem,
|
|
61
|
+
getProductAgenda,
|
|
53
62
|
getPublicSiteUrlForCurrentAuth,
|
|
54
63
|
getReadinessReport,
|
|
55
64
|
getScanRateLimit,
|
|
65
|
+
getSlopburnRun,
|
|
56
66
|
getTemplate,
|
|
57
67
|
getTestCasesForEntity,
|
|
58
68
|
getTestCasesForProduct,
|
|
69
|
+
getVerificationCycleJob,
|
|
70
|
+
getVerificationTestExecutionJob,
|
|
59
71
|
hasConstraints,
|
|
72
|
+
ingestVerificationIntent,
|
|
73
|
+
listEngagements,
|
|
60
74
|
listExplorationSessions,
|
|
61
75
|
listPersonas,
|
|
62
76
|
listPremortems,
|
|
77
|
+
listSlopburnRuns,
|
|
63
78
|
listTemplates,
|
|
64
79
|
recordScoreSnapshot,
|
|
80
|
+
runVerificationCycle,
|
|
65
81
|
saveChat,
|
|
66
82
|
saveReadinessReport,
|
|
67
83
|
saveScanReport,
|
|
68
84
|
searchNodesByKeywords,
|
|
85
|
+
selectEngagementProduct,
|
|
86
|
+
submitVerificationTestExecution,
|
|
87
|
+
summarizeEngagement,
|
|
69
88
|
updateChat,
|
|
89
|
+
updateEngagement,
|
|
70
90
|
updateEntityEmbedding,
|
|
71
91
|
updateExplorationSession,
|
|
72
92
|
updateGraphMetadata,
|
|
@@ -77,13 +97,16 @@ import {
|
|
|
77
97
|
upsertBindings,
|
|
78
98
|
upsertEdges,
|
|
79
99
|
upsertEntities,
|
|
80
|
-
upsertNodes
|
|
81
|
-
|
|
100
|
+
upsertNodes,
|
|
101
|
+
upsertSlopburnRun
|
|
102
|
+
} from "./chunk-FHWY2TYO.js";
|
|
82
103
|
export {
|
|
104
|
+
__dataClientInternals,
|
|
83
105
|
addEdges,
|
|
84
106
|
addEntity,
|
|
85
107
|
addNodes,
|
|
86
108
|
addTestCases,
|
|
109
|
+
attachDeepDiveToEngagement,
|
|
87
110
|
cfApplyEdits,
|
|
88
111
|
cfBuildAndUploadPdf,
|
|
89
112
|
cfChatWithPersona,
|
|
@@ -102,15 +125,18 @@ export {
|
|
|
102
125
|
cfPremortemKick,
|
|
103
126
|
cfPremortemRun,
|
|
104
127
|
cfPremortemStart,
|
|
128
|
+
cfPremortemStatus,
|
|
105
129
|
cfRegenAssumptions,
|
|
106
130
|
cfRegenExperiments,
|
|
107
131
|
cfSaveWikiMarkdown,
|
|
132
|
+
createEngagement,
|
|
108
133
|
createExplorationSession,
|
|
109
134
|
createPremortem,
|
|
110
135
|
createTemplate,
|
|
111
136
|
deleteAllNodes,
|
|
112
137
|
deleteBinding,
|
|
113
138
|
deleteGraphData,
|
|
139
|
+
enqueueVerificationCycleJob,
|
|
114
140
|
generateReadinessReportViaProxy,
|
|
115
141
|
getAllBindings,
|
|
116
142
|
getAllEdges,
|
|
@@ -119,9 +145,12 @@ export {
|
|
|
119
145
|
getAllNodesLight,
|
|
120
146
|
getBindingsForEntity,
|
|
121
147
|
getChat,
|
|
148
|
+
getDiscoverabilityAgenda,
|
|
149
|
+
getEngagement,
|
|
122
150
|
getEntitiesWithEmbeddings,
|
|
123
151
|
getEntityById,
|
|
124
152
|
getExplorationSession,
|
|
153
|
+
getGeneratedTestArtifactBundle,
|
|
125
154
|
getGraphMetadata,
|
|
126
155
|
getIdeaReport,
|
|
127
156
|
getNodesByCategories,
|
|
@@ -131,23 +160,35 @@ export {
|
|
|
131
160
|
getPersona,
|
|
132
161
|
getPodcastIntroductions,
|
|
133
162
|
getPremortem,
|
|
163
|
+
getProductAgenda,
|
|
134
164
|
getPublicSiteUrlForCurrentAuth,
|
|
135
165
|
getReadinessReport,
|
|
136
166
|
getScanRateLimit,
|
|
167
|
+
getSlopburnRun,
|
|
137
168
|
getTemplate,
|
|
138
169
|
getTestCasesForEntity,
|
|
139
170
|
getTestCasesForProduct,
|
|
171
|
+
getVerificationCycleJob,
|
|
172
|
+
getVerificationTestExecutionJob,
|
|
140
173
|
hasConstraints,
|
|
174
|
+
ingestVerificationIntent,
|
|
175
|
+
listEngagements,
|
|
141
176
|
listExplorationSessions,
|
|
142
177
|
listPersonas,
|
|
143
178
|
listPremortems,
|
|
179
|
+
listSlopburnRuns,
|
|
144
180
|
listTemplates,
|
|
145
181
|
recordScoreSnapshot,
|
|
182
|
+
runVerificationCycle,
|
|
146
183
|
saveChat,
|
|
147
184
|
saveReadinessReport,
|
|
148
185
|
saveScanReport,
|
|
149
186
|
searchNodesByKeywords,
|
|
187
|
+
selectEngagementProduct,
|
|
188
|
+
submitVerificationTestExecution,
|
|
189
|
+
summarizeEngagement,
|
|
150
190
|
updateChat,
|
|
191
|
+
updateEngagement,
|
|
151
192
|
updateEntityEmbedding,
|
|
152
193
|
updateExplorationSession,
|
|
153
194
|
updateGraphMetadata,
|
|
@@ -158,5 +199,6 @@ export {
|
|
|
158
199
|
upsertBindings,
|
|
159
200
|
upsertEdges,
|
|
160
201
|
upsertEntities,
|
|
161
|
-
upsertNodes
|
|
202
|
+
upsertNodes,
|
|
203
|
+
upsertSlopburnRun
|
|
162
204
|
};
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
requirePremiumWithAutoAuth,
|
|
15
15
|
updateExplorationSession,
|
|
16
16
|
validateRequestSize
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-FHWY2TYO.js";
|
|
18
18
|
|
|
19
19
|
// ../mcp/dist/mcp/src/exploration-server.js
|
|
20
20
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
isWriteTool
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WTLGBZBN.js";
|
|
5
5
|
import {
|
|
6
6
|
guardBoundary,
|
|
7
7
|
guardOutput,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
requirePremiumWithAutoAuth,
|
|
14
14
|
validateAuth,
|
|
15
15
|
validateRequestSize
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-FHWY2TYO.js";
|
|
17
17
|
|
|
18
18
|
// ../mcp/dist/mcp/src/integrations-server.js
|
|
19
19
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
mapErrorToMcp,
|
|
14
14
|
requirePremiumWithAutoAuth,
|
|
15
15
|
validateRequestSize
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-FHWY2TYO.js";
|
|
17
17
|
|
|
18
18
|
// ../mcp/dist/mcp/src/output-server.js
|
|
19
19
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-DE7R7WKY.js";
|
|
5
5
|
import {
|
|
6
6
|
isWriteTool
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WTLGBZBN.js";
|
|
8
8
|
import {
|
|
9
9
|
guardBoundary,
|
|
10
10
|
guardOutput,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
updatePremortem,
|
|
28
28
|
validateAuth,
|
|
29
29
|
validateRequestSize
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-FHWY2TYO.js";
|
|
31
31
|
|
|
32
32
|
// ../mcp/dist/mcp/src/premortem-server.js
|
|
33
33
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -49,6 +49,10 @@ function buildBrief(ctx) {
|
|
|
49
49
|
parts.push(`Target users: ${ctx.targetUser}`);
|
|
50
50
|
if (ctx.businessModel && !ctx.brief?.toLowerCase().includes(ctx.businessModel.toLowerCase().slice(0, 15)))
|
|
51
51
|
parts.push(`Business model: ${ctx.businessModel}`);
|
|
52
|
+
if (ctx.uxExperience && !ctx.brief?.toLowerCase().includes(ctx.uxExperience.toLowerCase().slice(0, 15)))
|
|
53
|
+
parts.push(`UX: ${ctx.uxExperience}`);
|
|
54
|
+
if (ctx.technicalStack && !ctx.brief?.toLowerCase().includes(ctx.technicalStack.toLowerCase().slice(0, 15)))
|
|
55
|
+
parts.push(`Stack: ${ctx.technicalStack}`);
|
|
52
56
|
return parts.join(". ").trim() || "No description provided.";
|
|
53
57
|
}
|
|
54
58
|
function buildReferenceClasses(competitors) {
|
|
@@ -238,7 +242,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
238
242
|
tools: [
|
|
239
243
|
{
|
|
240
244
|
name: "premortem_run",
|
|
241
|
-
description: "
|
|
245
|
+
description: "Start an async pre-mortem generation job (start+poll)",
|
|
242
246
|
inputSchema: {
|
|
243
247
|
type: "object",
|
|
244
248
|
properties: {
|
|
@@ -477,64 +481,25 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
477
481
|
}
|
|
478
482
|
switch (name) {
|
|
479
483
|
case "premortem_run": {
|
|
480
|
-
console.error(`[Premortem DEBUG] Starting premortem_run...`);
|
|
481
484
|
const { input, auth_token } = args;
|
|
482
|
-
console.error(`[Premortem DEBUG] Step 1: Authenticating...`);
|
|
483
485
|
const decoded = await requirePremiumWithAutoAuth(auth_token);
|
|
484
|
-
console.error(`[Premortem DEBUG] Step 1 done: UID=${decoded?.uid}`);
|
|
485
|
-
console.error(`[Premortem DEBUG] Step 2: Parsing input...`);
|
|
486
486
|
const parsedInput = RunInputSchema.parse(input);
|
|
487
|
-
console.error(`[Premortem DEBUG] Step 2 done: project=${parsedInput.project.name}`);
|
|
488
|
-
console.error(`[Premortem] Queuing analysis for: ${parsedInput.project.name}`);
|
|
489
|
-
const startTime = Date.now();
|
|
490
|
-
console.error(`[Premortem DEBUG] Step 4: Creating job document...`);
|
|
491
487
|
const { id: jobId } = await createPremortem({
|
|
492
488
|
status: "queued",
|
|
493
489
|
payload: parsedInput,
|
|
494
490
|
uid: decoded?.uid || null,
|
|
495
491
|
source: "mcp_sync"
|
|
496
492
|
});
|
|
497
|
-
console.error(`[Premortem DEBUG] Step 4 done: jobId=${jobId}`);
|
|
498
|
-
console.error(`[Premortem] Job queued: ${jobId}, polling for completion...`);
|
|
499
|
-
const maxWaitMs = 10 * 60 * 1e3;
|
|
500
|
-
const pollIntervalMs = 3e3;
|
|
501
|
-
let lastStage = "";
|
|
502
|
-
let kickedFallback = false;
|
|
503
|
-
while (Date.now() - startTime < maxWaitMs) {
|
|
504
|
-
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
505
|
-
const data = await getPremortem(jobId) || {};
|
|
506
|
-
if (!kickedFallback && data.status === "queued" && Date.now() - startTime > 1e4) {
|
|
507
|
-
console.error(`[Premortem] Job still queued after 10s, kicking via Cloud Function...`);
|
|
508
|
-
kickedFallback = true;
|
|
509
|
-
cfPremortemKick(jobId).catch((e) => console.error(`[Premortem] Kick fallback error:`, e?.message));
|
|
510
|
-
}
|
|
511
|
-
const stage = data.stage_label || data.stage;
|
|
512
|
-
const progress = data.progress;
|
|
513
|
-
if (stage && stage !== lastStage) {
|
|
514
|
-
lastStage = stage;
|
|
515
|
-
const pct = progress ? ` (${Math.round(progress * 100)}%)` : "";
|
|
516
|
-
console.error(`[Premortem] ${stage}${pct}`);
|
|
517
|
-
}
|
|
518
|
-
if (data.status === "completed") {
|
|
519
|
-
const elapsed2 = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
520
|
-
console.error(`[Premortem] Complete in ${elapsed2}s`);
|
|
521
|
-
const result = data.result || {};
|
|
522
|
-
result._jobId = jobId;
|
|
523
|
-
return {
|
|
524
|
-
content: [{ type: "text", text: JSON.stringify(result) }]
|
|
525
|
-
};
|
|
526
|
-
}
|
|
527
|
-
if (data.status === "failed" || data.status === "error") {
|
|
528
|
-
throw new McpError(ErrorCode.InternalError, `Job failed: ${data.error || "Unknown error"}`);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
const elapsed = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
532
|
-
console.error(`[Premortem] Timed out after ${elapsed}s, job still running`);
|
|
533
493
|
return {
|
|
534
494
|
content: [{ type: "text", text: JSON.stringify({
|
|
535
|
-
|
|
495
|
+
accepted: true,
|
|
496
|
+
status: "queued",
|
|
536
497
|
jobId,
|
|
537
|
-
message:
|
|
498
|
+
message: "Pre-mortem queued. Use premortem_status to poll progress.",
|
|
499
|
+
next_action: {
|
|
500
|
+
poll_tool: "premortem_status",
|
|
501
|
+
recommended_interval_ms: 3e3
|
|
502
|
+
}
|
|
538
503
|
}) }]
|
|
539
504
|
};
|
|
540
505
|
}
|
|
@@ -575,26 +540,26 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
575
540
|
};
|
|
576
541
|
}
|
|
577
542
|
case "premortem_kick": {
|
|
578
|
-
console.error(`[Premortem Kick] Starting kick for job...`);
|
|
579
543
|
const { jobId, auth_token } = args;
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
console.error(`[Premortem Kick] Calling Cloud Function for job ${jobId}...`);
|
|
544
|
+
await requirePremiumWithAutoAuth(auth_token);
|
|
545
|
+
let kickResult;
|
|
583
546
|
try {
|
|
584
|
-
|
|
585
|
-
console.error(`[Premortem Kick] Cloud Function returned:`, result);
|
|
586
|
-
return {
|
|
587
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
588
|
-
kicked: result.kicked,
|
|
589
|
-
status: result.status,
|
|
590
|
-
jobId,
|
|
591
|
-
message: result.status === "completed" ? "\u2615 Full analysis complete! Use premortem_status to view results." : "Job processed. Use premortem_status to check results."
|
|
592
|
-
}) }]
|
|
593
|
-
};
|
|
547
|
+
kickResult = await cfPremortemKick(jobId);
|
|
594
548
|
} catch (e) {
|
|
595
|
-
|
|
596
|
-
throw new McpError(ErrorCode.InternalError, `Failed to process job: ${e?.message || "Unknown error"}`);
|
|
549
|
+
throw new McpError(ErrorCode.InternalError, `Failed to process job: ${String(e?.message || e || "Unknown error")}`);
|
|
597
550
|
}
|
|
551
|
+
return {
|
|
552
|
+
content: [{ type: "text", text: JSON.stringify({
|
|
553
|
+
kicked: Boolean(kickResult.kicked),
|
|
554
|
+
status: String(kickResult.status || "running"),
|
|
555
|
+
jobId,
|
|
556
|
+
message: "Kick requested. Use premortem_status to check progress.",
|
|
557
|
+
next_action: {
|
|
558
|
+
poll_tool: "premortem_status",
|
|
559
|
+
recommended_interval_ms: 3e3
|
|
560
|
+
}
|
|
561
|
+
}) }]
|
|
562
|
+
};
|
|
598
563
|
}
|
|
599
564
|
case "premortem_regen_assumptions": {
|
|
600
565
|
const { input, doc, auth_token } = args;
|