@ourroadmaps/mcp 0.28.1 → 0.29.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.
Files changed (2) hide show
  1. package/dist/index.js +980 -710
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21,29 +21,282 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
21
21
  // src/index.ts
22
22
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
23
23
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
24
- // ../../packages/shared/src/schemas/audience.ts
24
+
25
+ // ../../packages/shared/src/blocknote-markdown.ts
26
+ var LIST_BLOCK_TYPES = new Set(["bulletListItem", "numberedListItem", "checkListItem"]);
27
+ function contentToMarkdown(content) {
28
+ if (content == null)
29
+ return "";
30
+ if (typeof content === "string")
31
+ return content;
32
+ if (!Array.isArray(content))
33
+ return "";
34
+ if (content.length === 0)
35
+ return "";
36
+ try {
37
+ return convertBlocks(content, 0);
38
+ } catch {
39
+ try {
40
+ return extractPlainText(content);
41
+ } catch {
42
+ return "";
43
+ }
44
+ }
45
+ }
46
+ function getPreviousBlockType(blocks, currentIndex) {
47
+ for (let i = currentIndex - 1;i >= 0; i--) {
48
+ const block = blocks[i];
49
+ if (!block || typeof block !== "object")
50
+ continue;
51
+ const b = block;
52
+ const line = renderBlock(b, 0, 0);
53
+ if (line !== null)
54
+ return b.type || "";
55
+ }
56
+ return "";
57
+ }
58
+ function appendSeparator(parts, prevType, currentType) {
59
+ if (parts.length === 0)
60
+ return;
61
+ const bothList = LIST_BLOCK_TYPES.has(prevType) && LIST_BLOCK_TYPES.has(currentType);
62
+ parts.push(bothList ? `
63
+ ` : `
64
+
65
+ `);
66
+ }
67
+ function appendChildren(parts, block, depth) {
68
+ const children = block.children;
69
+ if (!Array.isArray(children) || children.length === 0)
70
+ return;
71
+ const childOutput = convertBlocks(children, depth + 1);
72
+ if (childOutput) {
73
+ parts.push(`
74
+ `);
75
+ parts.push(childOutput);
76
+ }
77
+ }
78
+ function convertBlocks(blocks, depth) {
79
+ const parts = [];
80
+ let numberedCounter = 0;
81
+ for (let i = 0;i < blocks.length; i++) {
82
+ const block = blocks[i];
83
+ if (!block || typeof block !== "object")
84
+ continue;
85
+ const b = block;
86
+ const type = b.type || "";
87
+ numberedCounter = type === "numberedListItem" ? numberedCounter + 1 : 0;
88
+ const line = renderBlock(b, depth, numberedCounter);
89
+ if (line === null)
90
+ continue;
91
+ const prevType = getPreviousBlockType(blocks, i);
92
+ appendSeparator(parts, prevType, type);
93
+ parts.push(line);
94
+ appendChildren(parts, b, depth);
95
+ }
96
+ return parts.join("");
97
+ }
98
+ function renderBlock(block, depth, numberedCounter) {
99
+ const type = block.type || "";
100
+ const props = block.props || {};
101
+ const content = block.content;
102
+ const indent = " ".repeat(depth);
103
+ switch (type) {
104
+ case "paragraph": {
105
+ const text = renderInlineContent(content);
106
+ if (!text)
107
+ return null;
108
+ return `${indent}${text}`;
109
+ }
110
+ case "heading": {
111
+ const level = props.level || 1;
112
+ const prefix = "#".repeat(Math.min(level, 6));
113
+ const text = renderInlineContent(content);
114
+ return `${indent}${prefix} ${text}`;
115
+ }
116
+ case "bulletListItem": {
117
+ const text = renderInlineContent(content);
118
+ return `${indent}- ${text}`;
119
+ }
120
+ case "numberedListItem": {
121
+ const text = renderInlineContent(content);
122
+ return `${indent}${numberedCounter}. ${text}`;
123
+ }
124
+ case "checkListItem": {
125
+ const checked = props.checked === true;
126
+ const marker = checked ? "[x]" : "[ ]";
127
+ const text = renderInlineContent(content);
128
+ return `${indent}- ${marker} ${text}`;
129
+ }
130
+ case "codeBlock": {
131
+ const language = props.language || "";
132
+ const text = renderInlineContent(content);
133
+ return `${indent}\`\`\`${language}
134
+ ${indent}${text}
135
+ ${indent}\`\`\``;
136
+ }
137
+ case "image": {
138
+ const url = props.url || "";
139
+ const caption = props.caption || "";
140
+ return `${indent}![${caption}](${url})`;
141
+ }
142
+ case "table":
143
+ return renderTable(content, indent);
144
+ case "divider":
145
+ return `${indent}---`;
146
+ default: {
147
+ const text = renderInlineContent(content);
148
+ if (!text)
149
+ return null;
150
+ return `${indent}${text}`;
151
+ }
152
+ }
153
+ }
154
+ function renderInlineContent(content) {
155
+ if (!content)
156
+ return "";
157
+ if (Array.isArray(content)) {
158
+ return content.map(renderInlineItem).join("");
159
+ }
160
+ return "";
161
+ }
162
+ function renderInlineItem(item) {
163
+ if (!item || typeof item !== "object")
164
+ return "";
165
+ const i = item;
166
+ const type = i.type;
167
+ if (type === "text") {
168
+ const text = i.text || "";
169
+ return applyStyles(text, i.styles);
170
+ }
171
+ if (type === "link") {
172
+ const href = i.href || "";
173
+ const linkContent = i.content;
174
+ const text = Array.isArray(linkContent) ? linkContent.map(renderInlineItem).join("") : "";
175
+ return `[${text}](${href})`;
176
+ }
177
+ return "";
178
+ }
179
+ function applyStyles(text, styles) {
180
+ if (!text)
181
+ return text;
182
+ if (!styles || typeof styles !== "object")
183
+ return text;
184
+ const s = styles;
185
+ let result = text;
186
+ if (s.code === true) {
187
+ result = `\`${result}\``;
188
+ }
189
+ if (s.bold === true && s.italic === true) {
190
+ result = `***${result}***`;
191
+ } else if (s.bold === true) {
192
+ result = `**${result}**`;
193
+ } else if (s.italic === true) {
194
+ result = `*${result}*`;
195
+ }
196
+ if (s.strike === true) {
197
+ result = `~~${result}~~`;
198
+ }
199
+ return result;
200
+ }
201
+ function renderTable(content, indent) {
202
+ if (!content || typeof content !== "object")
203
+ return null;
204
+ const tableContent = content;
205
+ const rows = tableContent.rows;
206
+ if (!Array.isArray(rows) || rows.length === 0)
207
+ return null;
208
+ const lines = [];
209
+ for (let rowIndex = 0;rowIndex < rows.length; rowIndex++) {
210
+ const row = rows[rowIndex];
211
+ const cells = row?.cells;
212
+ if (!Array.isArray(cells))
213
+ continue;
214
+ const cellTexts = cells.map((cell) => {
215
+ if (Array.isArray(cell)) {
216
+ return cell.map(renderInlineItem).join("");
217
+ }
218
+ return "";
219
+ });
220
+ lines.push(`${indent}| ${cellTexts.join(" | ")} |`);
221
+ if (rowIndex === 0) {
222
+ const separator = cellTexts.map(() => "---").join(" | ");
223
+ lines.push(`${indent}| ${separator} |`);
224
+ }
225
+ }
226
+ return lines.join(`
227
+ `);
228
+ }
229
+ function extractPlainText(obj) {
230
+ if (typeof obj === "string")
231
+ return obj;
232
+ if (Array.isArray(obj)) {
233
+ return obj.map(extractPlainText).filter(Boolean).join(" ");
234
+ }
235
+ if (obj && typeof obj === "object") {
236
+ const record = obj;
237
+ if (typeof record.text === "string")
238
+ return record.text;
239
+ const parts = [];
240
+ for (const value of Object.values(record)) {
241
+ const text = extractPlainText(value);
242
+ if (text)
243
+ parts.push(text);
244
+ }
245
+ return parts.join(" ");
246
+ }
247
+ return "";
248
+ }
249
+ // ../../packages/shared/src/schemas/ai.ts
25
250
  import { z } from "zod";
