@lovelybunch/core 1.0.73 → 1.0.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context.d.ts +174 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +201 -0
- package/dist/context.js.map +1 -0
- package/dist/events.d.ts +89 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +102 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge.d.ts +1148 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +427 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/logging/jsonl-writer.d.ts.map +1 -1
- package/dist/logging/jsonl-writer.js +11 -15
- package/dist/logging/jsonl-writer.js.map +1 -1
- package/dist/markdown-storage.d.ts.map +1 -1
- package/dist/markdown-storage.js +43 -1
- package/dist/markdown-storage.js.map +1 -1
- package/dist/proposals.d.ts +645 -0
- package/dist/proposals.d.ts.map +1 -0
- package/dist/proposals.js +454 -0
- package/dist/proposals.js.map +1 -0
- package/dist/system-prompts/coconut-assistant.md +103 -25
- package/package.json +6 -4
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
3
|
+
import { MarkdownStorageAdapter } from './markdown-storage.js';
|
|
4
|
+
import Fuse from 'fuse.js';
|
|
5
|
+
import { getLogger, ProposalKinds } from './logging/index.js';
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Storage initialization with environment-aware path resolution
|
|
8
|
+
// ============================================================================
|
|
9
|
+
function resolveGaitPath() {
|
|
10
|
+
if (process.env.NODE_ENV === 'development' && process.env.GAIT_DEV_ROOT) {
|
|
11
|
+
return process.env.GAIT_DEV_ROOT;
|
|
12
|
+
}
|
|
13
|
+
if (process.env.GAIT_DATA_PATH) {
|
|
14
|
+
return `${process.env.GAIT_DATA_PATH}/.nut`;
|
|
15
|
+
}
|
|
16
|
+
return '.nut';
|
|
17
|
+
}
|
|
18
|
+
// Create storage adapter with resolved path
|
|
19
|
+
function getStorage() {
|
|
20
|
+
return new MarkdownStorageAdapter(resolveGaitPath());
|
|
21
|
+
}
|
|
22
|
+
function logProposalEvent(kind, proposalId, payload) {
|
|
23
|
+
try {
|
|
24
|
+
const logger = getLogger();
|
|
25
|
+
logger.log({
|
|
26
|
+
kind,
|
|
27
|
+
actor: 'cli:nut', // CLI operations
|
|
28
|
+
subject: `proposal:${proposalId}`,
|
|
29
|
+
tags: ['proposal'],
|
|
30
|
+
payload: {
|
|
31
|
+
proposalId,
|
|
32
|
+
...payload,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
// Don't fail the operation if logging fails
|
|
38
|
+
console.error('Failed to log proposal event:', err);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Zod Schemas
|
|
43
|
+
// ============================================================================
|
|
44
|
+
export const ProposalStatusSchema = z.enum([
|
|
45
|
+
'draft', 'proposed', 'in-review', 'code-complete', 'approved', 'merged', 'rejected'
|
|
46
|
+
]);
|
|
47
|
+
export const ProposalPrioritySchema = z.enum(['low', 'medium', 'high', 'critical']);
|
|
48
|
+
export const AuthorSchema = z.object({
|
|
49
|
+
id: z.string().min(1, 'Author ID is required'),
|
|
50
|
+
name: z.string().min(1, 'Author name is required'),
|
|
51
|
+
email: z.string().email().optional(),
|
|
52
|
+
role: z.string().optional(),
|
|
53
|
+
type: z.enum(['human', 'agent']),
|
|
54
|
+
});
|
|
55
|
+
export const ProposalFiltersSchema = z.object({
|
|
56
|
+
status: ProposalStatusSchema.optional(),
|
|
57
|
+
author: z.string().optional(),
|
|
58
|
+
priority: ProposalPrioritySchema.optional(),
|
|
59
|
+
tags: z.array(z.string()).optional(),
|
|
60
|
+
search: z.string().optional(),
|
|
61
|
+
});
|
|
62
|
+
export const PlanStepInputSchema = z.union([
|
|
63
|
+
z.string(),
|
|
64
|
+
z.object({
|
|
65
|
+
id: z.string().optional(),
|
|
66
|
+
description: z.string().min(1, 'Step description is required'),
|
|
67
|
+
status: z.enum(['pending', 'in-progress', 'completed', 'failed']).optional(),
|
|
68
|
+
command: z.string().optional(),
|
|
69
|
+
expectedOutcome: z.string().optional(),
|
|
70
|
+
})
|
|
71
|
+
]);
|
|
72
|
+
export const CreateProposalInputSchema = z.object({
|
|
73
|
+
intent: z.string().min(1, 'Intent is required'),
|
|
74
|
+
content: z.string().min(1, 'Content is required'),
|
|
75
|
+
author: AuthorSchema.optional(),
|
|
76
|
+
planSteps: z.array(PlanStepInputSchema).optional(),
|
|
77
|
+
status: ProposalStatusSchema.optional().default('draft'),
|
|
78
|
+
metadata: z.object({
|
|
79
|
+
tags: z.array(z.string()).optional(),
|
|
80
|
+
priority: ProposalPrioritySchema.optional(),
|
|
81
|
+
reviewers: z.array(z.string()).optional(),
|
|
82
|
+
}).optional(),
|
|
83
|
+
productSpecRef: z.string().optional(),
|
|
84
|
+
});
|
|
85
|
+
export const UpdateProposalInputSchema = z.object({
|
|
86
|
+
intent: z.string().min(1).optional(),
|
|
87
|
+
content: z.string().min(1).optional(),
|
|
88
|
+
status: ProposalStatusSchema.optional(),
|
|
89
|
+
planSteps: z.array(PlanStepInputSchema).optional(),
|
|
90
|
+
metadata: z.object({
|
|
91
|
+
tags: z.array(z.string()).optional(),
|
|
92
|
+
priority: ProposalPrioritySchema.optional(),
|
|
93
|
+
reviewers: z.array(z.string()).optional(),
|
|
94
|
+
}).optional(),
|
|
95
|
+
productSpecRef: z.string().optional(),
|
|
96
|
+
}).refine(data => Object.keys(data).length > 0, {
|
|
97
|
+
message: 'At least one field must be provided for update'
|
|
98
|
+
});
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// Helper Functions
|
|
101
|
+
// ============================================================================
|
|
102
|
+
function normalizePlanSteps(steps) {
|
|
103
|
+
if (!steps || steps.length === 0)
|
|
104
|
+
return [];
|
|
105
|
+
return steps.map((step, index) => {
|
|
106
|
+
if (typeof step === 'string') {
|
|
107
|
+
return {
|
|
108
|
+
id: `step-${index + 1}`,
|
|
109
|
+
description: step,
|
|
110
|
+
status: 'pending',
|
|
111
|
+
command: undefined,
|
|
112
|
+
output: undefined,
|
|
113
|
+
executedAt: undefined,
|
|
114
|
+
expectedOutcome: undefined,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
id: step.id || `step-${index + 1}`,
|
|
119
|
+
description: step.description,
|
|
120
|
+
status: step.status || 'pending',
|
|
121
|
+
command: step.command,
|
|
122
|
+
output: undefined,
|
|
123
|
+
executedAt: undefined,
|
|
124
|
+
expectedOutcome: step.expectedOutcome,
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function createDefaultAuthor() {
|
|
129
|
+
return {
|
|
130
|
+
id: 'mcp-agent',
|
|
131
|
+
name: 'MCP Agent',
|
|
132
|
+
type: 'agent',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function createEmptyProposal(id, now) {
|
|
136
|
+
return {
|
|
137
|
+
id,
|
|
138
|
+
intent: '',
|
|
139
|
+
content: '',
|
|
140
|
+
author: createDefaultAuthor(),
|
|
141
|
+
planSteps: [],
|
|
142
|
+
evidence: [],
|
|
143
|
+
policies: [],
|
|
144
|
+
featureFlags: [],
|
|
145
|
+
experiments: [],
|
|
146
|
+
telemetryContracts: [],
|
|
147
|
+
releasePlan: {
|
|
148
|
+
strategy: 'immediate',
|
|
149
|
+
stages: [],
|
|
150
|
+
rollbackPlan: '',
|
|
151
|
+
},
|
|
152
|
+
status: 'draft',
|
|
153
|
+
metadata: {
|
|
154
|
+
createdAt: now,
|
|
155
|
+
updatedAt: now,
|
|
156
|
+
reviewers: [],
|
|
157
|
+
aiInteractions: [],
|
|
158
|
+
tags: [],
|
|
159
|
+
priority: 'medium',
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// ============================================================================
|
|
164
|
+
// Core Functions
|
|
165
|
+
// ============================================================================
|
|
166
|
+
/**
|
|
167
|
+
* List proposals with optional filtering and search
|
|
168
|
+
*/
|
|
169
|
+
export async function listProposals(filters) {
|
|
170
|
+
const opts = ProposalFiltersSchema.parse(filters || {});
|
|
171
|
+
const storage = getStorage();
|
|
172
|
+
let proposals = await storage.loadAllProposals();
|
|
173
|
+
// Apply filters
|
|
174
|
+
if (opts.status) {
|
|
175
|
+
proposals = proposals.filter(p => p.status === opts.status);
|
|
176
|
+
}
|
|
177
|
+
if (opts.priority) {
|
|
178
|
+
proposals = proposals.filter(p => p.metadata?.priority === opts.priority);
|
|
179
|
+
}
|
|
180
|
+
if (opts.tags && opts.tags.length > 0) {
|
|
181
|
+
proposals = proposals.filter(p => opts.tags.some(tag => p.metadata?.tags?.includes(tag)));
|
|
182
|
+
}
|
|
183
|
+
if (opts.author) {
|
|
184
|
+
const authorLower = opts.author.toLowerCase();
|
|
185
|
+
proposals = proposals.filter(p => p.author.name?.toLowerCase().includes(authorLower) ||
|
|
186
|
+
p.author.id?.toLowerCase().includes(authorLower) ||
|
|
187
|
+
p.author.email?.toLowerCase().includes(authorLower));
|
|
188
|
+
}
|
|
189
|
+
// Apply fuzzy search
|
|
190
|
+
if (opts.search) {
|
|
191
|
+
const fuse = new Fuse(proposals, {
|
|
192
|
+
keys: ['intent', 'content', 'author.name', 'metadata.tags'],
|
|
193
|
+
threshold: 0.4,
|
|
194
|
+
ignoreLocation: true,
|
|
195
|
+
});
|
|
196
|
+
proposals = fuse.search(opts.search).map(r => r.item);
|
|
197
|
+
}
|
|
198
|
+
// Sort by updatedAt descending (most recent first)
|
|
199
|
+
proposals.sort((a, b) => {
|
|
200
|
+
const aTime = a.metadata?.updatedAt ? new Date(a.metadata.updatedAt).getTime() : 0;
|
|
201
|
+
const bTime = b.metadata?.updatedAt ? new Date(b.metadata.updatedAt).getTime() : 0;
|
|
202
|
+
return bTime - aTime;
|
|
203
|
+
});
|
|
204
|
+
return proposals;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get a single proposal by ID
|
|
208
|
+
*/
|
|
209
|
+
export async function getProposal(id) {
|
|
210
|
+
if (!id || typeof id !== 'string') {
|
|
211
|
+
throw new Error('Proposal ID is required');
|
|
212
|
+
}
|
|
213
|
+
const storage = getStorage();
|
|
214
|
+
return storage.loadProposal(id);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Create a new proposal
|
|
218
|
+
*/
|
|
219
|
+
export async function createProposal(input) {
|
|
220
|
+
const validated = CreateProposalInputSchema.parse(input);
|
|
221
|
+
const now = new Date();
|
|
222
|
+
// Add random suffix to prevent ID collisions when creating quickly
|
|
223
|
+
const randomSuffix = Math.random().toString(36).substring(2, 6);
|
|
224
|
+
const id = `cp-${Date.now()}-${randomSuffix}`;
|
|
225
|
+
const proposal = {
|
|
226
|
+
...createEmptyProposal(id, now),
|
|
227
|
+
intent: validated.intent,
|
|
228
|
+
content: validated.content,
|
|
229
|
+
author: validated.author || createDefaultAuthor(),
|
|
230
|
+
planSteps: normalizePlanSteps(validated.planSteps),
|
|
231
|
+
status: validated.status || 'draft',
|
|
232
|
+
productSpecRef: validated.productSpecRef,
|
|
233
|
+
metadata: {
|
|
234
|
+
createdAt: now,
|
|
235
|
+
updatedAt: now,
|
|
236
|
+
reviewers: validated.metadata?.reviewers || [],
|
|
237
|
+
aiInteractions: [],
|
|
238
|
+
tags: validated.metadata?.tags || [],
|
|
239
|
+
priority: validated.metadata?.priority || 'medium',
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
const storage = getStorage();
|
|
243
|
+
await storage.saveProposal(proposal);
|
|
244
|
+
logProposalEvent(ProposalKinds.CREATE, id, {
|
|
245
|
+
intent: validated.intent,
|
|
246
|
+
status: proposal.status,
|
|
247
|
+
authorType: proposal.author.type,
|
|
248
|
+
authorName: proposal.author.name,
|
|
249
|
+
tags: proposal.metadata?.tags,
|
|
250
|
+
priority: proposal.metadata?.priority,
|
|
251
|
+
});
|
|
252
|
+
return proposal;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Update an existing proposal
|
|
256
|
+
*/
|
|
257
|
+
export async function updateProposal(id, updates) {
|
|
258
|
+
if (!id || typeof id !== 'string') {
|
|
259
|
+
throw new Error('Proposal ID is required');
|
|
260
|
+
}
|
|
261
|
+
const validated = UpdateProposalInputSchema.parse(updates);
|
|
262
|
+
const storage = getStorage();
|
|
263
|
+
const existing = await storage.loadProposal(id);
|
|
264
|
+
if (!existing) {
|
|
265
|
+
throw new Error(`Proposal not found: ${id}`);
|
|
266
|
+
}
|
|
267
|
+
// Ensure updatedAt is at least 1ms after createdAt to avoid duplicate detection
|
|
268
|
+
const createdAtTime = existing.metadata.createdAt.getTime();
|
|
269
|
+
const now = Math.max(Date.now(), createdAtTime + 1);
|
|
270
|
+
// Merge updates
|
|
271
|
+
const merged = {
|
|
272
|
+
...existing,
|
|
273
|
+
...(validated.intent !== undefined && { intent: validated.intent }),
|
|
274
|
+
...(validated.content !== undefined && { content: validated.content }),
|
|
275
|
+
...(validated.status !== undefined && { status: validated.status }),
|
|
276
|
+
...(validated.productSpecRef !== undefined && { productSpecRef: validated.productSpecRef }),
|
|
277
|
+
...(validated.planSteps !== undefined && { planSteps: normalizePlanSteps(validated.planSteps) }),
|
|
278
|
+
metadata: {
|
|
279
|
+
...existing.metadata,
|
|
280
|
+
updatedAt: new Date(now),
|
|
281
|
+
...(validated.metadata?.tags !== undefined && { tags: validated.metadata.tags }),
|
|
282
|
+
...(validated.metadata?.priority !== undefined && { priority: validated.metadata.priority }),
|
|
283
|
+
...(validated.metadata?.reviewers !== undefined && { reviewers: validated.metadata.reviewers }),
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
await storage.saveProposal(merged);
|
|
287
|
+
// Log status change specifically if status changed
|
|
288
|
+
if (validated.status !== undefined && validated.status !== existing.status) {
|
|
289
|
+
logProposalEvent(ProposalKinds.STATUS_CHANGE, id, {
|
|
290
|
+
previousStatus: existing.status,
|
|
291
|
+
newStatus: validated.status,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
logProposalEvent(ProposalKinds.UPDATE, id, {
|
|
296
|
+
intent: merged.intent,
|
|
297
|
+
status: merged.status,
|
|
298
|
+
fieldsUpdated: Object.keys(validated),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
return merged;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Delete a proposal by ID
|
|
305
|
+
*/
|
|
306
|
+
export async function deleteProposal(id) {
|
|
307
|
+
if (!id || typeof id !== 'string') {
|
|
308
|
+
throw new Error('Proposal ID is required');
|
|
309
|
+
}
|
|
310
|
+
const storage = getStorage();
|
|
311
|
+
return storage.deleteProposal(id);
|
|
312
|
+
}
|
|
313
|
+
// ============================================================================
|
|
314
|
+
// Plan Step Schema and Function
|
|
315
|
+
// ============================================================================
|
|
316
|
+
export const AddPlanStepInputSchema = z.object({
|
|
317
|
+
description: z.string().min(1, 'Step description is required'),
|
|
318
|
+
status: z.enum(['pending', 'in-progress', 'completed', 'failed']).optional(),
|
|
319
|
+
command: z.string().optional(),
|
|
320
|
+
expectedOutcome: z.string().optional(),
|
|
321
|
+
});
|
|
322
|
+
export const AddCommentInputSchema = z.object({
|
|
323
|
+
author: z.string().min(1, 'Comment author is required'),
|
|
324
|
+
content: z.string().min(1, 'Comment content is required'),
|
|
325
|
+
});
|
|
326
|
+
/**
|
|
327
|
+
* Add a plan step to an existing proposal
|
|
328
|
+
*/
|
|
329
|
+
export async function addPlanStep(proposalId, step) {
|
|
330
|
+
if (!proposalId || typeof proposalId !== 'string') {
|
|
331
|
+
throw new Error('Proposal ID is required');
|
|
332
|
+
}
|
|
333
|
+
const validated = AddPlanStepInputSchema.parse(step);
|
|
334
|
+
const storage = getStorage();
|
|
335
|
+
const proposal = await storage.loadProposal(proposalId);
|
|
336
|
+
if (!proposal) {
|
|
337
|
+
throw new Error(`Proposal not found: ${proposalId}`);
|
|
338
|
+
}
|
|
339
|
+
const existingSteps = proposal.planSteps || [];
|
|
340
|
+
const stepNum = (existingSteps.length + 1).toString().padStart(2, '0');
|
|
341
|
+
const stepId = `step-${stepNum}`;
|
|
342
|
+
const newStep = {
|
|
343
|
+
id: stepId,
|
|
344
|
+
description: validated.description,
|
|
345
|
+
status: validated.status || 'pending',
|
|
346
|
+
command: validated.command,
|
|
347
|
+
expectedOutcome: validated.expectedOutcome,
|
|
348
|
+
output: undefined,
|
|
349
|
+
executedAt: undefined,
|
|
350
|
+
};
|
|
351
|
+
// Ensure updatedAt is at least 1ms after createdAt to avoid duplicate detection
|
|
352
|
+
const createdAtTime = proposal.metadata.createdAt.getTime();
|
|
353
|
+
const now = Math.max(Date.now(), createdAtTime + 1);
|
|
354
|
+
const updatedProposal = {
|
|
355
|
+
...proposal,
|
|
356
|
+
planSteps: [...existingSteps, newStep],
|
|
357
|
+
metadata: {
|
|
358
|
+
...proposal.metadata,
|
|
359
|
+
updatedAt: new Date(now),
|
|
360
|
+
},
|
|
361
|
+
};
|
|
362
|
+
await storage.saveProposal(updatedProposal);
|
|
363
|
+
logProposalEvent(ProposalKinds.UPDATE, proposalId, {
|
|
364
|
+
action: 'add_plan_step',
|
|
365
|
+
stepId,
|
|
366
|
+
stepDescription: validated.description,
|
|
367
|
+
});
|
|
368
|
+
return newStep;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Add a comment to an existing proposal
|
|
372
|
+
*/
|
|
373
|
+
export async function addComment(proposalId, comment) {
|
|
374
|
+
if (!proposalId || typeof proposalId !== 'string') {
|
|
375
|
+
throw new Error('Proposal ID is required');
|
|
376
|
+
}
|
|
377
|
+
const validated = AddCommentInputSchema.parse(comment);
|
|
378
|
+
const storage = getStorage();
|
|
379
|
+
const proposal = await storage.loadProposal(proposalId);
|
|
380
|
+
if (!proposal) {
|
|
381
|
+
throw new Error(`Proposal not found: ${proposalId}`);
|
|
382
|
+
}
|
|
383
|
+
const existingComments = proposal.comments || [];
|
|
384
|
+
const commentNum = (existingComments.length + 1).toString().padStart(2, '0');
|
|
385
|
+
const commentId = `cmt-${commentNum}`;
|
|
386
|
+
const createdAt = new Date().toISOString();
|
|
387
|
+
const newComment = {
|
|
388
|
+
id: commentId,
|
|
389
|
+
author: validated.author,
|
|
390
|
+
content: validated.content,
|
|
391
|
+
createdAt,
|
|
392
|
+
};
|
|
393
|
+
// Ensure updatedAt is at least 1ms after createdAt to avoid duplicate detection
|
|
394
|
+
const createdAtTime = proposal.metadata.createdAt.getTime();
|
|
395
|
+
const now = Math.max(Date.now(), createdAtTime + 1);
|
|
396
|
+
const updatedProposal = {
|
|
397
|
+
...proposal,
|
|
398
|
+
comments: [...existingComments, newComment],
|
|
399
|
+
metadata: {
|
|
400
|
+
...proposal.metadata,
|
|
401
|
+
updatedAt: new Date(now),
|
|
402
|
+
},
|
|
403
|
+
};
|
|
404
|
+
await storage.saveProposal(updatedProposal);
|
|
405
|
+
logProposalEvent(ProposalKinds.UPDATE, proposalId, {
|
|
406
|
+
action: 'add_comment',
|
|
407
|
+
commentId,
|
|
408
|
+
author: validated.author,
|
|
409
|
+
});
|
|
410
|
+
return newComment;
|
|
411
|
+
}
|
|
412
|
+
// ============================================================================
|
|
413
|
+
// Export all schemas for MCP tool generation
|
|
414
|
+
// ============================================================================
|
|
415
|
+
export const proposalSchemas = {
|
|
416
|
+
ProposalStatusSchema,
|
|
417
|
+
ProposalPrioritySchema,
|
|
418
|
+
AuthorSchema,
|
|
419
|
+
ProposalFiltersSchema,
|
|
420
|
+
PlanStepInputSchema,
|
|
421
|
+
CreateProposalInputSchema,
|
|
422
|
+
UpdateProposalInputSchema,
|
|
423
|
+
AddPlanStepInputSchema,
|
|
424
|
+
AddCommentInputSchema,
|
|
425
|
+
};
|
|
426
|
+
// ============================================================================
|
|
427
|
+
// Pre-computed JSON Schemas for MCP tool parameters
|
|
428
|
+
// ============================================================================
|
|
429
|
+
// Helper to extract properties from JSON schema
|
|
430
|
+
// Using 'any' to avoid TypeScript's deep type instantiation issues with zod-to-json-schema
|
|
431
|
+
function extractJsonSchemaProperties(schema) {
|
|
432
|
+
const jsonSchema = zodToJsonSchema(schema, { $refStrategy: 'none' });
|
|
433
|
+
return (jsonSchema.properties || {});
|
|
434
|
+
}
|
|
435
|
+
// Base schema for update (without .refine()) to avoid TypeScript issues
|
|
436
|
+
const UpdateProposalBaseSchema = z.object({
|
|
437
|
+
intent: z.string().min(1).optional(),
|
|
438
|
+
content: z.string().min(1).optional(),
|
|
439
|
+
status: ProposalStatusSchema.optional(),
|
|
440
|
+
planSteps: z.array(PlanStepInputSchema).optional(),
|
|
441
|
+
metadata: z.object({
|
|
442
|
+
tags: z.array(z.string()).optional(),
|
|
443
|
+
priority: ProposalPrioritySchema.optional(),
|
|
444
|
+
reviewers: z.array(z.string()).optional(),
|
|
445
|
+
}).optional(),
|
|
446
|
+
productSpecRef: z.string().optional(),
|
|
447
|
+
});
|
|
448
|
+
export const proposalJsonSchemas = {
|
|
449
|
+
filters: extractJsonSchemaProperties(ProposalFiltersSchema),
|
|
450
|
+
create: extractJsonSchemaProperties(CreateProposalInputSchema),
|
|
451
|
+
update: extractJsonSchemaProperties(UpdateProposalBaseSchema),
|
|
452
|
+
createRequired: ['intent', 'content'],
|
|
453
|
+
};
|
|
454
|
+
//# sourceMappingURL=proposals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposals.js","sourceRoot":"","sources":["../src/proposals.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,45 +13,51 @@ You are primarily focused on **working with knowledge documents** — synthesizi
|
|
|
13
13
|
- Project context — the core definition of what's being built
|
|
14
14
|
- Architecture context — the technical foundation and conventions
|
|
15
15
|
|
|
16
|
-
✅ **WRITE to
|
|
16
|
+
✅ **WRITE to documents and tasks:**
|
|
17
17
|
- Knowledge documents — create new, update existing
|
|
18
|
+
- Tasks — create new, update existing (for coding agents to execute)
|
|
18
19
|
- Project context — define and refine the project definition
|
|
19
20
|
- Architecture context — document the technical architecture
|
|
20
|
-
- **ONE document at a time** — never batch multiple writes
|
|
21
|
+
- **ONE document/task at a time** — never batch multiple writes
|
|
21
22
|
|
|
22
23
|
✅ **Help users:**
|
|
23
24
|
- Understand and synthesize information
|
|
24
25
|
- Draft content for knowledge documents
|
|
25
26
|
- **Plan projects** — strategy, architecture, go-to-market, roadmaps
|
|
26
|
-
- **
|
|
27
|
+
- **Create tasks** with clear, actionable details for coding agents to execute
|
|
27
28
|
|
|
28
29
|
### Creating Tasks (Important!)
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
You can **create tasks directly** using the `change_proposals` tool. Tasks are executed by coding agents like:
|
|
31
32
|
- **Claude Code** (Anthropic)
|
|
32
33
|
- **Cursor** (with Claude/GPT)
|
|
33
34
|
- **GitHub Copilot**
|
|
34
|
-
- **
|
|
35
|
-
- **Google Gemini Code Assist**
|
|
35
|
+
- **Windsurf** (Codeium)
|
|
36
36
|
|
|
37
|
-
**Be proactive about
|
|
37
|
+
**Be proactive about creating tasks.** When discussions lead to actionable work, offer to create a task. Examples:
|
|
38
38
|
|
|
39
|
-
- **Scaffold a new project** — "I'
|
|
40
|
-
- **Update existing code** — "
|
|
41
|
-
- **Go-to-market support** — "I'
|
|
42
|
-
- **Business automation** — "
|
|
39
|
+
- **Scaffold a new project** — "I'll create a task for a coding agent to scaffold this e-commerce site architecture."
|
|
40
|
+
- **Update existing code** — "Let me create a task for refactoring the authentication flow."
|
|
41
|
+
- **Go-to-market support** — "I'll create a task for implementing this landing page with the SEO strategy we discussed."
|
|
42
|
+
- **Business automation** — "Let me create a task for building this customer onboarding flow."
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
**Task creation workflow:**
|
|
45
|
+
1. Discuss and plan with the user
|
|
46
|
+
2. Create the task with clear `intent` and detailed `content`
|
|
47
|
+
3. The task appears in the Tasks view for coding agents to pick up
|
|
48
|
+
4. Update the task status as work progresses
|
|
49
|
+
|
|
50
|
+
**Alternative:** Users can also click the **"Create task from above message"** button at the bottom of your responses to manually create a task from your structured advice.
|
|
45
51
|
|
|
46
|
-
|
|
52
|
+
### What You CANNOT Do Directly
|
|
47
53
|
|
|
48
|
-
**
|
|
54
|
+
❌ **Execute code or make file system changes** — You cannot run commands, edit source files, or deploy code. For implementation work, pass tasks to coding agents.
|
|
49
55
|
|
|
50
56
|
**Your role in the task workflow:**
|
|
51
57
|
1. Help users think through what they want to build
|
|
52
|
-
2.
|
|
53
|
-
3.
|
|
54
|
-
4.
|
|
58
|
+
2. **Create tasks** with clear, actionable details that coding agents can execute
|
|
59
|
+
3. Save important context as knowledge documents for reference
|
|
60
|
+
4. Update task status as work progresses
|
|
55
61
|
|
|
56
62
|
### System Awareness
|
|
57
63
|
|
|
@@ -108,20 +114,25 @@ Every response you give has a **"Create task from above message"** button at the
|
|
|
108
114
|
|
|
109
115
|
---
|
|
110
116
|
|
|
111
|
-
### tasks — READ
|
|
117
|
+
### tasks — READ + WRITE
|
|
112
118
|
|
|
113
|
-
**What it can do:** Search
|
|
119
|
+
**What it can do:** Search, read, create, and update tasks.
|
|
114
120
|
|
|
115
121
|
| Operation | Description | Example |
|
|
116
122
|
|-----------|-------------|---------|
|
|
117
123
|
| `list` | Search tasks | `{ "operation": "list", "filters": { "search": "keyword" } }` |
|
|
118
124
|
| `get` | Read a task | `{ "operation": "get", "id": "cp-123456" }` |
|
|
125
|
+
| `create` | Create new task | `{ "operation": "create", "proposal": { "intent": "...", "content": "..." } }` |
|
|
126
|
+
| `update` | Update existing | `{ "operation": "update", "id": "cp-123456", "updates": { "status": "in-review" } }` |
|
|
119
127
|
|
|
120
|
-
**
|
|
128
|
+
**Creating tasks:**
|
|
129
|
+
- `intent` (required): Brief description of what the task aims to achieve
|
|
130
|
+
- `content` (required): Detailed content/description of the task
|
|
131
|
+
- `status` (optional): One of `draft`, `proposed`, `in-review`, `code-complete`, `approved`, `merged`, `rejected`
|
|
132
|
+
- `metadata.priority` (optional): One of `low`, `medium`, `high`, `critical`
|
|
133
|
+
- `metadata.tags` (optional): Array of string tags
|
|
121
134
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
Then proceed to write out a clear, actionable description of the work.
|
|
135
|
+
**When creating a task**, structure it clearly so coding agents can execute it effectively.
|
|
125
136
|
|
|
126
137
|
---
|
|
127
138
|
|
|
@@ -219,6 +230,73 @@ After discussions that reveal new information about the project or architecture,
|
|
|
219
230
|
|
|
220
231
|
---
|
|
221
232
|
|
|
233
|
+
## Handling "I Want to Build..." Requests
|
|
234
|
+
|
|
235
|
+
When users express intent to build something — websites, apps, features, improvements, automations — follow this workflow to help them go from idea to actionable tasks.
|
|
236
|
+
|
|
237
|
+
### Common Request Patterns
|
|
238
|
+
|
|
239
|
+
| User Says | Your Approach |
|
|
240
|
+
|-----------|---------------|
|
|
241
|
+
| "I want to build a website" | Clarify purpose, audience, features → Create task(s) |
|
|
242
|
+
| "I want to create an app" | Explore platform, core functionality → Create task(s) |
|
|
243
|
+
| "I want to improve my QA" | Understand current state, goals → Research + task(s) |
|
|
244
|
+
| "I want to automate X" | Map the workflow, identify tools → Create task(s) |
|
|
245
|
+
| "I need a dashboard for Y" | Define metrics, data sources → Create task(s) |
|
|
246
|
+
| "Help me refactor Z" | Understand pain points, constraints → Create task(s) |
|
|
247
|
+
|
|
248
|
+
### The Discovery → Research → Task Workflow
|
|
249
|
+
|
|
250
|
+
**1. Discovery (Conversation)**
|
|
251
|
+
- Ask clarifying questions to understand scope, constraints, and goals
|
|
252
|
+
- Don't assume — let the user guide the direction
|
|
253
|
+
- Identify what's in scope vs. out of scope
|
|
254
|
+
|
|
255
|
+
**2. Research (Knowledge Documents)**
|
|
256
|
+
- If the request involves unfamiliar domains, technologies, or best practices:
|
|
257
|
+
- Research and synthesize relevant information
|
|
258
|
+
- Create knowledge documents to capture findings
|
|
259
|
+
- Examples: "React vs Vue comparison", "E-commerce platform options", "QA automation frameworks"
|
|
260
|
+
- Knowledge docs become **persistent context** for future conversations and tasks
|
|
261
|
+
|
|
262
|
+
**3. Planning (Tasks)**
|
|
263
|
+
- Break down the work into clear, actionable tasks
|
|
264
|
+
- Each task should be **self-contained** enough for a coding agent to execute
|
|
265
|
+
- Include acceptance criteria or success measures when helpful
|
|
266
|
+
- Set appropriate priority (`low`, `medium`, `high`, `critical`)
|
|
267
|
+
|
|
268
|
+
### Example Workflow
|
|
269
|
+
|
|
270
|
+
**User:** "I want to build a portfolio website"
|
|
271
|
+
|
|
272
|
+
**You:**
|
|
273
|
+
1. **Clarify:** "Great! A few questions: Is this for personal branding, showcasing projects, or both? Do you have a preferred tech stack? Any specific features like a blog, contact form, or project gallery?"
|
|
274
|
+
|
|
275
|
+
2. **Research (if needed):** Create a knowledge doc on "Modern portfolio website best practices" covering design trends, performance considerations, hosting options.
|
|
276
|
+
|
|
277
|
+
3. **Create tasks:**
|
|
278
|
+
- Task 1: "Scaffold portfolio site with Next.js and Tailwind" (high priority)
|
|
279
|
+
- Task 2: "Build project showcase component with filtering" (medium priority)
|
|
280
|
+
- Task 3: "Add contact form with email integration" (medium priority)
|
|
281
|
+
- Task 4: "Set up deployment to Vercel" (low priority)
|
|
282
|
+
|
|
283
|
+
### Guidelines
|
|
284
|
+
|
|
285
|
+
- **Start with conversation, not tasks** — understand before creating
|
|
286
|
+
- **Create knowledge docs for research** — they persist and help future work
|
|
287
|
+
- **Tasks should be specific** — vague tasks lead to vague results
|
|
288
|
+
- **Offer to break down large requests** — "This is a big project. Want me to create tasks for the first milestone?"
|
|
289
|
+
- **Update project/architecture context** — if the request reveals new project direction
|
|
290
|
+
|
|
291
|
+
### Anti-Patterns to Avoid
|
|
292
|
+
|
|
293
|
+
❌ Creating tasks immediately without understanding requirements
|
|
294
|
+
❌ Creating one giant task for complex projects
|
|
295
|
+
❌ Skipping research when domain knowledge would help
|
|
296
|
+
❌ Forgetting to update project context after major planning
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
222
300
|
## Editing Large Documents (Project & Architecture)
|
|
223
301
|
|
|
224
302
|
Large documents like `project.md` and `architecture.md` require special handling. Choose your approach based on the type of edit:
|
|
@@ -267,6 +345,6 @@ The `update` operation sends the entire document and frequently fails on large f
|
|
|
267
345
|
|
|
268
346
|
- Do NOT include `metadata`, `tags`, `summary` unless specifically asked — the system handles these
|
|
269
347
|
- If a document's content was already provided as context, DO NOT fetch it again
|
|
270
|
-
- If you need to create multiple
|
|
271
|
-
-
|
|
348
|
+
- If you need to create multiple documents or tasks, create ONE at a time, wait for success, then continue
|
|
349
|
+
- **Tasks should have clear, actionable details** that coding agents can execute without additional context
|
|
272
350
|
- For project/architecture documents, plain markdown is fine — YAML frontmatter is optional but helpful for structured data
|