26
- var audienceSchema = z.object({
27
- id: z.string().uuid(),
251
+ var TASK_TYPES = ["complex", "generation", "fast"];
252
+ var taskTypeSchema = z.enum(TASK_TYPES);
253
+ var AI_MODEL_NAMES = ["sonnet", "haiku", "opus"];
254
+ var aiModelNameSchema = z.enum(AI_MODEL_NAMES);
255
+ var aiCallLogSchema = z.object({
256
+ id: z.string(),
28
257
  organizationId: z.string(),
29
- name: z.string(),
30
- description: z.string().nullable(),
31
- order: z.number().int(),
32
- createdAt: z.string(),
33
- updatedAt: z.string().nullable()
258
+ userId: z.string(),
259
+ requestId: z.string().nullish(),
260
+ feature: z.string(),
261
+ model: z.string(),
262
+ provider: z.string(),
263
+ taskType: z.string().nullish(),
264
+ inputTokens: z.number().nullable(),
265
+ outputTokens: z.number().nullable(),
266
+ costCents: z.number().nullable(),
267
+ durationMs: z.number().nullable(),
268
+ stopReason: z.string().nullable(),
269
+ error: z.string().nullable(),
270
+ errorType: z.string().nullable(),
271
+ reason: z.string().nullable(),
272
+ correlationId: z.string().nullable(),
273
+ iteration: z.number().nullable(),
274
+ metadata: z.record(z.unknown()).nullable(),
275
+ createdAt: z.string()
276
+ });
277
+ // ../../packages/shared/src/schemas/audience.ts
278
+ import { z as z2 } from "zod";
279
+ var audienceSchema = z2.object({
280
+ id: z2.string().uuid(),
281
+ organizationId: z2.string(),
282
+ name: z2.string(),
283
+ description: z2.string().nullable(),
284
+ order: z2.number().int(),
285
+ createdAt: z2.string(),
286
+ updatedAt: z2.string().nullable()
34
287
  });
35
- var createAudienceSchema = z.object({
36
- name: z.string().min(1),
37
- description: z.string().nullable().optional()
288
+ var createAudienceSchema = z2.object({
289
+ name: z2.string().min(1),
290
+ description: z2.string().nullable().optional()
38
291
  });
39
- var updateAudienceSchema = z.object({
40
- name: z.string().min(1).optional(),
41
- description: z.string().nullable().optional(),
42
- order: z.number().int().optional()
292
+ var updateAudienceSchema = z2.object({
293
+ name: z2.string().min(1).optional(),
294
+ description: z2.string().nullable().optional(),
295
+ order: z2.number().int().optional()
43
296
  });
44
- var audienceListSchema = z.array(audienceSchema);
297
+ var audienceListSchema = z2.array(audienceSchema);
45
298
  // ../../packages/shared/src/schemas/constants.ts
46
- import { z as z2 } from "zod";
299
+ import { z as z3 } from "zod";
47
300
  var HORIZONS = [
48
301
  "inbox",
49
302
  "now",
@@ -54,7 +307,7 @@ var HORIZONS = [
54
307
  "done",
55
308
  "cancelled"
56
309
  ];
57
- var horizonSchema = z2.enum(HORIZONS);
310
+ var horizonSchema = z3.enum(HORIZONS);
58
311
  var ROADMAP_STATUSES = [
59
312
  "not_started",
60
313
  "planning",
@@ -64,17 +317,17 @@ var ROADMAP_STATUSES = [
64
317
  "done",
65
318
  "cancelled"
66
319
  ];
67
- var roadmapStatusSchema = z2.enum(ROADMAP_STATUSES);
320
+ var roadmapStatusSchema = z3.enum(ROADMAP_STATUSES);
68
321
  var EFFORT_SIZES = ["xs", "s", "m", "l", "xl"];
69
- var effortSchema = z2.enum(EFFORT_SIZES);
322
+ var effortSchema = z3.enum(EFFORT_SIZES);
70
323
  var DATE_GRANULARITIES = ["day", "month", "quarter", "half-year", "year"];
71
- var dateGranularitySchema = z2.enum(DATE_GRANULARITIES);
324
+ var dateGranularitySchema = z3.enum(DATE_GRANULARITIES);
72
325
  var PRD_STATUSES = ["draft", "completed"];
73
- var prdStatusSchema = z2.enum(PRD_STATUSES);
326
+ var prdStatusSchema = z3.enum(PRD_STATUSES);
74
327
  var IDEA_STATUSES = ["new", "under-review", "planned", "declined", "done"];
75
- var ideaStatusSchema = z2.enum(IDEA_STATUSES);
328
+ var ideaStatusSchema = z3.enum(IDEA_STATUSES);
76
329
  var FEATURE_TYPES = ["area", "feature"];
77
- var featureTypeSchema = z2.enum(FEATURE_TYPES);
330
+ var featureTypeSchema = z3.enum(FEATURE_TYPES);
78
331
  var PRODUCT_TYPES = [
79
332
  "brand",
80
333
  "product",
@@ -83,439 +336,439 @@ var PRODUCT_TYPES = [
83
336
  "landing_page",
84
337
  "service"
85
338
  ];
86
- var productTypeSchema = z2.enum(PRODUCT_TYPES);
339
+ var productTypeSchema = z3.enum(PRODUCT_TYPES);
87
340
  var AUDIENCE_TYPES = ["stakeholder", "user_persona"];
88
- var audienceTypeSchema = z2.enum(AUDIENCE_TYPES);
341
+ var audienceTypeSchema = z3.enum(AUDIENCE_TYPES);
89
342
  var BRAINSTORM_MEDIA_TYPES = ["image", "video"];
90
- var brainstormMediaTypeSchema = z2.enum(BRAINSTORM_MEDIA_TYPES);
343
+ var brainstormMediaTypeSchema = z3.enum(BRAINSTORM_MEDIA_TYPES);
91
344
  // ../../packages/shared/src/schemas/context.ts
92
- import { z as z3 } from "zod";
93
- var domainContextSchema = z3.object({
94
- definitions: z3.record(z3.string(), z3.string()),
95
- schemas: z3.record(z3.string(), z3.array(z3.string()))
345
+ import { z as z4 } from "zod";
346
+ var domainContextSchema = z4.object({
347
+ definitions: z4.record(z4.string(), z4.string()),
348
+ schemas: z4.record(z4.string(), z4.array(z4.string()))
96
349
  });
97
350
  // ../../packages/shared/src/schemas/export.ts
98
- import { z as z4 } from "zod";
99
- var localEntityTypeSchema = z4.enum(["roadmap", "prd", "epic", "story", "design"]);
100
- var externalSystemSchema = z4.enum(["linear", "notion", "jira", "github"]);
101
- var exportSchema = z4.object({
102
- id: z4.string().uuid(),
103
- roadmapItemId: z4.string().uuid(),
351
+ import { z as z5 } from "zod";
352
+ var localEntityTypeSchema = z5.enum(["roadmap", "prd", "epic", "story", "design"]);
353
+ var externalSystemSchema = z5.enum(["linear", "notion", "jira", "github"]);
354
+ var exportSchema = z5.object({
355
+ id: z5.string().uuid(),
356
+ roadmapItemId: z5.string().uuid(),
104
357
  localEntityType: localEntityTypeSchema,
105
- localEntityId: z4.string().uuid(),
358
+ localEntityId: z5.string().uuid(),
106
359
  externalSystem: externalSystemSchema,
107
- externalObjectType: z4.string(),
108
- externalId: z4.string(),
109
- externalUrl: z4.string().nullable(),
110
- metadata: z4.record(z4.unknown()).nullable(),
111
- createdAt: z4.string(),
112
- updatedAt: z4.string()
360
+ externalObjectType: z5.string(),
361
+ externalId: z5.string(),
362
+ externalUrl: z5.string().nullable(),
363
+ metadata: z5.record(z5.unknown()).nullable(),
364
+ createdAt: z5.string(),
365
+ updatedAt: z5.string()
113
366
  });
114
- var createExportInputSchema = z4.object({
115
- roadmapId: z4.string().uuid(),
367
+ var createExportInputSchema = z5.object({
368
+ roadmapId: z5.string().uuid(),
116
369
  localEntityType: localEntityTypeSchema,
117
- localEntityId: z4.string().uuid(),
370
+ localEntityId: z5.string().uuid(),
118
371
  externalSystem: externalSystemSchema,
119
- externalObjectType: z4.string().min(1),
120
- externalId: z4.string().min(1),
121
- externalUrl: z4.string().url().optional(),
122
- metadata: z4.record(z4.unknown()).optional()
372
+ externalObjectType: z5.string().min(1),
373
+ externalId: z5.string().min(1),
374
+ externalUrl: z5.string().url().optional(),
375
+ metadata: z5.record(z5.unknown()).optional()
123
376
  });
124
- var updateExportInputSchema = z4.object({
125
- externalUrl: z4.string().url().nullable().optional(),
126
- metadata: z4.record(z4.unknown()).optional()
377
+ var updateExportInputSchema = z5.object({
378
+ externalUrl: z5.string().url().nullable().optional(),
379
+ metadata: z5.record(z5.unknown()).optional()
127
380
  });
128
- var searchExportsInputSchema = z4.object({
129
- roadmapId: z4.string().uuid().optional(),
381
+ var searchExportsInputSchema = z5.object({
382
+ roadmapId: z5.string().uuid().optional(),
130
383
  externalSystem: externalSystemSchema.optional(),
131
384
  localEntityType: localEntityTypeSchema.optional(),
132
- localEntityId: z4.string().uuid().optional(),
133
- limit: z4.number().int().min(1).max(100).optional(),
134
- offset: z4.number().int().min(0).optional()
385
+ localEntityId: z5.string().uuid().optional(),
386
+ limit: z5.number().int().min(1).max(100).optional(),
387
+ offset: z5.number().int().min(0).optional()
135
388
  });
136
389
  // ../../packages/shared/src/schemas/feature.ts
137
- import { z as z5 } from "zod";
138
- var featureOutcomeSchema = z5.object({
139
- id: z5.string().uuid(),
140
- description: z5.string(),
141
- order: z5.number().int(),
142
- createdAt: z5.string(),
143
- updatedAt: z5.string()
390
+ import { z as z6 } from "zod";
391
+ var featureOutcomeSchema = z6.object({
392
+ id: z6.string().uuid(),
393
+ description: z6.string(),
394
+ order: z6.number().int(),
395
+ createdAt: z6.string(),
396
+ updatedAt: z6.string()
144
397
  });
145
- var featureSchema = z5.object({
146
- id: z5.string().uuid(),
147
- organizationId: z5.string(),
398
+ var featureSchema = z6.object({
399
+ id: z6.string().uuid(),
400
+ organizationId: z6.string(),
148
401
  type: featureTypeSchema,
149
- name: z5.string(),
150
- description: z5.string().nullable(),
151
- parentId: z5.string().uuid().nullable(),
152
- order: z5.number().int(),
153
- isExpanded: z5.boolean(),
154
- deletedAt: z5.string().nullable(),
155
- createdAt: z5.string(),
156
- createdBy: z5.string()
402
+ name: z6.string(),
403
+ description: z6.string().nullable(),
404
+ parentId: z6.string().uuid().nullable(),
405
+ order: z6.number().int(),
406
+ isExpanded: z6.boolean(),
407
+ deletedAt: z6.string().nullable(),
408
+ createdAt: z6.string(),
409
+ createdBy: z6.string()
157
410
  });
158
- var roadmapLinkSchema = z5.object({
159
- id: z5.string().uuid(),
160
- roadmapId: z5.string().uuid(),
161
- roadmap: z5.object({
162
- id: z5.string().uuid(),
163
- title: z5.string(),
164
- status: z5.string(),
165
- horizon: z5.string()
411
+ var roadmapLinkSchema = z6.object({
412
+ id: z6.string().uuid(),
413
+ roadmapId: z6.string().uuid(),
414
+ roadmap: z6.object({
415
+ id: z6.string().uuid(),
416
+ title: z6.string(),
417
+ status: z6.string(),
418
+ horizon: z6.string()
166
419
  }),
167
- createdAt: z5.string()
420
+ createdAt: z6.string()
168
421
  });
169
422
  var featureWithRelationsSchema = featureSchema.extend({
170
- outcomes: z5.array(featureOutcomeSchema),
171
- roadmapLinks: z5.array(roadmapLinkSchema),
172
- children: z5.array(featureSchema).optional()
423
+ outcomes: z6.array(featureOutcomeSchema),
424
+ roadmapLinks: z6.array(roadmapLinkSchema),
425
+ children: z6.array(featureSchema).optional()
173
426
  });
174
- var createFeatureSchema = z5.object({
175
- name: z5.string().min(1),
176
- description: z5.string().nullable().optional(),
427
+ var createFeatureSchema = z6.object({
428
+ name: z6.string().min(1),
429
+ description: z6.string().nullable().optional(),
177
430
  type: featureTypeSchema.optional(),
178
- parentId: z5.string().uuid().nullable().optional()
431
+ parentId: z6.string().uuid().nullable().optional()
179
432
  });
180
- var updateFeatureSchema = z5.object({
181
- name: z5.string().min(1).optional(),
182
- description: z5.string().nullable().optional(),
433
+ var updateFeatureSchema = z6.object({
434
+ name: z6.string().min(1).optional(),
435
+ description: z6.string().nullable().optional(),
183
436
  type: featureTypeSchema.optional(),
184
- parentId: z5.string().uuid().nullable().optional(),
185
- order: z5.number().int().optional()
437
+ parentId: z6.string().uuid().nullable().optional(),
438
+ order: z6.number().int().optional()
186
439
  });
187
- var saveFeatureOutcomesSchema = z5.object({
188
- outcomes: z5.array(z5.object({
189
- id: z5.string().uuid().optional(),
190
- description: z5.string()
440
+ var saveFeatureOutcomesSchema = z6.object({
441
+ outcomes: z6.array(z6.object({
442
+ id: z6.string().uuid().optional(),
443
+ description: z6.string()
191
444
  }))
192
445
  });
193
- var featureListSchema = z5.array(featureSchema);
446
+ var featureListSchema = z6.array(featureSchema);
194
447
  // ../../packages/shared/src/schemas/idea.ts
195
- import { z as z6 } from "zod";
196
- var ideaSchema = z6.object({
197
- id: z6.string().uuid(),
198
- organizationId: z6.string(),
199
- title: z6.string(),
200
- description: z6.string().nullable(),
201
- status: ideaStatusSchema,
202
- source: z6.string().nullable(),
203
- submittedBy: z6.string().nullable(),
204
- value: effortSchema.nullable(),
205
- effort: effortSchema.nullable(),
206
- order: z6.number().int(),
207
- createdAt: z6.string(),
208
- createdBy: z6.string()
209
- });
210
- var createIdeaSchema = z6.object({
211
- title: z6.string().min(1),
212
- description: z6.string().nullable().optional(),
213
- status: ideaStatusSchema.optional(),
214
- effort: effortSchema.nullable().optional(),
215
- source: z6.string().nullable().optional()
216
- });
217
- var updateIdeaSchema = z6.object({
218
- title: z6.string().min(1).optional(),
219
- description: z6.string().nullable().optional(),
220
- status: ideaStatusSchema.optional(),
221
- effort: effortSchema.nullable().optional(),
222
- source: z6.string().nullable().optional(),
223
- order: z6.number().int().optional()
224
- });
225
- var ideaListSchema = z6.array(ideaSchema);
226
- // ../../packages/shared/src/schemas/presentation.ts
227
448
  import { z as z7 } from "zod";
228
- var presentationSchema = z7.object({
449
+ var ideaSchema = z7.object({
229
450
  id: z7.string().uuid(),
230
451
  organizationId: z7.string(),
231
452
  title: z7.string(),
232
453
  description: z7.string().nullable(),
454
+ status: ideaStatusSchema,
455
+ source: z7.string().nullable(),
456
+ submittedBy: z7.string().nullable(),
457
+ value: effortSchema.nullable(),
458
+ effort: effortSchema.nullable(),
233
459
  order: z7.number().int(),
234
460
  createdAt: z7.string(),
235
- createdBy: z7.string(),
236
- updatedAt: z7.string().nullable()
461
+ createdBy: z7.string()
237
462
  });
238
- var createPresentationSchema = z7.object({
463
+ var createIdeaSchema = z7.object({
239
464
  title: z7.string().min(1),
240
- description: z7.string().nullable().optional()
465
+ description: z7.string().nullable().optional(),
466
+ status: ideaStatusSchema.optional(),
467
+ effort: effortSchema.nullable().optional(),
468
+ source: z7.string().nullable().optional()
241
469
  });
242
- var updatePresentationSchema = z7.object({
470
+ var updateIdeaSchema = z7.object({
243
471
  title: z7.string().min(1).optional(),
244
- description: z7.string().nullable().optional()
472
+ description: z7.string().nullable().optional(),
473
+ status: ideaStatusSchema.optional(),
474
+ effort: effortSchema.nullable().optional(),
475
+ source: z7.string().nullable().optional(),
476
+ order: z7.number().int().optional()
245
477
  });
246
- var presentationListSchema = z7.array(presentationSchema);
247
- // ../../packages/shared/src/schemas/product.ts
478
+ var ideaListSchema = z7.array(ideaSchema);
479
+ // ../../packages/shared/src/schemas/presentation.ts
248
480
  import { z as z8 } from "zod";
249
- var productSchema = z8.object({
481
+ var presentationSchema = z8.object({
250
482
  id: z8.string().uuid(),
251
483
  organizationId: z8.string(),
252
- parentId: z8.string().uuid().nullable(),
253
- type: productTypeSchema,
254
- name: z8.string(),
484
+ title: z8.string(),
485
+ description: z8.string().nullable(),
255
486
  order: z8.number().int(),
256
- isExpanded: z8.boolean(),
257
- deletedAt: z8.string().nullable(),
258
- createdAt: z8.string()
487
+ createdAt: z8.string(),
488
+ createdBy: z8.string(),
489
+ updatedAt: z8.string().nullable()
490
+ });
491
+ var createPresentationSchema = z8.object({
492
+ title: z8.string().min(1),
493
+ description: z8.string().nullable().optional()
259
494
  });
260
- var createProductSchema = z8.object({
261
- name: z8.string().min(1),
262
- description: z8.string().nullable().optional(),
495
+ var updatePresentationSchema = z8.object({
496
+ title: z8.string().min(1).optional(),
497
+ description: z8.string().nullable().optional()
498
+ });
499
+ var presentationListSchema = z8.array(presentationSchema);
500
+ // ../../packages/shared/src/schemas/product.ts
501
+ import { z as z9 } from "zod";
502
+ var productSchema = z9.object({
503
+ id: z9.string().uuid(),
504
+ organizationId: z9.string(),
505
+ parentId: z9.string().uuid().nullable(),
263
506
  type: productTypeSchema,
264
- parentId: z8.string().uuid().nullable().optional()
507
+ name: z9.string(),
508
+ order: z9.number().int(),
509
+ isExpanded: z9.boolean(),
510
+ deletedAt: z9.string().nullable(),
511
+ createdAt: z9.string()
512
+ });
513
+ var createProductSchema = z9.object({
514
+ name: z9.string().min(1),
515
+ description: z9.string().nullable().optional(),
516
+ type: productTypeSchema,
517
+ parentId: z9.string().uuid().nullable().optional()
265
518
  });
266
- var updateProductSchema = z8.object({
267
- name: z8.string().min(1).optional(),
268
- description: z8.string().nullable().optional(),
519
+ var updateProductSchema = z9.object({
520
+ name: z9.string().min(1).optional(),
521
+ description: z9.string().nullable().optional(),
269
522
  type: productTypeSchema.optional(),
270
- parentId: z8.string().uuid().nullable().optional(),
271
- order: z8.number().int().optional()
523
+ parentId: z9.string().uuid().nullable().optional(),
524
+ order: z9.number().int().optional()
272
525
  });
273
- var productListSchema = z8.array(productSchema);
526
+ var productListSchema = z9.array(productSchema);
274
527
  // ../../packages/shared/src/schemas/roadmap.ts
275
- import { z as z10 } from "zod";
528
+ import { z as z11 } from "zod";
276
529
 
277
530
  // ../../packages/shared/src/schemas/story.ts
278
- import { z as z9 } from "zod";
279
- var epicSchema = z9.object({
280
- id: z9.string().uuid(),
281
- roadmapItemId: z9.string().uuid(),
282
- organizationId: z9.string(),
283
- title: z9.string(),
284
- description: z9.string().nullable(),
285
- order: z9.number().int(),
286
- createdAt: z9.string(),
287
- updatedAt: z9.string(),
288
- deletedAt: z9.string().nullable()
531
+ import { z as z10 } from "zod";
532
+ var epicSchema = z10.object({
533
+ id: z10.string().uuid(),
534
+ roadmapItemId: z10.string().uuid(),
535
+ organizationId: z10.string(),
536
+ title: z10.string(),
537
+ description: z10.string().nullable(),
538
+ order: z10.number().int(),
539
+ createdAt: z10.string(),
540
+ updatedAt: z10.string(),
541
+ deletedAt: z10.string().nullable()
289
542
  });
290
- var storySchema = z9.object({
291
- id: z9.string().uuid(),
292
- roadmapItemId: z9.string().uuid(),
293
- epicId: z9.string().uuid().nullable(),
294
- organizationId: z9.string(),
295
- title: z9.string(),
296
- description: z9.string().nullable(),
297
- order: z9.number().int(),
298
- createdAt: z9.string(),
299
- updatedAt: z9.string(),
300
- deletedAt: z9.string().nullable()
543
+ var storySchema = z10.object({
544
+ id: z10.string().uuid(),
545
+ roadmapItemId: z10.string().uuid(),
546
+ epicId: z10.string().uuid().nullable(),
547
+ organizationId: z10.string(),
548
+ title: z10.string(),
549
+ description: z10.string().nullable(),
550
+ order: z10.number().int(),
551
+ createdAt: z10.string(),
552
+ updatedAt: z10.string(),
553
+ deletedAt: z10.string().nullable()
301
554
  });
302
555
  var epicWithStoriesSchema = epicSchema.extend({
303
- stories: z9.array(storySchema)
556
+ stories: z10.array(storySchema)
304
557
  });
305
- var createEpicSchema = z9.object({
306
- title: z9.string().min(1),
307
- description: z9.string().nullable().optional()
558
+ var createEpicSchema = z10.object({
559
+ title: z10.string().min(1),
560
+ description: z10.string().nullable().optional()
308
561
  });
309
- var createStorySchema = z9.object({
310
- title: z9.string().min(1),
311
- description: z9.string().nullable().optional()
562
+ var createStorySchema = z10.object({
563
+ title: z10.string().min(1),
564
+ description: z10.string().nullable().optional()
312
565
  });
313
- var saveStoriesInputSchema = z9.object({
314
- epics: z9.array(z9.object({
315
- title: z9.string().min(1),
316
- description: z9.string().nullable().optional(),
317
- stories: z9.array(z9.object({
318
- title: z9.string().min(1),
319
- description: z9.string().nullable().optional()
566
+ var saveStoriesInputSchema = z10.object({
567
+ epics: z10.array(z10.object({
568
+ title: z10.string().min(1),
569
+ description: z10.string().nullable().optional(),
570
+ stories: z10.array(z10.object({
571
+ title: z10.string().min(1),
572
+ description: z10.string().nullable().optional()
320
573
  })).optional().default([])
321
574
  })).optional().default([]),
322
- stories: z9.array(z9.object({
323
- title: z9.string().min(1),
324
- description: z9.string().nullable().optional()
575
+ stories: z10.array(z10.object({
576
+ title: z10.string().min(1),
577
+ description: z10.string().nullable().optional()
325
578
  })).optional().default([])
326
579
  });
327
- var updateEpicSchema = z9.object({
328
- title: z9.string().min(1).optional(),
329
- description: z9.string().nullable().optional()
580
+ var updateEpicSchema = z10.object({
581
+ title: z10.string().min(1).optional(),
582
+ description: z10.string().nullable().optional()
330
583
  });
331
- var updateStorySchema = z9.object({
332
- title: z9.string().min(1).optional(),
333
- description: z9.string().nullable().optional(),
334
- epicId: z9.string().uuid().nullable().optional()
584
+ var updateStorySchema = z10.object({
585
+ title: z10.string().min(1).optional(),
586
+ description: z10.string().nullable().optional(),
587
+ epicId: z10.string().uuid().nullable().optional()
335
588
  });
336
- var reorderStoriesSchema = z9.object({
337
- epicOrder: z9.array(z9.string().uuid()).optional(),
338
- storyOrder: z9.record(z9.string(), z9.array(z9.string().uuid())).optional(),
339
- standaloneOrder: z9.array(z9.string().uuid()).optional()
589
+ var reorderStoriesSchema = z10.object({
590
+ epicOrder: z10.array(z10.string().uuid()).optional(),
591
+ storyOrder: z10.record(z10.string(), z10.array(z10.string().uuid())).optional(),
592
+ standaloneOrder: z10.array(z10.string().uuid()).optional()
340
593
  });
341
594
 
342
595
  // ../../packages/shared/src/schemas/roadmap.ts
343
- var flexibleDateSchema = z10.object({
344
- value: z10.string(),
596
+ var flexibleDateSchema = z11.object({
597
+ value: z11.string(),
345
598
  granularity: dateGranularitySchema
346
599
  });
347
- var labelSchema = z10.object({
348
- id: z10.string().uuid(),
349
- type: z10.enum(["category", "location", "label"]),
350
- name: z10.string(),
351
- color: z10.string().nullable(),
352
- address: z10.string().nullable()
600
+ var labelSchema = z11.object({
601
+ id: z11.string().uuid(),
602
+ type: z11.enum(["category", "location", "label"]),
603
+ name: z11.string(),
604
+ color: z11.string().nullable(),
605
+ address: z11.string().nullable()
353
606
  });
354
- var appSchema = z10.object({
355
- id: z10.string().uuid(),
356
- name: z10.string()
607
+ var appSchema = z11.object({
608
+ id: z11.string().uuid(),
609
+ name: z11.string()
357
610
  });
358
- var roadmapSchema = z10.object({
359
- id: z10.string().uuid(),
360
- organizationId: z10.string(),
361
- title: z10.string(),
611
+ var roadmapSchema = z11.object({
612
+ id: z11.string().uuid(),
613
+ organizationId: z11.string(),
614
+ title: z11.string(),
362
615
  horizon: horizonSchema.nullable(),
363
616
  status: roadmapStatusSchema.nullable(),
364
617
  value: effortSchema.nullable(),
365
618
  effort: effortSchema.nullable(),
366
- order: z10.number().int(),
367
- estimatedSeconds: z10.number().int().nullable(),
619
+ order: z11.number().int(),
620
+ estimatedSeconds: z11.number().int().nullable(),
368
621
  date: flexibleDateSchema.nullable(),
369
622
  target: flexibleDateSchema.nullable(),
370
- completedAt: z10.string().nullable(),
371
- createdAt: z10.string(),
372
- createdBy: z10.string(),
373
- prompt: z10.string().nullable(),
374
- labels: z10.array(labelSchema),
375
- apps: z10.array(appSchema)
623
+ completedAt: z11.string().nullable(),
624
+ createdAt: z11.string(),
625
+ createdBy: z11.string(),
626
+ prompt: z11.string().nullable(),
627
+ labels: z11.array(labelSchema),
628
+ apps: z11.array(appSchema)
376
629
  });
377
- var createRoadmapSchema = z10.object({
378
- title: z10.string().min(1),
630
+ var createRoadmapSchema = z11.object({
631
+ title: z11.string().min(1),
379
632
  status: roadmapStatusSchema.optional(),
380
633
  horizon: horizonSchema.optional(),
381
634
  value: effortSchema.nullable().optional(),
382
635
  effort: effortSchema.nullable().optional(),
383
- estimatedSeconds: z10.number().int().nullable().optional(),
636
+ estimatedSeconds: z11.number().int().nullable().optional(),
384
637
  date: flexibleDateSchema.nullable().optional(),
385
638
  target: flexibleDateSchema.nullable().optional(),
386
- prompt: z10.string().nullable().optional(),
387
- brainstormNotes: z10.string().nullable().optional()
639
+ prompt: z11.string().nullable().optional(),
640
+ brainstormNotes: z11.string().nullable().optional()
388
641
  });
389
- var updateRoadmapSchema = z10.object({
390
- title: z10.string().min(1).optional(),
642
+ var updateRoadmapSchema = z11.object({
643
+ title: z11.string().min(1).optional(),
391
644
  status: roadmapStatusSchema.optional(),
392
645
  horizon: horizonSchema.optional(),
393
646
  value: effortSchema.nullable().optional(),
394
647
  effort: effortSchema.nullable().optional(),
395
- order: z10.number().int().optional(),
396
- estimatedSeconds: z10.number().int().nullable().optional(),
648
+ order: z11.number().int().optional(),
649
+ estimatedSeconds: z11.number().int().nullable().optional(),
397
650
  date: flexibleDateSchema.nullable().optional(),
398
651
  target: flexibleDateSchema.nullable().optional(),
399
- prompt: z10.string().nullable().optional(),
400
- brainstormNotes: z10.string().nullable().optional()
652
+ prompt: z11.string().nullable().optional(),
653
+ brainstormNotes: z11.string().nullable().optional()
401
654
  });
402
- var prdOutcomeSchema = z10.object({
403
- id: z10.string().uuid(),
404
- description: z10.string(),
655
+ var prdOutcomeSchema = z11.object({
656
+ id: z11.string().uuid(),
657
+ description: z11.string(),
405
658
  status: prdStatusSchema,
406
- order: z10.number().int(),
407
- completedAt: z10.string().nullable()
659
+ order: z11.number().int(),
660
+ completedAt: z11.string().nullable()
408
661
  });
409
- var prdSchema = z10.object({
410
- id: z10.string().uuid(),
411
- what: z10.string().nullable(),
412
- why: z10.string().nullable(),
413
- outcomes: z10.array(prdOutcomeSchema)
662
+ var prdSchema = z11.object({
663
+ id: z11.string().uuid(),
664
+ what: z11.string().nullable(),
665
+ why: z11.string().nullable(),
666
+ outcomes: z11.array(prdOutcomeSchema)
414
667
  });
415
- var savePrdInputSchema = z10.object({
416
- what: z10.string().nullable(),
417
- why: z10.string().nullable(),
668
+ var savePrdInputSchema = z11.object({
669
+ what: z11.string().nullable(),
670
+ why: z11.string().nullable(),
418
671
  status: prdStatusSchema,
419
- outcomes: z10.array(z10.object({
420
- id: z10.string().uuid().optional(),
421
- description: z10.string(),
422
- order: z10.number().int().min(0)
672
+ outcomes: z11.array(z11.object({
673
+ id: z11.string().uuid().optional(),
674
+ description: z11.string(),
675
+ order: z11.number().int().min(0)
423
676
  }))
424
677
  });
425
- var brainstormMediaSchema = z10.object({
426
- id: z10.string().uuid(),
427
- mediaUrl: z10.string(),
678
+ var brainstormMediaSchema = z11.object({
679
+ id: z11.string().uuid(),
680
+ mediaUrl: z11.string(),
428
681
  mediaType: brainstormMediaTypeSchema,
429
- description: z10.string().nullable(),
430
- order: z10.number().int(),
431
- createdAt: z10.string()
682
+ description: z11.string().nullable(),
683
+ order: z11.number().int(),
684
+ createdAt: z11.string()
432
685
  });
433
- var wireframeSchema = z10.object({
434
- id: z10.string().uuid(),
435
- description: z10.string().nullable(),
436
- imageUrl: z10.string().nullable(),
437
- order: z10.number().int()
686
+ var wireframeSchema = z11.object({
687
+ id: z11.string().uuid(),
688
+ description: z11.string().nullable(),
689
+ imageUrl: z11.string().nullable(),
690
+ order: z11.number().int()
438
691
  });
439
- var prototypeSchema = z10.object({
440
- id: z10.string().uuid(),
441
- publicUrl: z10.string().url(),
442
- expiresAt: z10.string().datetime(),
443
- fileCount: z10.number().int().positive(),
444
- entryPoint: z10.string(),
445
- createdAt: z10.string().datetime()
692
+ var prototypeSchema = z11.object({
693
+ id: z11.string().uuid(),
694
+ publicUrl: z11.string().url(),
695
+ expiresAt: z11.string().datetime(),
696
+ fileCount: z11.number().int().positive(),
697
+ entryPoint: z11.string(),
698
+ createdAt: z11.string().datetime()
446
699
  });
447
- var featureLinkSchema = z10.object({
448
- id: z10.string().uuid(),
449
- featureId: z10.string().uuid(),
450
- feature: z10.object({
451
- id: z10.string().uuid(),
452
- name: z10.string(),
453
- type: z10.enum(["area", "feature"])
700
+ var featureLinkSchema = z11.object({
701
+ id: z11.string().uuid(),
702
+ featureId: z11.string().uuid(),
703
+ feature: z11.object({
704
+ id: z11.string().uuid(),
705
+ name: z11.string(),
706
+ type: z11.enum(["area", "feature"])
454
707
  }),
455
- createdAt: z10.string()
708
+ createdAt: z11.string()
456
709
  });
457
- var phaseDesignSchema = z10.object({
458
- id: z10.string().uuid(),
459
- description: z10.string().nullable()
710
+ var phaseDesignSchema = z11.object({
711
+ id: z11.string().uuid(),
712
+ description: z11.string().nullable()
460
713
  });
461
- var phasePlanSchema = z10.object({
462
- id: z10.string().uuid(),
463
- description: z10.string().nullable()
714
+ var phasePlanSchema = z11.object({
715
+ id: z11.string().uuid(),
716
+ description: z11.string().nullable()
464
717
  });
465
- var phaseBuildSchema = z10.object({
466
- id: z10.string().uuid(),
467
- description: z10.string().nullable(),
468
- prompt: z10.string().nullable()
718
+ var phaseBuildSchema = z11.object({
719
+ id: z11.string().uuid(),
720
+ description: z11.string().nullable(),
721
+ prompt: z11.string().nullable()
469
722
  });
470
- var phaseReleaseSchema = z10.object({
471
- id: z10.string().uuid(),
472
- description: z10.string().nullable()
723
+ var phaseReleaseSchema = z11.object({
724
+ id: z11.string().uuid(),
725
+ description: z11.string().nullable()
473
726
  });
474
727
  var roadmapDetailSchema = roadmapSchema.extend({
475
728
  prd: prdSchema.nullable(),
476
- wireframes: z10.array(wireframeSchema),
477
- prototypes: z10.array(prototypeSchema),
478
- brainstormMedia: z10.array(brainstormMediaSchema),
479
- brainstormNotes: z10.string().nullable(),
480
- featureLinks: z10.array(featureLinkSchema),
481
- epics: z10.array(epicWithStoriesSchema),
482
- stories: z10.array(storySchema),
729
+ wireframes: z11.array(wireframeSchema),
730
+ prototypes: z11.array(prototypeSchema),
731
+ brainstormMedia: z11.array(brainstormMediaSchema),
732
+ brainstormNotes: z11.string().nullable(),
733
+ featureLinks: z11.array(featureLinkSchema),
734
+ epics: z11.array(epicWithStoriesSchema),
735
+ stories: z11.array(storySchema),
483
736
  design: phaseDesignSchema.nullable(),
484
737
  plan: phasePlanSchema.nullable(),
485
738
  build: phaseBuildSchema.nullable(),
486
739
  release: phaseReleaseSchema.nullable(),
487
- exports: z10.array(exportSchema)
740
+ exports: z11.array(exportSchema)
488
741
  });
489
- var roadmapListSchema = z10.array(roadmapSchema);
742
+ var roadmapListSchema = z11.array(roadmapSchema);
490
743
  // ../../packages/shared/src/schemas/scenario.ts
491
- import { z as z11 } from "zod";
492
- var scenarioSchema = z11.object({
493
- id: z11.string().uuid(),
494
- title: z11.string().min(1),
495
- given: z11.string().nullable(),
496
- when: z11.string().nullable(),
497
- then: z11.string().nullable(),
498
- order: z11.number().int(),
499
- createdAt: z11.string().datetime(),
500
- updatedAt: z11.string().datetime()
744
+ import { z as z12 } from "zod";
745
+ var scenarioSchema = z12.object({
746
+ id: z12.string().uuid(),
747
+ title: z12.string().min(1),
748
+ given: z12.string().nullable(),
749
+ when: z12.string().nullable(),
750
+ then: z12.string().nullable(),
751
+ order: z12.number().int(),
752
+ createdAt: z12.string().datetime(),
753
+ updatedAt: z12.string().datetime()
501
754
  });
502
- var createScenarioSchema = z11.object({
503
- title: z11.string().min(1),
504
- given: z11.string().nullable().optional(),
505
- when: z11.string().nullable().optional(),
506
- then: z11.string().nullable().optional(),
507
- roadmapId: z11.string().uuid()
755
+ var createScenarioSchema = z12.object({
756
+ title: z12.string().min(1),
757
+ given: z12.string().nullable().optional(),
758
+ when: z12.string().nullable().optional(),
759
+ then: z12.string().nullable().optional(),
760
+ roadmapId: z12.string().uuid()
508
761
  });
509
- var updateScenarioSchema = z11.object({
510
- title: z11.string().min(1).optional(),
511
- given: z11.string().nullable().optional(),
512
- when: z11.string().nullable().optional(),
513
- then: z11.string().nullable().optional(),
514
- order: z11.number().int().optional()
762
+ var updateScenarioSchema = z12.object({
763
+ title: z12.string().min(1).optional(),
764
+ given: z12.string().nullable().optional(),
765
+ when: z12.string().nullable().optional(),
766
+ then: z12.string().nullable().optional(),
767
+ order: z12.number().int().optional()
515
768
  });
516
- var scenarioListSchema = z11.array(scenarioSchema);
769
+ var scenarioListSchema = z12.array(scenarioSchema);
517
770
  // ../../packages/shared/src/schemas/slide.ts
518
- import { z as z12 } from "zod";
771
+ import { z as z13 } from "zod";
519
772
  var SLIDE_TYPES = [
520
773
  "title",
521
774
  "section_header",
@@ -530,150 +783,150 @@ var SLIDE_TYPES = [
530
783
  "mermaid",
531
784
  "paragraph"
532
785
  ];
533
- var slideTypeSchema = z12.enum(SLIDE_TYPES);
534
- var titleContentSchema = z12.object({
535
- title: z12.string(),
536
- subtitle: z12.string().optional()
786
+ var slideTypeSchema = z13.enum(SLIDE_TYPES);
787
+ var titleContentSchema = z13.object({
788
+ title: z13.string(),
789
+ subtitle: z13.string().optional()
537
790
  });
538
- var sectionHeaderContentSchema = z12.object({
539
- title: z12.string(),
540
- subtitle: z12.string().optional()
791
+ var sectionHeaderContentSchema = z13.object({
792
+ title: z13.string(),
793
+ subtitle: z13.string().optional()
541
794
  });
542
- var bulletsContentSchema = z12.object({
543
- title: z12.string().optional(),
544
- items: z12.array(z12.string()).default([])
795
+ var bulletsContentSchema = z13.object({
796
+ title: z13.string().optional(),
797
+ items: z13.array(z13.string()).default([])
545
798
  });
546
- var twoColumnContentSchema = z12.object({
547
- title: z12.string().optional(),
548
- left: z12.string().default(""),
549
- right: z12.string().default("")
799
+ var twoColumnContentSchema = z13.object({
800
+ title: z13.string().optional(),
801
+ left: z13.string().default(""),
802
+ right: z13.string().default("")
550
803
  });
551
- var comparisonContentSchema = z12.object({
552
- leftLabel: z12.string().default(""),
553
- leftContent: z12.string().default(""),
554
- rightLabel: z12.string().default(""),
555
- rightContent: z12.string().default("")
804
+ var comparisonContentSchema = z13.object({
805
+ leftLabel: z13.string().default(""),
806
+ leftContent: z13.string().default(""),
807
+ rightLabel: z13.string().default(""),
808
+ rightContent: z13.string().default("")
556
809
  });
557
- var timelineStepSchema = z12.object({
558
- title: z12.string(),
559
- description: z12.string().optional()
810
+ var timelineStepSchema = z13.object({
811
+ title: z13.string(),
812
+ description: z13.string().optional()
560
813
  });
561
- var timelineContentSchema = z12.object({
562
- title: z12.string().optional(),
563
- steps: z12.array(timelineStepSchema).default([])
814
+ var timelineContentSchema = z13.object({
815
+ title: z13.string().optional(),
816
+ steps: z13.array(timelineStepSchema).default([])
564
817
  });
565
- var imageContentSchema = z12.object({
566
- title: z12.string().optional(),
567
- imageUrl: z12.string().optional(),
568
- caption: z12.string().optional()
818
+ var imageContentSchema = z13.object({
819
+ title: z13.string().optional(),
820
+ imageUrl: z13.string().optional(),
821
+ caption: z13.string().optional()
569
822
  });
570
- var quoteContentSchema = z12.object({
571
- quote: z12.string().default(""),
572
- attribution: z12.string().optional()
823
+ var quoteContentSchema = z13.object({
824
+ quote: z13.string().default(""),
825
+ attribution: z13.string().optional()
573
826
  });
574
- var codeContentSchema = z12.object({
575
- title: z12.string().optional(),
576
- code: z12.string().default(""),
577
- language: z12.string().optional(),
578
- highlightLines: z12.array(z12.number()).optional()
827
+ var codeContentSchema = z13.object({
828
+ title: z13.string().optional(),
829
+ code: z13.string().default(""),
830
+ language: z13.string().optional(),
831
+ highlightLines: z13.array(z13.number()).optional()
579
832
  });
580
- var thankYouContentSchema = z12.object({
581
- title: z12.string().default("Thank You"),
582
- subtitle: z12.string().optional(),
583
- ctaText: z12.string().optional(),
584
- ctaUrl: z12.string().optional()
833
+ var thankYouContentSchema = z13.object({
834
+ title: z13.string().default("Thank You"),
835
+ subtitle: z13.string().optional(),
836
+ ctaText: z13.string().optional(),
837
+ ctaUrl: z13.string().optional()
585
838
  });
586
- var mermaidContentSchema = z12.object({
587
- title: z12.string().optional(),
588
- code: z12.string().default("")
839
+ var mermaidContentSchema = z13.object({
840
+ title: z13.string().optional(),
841
+ code: z13.string().default("")
589
842
  });
590
- var paragraphContentSchema = z12.object({
591
- title: z12.string().optional(),
592
- body: z12.string().default("")
843
+ var paragraphContentSchema = z13.object({
844
+ title: z13.string().optional(),
845
+ body: z13.string().default("")
593
846
  });
594
- var typedSlideContentSchema = z12.discriminatedUnion("type", [
595
- z12.object({ type: z12.literal("title"), ...titleContentSchema.shape }),
596
- z12.object({ type: z12.literal("section_header"), ...sectionHeaderContentSchema.shape }),
597
- z12.object({ type: z12.literal("bullets"), ...bulletsContentSchema.shape }),
598
- z12.object({ type: z12.literal("two_column"), ...twoColumnContentSchema.shape }),
599
- z12.object({ type: z12.literal("comparison"), ...comparisonContentSchema.shape }),
600
- z12.object({ type: z12.literal("timeline"), ...timelineContentSchema.shape }),
601
- z12.object({ type: z12.literal("image"), ...imageContentSchema.shape }),
602
- z12.object({ type: z12.literal("quote"), ...quoteContentSchema.shape }),
603
- z12.object({ type: z12.literal("code"), ...codeContentSchema.shape }),
604
- z12.object({ type: z12.literal("thank_you"), ...thankYouContentSchema.shape }),
605
- z12.object({ type: z12.literal("mermaid"), ...mermaidContentSchema.shape }),
606
- z12.object({ type: z12.literal("paragraph"), ...paragraphContentSchema.shape })
847
+ var typedSlideContentSchema = z13.discriminatedUnion("type", [
848
+ z13.object({ type: z13.literal("title"), ...titleContentSchema.shape }),
849
+ z13.object({ type: z13.literal("section_header"), ...sectionHeaderContentSchema.shape }),
850
+ z13.object({ type: z13.literal("bullets"), ...bulletsContentSchema.shape }),
851
+ z13.object({ type: z13.literal("two_column"), ...twoColumnContentSchema.shape }),
852
+ z13.object({ type: z13.literal("comparison"), ...comparisonContentSchema.shape }),
853
+ z13.object({ type: z13.literal("timeline"), ...timelineContentSchema.shape }),
854
+ z13.object({ type: z13.literal("image"), ...imageContentSchema.shape }),
855
+ z13.object({ type: z13.literal("quote"), ...quoteContentSchema.shape }),
856
+ z13.object({ type: z13.literal("code"), ...codeContentSchema.shape }),
857
+ z13.object({ type: z13.literal("thank_you"), ...thankYouContentSchema.shape }),
858
+ z13.object({ type: z13.literal("mermaid"), ...mermaidContentSchema.shape }),
859
+ z13.object({ type: z13.literal("paragraph"), ...paragraphContentSchema.shape })
607
860
  ]);
608
- var slideContentSchema = z12.object({
609
- body: z12.string().optional()
861
+ var slideContentSchema = z13.object({
862
+ body: z13.string().optional()
610
863
  });
611
- var slideSchema = z12.object({
612
- id: z12.string().uuid(),
613
- variantId: z12.string().uuid(),
864
+ var slideSchema = z13.object({
865
+ id: z13.string().uuid(),
866
+ variantId: z13.string().uuid(),
614
867
  slideType: slideTypeSchema,
615
- title: z12.string(),
616
- content: z12.unknown().nullable(),
617
- speakerNotes: z12.string().nullable(),
618
- order: z12.number().int(),
619
- createdAt: z12.string(),
620
- createdBy: z12.string(),
621
- updatedAt: z12.string().nullable()
868
+ title: z13.string(),
869
+ content: z13.unknown().nullable(),
870
+ speakerNotes: z13.string().nullable(),
871
+ order: z13.number().int(),
872
+ createdAt: z13.string(),
873
+ createdBy: z13.string(),
874
+ updatedAt: z13.string().nullable()
622
875
  });
623
- var createSlideSchema = z12.object({
876
+ var createSlideSchema = z13.object({
624
877
  slideType: slideTypeSchema,
625
- content: z12.unknown().optional(),
626
- speakerNotes: z12.string().nullable().optional()
878
+ content: z13.unknown().optional(),
879
+ speakerNotes: z13.string().nullable().optional()
627
880
  });
628
- var updateSlideSchema = z12.object({
629
- content: z12.unknown().optional(),
630
- speakerNotes: z12.string().nullable().optional()
881
+ var updateSlideSchema = z13.object({
882
+ content: z13.unknown().optional(),
883
+ speakerNotes: z13.string().nullable().optional()
631
884
  });
632
- var slideListSchema = z12.array(slideSchema);
885
+ var slideListSchema = z13.array(slideSchema);
633
886
  // ../../packages/shared/src/schemas/status-update.ts
634
- import { z as z13 } from "zod";
635
- var statusUpdateItemSchema = z13.object({
636
- id: z13.string().uuid(),
637
- roadmapItemId: z13.string().uuid(),
638
- titleAtSnapshot: z13.string(),
639
- statusAtSnapshot: z13.string(),
640
- designWalkthroughUrl: z13.string().nullable(),
641
- releaseWalkthroughUrl: z13.string().nullable()
642
- });
643
- var statusUpdateSchema = z13.object({
644
- id: z13.string().uuid(),
645
- title: z13.string().nullable(),
646
- startDate: z13.string(),
647
- endDate: z13.string(),
648
- content: z13.string(),
649
- createdAt: z13.string(),
650
- items: z13.array(statusUpdateItemSchema).optional()
651
- });
652
- var statusUpdateListSchema = z13.array(statusUpdateSchema);
653
- // ../../packages/shared/src/schemas/variant.ts
654
887
  import { z as z14 } from "zod";
655
- var variantSchema = z14.object({
888
+ var statusUpdateItemSchema = z14.object({
656
889
  id: z14.string().uuid(),
657
- presentationId: z14.string().uuid(),
658
- name: z14.string(),
659
- audienceId: z14.string().uuid().nullable(),
660
- isDefault: z14.boolean(),
661
- order: z14.number().int(),
890
+ roadmapItemId: z14.string().uuid(),
891
+ titleAtSnapshot: z14.string(),
892
+ statusAtSnapshot: z14.string(),
893
+ designWalkthroughUrl: z14.string().nullable(),
894
+ releaseWalkthroughUrl: z14.string().nullable()
895
+ });
896
+ var statusUpdateSchema = z14.object({
897
+ id: z14.string().uuid(),
898
+ title: z14.string().nullable(),
899
+ startDate: z14.string(),
900
+ endDate: z14.string(),
901
+ content: z14.string(),
662
902
  createdAt: z14.string(),
663
- createdBy: z14.string(),
664
- updatedAt: z14.string().nullable()
903
+ items: z14.array(statusUpdateItemSchema).optional()
904
+ });
905
+ var statusUpdateListSchema = z14.array(statusUpdateSchema);
906
+ // ../../packages/shared/src/schemas/variant.ts
907
+ import { z as z15 } from "zod";
908
+ var variantSchema = z15.object({
909
+ id: z15.string().uuid(),
910
+ presentationId: z15.string().uuid(),
911
+ name: z15.string(),
912
+ audienceId: z15.string().uuid().nullable(),
913
+ isDefault: z15.boolean(),
914
+ order: z15.number().int(),
915
+ createdAt: z15.string(),
916
+ createdBy: z15.string(),
917
+ updatedAt: z15.string().nullable()
665
918
  });
666
- var createVariantSchema = z14.object({
667
- name: z14.string().min(1),
668
- audienceId: z14.string().uuid().nullable().optional()
919
+ var createVariantSchema = z15.object({
920
+ name: z15.string().min(1),
921
+ audienceId: z15.string().uuid().nullable().optional()
669
922
  });
670
- var updateVariantSchema = z14.object({
671
- name: z14.string().min(1).optional(),
672
- audienceId: z14.string().uuid().nullable().optional()
923
+ var updateVariantSchema = z15.object({
924
+ name: z15.string().min(1).optional(),
925
+ audienceId: z15.string().uuid().nullable().optional()
673
926
  });
674
- var variantListSchema = z14.array(variantSchema);
927
+ var variantListSchema = z15.array(variantSchema);
675
928
  // src/tools/index.ts
676
- import { z as z15 } from "zod";
929
+ import { z as z16 } from "zod";
677
930
 
678
931
  // src/auth.ts
679
932
  function getCredentials() {
@@ -1499,13 +1752,13 @@ function registerSearchRoadmaps(server) {
1499
1752
  server.registerTool("search_roadmaps", {
1500
1753
  description: "Search for roadmap items by title, status, or horizon. Returns a list of matching roadmap items with basic info.",
1501
1754
  inputSchema: {
1502
- query: z15.string().optional().describe("Search query to match against title or description"),
1755
+ query: z16.string().optional().describe("Search query to match against title or description"),
1503
1756
  status: roadmapStatusSchema.optional().describe("Filter by status"),
1504
1757
  horizon: horizonSchema.optional().describe("Filter by planning horizon"),
1505
- phase: z15.string().optional().describe("Filter by phase"),
1506
- phaseStep: z15.string().optional().describe("Filter by phase step"),
1507
- limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
1508
- offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
1758
+ phase: z16.string().optional().describe("Filter by phase"),
1759
+ phaseStep: z16.string().optional().describe("Filter by phase step"),
1760
+ limit: z16.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
1761
+ offset: z16.number().int().min(0).optional().describe("Number of items to skip (default 0)")
1509
1762
  }
1510
1763
  }, async ({
1511
1764
  query,
@@ -1556,7 +1809,7 @@ function registerGetRoadmap(server) {
1556
1809
  server.registerTool("get_roadmap", {
1557
1810
  description: "Get full details of a roadmap item including PRD, wireframes, brainstorm media, linked features, epics, and stories.",
1558
1811
  inputSchema: {
1559
- id: z15.string().describe("The UUID of the roadmap item")
1812
+ id: z16.string().describe("The UUID of the roadmap item")
1560
1813
  }
1561
1814
  }, async ({ id }) => {
1562
1815
  const client2 = getApiClient();
@@ -1573,8 +1826,16 @@ function registerGetRoadmap(server) {
1573
1826
  value: roadmap2.value,
1574
1827
  effort: roadmap2.effort,
1575
1828
  order: roadmap2.order,
1576
- prd: roadmap2.prd,
1577
- brainstormNotes: roadmap2.brainstormNotes,
1829
+ prd: roadmap2.prd ? {
1830
+ ...roadmap2.prd,
1831
+ what: contentToMarkdown(roadmap2.prd.what),
1832
+ why: contentToMarkdown(roadmap2.prd.why),
1833
+ outcomes: roadmap2.prd.outcomes?.map((o) => ({
1834
+ ...o,
1835
+ description: contentToMarkdown(o.description)
1836
+ }))
1837
+ } : null,
1838
+ brainstormNotes: contentToMarkdown(roadmap2.brainstormNotes),
1578
1839
  wireframes: roadmap2.wireframes?.map((w) => ({
1579
1840
  id: w.id,
1580
1841
  imageUrl: w.imageUrl,
@@ -1594,10 +1855,10 @@ function registerGetRoadmap(server) {
1594
1855
  })),
1595
1856
  epics: roadmap2.epics,
1596
1857
  stories: roadmap2.stories,
1597
- designDescription: roadmap2.design?.description ?? null,
1598
- planDescription: roadmap2.plan?.description ?? null,
1599
- buildDescription: roadmap2.build?.description ?? null,
1600
- releaseDescription: roadmap2.release?.description ?? null,
1858
+ designDescription: contentToMarkdown(roadmap2.design?.description),
1859
+ planDescription: contentToMarkdown(roadmap2.plan?.description),
1860
+ buildDescription: contentToMarkdown(roadmap2.build?.description),
1861
+ releaseDescription: contentToMarkdown(roadmap2.release?.description),
1601
1862
  prompt: roadmap2.build?.prompt ?? roadmap2.prompt ?? null,
1602
1863
  createdAt: roadmap2.createdAt
1603
1864
  }, null, 2)
@@ -1610,7 +1871,7 @@ function registerSearchFeatures(server) {
1610
1871
  server.registerTool("search_features", {
1611
1872
  description: "Search for features and feature areas by name. Returns a list of matching features with basic info.",
1612
1873
  inputSchema: {
1613
- query: z15.string().optional().describe("Search query to match against name"),
1874
+ query: z16.string().optional().describe("Search query to match against name"),
1614
1875
  type: featureTypeSchema.optional().describe("Filter by type (feature or area)")
1615
1876
  }
1616
1877
  }, async ({ query, type }) => {
@@ -1642,7 +1903,7 @@ function registerGetFeature(server) {
1642
1903
  server.registerTool("get_feature", {
1643
1904
  description: "Get full details of a feature including outcomes, child features, and linked roadmap items.",
1644
1905
  inputSchema: {
1645
- id: z15.string().describe("The UUID of the feature")
1906
+ id: z16.string().describe("The UUID of the feature")
1646
1907
  }
1647
1908
  }, async ({ id }) => {
1648
1909
  const client2 = getApiClient();
@@ -1658,7 +1919,7 @@ function registerGetFeature(server) {
1658
1919
  parentId: feature2.parentId,
1659
1920
  outcomes: feature2.outcomes?.map((o) => ({
1660
1921
  id: o.id,
1661
- description: o.description
1922
+ description: contentToMarkdown(o.description)
1662
1923
  })),
1663
1924
  children: feature2.children?.map((c) => ({
1664
1925
  id: c.id,
@@ -1681,7 +1942,7 @@ function registerSearchIdeas(server) {
1681
1942
  server.registerTool("search_ideas", {
1682
1943
  description: "Search for ideas by title or status. Returns a list of matching ideas with basic info.",
1683
1944
  inputSchema: {
1684
- query: z15.string().optional().describe("Search query to match against title or description"),
1945
+ query: z16.string().optional().describe("Search query to match against title or description"),
1685
1946
  status: ideaStatusSchema.optional().describe("Filter by status")
1686
1947
  }
1687
1948
  }, async ({ query, status }) => {
@@ -1701,7 +1962,7 @@ function registerSearchIdeas(server) {
1701
1962
  text: JSON.stringify(ideas.map((i) => ({
1702
1963
  id: i.id,
1703
1964
  title: i.title,
1704
- description: i.description,
1965
+ description: contentToMarkdown(i.description),
1705
1966
  status: i.status,
1706
1967
  source: i.source
1707
1968
  })), null, 2)
@@ -1738,8 +1999,8 @@ Use this as your FIRST call when starting work on a roadmap to understand the fu
1738
1999
  type: "text",
1739
2000
  text: JSON.stringify({
1740
2001
  strategy: {
1741
- vision: strategy.vision,
1742
- mission: strategy.mission
2002
+ vision: contentToMarkdown(strategy.vision),
2003
+ mission: contentToMarkdown(strategy.mission)
1743
2004
  },
1744
2005
  products: products.map((p) => ({
1745
2006
  id: p.id,
@@ -1781,9 +2042,9 @@ function registerCaptureIdea(server) {
1781
2042
  server.registerTool("capture_idea", {
1782
2043
  description: "Quickly capture a new idea. Ideas are suggestions that can later be reviewed and potentially converted to roadmap items.",
1783
2044
  inputSchema: {
1784
- title: z15.string().describe("Title of the idea"),
1785
- description: z15.string().optional().describe("Detailed description of the idea"),
1786
- source: z15.string().optional().describe('Source of the idea (defaults to "claude-code")')
2045
+ title: z16.string().describe("Title of the idea"),
2046
+ description: z16.string().optional().describe("Detailed description of the idea"),
2047
+ source: z16.string().optional().describe('Source of the idea (defaults to "claude-code")')
1787
2048
  }
1788
2049
  }, async ({
1789
2050
  title,
@@ -1820,16 +2081,16 @@ function registerCreateRoadmapItem(server) {
1820
2081
  server.registerTool("create_roadmap_item", {
1821
2082
  description: "Create a new roadmap item. Use this to add planned work to the roadmap.",
1822
2083
  inputSchema: {
1823
- title: z15.string().describe("Title of the roadmap item"),
2084
+ title: z16.string().describe("Title of the roadmap item"),
1824
2085
  status: roadmapStatusSchema.optional().describe('Status (defaults to "not_started")'),
1825
2086
  horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
1826
- phase: z15.string().optional().describe('Initial phase key (e.g., "brainstorm", "prd", "design")'),
1827
- phaseStep: z15.string().optional().describe('Initial step within phase (e.g., "not_started", "drafting")'),
1828
- initiativeId: z15.string().optional().describe("UUID of initiative to link this item to on creation"),
2087
+ phase: z16.string().optional().describe('Initial phase key (e.g., "brainstorm", "prd", "design")'),
2088
+ phaseStep: z16.string().optional().describe('Initial step within phase (e.g., "not_started", "drafting")'),
2089
+ initiativeId: z16.string().optional().describe("UUID of initiative to link this item to on creation"),
1829
2090
  dateGranularity: dateGranularitySchema2.optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
1830
- dateValue: z15.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
2091
+ dateValue: z16.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1831
2092
  targetGranularity: dateGranularitySchema2.optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
1832
- targetValue: z15.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
2093
+ targetValue: z16.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1833
2094
  }
1834
2095
  }, async ({
1835
2096
  title,
@@ -1891,30 +2152,30 @@ function registerCreateRoadmapItem(server) {
1891
2152
  };
1892
2153
  });
1893
2154
  }
1894
- var effortSizeSchema = z15.enum(["xs", "s", "m", "l", "xl"]);
2155
+ var effortSizeSchema = z16.enum(["xs", "s", "m", "l", "xl"]);
1895
2156
  function registerUpdateRoadmapItem(server) {
1896
2157
  server.registerTool("update_roadmap_item", {
1897
2158
  description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, initiative link, target date, phase, phaseStep, or brainstorm notes.",
1898
2159
  inputSchema: {
1899
- id: z15.string().describe("The UUID of the roadmap item to update"),
1900
- title: z15.string().optional().describe("New title"),
2160
+ id: z16.string().describe("The UUID of the roadmap item to update"),
2161
+ title: z16.string().optional().describe("New title"),
1901
2162
  status: roadmapStatusSchema.optional().describe("New status"),
1902
2163
  horizon: horizonSchema.optional().describe("New planning horizon"),
1903
- phase: z15.string().optional().describe('Current phase key (e.g., "prd", "design", "build")'),
1904
- phaseStep: z15.string().optional().describe('Current step within phase (e.g., "drafting", "needs_review", "approved")'),
1905
- value: z15.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
2164
+ phase: z16.string().optional().describe('Current phase key (e.g., "prd", "design", "build")'),
2165
+ phaseStep: z16.string().optional().describe('Current step within phase (e.g., "drafting", "needs_review", "approved")'),
2166
+ value: z16.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
1906
2167
  effort: effortSizeSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
1907
- order: z15.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
1908
- initiativeId: z15.string().nullable().optional().describe("UUID to link item to initiative, or null to unlink from any initiative"),
1909
- designDescription: z15.string().nullable().optional().describe("Description for the Design phase"),
1910
- planDescription: z15.string().nullable().optional().describe("Description for the Planning phase"),
1911
- buildDescription: z15.string().nullable().optional().describe("Description for the Build phase"),
1912
- releaseDescription: z15.string().nullable().optional().describe("Description for the Release phase"),
1913
- prompt: z15.string().nullable().optional().describe("Build prompt for the roadmap item"),
2168
+ order: z16.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
2169
+ initiativeId: z16.string().nullable().optional().describe("UUID to link item to initiative, or null to unlink from any initiative"),
2170
+ designDescription: z16.string().nullable().optional().describe("Description for the Design phase"),
2171
+ planDescription: z16.string().nullable().optional().describe("Description for the Planning phase"),
2172
+ buildDescription: z16.string().nullable().optional().describe("Description for the Build phase"),
2173
+ releaseDescription: z16.string().nullable().optional().describe("Description for the Release phase"),
2174
+ prompt: z16.string().nullable().optional().describe("Build prompt for the roadmap item"),
1914
2175
  dateGranularity: dateGranularitySchema2.nullable().optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
1915
- dateValue: z15.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
2176
+ dateValue: z16.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1916
2177
  targetGranularity: dateGranularitySchema2.nullable().optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
1917
- targetValue: z15.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
2178
+ targetValue: z16.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1918
2179
  }
1919
2180
  }, async ({
1920
2181
  id,
@@ -2025,12 +2286,12 @@ function registerAddFeature(server) {
2025
2286
  server.registerTool("add_feature", {
2026
2287
  description: "Create a new feature with optional outcomes. Features represent capabilities or functionality areas.",
2027
2288
  inputSchema: {
2028
- name: z15.string().describe("Name of the feature"),
2029
- description: z15.string().optional().describe("Description of the feature"),
2289
+ name: z16.string().describe("Name of the feature"),
2290
+ description: z16.string().optional().describe("Description of the feature"),
2030
2291
  type: featureTypeSchema.optional().describe('Type - "feature" for specific functionality, "area" for grouping (defaults to "feature")'),
2031
- parentId: z15.string().optional().describe("UUID of parent feature/area to nest under"),
2032
- outcomes: z15.array(z15.string()).optional().describe("List of expected outcomes for this feature"),
2033
- linkToRoadmapId: z15.string().optional().describe("UUID of roadmap item to link this feature to")
2292
+ parentId: z16.string().optional().describe("UUID of parent feature/area to nest under"),
2293
+ outcomes: z16.array(z16.string()).optional().describe("List of expected outcomes for this feature"),
2294
+ linkToRoadmapId: z16.string().optional().describe("UUID of roadmap item to link this feature to")
2034
2295
  }
2035
2296
  }, async ({
2036
2297
  name,
@@ -2077,10 +2338,10 @@ function registerSavePrd(server) {
2077
2338
  server.registerTool("save_prd", {
2078
2339
  description: "Save or update the PRD (Product Requirements Document) content for a roadmap item. Content should be markdown.",
2079
2340
  inputSchema: {
2080
- roadmapId: z15.string().describe("The UUID of the roadmap item"),
2081
- what: z15.string().nullable().describe("What is being built - the feature description"),
2082
- why: z15.string().nullable().describe("Why this is being built - the business justification"),
2083
- outcomes: z15.array(z15.string()).optional().describe("List of expected outcomes/success criteria")
2341
+ roadmapId: z16.string().describe("The UUID of the roadmap item"),
2342
+ what: z16.string().nullable().describe("What is being built - the feature description"),
2343
+ why: z16.string().nullable().describe("Why this is being built - the business justification"),
2344
+ outcomes: z16.array(z16.string()).optional().describe("List of expected outcomes/success criteria")
2084
2345
  }
2085
2346
  }, async ({
2086
2347
  roadmapId,
@@ -2118,8 +2379,8 @@ function registerUpdateBrainstormNotes(server) {
2118
2379
  server.registerTool("update_brainstorm_notes", {
2119
2380
  description: "Update the brainstorm notes for a roadmap item. Use this to capture ideas, questions, and research notes.",
2120
2381
  inputSchema: {
2121
- roadmapId: z15.string().describe("The UUID of the roadmap item"),
2122
- notes: z15.string().describe("The brainstorm notes content")
2382
+ roadmapId: z16.string().describe("The UUID of the roadmap item"),
2383
+ notes: z16.string().describe("The brainstorm notes content")
2123
2384
  }
2124
2385
  }, async ({ roadmapId, notes }) => {
2125
2386
  const client2 = getApiClient();
@@ -2148,7 +2409,7 @@ function registerDeleteRoadmapItem(server) {
2148
2409
  server.registerTool("delete_roadmap_item", {
2149
2410
  description: "Delete a roadmap item. This is a soft delete - the item can potentially be recovered.",
2150
2411
  inputSchema: {
2151
- id: z15.string().describe("The UUID of the roadmap item to delete")
2412
+ id: z16.string().describe("The UUID of the roadmap item to delete")
2152
2413
  }
2153
2414
  }, async ({ id }) => {
2154
2415
  const client2 = getApiClient();
@@ -2170,9 +2431,9 @@ function registerReorderRoadmaps(server) {
2170
2431
  server.registerTool("reorder_roadmaps", {
2171
2432
  description: "Bulk reorder roadmap items by setting their order values. Use this to prioritize and organize the roadmap. Lower order values appear first.",
2172
2433
  inputSchema: {
2173
- items: z15.array(z15.object({
2174
- id: z15.string().describe("The UUID of the roadmap item"),
2175
- order: z15.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
2434
+ items: z16.array(z16.object({
2435
+ id: z16.string().describe("The UUID of the roadmap item"),
2436
+ order: z16.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
2176
2437
  })).describe("Array of roadmap items with their new order values")
2177
2438
  }
2178
2439
  }, async ({ items }) => {
@@ -2196,10 +2457,10 @@ function registerUpdateFeature(server) {
2196
2457
  server.registerTool("update_feature", {
2197
2458
  description: "Update an existing feature. Can update name, type, or parent.",
2198
2459
  inputSchema: {
2199
- id: z15.string().describe("The UUID of the feature to update"),
2200
- name: z15.string().optional().describe("New name for the feature"),
2460
+ id: z16.string().describe("The UUID of the feature to update"),
2461
+ name: z16.string().optional().describe("New name for the feature"),
2201
2462
  type: featureTypeSchema.optional().describe('New type - "feature" or "area"'),
2202
- parentId: z15.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
2463
+ parentId: z16.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
2203
2464
  }
2204
2465
  }, async ({
2205
2466
  id,
@@ -2238,7 +2499,7 @@ function registerDeleteFeature(server) {
2238
2499
  server.registerTool("delete_feature", {
2239
2500
  description: "Delete a feature. This is a soft delete that also deletes all child features.",
2240
2501
  inputSchema: {
2241
- id: z15.string().describe("The UUID of the feature to delete")
2502
+ id: z16.string().describe("The UUID of the feature to delete")
2242
2503
  }
2243
2504
  }, async ({ id }) => {
2244
2505
  const client2 = getApiClient();
@@ -2260,7 +2521,7 @@ function registerGetIdea(server) {
2260
2521
  server.registerTool("get_idea", {
2261
2522
  description: "Get full details of a single idea by ID.",
2262
2523
  inputSchema: {
2263
- id: z15.string().describe("The UUID of the idea")
2524
+ id: z16.string().describe("The UUID of the idea")
2264
2525
  }
2265
2526
  }, async ({ id }) => {
2266
2527
  const client2 = getApiClient();
@@ -2272,7 +2533,7 @@ function registerGetIdea(server) {
2272
2533
  text: JSON.stringify({
2273
2534
  id: idea2.id,
2274
2535
  title: idea2.title,
2275
- description: idea2.description,
2536
+ description: contentToMarkdown(idea2.description),
2276
2537
  status: idea2.status,
2277
2538
  source: idea2.source,
2278
2539
  submittedBy: idea2.submittedBy,
@@ -2289,12 +2550,12 @@ function registerUpdateIdea(server) {
2289
2550
  server.registerTool("update_idea", {
2290
2551
  description: "Update an existing idea. Can update title, description, status, value, or effort.",
2291
2552
  inputSchema: {
2292
- id: z15.string().describe("The UUID of the idea to update"),
2293
- title: z15.string().optional().describe("New title"),
2294
- description: z15.string().nullable().optional().describe("New description"),
2553
+ id: z16.string().describe("The UUID of the idea to update"),
2554
+ title: z16.string().optional().describe("New title"),
2555
+ description: z16.string().nullable().optional().describe("New description"),
2295
2556
  status: ideaStatusSchema.optional().describe("New status"),
2296
- value: z15.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
2297
- effort: z15.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated effort")
2557
+ value: z16.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
2558
+ effort: z16.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated effort")
2298
2559
  }
2299
2560
  }, async ({
2300
2561
  id,
@@ -2341,7 +2602,7 @@ function registerDeleteIdea(server) {
2341
2602
  server.registerTool("delete_idea", {
2342
2603
  description: "Delete an idea. This is a soft delete.",
2343
2604
  inputSchema: {
2344
- id: z15.string().describe("The UUID of the idea to delete")
2605
+ id: z16.string().describe("The UUID of the idea to delete")
2345
2606
  }
2346
2607
  }, async ({ id }) => {
2347
2608
  const client2 = getApiClient();
@@ -2370,7 +2631,10 @@ function registerGetStrategy(server) {
2370
2631
  content: [
2371
2632
  {
2372
2633
  type: "text",
2373
- text: JSON.stringify(strategy, null, 2)
2634
+ text: JSON.stringify({
2635
+ vision: contentToMarkdown(strategy.vision),
2636
+ mission: contentToMarkdown(strategy.mission)
2637
+ }, null, 2)
2374
2638
  }
2375
2639
  ]
2376
2640
  };
@@ -2380,8 +2644,8 @@ function registerUpdateStrategy(server) {
2380
2644
  server.registerTool("update_strategy", {
2381
2645
  description: "Update the organization strategy. Can update vision, mission, or both. Use this to set or refine the high-level direction.",
2382
2646
  inputSchema: {
2383
- vision: z15.string().nullable().optional().describe("The vision statement - where the product is headed"),
2384
- mission: z15.string().nullable().optional().describe("The mission statement - why the product exists")
2647
+ vision: z16.string().nullable().optional().describe("The vision statement - where the product is headed"),
2648
+ mission: z16.string().nullable().optional().describe("The mission statement - why the product exists")
2385
2649
  }
2386
2650
  }, async ({ vision, mission }) => {
2387
2651
  const client2 = getApiClient();
@@ -2429,8 +2693,8 @@ function registerCreateScenario(server) {
2429
2693
  server.registerTool("create_scenario", {
2430
2694
  description: "Create a new user scenario. Scenarios describe user workflows and how they accomplish goals.",
2431
2695
  inputSchema: {
2432
- title: z15.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
2433
- description: z15.string().nullable().optional().describe("Detailed description of the scenario workflow")
2696
+ title: z16.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
2697
+ description: z16.string().nullable().optional().describe("Detailed description of the scenario workflow")
2434
2698
  }
2435
2699
  }, async ({ title, description }) => {
2436
2700
  const client2 = getApiClient();
@@ -2459,9 +2723,9 @@ function registerUpdateScenario(server) {
2459
2723
  server.registerTool("update_scenario", {
2460
2724
  description: "Update an existing scenario.",
2461
2725
  inputSchema: {
2462
- id: z15.string().describe("The UUID of the scenario to update"),
2463
- title: z15.string().optional().describe("New title"),
2464
- description: z15.string().nullable().optional().describe("New description")
2726
+ id: z16.string().describe("The UUID of the scenario to update"),
2727
+ title: z16.string().optional().describe("New title"),
2728
+ description: z16.string().nullable().optional().describe("New description")
2465
2729
  }
2466
2730
  }, async ({
2467
2731
  id,
@@ -2496,7 +2760,7 @@ function registerDeleteScenario(server) {
2496
2760
  server.registerTool("delete_scenario", {
2497
2761
  description: "Delete a scenario. This is a soft delete.",
2498
2762
  inputSchema: {
2499
- id: z15.string().describe("The UUID of the scenario to delete")
2763
+ id: z16.string().describe("The UUID of the scenario to delete")
2500
2764
  }
2501
2765
  }, async ({ id }) => {
2502
2766
  const client2 = getApiClient();
@@ -2511,7 +2775,7 @@ function registerDeleteScenario(server) {
2511
2775
  };
2512
2776
  });
2513
2777
  }
2514
- var productTypeSchema2 = z15.enum([
2778
+ var productTypeSchema2 = z16.enum([
2515
2779
  "brand",
2516
2780
  "product",
2517
2781
  "app",
@@ -2524,8 +2788,8 @@ function registerCreateProduct(server) {
2524
2788
  description: "Create a new product, app, brand, or service. Products represent what the organization builds and offers.",
2525
2789
  inputSchema: {
2526
2790
  type: productTypeSchema2.describe("Type of product"),
2527
- name: z15.string().describe("Name of the product"),
2528
- parentId: z15.string().nullable().optional().describe("UUID of parent product to nest under")
2791
+ name: z16.string().describe("Name of the product"),
2792
+ parentId: z16.string().nullable().optional().describe("UUID of parent product to nest under")
2529
2793
  }
2530
2794
  }, async ({
2531
2795
  type,
@@ -2560,9 +2824,9 @@ function registerUpdateProduct(server) {
2560
2824
  server.registerTool("update_product", {
2561
2825
  description: "Update an existing product.",
2562
2826
  inputSchema: {
2563
- id: z15.string().describe("The UUID of the product to update"),
2564
- name: z15.string().optional().describe("New name"),
2565
- parentId: z15.string().nullable().optional().describe("New parent product UUID, or null to move to root")
2827
+ id: z16.string().describe("The UUID of the product to update"),
2828
+ name: z16.string().optional().describe("New name"),
2829
+ parentId: z16.string().nullable().optional().describe("New parent product UUID, or null to move to root")
2566
2830
  }
2567
2831
  }, async ({ id, name, parentId }) => {
2568
2832
  const client2 = getApiClient();
@@ -2594,7 +2858,7 @@ function registerDeleteProduct(server) {
2594
2858
  server.registerTool("delete_product", {
2595
2859
  description: "Delete a product. This is a soft delete that also deletes all child products.",
2596
2860
  inputSchema: {
2597
- id: z15.string().describe("The UUID of the product to delete")
2861
+ id: z16.string().describe("The UUID of the product to delete")
2598
2862
  }
2599
2863
  }, async ({ id }) => {
2600
2864
  const client2 = getApiClient();
@@ -2617,7 +2881,7 @@ function registerGetProduct(server) {
2617
2881
  server.registerTool("get_product", {
2618
2882
  description: "Get full details of a product by ID, including its documentation (design system and ADRs).",
2619
2883
  inputSchema: {
2620
- id: z15.string().describe("The UUID of the product")
2884
+ id: z16.string().describe("The UUID of the product")
2621
2885
  }
2622
2886
  }, async ({ id }) => {
2623
2887
  const client2 = getApiClient();
@@ -2640,8 +2904,8 @@ function registerGetProduct(server) {
2640
2904
  createdAt: product2.createdAt
2641
2905
  },
2642
2906
  documentation: documentation ? {
2643
- designSystem: documentation.designSystem,
2644
- adrs: documentation.adrs,
2907
+ designSystem: contentToMarkdown(documentation.designSystem),
2908
+ adrs: contentToMarkdown(documentation.adrs),
2645
2909
  updatedAt: documentation.updatedAt
2646
2910
  } : null
2647
2911
  }, null, 2)
@@ -2654,7 +2918,7 @@ function registerSearchProducts(server) {
2654
2918
  server.registerTool("search_products", {
2655
2919
  description: "Search for products by name. Returns a list of matching products with basic info.",
2656
2920
  inputSchema: {
2657
- query: z15.string().optional().describe("Search query to match against product name"),
2921
+ query: z16.string().optional().describe("Search query to match against product name"),
2658
2922
  type: productTypeSchema2.optional().describe("Filter by product type")
2659
2923
  }
2660
2924
  }, async ({ query, type }) => {
@@ -2689,7 +2953,7 @@ function registerGetProductDocumentation(server) {
2689
2953
  server.registerTool("get_product_documentation", {
2690
2954
  description: "Get the documentation (design system and ADRs) for a product. Use this to read existing documentation before updating.",
2691
2955
  inputSchema: {
2692
- productId: z15.string().describe("The UUID of the product")
2956
+ productId: z16.string().describe("The UUID of the product")
2693
2957
  }
2694
2958
  }, async ({ productId }) => {
2695
2959
  const client2 = getApiClient();
@@ -2702,8 +2966,8 @@ function registerGetProductDocumentation(server) {
2702
2966
  productId,
2703
2967
  documentation: documentation ? {
2704
2968
  id: documentation.id,
2705
- designSystem: documentation.designSystem,
2706
- adrs: documentation.adrs,
2969
+ designSystem: contentToMarkdown(documentation.designSystem),
2970
+ adrs: contentToMarkdown(documentation.adrs),
2707
2971
  createdAt: documentation.createdAt,
2708
2972
  updatedAt: documentation.updatedAt
2709
2973
  } : null
@@ -2717,9 +2981,9 @@ function registerUpdateProductDocumentation(server) {
2717
2981
  server.registerTool("update_product_documentation", {
2718
2982
  description: "Update the documentation for a product. Use this to keep design system and ADRs up to date. Creates documentation if it does not exist.",
2719
2983
  inputSchema: {
2720
- productId: z15.string().describe("The UUID of the product"),
2721
- designSystem: z15.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
2722
- adrs: z15.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
2984
+ productId: z16.string().describe("The UUID of the product"),
2985
+ designSystem: z16.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
2986
+ adrs: z16.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
2723
2987
  }
2724
2988
  }, async ({
2725
2989
  productId,
@@ -2756,8 +3020,8 @@ function registerCreateAudience(server) {
2756
3020
  server.registerTool("create_audience", {
2757
3021
  description: "Create a new audience member. Audiences represent who the product serves.",
2758
3022
  inputSchema: {
2759
- name: z15.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
2760
- description: z15.string().nullable().optional().describe("Description of the audience")
3023
+ name: z16.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
3024
+ description: z16.string().nullable().optional().describe("Description of the audience")
2761
3025
  }
2762
3026
  }, async ({ name, description }) => {
2763
3027
  const client2 = getApiClient();
@@ -2786,9 +3050,9 @@ function registerUpdateAudience(server) {
2786
3050
  server.registerTool("update_audience", {
2787
3051
  description: "Update an existing audience member.",
2788
3052
  inputSchema: {
2789
- id: z15.string().describe("The UUID of the audience to update"),
2790
- name: z15.string().optional().describe("New name"),
2791
- description: z15.string().nullable().optional().describe("New description")
3053
+ id: z16.string().describe("The UUID of the audience to update"),
3054
+ name: z16.string().optional().describe("New name"),
3055
+ description: z16.string().nullable().optional().describe("New description")
2792
3056
  }
2793
3057
  }, async ({
2794
3058
  id,
@@ -2823,7 +3087,7 @@ function registerDeleteAudience(server) {
2823
3087
  server.registerTool("delete_audience", {
2824
3088
  description: "Delete an audience member. This is a soft delete.",
2825
3089
  inputSchema: {
2826
- id: z15.string().describe("The UUID of the audience to delete")
3090
+ id: z16.string().describe("The UUID of the audience to delete")
2827
3091
  }
2828
3092
  }, async ({ id }) => {
2829
3093
  const client2 = getApiClient();
@@ -2865,9 +3129,9 @@ function registerGetHistory(server) {
2865
3129
  server.registerTool("get_history", {
2866
3130
  description: "Get raw history events for a date range. Returns full event details including payloads. " + "Use entityType or entityId filters to narrow results. For status reports, prefer " + "get_history_summary to avoid context overflow.",
2867
3131
  inputSchema: {
2868
- startDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2869
- endDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
2870
- entityType: z15.enum([
3132
+ startDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
3133
+ endDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
3134
+ entityType: z16.enum([
2871
3135
  "roadmap",
2872
3136
  "feature",
2873
3137
  "idea",
@@ -2899,8 +3163,8 @@ function registerGetHistorySummary(server) {
2899
3163
  server.registerTool("get_history_summary", {
2900
3164
  description: "Get a summary of history events for a date range. Returns counts by entity type, " + "list of changed entities with titles, and total event count. Use this for status " + "report generation instead of get_history to avoid context overflow.",
2901
3165
  inputSchema: {
2902
- startDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2903
- endDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
3166
+ startDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
3167
+ endDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
2904
3168
  }
2905
3169
  }, async ({ startDate, endDate }) => {
2906
3170
  const client2 = getApiClient();
@@ -2919,13 +3183,13 @@ function registerCreateStatusUpdate(server) {
2919
3183
  server.registerTool("create_status_update", {
2920
3184
  description: "Create a new status report. Use this after generating the report content from history events.",
2921
3185
  inputSchema: {
2922
- startDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
2923
- endDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
2924
- content: z15.string().describe("The markdown content of the status report"),
2925
- title: z15.string().optional().describe("Optional title for the report"),
2926
- items: z15.array(z15.object({
2927
- roadmapItemId: z15.string().describe("UUID of the roadmap item"),
2928
- status: z15.string().describe("Status of the item at report creation time")
3186
+ startDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
3187
+ endDate: z16.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
3188
+ content: z16.string().describe("The markdown content of the status report"),
3189
+ title: z16.string().optional().describe("Optional title for the report"),
3190
+ items: z16.array(z16.object({
3191
+ roadmapItemId: z16.string().describe("UUID of the roadmap item"),
3192
+ status: z16.string().describe("Status of the item at report creation time")
2929
3193
  })).optional().describe("Roadmap items to include in the report snapshot")
2930
3194
  }
2931
3195
  }, async ({
@@ -2966,18 +3230,18 @@ function registerSaveStories(server) {
2966
3230
  server.registerTool("save_stories", {
2967
3231
  description: "Save epics and stories for a roadmap item. Replaces all existing epics/stories. Use this to set the complete list of epics and stories for a roadmap.",
2968
3232
  inputSchema: {
2969
- roadmapId: z15.string().uuid().describe("The UUID of the roadmap item"),
2970
- epics: z15.array(z15.object({
2971
- title: z15.string().min(1).describe("Title of the epic"),
2972
- description: z15.string().nullable().optional().describe("Description of the epic"),
2973
- stories: z15.array(z15.object({
2974
- title: z15.string().min(1).describe("Title of the story"),
2975
- description: z15.string().nullable().optional().describe("Description of the story")
3233
+ roadmapId: z16.string().uuid().describe("The UUID of the roadmap item"),
3234
+ epics: z16.array(z16.object({
3235
+ title: z16.string().min(1).describe("Title of the epic"),
3236
+ description: z16.string().nullable().optional().describe("Description of the epic"),
3237
+ stories: z16.array(z16.object({
3238
+ title: z16.string().min(1).describe("Title of the story"),
3239
+ description: z16.string().nullable().optional().describe("Description of the story")
2976
3240
  })).optional().describe("Stories within this epic")
2977
3241
  })).optional().describe("List of epics with their nested stories"),
2978
- stories: z15.array(z15.object({
2979
- title: z15.string().min(1).describe("Title of the story"),
2980
- description: z15.string().nullable().optional().describe("Description of the story")
3242
+ stories: z16.array(z16.object({
3243
+ title: z16.string().min(1).describe("Title of the story"),
3244
+ description: z16.string().nullable().optional().describe("Description of the story")
2981
3245
  })).optional().describe("List of standalone stories (not part of any epic)")
2982
3246
  }
2983
3247
  }, async ({
@@ -3009,10 +3273,10 @@ function registerUploadWireframe(server) {
3009
3273
  server.registerTool("upload_wireframe", {
3010
3274
  description: "Upload an image to a roadmap item's wireframes. Returns a curl command to execute for the upload, then creates the wireframe record. After running the curl command, the wireframe will be visible in the web app.",
3011
3275
  inputSchema: {
3012
- roadmapId: z15.string().describe("The UUID of the roadmap item"),
3013
- filePath: z15.string().describe("Absolute path to the image file on disk"),
3014
- description: z15.string().optional().describe("Optional description of the wireframe"),
3015
- outcomeIds: z15.array(z15.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
3276
+ roadmapId: z16.string().describe("The UUID of the roadmap item"),
3277
+ filePath: z16.string().describe("Absolute path to the image file on disk"),
3278
+ description: z16.string().optional().describe("Optional description of the wireframe"),
3279
+ outcomeIds: z16.array(z16.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
3016
3280
  }
3017
3281
  }, async ({
3018
3282
  roadmapId,
@@ -3066,9 +3330,9 @@ function registerUpdateWireframe(server) {
3066
3330
  server.registerTool("update_wireframe", {
3067
3331
  description: "Update a wireframe's description or outcome tags.",
3068
3332
  inputSchema: {
3069
- id: z15.string().describe("The UUID of the wireframe"),
3070
- description: z15.string().nullable().optional().describe("New description for the wireframe"),
3071
- outcomeIds: z15.array(z15.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
3333
+ id: z16.string().describe("The UUID of the wireframe"),
3334
+ description: z16.string().nullable().optional().describe("New description for the wireframe"),
3335
+ outcomeIds: z16.array(z16.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
3072
3336
  }
3073
3337
  }, async ({
3074
3338
  id,
@@ -3104,7 +3368,7 @@ function registerDeleteWireframe(server) {
3104
3368
  server.registerTool("delete_wireframe", {
3105
3369
  description: "Delete a wireframe (soft delete).",
3106
3370
  inputSchema: {
3107
- id: z15.string().describe("The UUID of the wireframe to delete")
3371
+ id: z16.string().describe("The UUID of the wireframe to delete")
3108
3372
  }
3109
3373
  }, async ({ id }) => {
3110
3374
  const client2 = getApiClient();
@@ -3123,9 +3387,9 @@ function registerUploadBrainstormMedia(server) {
3123
3387
  server.registerTool("upload_brainstorm_media", {
3124
3388
  description: "Upload an image or video to a roadmap item's brainstorming section. Returns a curl command to execute for the upload.",
3125
3389
  inputSchema: {
3126
- roadmapId: z15.string().describe("The UUID of the roadmap item"),
3127
- filePath: z15.string().describe("Absolute path to the image or video file on disk"),
3128
- description: z15.string().optional().describe("Optional description of the media")
3390
+ roadmapId: z16.string().describe("The UUID of the roadmap item"),
3391
+ filePath: z16.string().describe("Absolute path to the image or video file on disk"),
3392
+ description: z16.string().optional().describe("Optional description of the media")
3129
3393
  }
3130
3394
  }, async ({
3131
3395
  roadmapId,
@@ -3177,8 +3441,8 @@ function registerUpdateBrainstormMedia(server) {
3177
3441
  server.registerTool("update_brainstorm_media", {
3178
3442
  description: "Update a brainstorm media item's description.",
3179
3443
  inputSchema: {
3180
- id: z15.string().describe("The UUID of the brainstorm media"),
3181
- description: z15.string().nullable().describe("New description for the media")
3444
+ id: z16.string().describe("The UUID of the brainstorm media"),
3445
+ description: z16.string().nullable().describe("New description for the media")
3182
3446
  }
3183
3447
  }, async ({ id, description }) => {
3184
3448
  const client2 = getApiClient();
@@ -3202,7 +3466,7 @@ function registerDeleteBrainstormMedia(server) {
3202
3466
  server.registerTool("delete_brainstorm_media", {
3203
3467
  description: "Delete a brainstorm media item (soft delete).",
3204
3468
  inputSchema: {
3205
- id: z15.string().describe("The UUID of the brainstorm media to delete")
3469
+ id: z16.string().describe("The UUID of the brainstorm media to delete")
3206
3470
  }
3207
3471
  }, async ({ id }) => {
3208
3472
  const client2 = getApiClient();
@@ -3221,9 +3485,9 @@ function registerUploadProductDesignMedia(server) {
3221
3485
  server.registerTool("upload_product_design_media", {
3222
3486
  description: "Upload an image or video to a product's design media section. Returns a curl command to execute for the upload.",
3223
3487
  inputSchema: {
3224
- productId: z15.string().describe("The UUID of the product"),
3225
- filePath: z15.string().describe("Absolute path to the image or video file on disk"),
3226
- description: z15.string().optional().describe("Optional description of the media")
3488
+ productId: z16.string().describe("The UUID of the product"),
3489
+ filePath: z16.string().describe("Absolute path to the image or video file on disk"),
3490
+ description: z16.string().optional().describe("Optional description of the media")
3227
3491
  }
3228
3492
  }, async ({
3229
3493
  productId,
@@ -3276,9 +3540,9 @@ function registerUpdateProductDesignMedia(server) {
3276
3540
  server.registerTool("update_product_design_media", {
3277
3541
  description: "Update a product design media item's description.",
3278
3542
  inputSchema: {
3279
- productId: z15.string().describe("The UUID of the product"),
3280
- mediaId: z15.string().describe("The UUID of the design media"),
3281
- description: z15.string().nullable().describe("New description for the media")
3543
+ productId: z16.string().describe("The UUID of the product"),
3544
+ mediaId: z16.string().describe("The UUID of the design media"),
3545
+ description: z16.string().nullable().describe("New description for the media")
3282
3546
  }
3283
3547
  }, async ({
3284
3548
  productId,
@@ -3306,8 +3570,8 @@ function registerDeleteProductDesignMedia(server) {
3306
3570
  server.registerTool("delete_product_design_media", {
3307
3571
  description: "Delete a product design media item (soft delete).",
3308
3572
  inputSchema: {
3309
- productId: z15.string().describe("The UUID of the product"),
3310
- mediaId: z15.string().describe("The UUID of the design media to delete")
3573
+ productId: z16.string().describe("The UUID of the product"),
3574
+ mediaId: z16.string().describe("The UUID of the design media to delete")
3311
3575
  }
3312
3576
  }, async ({ productId, mediaId }) => {
3313
3577
  const client2 = getApiClient();
@@ -3329,8 +3593,8 @@ function registerUploadDesignWalkthrough(server) {
3329
3593
  server.registerTool("upload_design_walkthrough", {
3330
3594
  description: "Upload a walkthrough video to a roadmap item's design phase. Returns a curl command to execute for the upload.",
3331
3595
  inputSchema: {
3332
- roadmapId: z15.string().describe("The UUID of the roadmap item"),
3333
- filePath: z15.string().describe("Absolute path to the video file on disk")
3596
+ roadmapId: z16.string().describe("The UUID of the roadmap item"),
3597
+ filePath: z16.string().describe("Absolute path to the video file on disk")
3334
3598
  }
3335
3599
  }, async ({ roadmapId, filePath }) => {
3336
3600
  const client2 = getApiClient();
@@ -3372,8 +3636,8 @@ function registerUploadReleaseWalkthrough(server) {
3372
3636
  server.registerTool("upload_release_walkthrough", {
3373
3637
  description: "Upload a walkthrough video to a roadmap item's release phase. Returns a curl command to execute for the upload.",
3374
3638
  inputSchema: {
3375
- roadmapId: z15.string().describe("The UUID of the roadmap item"),
3376
- filePath: z15.string().describe("Absolute path to the video file on disk")
3639
+ roadmapId: z16.string().describe("The UUID of the roadmap item"),
3640
+ filePath: z16.string().describe("Absolute path to the video file on disk")
3377
3641
  }
3378
3642
  }, async ({ roadmapId, filePath }) => {
3379
3643
  const client2 = getApiClient();
@@ -3431,9 +3695,9 @@ function registerPublishPrototype(server) {
3431
3695
  server.registerTool("publish_prototype", {
3432
3696
  description: "Publish a local prototype folder to a shareable URL. Uploads all files from the folder and returns a time-limited shareable link.",
3433
3697
  inputSchema: {
3434
- roadmapId: z15.string().uuid().describe("The UUID of the roadmap item to attach the prototype to"),
3435
- folderPath: z15.string().describe("Absolute path to the local mockup folder"),
3436
- entryPoint: z15.string().default("index.html").describe("Main HTML file to open (defaults to index.html)")
3698
+ roadmapId: z16.string().uuid().describe("The UUID of the roadmap item to attach the prototype to"),
3699
+ folderPath: z16.string().describe("Absolute path to the local mockup folder"),
3700
+ entryPoint: z16.string().default("index.html").describe("Main HTML file to open (defaults to index.html)")
3437
3701
  }
3438
3702
  }, async ({
3439
3703
  roadmapId,
@@ -3594,7 +3858,7 @@ function registerListPrototypes(server) {
3594
3858
  server.registerTool("list_prototypes", {
3595
3859
  description: "List published prototypes for a roadmap item. Returns prototype IDs needed for creating feedback sessions.",
3596
3860
  inputSchema: {
3597
- roadmapId: z15.string().uuid().describe("The UUID of the roadmap item")
3861
+ roadmapId: z16.string().uuid().describe("The UUID of the roadmap item")
3598
3862
  }
3599
3863
  }, async ({ roadmapId }) => {
3600
3864
  const client2 = getApiClient();
@@ -3638,15 +3902,15 @@ ${lines.join(`
3638
3902
  };
3639
3903
  });
3640
3904
  }
3641
- var dateGranularitySchema2 = z15.enum(["day", "month", "quarter", "half-year", "year"]);
3905
+ var dateGranularitySchema2 = z16.enum(["day", "month", "quarter", "half-year", "year"]);
3642
3906
  function registerSearchInitiatives(server) {
3643
3907
  server.registerTool("search_initiatives", {
3644
3908
  description: "Search for initiatives by title or filter by horizon. Returns a list of matching initiatives with item counts.",
3645
3909
  inputSchema: {
3646
- query: z15.string().optional().describe("Search query to match against title or description"),
3910
+ query: z16.string().optional().describe("Search query to match against title or description"),
3647
3911
  horizon: horizonSchema.optional().describe("Filter by planning horizon"),
3648
- limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3649
- offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3912
+ limit: z16.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3913
+ offset: z16.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3650
3914
  }
3651
3915
  }, async ({
3652
3916
  query,
@@ -3673,7 +3937,7 @@ function registerSearchInitiatives(server) {
3673
3937
  items: paginatedInitiatives.map((i) => ({
3674
3938
  id: i.id,
3675
3939
  title: i.title,
3676
- description: i.description,
3940
+ description: contentToMarkdown(i.description),
3677
3941
  horizon: i.horizon,
3678
3942
  targetDate: i.targetDate,
3679
3943
  itemCount: i.itemCount,
@@ -3696,7 +3960,7 @@ function registerGetInitiative(server) {
3696
3960
  server.registerTool("get_initiative", {
3697
3961
  description: "Get full details of an initiative including all linked roadmap items.",
3698
3962
  inputSchema: {
3699
- id: z15.string().describe("The UUID of the initiative")
3963
+ id: z16.string().describe("The UUID of the initiative")
3700
3964
  }
3701
3965
  }, async ({ id }) => {
3702
3966
  const client2 = getApiClient();
@@ -3705,7 +3969,13 @@ function registerGetInitiative(server) {
3705
3969
  content: [
3706
3970
  {
3707
3971
  type: "text",
3708
- text: JSON.stringify(result, null, 2)
3972
+ text: JSON.stringify({
3973
+ ...result,
3974
+ initiative: {
3975
+ ...result.initiative,
3976
+ description: contentToMarkdown(result.initiative.description)
3977
+ }
3978
+ }, null, 2)
3709
3979
  }
3710
3980
  ]
3711
3981
  };
@@ -3715,12 +3985,12 @@ function registerCreateInitiative(server) {
3715
3985
  server.registerTool("create_initiative", {
3716
3986
  description: "Create a new initiative. Initiatives group related roadmap items for cross-functional coordination.",
3717
3987
  inputSchema: {
3718
- title: z15.string().describe("Title of the initiative"),
3719
- description: z15.string().optional().describe("Description of the initiative (markdown)"),
3988
+ title: z16.string().describe("Title of the initiative"),
3989
+ description: z16.string().optional().describe("Description of the initiative (markdown)"),
3720
3990
  horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
3721
3991
  dateGranularity: dateGranularitySchema2.optional().describe("Target date granularity: day, month, quarter, half-year, or year"),
3722
- dateValue: z15.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
3723
- targetDate: z15.string().optional().describe("Target date in YYYY-MM-DD format")
3992
+ dateValue: z16.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
3993
+ targetDate: z16.string().optional().describe("Target date in YYYY-MM-DD format")
3724
3994
  }
3725
3995
  }, async ({
3726
3996
  title,
@@ -3764,14 +4034,14 @@ function registerUpdateInitiative(server) {
3764
4034
  server.registerTool("update_initiative", {
3765
4035
  description: "Update an existing initiative.",
3766
4036
  inputSchema: {
3767
- id: z15.string().describe("The UUID of the initiative to update"),
3768
- title: z15.string().optional().describe("New title"),
3769
- description: z15.string().nullable().optional().describe("New description (null to clear)"),
4037
+ id: z16.string().describe("The UUID of the initiative to update"),
4038
+ title: z16.string().optional().describe("New title"),
4039
+ description: z16.string().nullable().optional().describe("New description (null to clear)"),
3770
4040
  horizon: horizonSchema.optional().describe("New planning horizon"),
3771
4041
  dateGranularity: dateGranularitySchema2.nullable().optional().describe("New target date granularity (null to clear)"),
3772
- dateValue: z15.string().nullable().optional().describe("New target date value (null to clear)"),
3773
- targetDate: z15.string().nullable().optional().describe("New target date in YYYY-MM-DD format (null to clear)"),
3774
- order: z15.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
4042
+ dateValue: z16.string().nullable().optional().describe("New target date value (null to clear)"),
4043
+ targetDate: z16.string().nullable().optional().describe("New target date in YYYY-MM-DD format (null to clear)"),
4044
+ order: z16.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
3775
4045
  }
3776
4046
  }, async ({
3777
4047
  id,
@@ -3826,7 +4096,7 @@ function registerDeleteInitiative(server) {
3826
4096
  server.registerTool("delete_initiative", {
3827
4097
  description: "Delete an initiative. This is a soft delete that also unlinks all roadmap items from the initiative.",
3828
4098
  inputSchema: {
3829
- id: z15.string().describe("The UUID of the initiative to delete")
4099
+ id: z16.string().describe("The UUID of the initiative to delete")
3830
4100
  }
3831
4101
  }, async ({ id }) => {
3832
4102
  const client2 = getApiClient();
@@ -3845,9 +4115,9 @@ function registerReorderInitiatives(server) {
3845
4115
  server.registerTool("reorder_initiatives", {
3846
4116
  description: "Bulk reorder initiatives by setting their order values. Lower order values appear first.",
3847
4117
  inputSchema: {
3848
- items: z15.array(z15.object({
3849
- id: z15.string().describe("The UUID of the initiative"),
3850
- order: z15.number().int().min(0).describe("The new order value (0-based)")
4118
+ items: z16.array(z16.object({
4119
+ id: z16.string().describe("The UUID of the initiative"),
4120
+ order: z16.number().int().min(0).describe("The new order value (0-based)")
3851
4121
  })).describe("Array of initiatives with their new order values")
3852
4122
  }
3853
4123
  }, async ({ items }) => {
@@ -3867,12 +4137,12 @@ function registerSearchExports(server) {
3867
4137
  server.registerTool("search_exports", {
3868
4138
  description: "Search for export records by roadmap, external system, or entity. Returns a list of matching exports with pagination.",
3869
4139
  inputSchema: {
3870
- roadmapId: z15.string().uuid().optional().describe("Filter by roadmap item ID"),
3871
- externalSystem: z15.enum(["linear", "notion", "jira", "github"]).optional().describe("Filter by external system"),
3872
- localEntityType: z15.enum(["roadmap", "prd", "epic", "story", "design"]).optional().describe("Filter by local entity type"),
3873
- localEntityId: z15.string().uuid().optional().describe("Filter by local entity ID"),
3874
- limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3875
- offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
4140
+ roadmapId: z16.string().uuid().optional().describe("Filter by roadmap item ID"),
4141
+ externalSystem: z16.enum(["linear", "notion", "jira", "github"]).optional().describe("Filter by external system"),
4142
+ localEntityType: z16.enum(["roadmap", "prd", "epic", "story", "design"]).optional().describe("Filter by local entity type"),
4143
+ localEntityId: z16.string().uuid().optional().describe("Filter by local entity ID"),
4144
+ limit: z16.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
4145
+ offset: z16.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3876
4146
  }
3877
4147
  }, async ({
3878
4148
  roadmapId,
@@ -3909,7 +4179,7 @@ function registerGetExport(server) {
3909
4179
  server.registerTool("get_export", {
3910
4180
  description: "Get full details of a single export record by ID.",
3911
4181
  inputSchema: {
3912
- id: z15.string().uuid().describe("The UUID of the export record")
4182
+ id: z16.string().uuid().describe("The UUID of the export record")
3913
4183
  }
3914
4184
  }, async ({ id }) => {
3915
4185
  const client2 = getApiClient();
@@ -3928,14 +4198,14 @@ function registerCreateExport(server) {
3928
4198
  server.registerTool("create_export", {
3929
4199
  description: "Record a new export (with upsert). If an export with the same roadmap, entity, and external system already exists, it will be updated.",
3930
4200
  inputSchema: {
3931
- roadmapId: z15.string().uuid().describe("The UUID of the roadmap item"),
3932
- localEntityType: z15.enum(["roadmap", "prd", "epic", "story", "design"]).describe("Type of local entity being exported"),
3933
- localEntityId: z15.string().uuid().describe("The UUID of the local entity"),
3934
- externalSystem: z15.enum(["linear", "notion", "jira", "github"]).describe("External system where the entity was exported"),
3935
- externalObjectType: z15.string().min(1).describe('Type of object in the external system (e.g., "issue", "page", "project")'),
3936
- externalId: z15.string().min(1).describe("ID of the object in the external system"),
3937
- externalUrl: z15.string().url().optional().describe("URL to the object in the external system"),
3938
- metadata: z15.record(z15.unknown()).optional().describe("Additional metadata about the export")
4201
+ roadmapId: z16.string().uuid().describe("The UUID of the roadmap item"),
4202
+ localEntityType: z16.enum(["roadmap", "prd", "epic", "story", "design"]).describe("Type of local entity being exported"),
4203
+ localEntityId: z16.string().uuid().describe("The UUID of the local entity"),
4204
+ externalSystem: z16.enum(["linear", "notion", "jira", "github"]).describe("External system where the entity was exported"),
4205
+ externalObjectType: z16.string().min(1).describe('Type of object in the external system (e.g., "issue", "page", "project")'),
4206
+ externalId: z16.string().min(1).describe("ID of the object in the external system"),
4207
+ externalUrl: z16.string().url().optional().describe("URL to the object in the external system"),
4208
+ metadata: z16.record(z16.unknown()).optional().describe("Additional metadata about the export")
3939
4209
  }
3940
4210
  }, async ({
3941
4211
  roadmapId,
@@ -3972,9 +4242,9 @@ function registerUpdateExport(server) {
3972
4242
  server.registerTool("update_export", {
3973
4243
  description: "Update an export record. Can update the external URL or metadata.",
3974
4244
  inputSchema: {
3975
- id: z15.string().uuid().describe("The UUID of the export record to update"),
3976
- externalUrl: z15.string().url().nullable().optional().describe("New URL to the object in the external system"),
3977
- metadata: z15.record(z15.unknown()).optional().describe("New metadata to replace existing metadata")
4245
+ id: z16.string().uuid().describe("The UUID of the export record to update"),
4246
+ externalUrl: z16.string().url().nullable().optional().describe("New URL to the object in the external system"),
4247
+ metadata: z16.record(z16.unknown()).optional().describe("New metadata to replace existing metadata")
3978
4248
  }
3979
4249
  }, async ({
3980
4250
  id,
@@ -3997,7 +4267,7 @@ function registerDeleteExport(server) {
3997
4267
  server.registerTool("delete_export", {
3998
4268
  description: "Delete an export record. This is a soft delete.",
3999
4269
  inputSchema: {
4000
- id: z15.string().uuid().describe("The UUID of the export record to delete")
4270
+ id: z16.string().uuid().describe("The UUID of the export record to delete")
4001
4271
  }
4002
4272
  }, async ({ id }) => {
4003
4273
  const client2 = getApiClient();
@@ -4033,7 +4303,7 @@ function registerGetPresentation(server) {
4033
4303
  server.registerTool("get_presentation", {
4034
4304
  description: "Get presentation with variants and slides.",
4035
4305
  inputSchema: {
4036
- id: z15.string().describe("The UUID of the presentation")
4306
+ id: z16.string().describe("The UUID of the presentation")
4037
4307
  }
4038
4308
  }, async ({ id }) => {
4039
4309
  const client2 = getApiClient();
@@ -4063,8 +4333,8 @@ function registerCreatePresentation(server) {
4063
4333
  server.registerTool("create_presentation", {
4064
4334
  description: "Create a new presentation.",
4065
4335
  inputSchema: {
4066
- title: z15.string().describe("Title of the presentation"),
4067
- description: z15.string().nullable().optional().describe("Description of the presentation")
4336
+ title: z16.string().describe("Title of the presentation"),
4337
+ description: z16.string().nullable().optional().describe("Description of the presentation")
4068
4338
  }
4069
4339
  }, async ({ title, description }) => {
4070
4340
  const client2 = getApiClient();
@@ -4086,9 +4356,9 @@ function registerUpdatePresentation(server) {
4086
4356
  server.registerTool("update_presentation", {
4087
4357
  description: "Update an existing presentation.",
4088
4358
  inputSchema: {
4089
- id: z15.string().describe("The UUID of the presentation to update"),
4090
- title: z15.string().optional().describe("New title"),
4091
- description: z15.string().nullable().optional().describe("New description")
4359
+ id: z16.string().describe("The UUID of the presentation to update"),
4360
+ title: z16.string().optional().describe("New title"),
4361
+ description: z16.string().nullable().optional().describe("New description")
4092
4362
  }
4093
4363
  }, async ({
4094
4364
  id,
@@ -4116,7 +4386,7 @@ function registerDeletePresentation(server) {
4116
4386
  server.registerTool("delete_presentation", {
4117
4387
  description: "Delete a presentation.",
4118
4388
  inputSchema: {
4119
- id: z15.string().describe("The UUID of the presentation to delete")
4389
+ id: z16.string().describe("The UUID of the presentation to delete")
4120
4390
  }
4121
4391
  }, async ({ id }) => {
4122
4392
  const client2 = getApiClient();
@@ -4135,9 +4405,9 @@ function registerReorderPresentations(server) {
4135
4405
  server.registerTool("reorder_presentations", {
4136
4406
  description: "Reorder presentations by setting their order values. Lower order values appear first.",
4137
4407
  inputSchema: {
4138
- items: z15.array(z15.object({
4139
- id: z15.string().describe("The UUID of the presentation"),
4140
- order: z15.number().int().min(0).describe("The new order value (0-based)")
4408
+ items: z16.array(z16.object({
4409
+ id: z16.string().describe("The UUID of the presentation"),
4410
+ order: z16.number().int().min(0).describe("The new order value (0-based)")
4141
4411
  })).describe("Array of presentations with their new order values")
4142
4412
  }
4143
4413
  }, async ({ items }) => {
@@ -4157,7 +4427,7 @@ function registerListVariants(server) {
4157
4427
  server.registerTool("list_variants", {
4158
4428
  description: "List all variants for a presentation.",
4159
4429
  inputSchema: {
4160
- presentationId: z15.string().describe("The UUID of the presentation")
4430
+ presentationId: z16.string().describe("The UUID of the presentation")
4161
4431
  }
4162
4432
  }, async ({ presentationId }) => {
4163
4433
  const client2 = getApiClient();
@@ -4176,8 +4446,8 @@ function registerGetVariant(server) {
4176
4446
  server.registerTool("get_variant", {
4177
4447
  description: "Get variant with its slides.",
4178
4448
  inputSchema: {
4179
- presentationId: z15.string().describe("The UUID of the presentation"),
4180
- variantId: z15.string().describe("The UUID of the variant")
4449
+ presentationId: z16.string().describe("The UUID of the presentation"),
4450
+ variantId: z16.string().describe("The UUID of the variant")
4181
4451
  }
4182
4452
  }, async ({ presentationId, variantId }) => {
4183
4453
  const client2 = getApiClient();
@@ -4200,9 +4470,9 @@ function registerCreateVariant(server) {
4200
4470
  server.registerTool("create_variant", {
4201
4471
  description: "Create a new variant for a presentation.",
4202
4472
  inputSchema: {
4203
- presentationId: z15.string().describe("The UUID of the presentation"),
4204
- name: z15.string().describe("Name of the variant"),
4205
- audienceId: z15.string().nullable().optional().describe("The UUID of the target audience")
4473
+ presentationId: z16.string().describe("The UUID of the presentation"),
4474
+ name: z16.string().describe("Name of the variant"),
4475
+ audienceId: z16.string().nullable().optional().describe("The UUID of the target audience")
4206
4476
  }
4207
4477
  }, async ({
4208
4478
  presentationId,
@@ -4228,10 +4498,10 @@ function registerUpdateVariant(server) {
4228
4498
  server.registerTool("update_variant", {
4229
4499
  description: "Update an existing variant.",
4230
4500
  inputSchema: {
4231
- presentationId: z15.string().describe("The UUID of the presentation"),
4232
- variantId: z15.string().describe("The UUID of the variant to update"),
4233
- name: z15.string().optional().describe("New name"),
4234
- audienceId: z15.string().nullable().optional().describe("New target audience UUID")
4501
+ presentationId: z16.string().describe("The UUID of the presentation"),
4502
+ variantId: z16.string().describe("The UUID of the variant to update"),
4503
+ name: z16.string().optional().describe("New name"),
4504
+ audienceId: z16.string().nullable().optional().describe("New target audience UUID")
4235
4505
  }
4236
4506
  }, async ({
4237
4507
  presentationId,
@@ -4260,8 +4530,8 @@ function registerDeleteVariant(server) {
4260
4530
  server.registerTool("delete_variant", {
4261
4531
  description: "Delete a variant.",
4262
4532
  inputSchema: {
4263
- presentationId: z15.string().describe("The UUID of the presentation"),
4264
- variantId: z15.string().describe("The UUID of the variant to delete")
4533
+ presentationId: z16.string().describe("The UUID of the presentation"),
4534
+ variantId: z16.string().describe("The UUID of the variant to delete")
4265
4535
  }
4266
4536
  }, async ({ presentationId, variantId }) => {
4267
4537
  const client2 = getApiClient();
@@ -4280,10 +4550,10 @@ function registerReorderVariants(server) {
4280
4550
  server.registerTool("reorder_variants", {
4281
4551
  description: "Reorder variants by setting their order values. Lower order values appear first.",
4282
4552
  inputSchema: {
4283
- presentationId: z15.string().describe("The UUID of the presentation"),
4284
- items: z15.array(z15.object({
4285
- id: z15.string().describe("The UUID of the variant"),
4286
- order: z15.number().int().min(0).describe("The new order value (0-based)")
4553
+ presentationId: z16.string().describe("The UUID of the presentation"),
4554
+ items: z16.array(z16.object({
4555
+ id: z16.string().describe("The UUID of the variant"),
4556
+ order: z16.number().int().min(0).describe("The new order value (0-based)")
4287
4557
  })).describe("Array of variants with their new order values")
4288
4558
  }
4289
4559
  }, async ({
@@ -4306,8 +4576,8 @@ function registerCloneVariant(server) {
4306
4576
  server.registerTool("clone_variant", {
4307
4577
  description: "Clone a variant with all its slides.",
4308
4578
  inputSchema: {
4309
- presentationId: z15.string().describe("The UUID of the presentation"),
4310
- variantId: z15.string().describe("The UUID of the variant to clone")
4579
+ presentationId: z16.string().describe("The UUID of the presentation"),
4580
+ variantId: z16.string().describe("The UUID of the variant to clone")
4311
4581
  }
4312
4582
  }, async ({ presentationId, variantId }) => {
4313
4583
  const client2 = getApiClient();
@@ -4326,8 +4596,8 @@ function registerSetDefaultVariant(server) {
4326
4596
  server.registerTool("set_default_variant", {
4327
4597
  description: "Set a variant as the default for the presentation.",
4328
4598
  inputSchema: {
4329
- presentationId: z15.string().describe("The UUID of the presentation"),
4330
- variantId: z15.string().describe("The UUID of the variant to set as default")
4599
+ presentationId: z16.string().describe("The UUID of the presentation"),
4600
+ variantId: z16.string().describe("The UUID of the variant to set as default")
4331
4601
  }
4332
4602
  }, async ({ presentationId, variantId }) => {
4333
4603
  const client2 = getApiClient();
@@ -4346,7 +4616,7 @@ function registerListSlides(server) {
4346
4616
  server.registerTool("list_slides", {
4347
4617
  description: "List all slides in a variant.",
4348
4618
  inputSchema: {
4349
- variantId: z15.string().describe("The UUID of the variant")
4619
+ variantId: z16.string().describe("The UUID of the variant")
4350
4620
  }
4351
4621
  }, async ({ variantId }) => {
4352
4622
  const client2 = getApiClient();
@@ -4376,8 +4646,8 @@ function registerGetSlide(server) {
4376
4646
  server.registerTool("get_slide", {
4377
4647
  description: "Get a slide by ID.",
4378
4648
  inputSchema: {
4379
- variantId: z15.string().describe("The UUID of the variant"),
4380
- slideId: z15.string().describe("The UUID of the slide")
4649
+ variantId: z16.string().describe("The UUID of the variant"),
4650
+ slideId: z16.string().describe("The UUID of the slide")
4381
4651
  }
4382
4652
  }, async ({ variantId, slideId }) => {
4383
4653
  const client2 = getApiClient();
@@ -4407,8 +4677,8 @@ function registerCreateSlide(server) {
4407
4677
  server.registerTool("create_slide", {
4408
4678
  description: "Create a new slide in a variant. Slide types: title (title + subtitle), section_header (title + subtitle), bullets (title + items array), two_column (title + left/right text), comparison (leftLabel + leftContent + rightLabel + rightContent), timeline (title + steps array of {title, description}), image (title + imageUrl + caption), quote (quote + attribution), code (title + code + language), thank_you (title + subtitle), mermaid (title + code with mermaid diagram syntax), paragraph (title + body with markdown text).",
4409
4679
  inputSchema: {
4410
- variantId: z15.string().describe("The UUID of the variant"),
4411
- slideType: z15.enum([
4680
+ variantId: z16.string().describe("The UUID of the variant"),
4681
+ slideType: z16.enum([
4412
4682
  "title",
4413
4683
  "section_header",
4414
4684
  "bullets",
@@ -4422,8 +4692,8 @@ function registerCreateSlide(server) {
4422
4692
  "mermaid",
4423
4693
  "paragraph"
4424
4694
  ]).default("bullets").describe("The type of slide to create"),
4425
- content: z15.record(z15.unknown()).optional().describe('Type-specific content object. For bullets: {title, items: ["..."]}. For title: {title, subtitle}. For two_column: {title, left, right}. For quote: {quote, attribution}. For mermaid: {title, code: "graph TD; A-->B"}. For paragraph: {title, body}. Etc.'),
4426
- speakerNotes: z15.string().nullable().optional().describe("Speaker notes for the slide")
4695
+ content: z16.record(z16.unknown()).optional().describe('Type-specific content object. For bullets: {title, items: ["..."]}. For title: {title, subtitle}. For two_column: {title, left, right}. For quote: {quote, attribution}. For mermaid: {title, code: "graph TD; A-->B"}. For paragraph: {title, body}. Etc.'),
4696
+ speakerNotes: z16.string().nullable().optional().describe("Speaker notes for the slide")
4427
4697
  }
4428
4698
  }, async ({
4429
4699
  variantId,
@@ -4462,11 +4732,11 @@ function registerUpdateSlide(server) {
4462
4732
  server.registerTool("update_slide", {
4463
4733
  description: "Update an existing slide.",
4464
4734
  inputSchema: {
4465
- variantId: z15.string().describe("The UUID of the variant"),
4466
- slideId: z15.string().describe("The UUID of the slide to update"),
4467
- title: z15.string().optional().describe("New title"),
4468
- content: z15.object({ body: z15.string().optional() }).nullable().optional().describe("New slide content with markdown body"),
4469
- speakerNotes: z15.string().nullable().optional().describe("New speaker notes")
4735
+ variantId: z16.string().describe("The UUID of the variant"),
4736
+ slideId: z16.string().describe("The UUID of the slide to update"),
4737
+ title: z16.string().optional().describe("New title"),
4738
+ content: z16.object({ body: z16.string().optional() }).nullable().optional().describe("New slide content with markdown body"),
4739
+ speakerNotes: z16.string().nullable().optional().describe("New speaker notes")
4470
4740
  }
4471
4741
  }, async ({
4472
4742
  variantId,
@@ -4509,8 +4779,8 @@ function registerDeleteSlide(server) {
4509
4779
  server.registerTool("delete_slide", {
4510
4780
  description: "Delete a slide (soft delete).",
4511
4781
  inputSchema: {
4512
- variantId: z15.string().describe("The UUID of the variant"),
4513
- slideId: z15.string().describe("The UUID of the slide to delete")
4782
+ variantId: z16.string().describe("The UUID of the variant"),
4783
+ slideId: z16.string().describe("The UUID of the slide to delete")
4514
4784
  }
4515
4785
  }, async ({ variantId, slideId }) => {
4516
4786
  const client2 = getApiClient();
@@ -4540,10 +4810,10 @@ function registerReorderSlides(server) {
4540
4810
  server.registerTool("reorder_slides", {
4541
4811
  description: "Reorder slides by setting their order values. Lower order values appear first.",
4542
4812
  inputSchema: {
4543
- variantId: z15.string().describe("The UUID of the variant"),
4544
- items: z15.array(z15.object({
4545
- id: z15.string().describe("The UUID of the slide"),
4546
- order: z15.number().int().min(0).describe("The new order value (0-based)")
4813
+ variantId: z16.string().describe("The UUID of the variant"),
4814
+ items: z16.array(z16.object({
4815
+ id: z16.string().describe("The UUID of the slide"),
4816
+ order: z16.number().int().min(0).describe("The new order value (0-based)")
4547
4817
  })).describe("Array of slides with their new order values")
4548
4818
  }
4549
4819
  }, async ({
@@ -4577,9 +4847,9 @@ function registerUploadSlideImage(server) {
4577
4847
  server.registerTool("upload_slide_image", {
4578
4848
  description: 'Upload an image to a slide. Gets a presigned URL and returns a curl command to execute for the upload, then updates the slide content with the image URL. The slide must be of type "image".',
4579
4849
  inputSchema: {
4580
- variantId: z15.string().describe("The UUID of the variant"),
4581
- slideId: z15.string().describe("The UUID of the slide to add the image to"),
4582
- filePath: z15.string().describe("Absolute path to the image file on disk")
4850
+ variantId: z16.string().describe("The UUID of the variant"),
4851
+ slideId: z16.string().describe("The UUID of the slide to add the image to"),
4852
+ filePath: z16.string().describe("Absolute path to the image file on disk")
4583
4853
  }
4584
4854
  }, async ({
4585
4855
  variantId,
@@ -4653,9 +4923,9 @@ function registerCreateFeedbackSession(server) {
4653
4923
  server.registerTool("create_feedback_session", {
4654
4924
  description: "Create a feedback session for a prototype and get a shareable review link. Reviewers who open the link can optionally enter their name before leaving pin-based feedback.",
4655
4925
  inputSchema: {
4656
- prototypeId: z15.string().uuid().describe("The UUID of the prototype to create a feedback session for"),
4657
- name: z15.string().describe('Name for this feedback session (e.g., "Round 1 Review")'),
4658
- expiresInDays: z15.number().int().min(1).max(90).optional().describe("Number of days until the session expires (default 7)")
4926
+ prototypeId: z16.string().uuid().describe("The UUID of the prototype to create a feedback session for"),
4927
+ name: z16.string().describe('Name for this feedback session (e.g., "Round 1 Review")'),
4928
+ expiresInDays: z16.number().int().min(1).max(90).optional().describe("Number of days until the session expires (default 7)")
4659
4929
  }
4660
4930
  }, async ({
4661
4931
  prototypeId,
@@ -4704,7 +4974,7 @@ function registerListFeedbackSessions(server) {
4704
4974
  server.registerTool("list_feedback_sessions", {
4705
4975
  description: "List all feedback sessions for a prototype with comment counts and status.",
4706
4976
  inputSchema: {
4707
- prototypeId: z15.string().uuid().describe("The UUID of the prototype")
4977
+ prototypeId: z16.string().uuid().describe("The UUID of the prototype")
4708
4978
  }
4709
4979
  }, async ({ prototypeId }) => {
4710
4980
  const client2 = getApiClient();
@@ -4755,9 +5025,9 @@ function registerGetFeedbackSummary(server) {
4755
5025
  server.registerTool("get_feedback_summary", {
4756
5026
  description: "Get a human-readable summary of feedback for a session, grouped by page. Shows pin numbers, reviewer names, comment text, and which element was pinned. Use this for a quick overview of feedback.",
4757
5027
  inputSchema: {
4758
- prototypeId: z15.string().uuid().describe("The UUID of the prototype"),
4759
- sessionId: z15.string().uuid().describe("The UUID of the feedback session"),
4760
- filter: z15.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: unresolved)")
5028
+ prototypeId: z16.string().uuid().describe("The UUID of the prototype"),
5029
+ sessionId: z16.string().uuid().describe("The UUID of the feedback session"),
5030
+ filter: z16.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: unresolved)")
4761
5031
  }
4762
5032
  }, async ({
4763
5033
  prototypeId,
@@ -4798,10 +5068,10 @@ function registerGetFeedbackDetail(server) {
4798
5068
  server.registerTool("get_feedback_detail", {
4799
5069
  description: "Get full raw pin data for feedback comments, including CSS selectors, bounding boxes, parent/sibling DOM context, and coordinates. Use this when you need exact element information to make targeted code changes.",
4800
5070
  inputSchema: {
4801
- prototypeId: z15.string().uuid().describe("The UUID of the prototype"),
4802
- sessionId: z15.string().uuid().describe("The UUID of the feedback session"),
4803
- commentId: z15.string().uuid().optional().describe("Optional: get detail for a single comment"),
4804
- filter: z15.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: all). Ignored if commentId is provided.")
5071
+ prototypeId: z16.string().uuid().describe("The UUID of the prototype"),
5072
+ sessionId: z16.string().uuid().describe("The UUID of the feedback session"),
5073
+ commentId: z16.string().uuid().optional().describe("Optional: get detail for a single comment"),
5074
+ filter: z16.enum(["all", "unresolved", "resolved"]).optional().describe("Filter comments by resolved status (default: all). Ignored if commentId is provided.")
4805
5075
  }
4806
5076
  }, async ({
4807
5077
  prototypeId,
@@ -4847,9 +5117,9 @@ function registerResolveFeedbackComment(server) {
4847
5117
  server.registerTool("resolve_feedback_comment", {
4848
5118
  description: "Toggle the resolved status on a feedback comment. If currently unresolved, marks it as resolved. If already resolved, marks it as unresolved.",
4849
5119
  inputSchema: {
4850
- prototypeId: z15.string().uuid().describe("The UUID of the prototype"),
4851
- sessionId: z15.string().uuid().describe("The UUID of the feedback session"),
4852
- commentId: z15.string().uuid().describe("The UUID of the comment to resolve/unresolve")
5120
+ prototypeId: z16.string().uuid().describe("The UUID of the prototype"),
5121
+ sessionId: z16.string().uuid().describe("The UUID of the feedback session"),
5122
+ commentId: z16.string().uuid().describe("The UUID of the comment to resolve/unresolve")
4853
5123
  }
4854
5124
  }, async ({
4855
5125
  prototypeId,