@lovelybunch/core 1.0.75-alpha.1 → 1.0.75-alpha.10

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 (43) hide show
  1. package/dist/agent-instructions.d.ts +17 -0
  2. package/dist/agent-instructions.d.ts.map +1 -0
  3. package/dist/agent-instructions.js +160 -0
  4. package/dist/agent-instructions.js.map +1 -0
  5. package/dist/context.d.ts +8 -8
  6. package/dist/index.d.ts +2 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +2 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/knowledge.d.ts +40 -40
  11. package/dist/knowledge.js +1 -1
  12. package/dist/knowledge.js.map +1 -1
  13. package/dist/logging/index.d.ts +5 -5
  14. package/dist/logging/index.d.ts.map +1 -1
  15. package/dist/logging/index.js +5 -5
  16. package/dist/logging/index.js.map +1 -1
  17. package/dist/logging/kinds.d.ts +24 -24
  18. package/dist/logging/kinds.d.ts.map +1 -1
  19. package/dist/logging/kinds.js +24 -24
  20. package/dist/logging/kinds.js.map +1 -1
  21. package/dist/markdown-storage.d.ts +12 -11
  22. package/dist/markdown-storage.d.ts.map +1 -1
  23. package/dist/markdown-storage.js +213 -143
  24. package/dist/markdown-storage.js.map +1 -1
  25. package/dist/proposals.d.ts +136 -136
  26. package/dist/skill-instructions.d.ts +19 -0
  27. package/dist/skill-instructions.d.ts.map +1 -0
  28. package/dist/skill-instructions.js +165 -0
  29. package/dist/skill-instructions.js.map +1 -0
  30. package/dist/storage.d.ts +21 -24
  31. package/dist/storage.d.ts.map +1 -1
  32. package/dist/storage.js +155 -181
  33. package/dist/storage.js.map +1 -1
  34. package/dist/system-prompts/coconut-assistant.md +40 -6
  35. package/dist/system-prompts/schema/agent.schema.md +1 -1
  36. package/dist/system-prompts/schema/knowledge.schema.md +2 -2
  37. package/dist/system-prompts/schema/skill.schema.md +73 -0
  38. package/dist/system-prompts/schema/{proposal.schema.md → task.schema.md} +2 -2
  39. package/dist/tasks.d.ts +764 -0
  40. package/dist/tasks.d.ts.map +1 -0
  41. package/dist/tasks.js +483 -0
  42. package/dist/tasks.js.map +1 -0
  43. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
package/dist/tasks.js ADDED
@@ -0,0 +1,483 @@
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, TaskKinds } 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 logTaskEvent(kind, taskId, payload) {
23
+ try {
24
+ const logger = getLogger();
25
+ logger.log({
26
+ kind,
27
+ actor: 'cli:nut', // CLI operations
28
+ subject: `task:${taskId}`,
29
+ tags: ['task'],
30
+ payload: {
31
+ taskId,
32
+ ...payload,
33
+ },
34
+ });
35
+ }
36
+ catch (err) {
37
+ // Don't fail the operation if logging fails
38
+ console.error('Failed to log task event:', err);
39
+ }
40
+ }
41
+ // ============================================================================
42
+ // Zod Schemas
43
+ // ============================================================================
44
+ export const TaskStatusSchema = z.enum([
45
+ 'draft', 'backlog', 'ready', 'queued', 'active', 'blocked', 'review', 'done', 'canceled', 'duplicate'
46
+ ]);
47
+ export const TaskPrioritySchema = 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
+ // Allow empty string, undefined, or valid email
52
+ email: z.union([z.string().email(), z.literal('')]).optional(),
53
+ role: z.string().optional(),
54
+ type: z.enum(['human', 'agent']),
55
+ });
56
+ export const TaskFiltersSchema = z.object({
57
+ status: TaskStatusSchema.optional(),
58
+ author: z.string().optional(),
59
+ priority: TaskPrioritySchema.optional(),
60
+ tags: z.array(z.string()).optional(),
61
+ search: z.string().optional(),
62
+ });
63
+ export const PlanStepInputSchema = z.union([
64
+ z.string(),
65
+ z.object({
66
+ id: z.string().optional(),
67
+ description: z.string().min(1, 'Step description is required'),
68
+ status: z.enum(['pending', 'in-progress', 'completed', 'failed']).optional(),
69
+ command: z.string().optional(),
70
+ expectedOutcome: z.string().optional(),
71
+ })
72
+ ]);
73
+ export const CreateTaskInputSchema = z.object({
74
+ title: z.string().min(1, 'Title is required').optional(),
75
+ /** @deprecated Use `title` instead. Will be removed in a future version. */
76
+ intent: z.string().min(1).optional(),
77
+ content: z.string().min(1, 'Content is required'),
78
+ author: AuthorSchema.optional(),
79
+ planSteps: z.array(PlanStepInputSchema).optional(),
80
+ status: TaskStatusSchema.optional().default('draft'),
81
+ metadata: z.object({
82
+ tags: z.array(z.string()).optional(),
83
+ priority: TaskPrioritySchema.optional(),
84
+ reviewers: z.array(z.string()).optional(),
85
+ }).optional(),
86
+ productSpecRef: z.string().optional(),
87
+ }).refine(data => data.title || data.intent, {
88
+ message: 'Title is required (or intent for backward compatibility)'
89
+ });
90
+ export const UpdateTaskInputSchema = z.object({
91
+ title: z.string().min(1).optional(),
92
+ /** @deprecated Use `title` instead. Will be removed in a future version. */
93
+ intent: z.string().min(1).optional(),
94
+ content: z.string().min(1).optional(),
95
+ status: TaskStatusSchema.optional(),
96
+ planSteps: z.array(PlanStepInputSchema).optional(),
97
+ metadata: z.object({
98
+ tags: z.array(z.string()).optional(),
99
+ priority: TaskPrioritySchema.optional(),
100
+ reviewers: z.array(z.string()).optional(),
101
+ }).optional(),
102
+ productSpecRef: z.string().optional(),
103
+ }).refine(data => Object.keys(data).length > 0, {
104
+ message: 'At least one field must be provided for update'
105
+ });
106
+ // ============================================================================
107
+ // Helper Functions
108
+ // ============================================================================
109
+ function normalizePlanSteps(steps) {
110
+ if (!steps || steps.length === 0)
111
+ return [];
112
+ return steps.map((step, index) => {
113
+ if (typeof step === 'string') {
114
+ return {
115
+ id: `step-${index + 1}`,
116
+ description: step,
117
+ status: 'pending',
118
+ command: undefined,
119
+ output: undefined,
120
+ executedAt: undefined,
121
+ expectedOutcome: undefined,
122
+ };
123
+ }
124
+ return {
125
+ id: step.id || `step-${index + 1}`,
126
+ description: step.description,
127
+ status: step.status || 'pending',
128
+ command: step.command,
129
+ output: undefined,
130
+ executedAt: undefined,
131
+ expectedOutcome: step.expectedOutcome,
132
+ };
133
+ });
134
+ }
135
+ function createDefaultAuthor() {
136
+ return {
137
+ id: 'mcp-agent',
138
+ name: 'MCP Agent',
139
+ type: 'agent',
140
+ };
141
+ }
142
+ function createEmptyTask(id, now) {
143
+ return {
144
+ id,
145
+ title: '',
146
+ content: '',
147
+ author: createDefaultAuthor(),
148
+ planSteps: [],
149
+ evidence: [],
150
+ policies: [],
151
+ featureFlags: [],
152
+ experiments: [],
153
+ telemetryContracts: [],
154
+ releasePlan: {
155
+ strategy: 'immediate',
156
+ stages: [],
157
+ rollbackPlan: '',
158
+ },
159
+ status: 'draft',
160
+ metadata: {
161
+ createdAt: now,
162
+ updatedAt: now,
163
+ reviewers: [],
164
+ aiInteractions: [],
165
+ tags: [],
166
+ priority: 'medium',
167
+ },
168
+ };
169
+ }
170
+ // ============================================================================
171
+ // Core Functions
172
+ // ============================================================================
173
+ /**
174
+ * List tasks with optional filtering and search
175
+ */
176
+ export async function listTasks(filters) {
177
+ const opts = TaskFiltersSchema.parse(filters || {});
178
+ const storage = getStorage();
179
+ let tasks = await storage.loadAllTasks();
180
+ // Apply filters
181
+ if (opts.status) {
182
+ tasks = tasks.filter(p => p.status === opts.status);
183
+ }
184
+ if (opts.priority) {
185
+ tasks = tasks.filter(p => p.metadata?.priority === opts.priority);
186
+ }
187
+ if (opts.tags && opts.tags.length > 0) {
188
+ tasks = tasks.filter(p => opts.tags.some(tag => p.metadata?.tags?.includes(tag)));
189
+ }
190
+ if (opts.author) {
191
+ const authorLower = opts.author.toLowerCase();
192
+ tasks = tasks.filter(p => p.author.name?.toLowerCase().includes(authorLower) ||
193
+ p.author.id?.toLowerCase().includes(authorLower) ||
194
+ p.author.email?.toLowerCase().includes(authorLower));
195
+ }
196
+ // Apply fuzzy search
197
+ if (opts.search) {
198
+ const fuse = new Fuse(tasks, {
199
+ keys: ['title', 'intent', 'content', 'author.name', 'metadata.tags'],
200
+ threshold: 0.4,
201
+ ignoreLocation: true,
202
+ });
203
+ tasks = fuse.search(opts.search).map(r => r.item);
204
+ }
205
+ // Sort by updatedAt descending (most recent first)
206
+ tasks.sort((a, b) => {
207
+ const aTime = a.metadata?.updatedAt ? new Date(a.metadata.updatedAt).getTime() : 0;
208
+ const bTime = b.metadata?.updatedAt ? new Date(b.metadata.updatedAt).getTime() : 0;
209
+ return bTime - aTime;
210
+ });
211
+ return tasks;
212
+ }
213
+ /**
214
+ * Get a single task by ID
215
+ */
216
+ export async function getTask(id) {
217
+ if (!id || typeof id !== 'string') {
218
+ throw new Error('Task ID is required');
219
+ }
220
+ const storage = getStorage();
221
+ return storage.loadTask(id);
222
+ }
223
+ /**
224
+ * Create a new task
225
+ */
226
+ export async function createTask(input) {
227
+ const validated = CreateTaskInputSchema.parse(input);
228
+ const now = new Date();
229
+ // Add random suffix to prevent ID collisions when creating quickly
230
+ const randomSuffix = Math.random().toString(36).substring(2, 6);
231
+ const id = `cp-${Date.now()}-${randomSuffix}`;
232
+ // Use title, falling back to deprecated intent for backward compatibility
233
+ const titleValue = validated.title || validated.intent || '';
234
+ const task = {
235
+ ...createEmptyTask(id, now),
236
+ title: titleValue,
237
+ content: validated.content,
238
+ author: validated.author || createDefaultAuthor(),
239
+ planSteps: normalizePlanSteps(validated.planSteps),
240
+ status: validated.status || 'draft',
241
+ productSpecRef: validated.productSpecRef,
242
+ metadata: {
243
+ createdAt: now,
244
+ updatedAt: now,
245
+ reviewers: validated.metadata?.reviewers || [],
246
+ aiInteractions: [],
247
+ tags: validated.metadata?.tags || [],
248
+ priority: validated.metadata?.priority || 'medium',
249
+ },
250
+ };
251
+ const storage = getStorage();
252
+ await storage.saveTask(task);
253
+ logTaskEvent(TaskKinds.CREATE, id, {
254
+ title: titleValue,
255
+ status: task.status,
256
+ authorType: task.author.type,
257
+ authorName: task.author.name,
258
+ tags: task.metadata?.tags,
259
+ priority: task.metadata?.priority,
260
+ });
261
+ return task;
262
+ }
263
+ /**
264
+ * Update an existing task
265
+ */
266
+ export async function updateTask(id, updates) {
267
+ if (!id || typeof id !== 'string') {
268
+ throw new Error('Task ID is required');
269
+ }
270
+ const validated = UpdateTaskInputSchema.parse(updates);
271
+ const storage = getStorage();
272
+ const existing = await storage.loadTask(id);
273
+ if (!existing) {
274
+ throw new Error(`Task not found: ${id}`);
275
+ }
276
+ // Ensure updatedAt is at least 1ms after createdAt to avoid duplicate detection
277
+ const createdAtTime = existing.metadata.createdAt.getTime();
278
+ const now = Math.max(Date.now(), createdAtTime + 1);
279
+ // Use title, falling back to deprecated intent for backward compatibility
280
+ const titleUpdate = validated.title || validated.intent;
281
+ // Merge updates
282
+ const merged = {
283
+ ...existing,
284
+ ...(titleUpdate !== undefined && { title: titleUpdate }),
285
+ ...(validated.content !== undefined && { content: validated.content }),
286
+ ...(validated.status !== undefined && { status: validated.status }),
287
+ ...(validated.productSpecRef !== undefined && { productSpecRef: validated.productSpecRef }),
288
+ ...(validated.planSteps !== undefined && { planSteps: normalizePlanSteps(validated.planSteps) }),
289
+ metadata: {
290
+ ...existing.metadata,
291
+ updatedAt: new Date(now),
292
+ ...(validated.metadata?.tags !== undefined && { tags: validated.metadata.tags }),
293
+ ...(validated.metadata?.priority !== undefined && { priority: validated.metadata.priority }),
294
+ ...(validated.metadata?.reviewers !== undefined && { reviewers: validated.metadata.reviewers }),
295
+ },
296
+ };
297
+ await storage.saveTask(merged);
298
+ // Log status change specifically if status changed
299
+ if (validated.status !== undefined && validated.status !== existing.status) {
300
+ logTaskEvent(TaskKinds.STATUS_CHANGE, id, {
301
+ previousStatus: existing.status,
302
+ newStatus: validated.status,
303
+ });
304
+ }
305
+ else {
306
+ logTaskEvent(TaskKinds.UPDATE, id, {
307
+ title: merged.title,
308
+ status: merged.status,
309
+ fieldsUpdated: Object.keys(validated),
310
+ });
311
+ }
312
+ return merged;
313
+ }
314
+ /**
315
+ * Delete a task by ID
316
+ */
317
+ export async function deleteTask(id) {
318
+ if (!id || typeof id !== 'string') {
319
+ throw new Error('Task ID is required');
320
+ }
321
+ const storage = getStorage();
322
+ return storage.deleteTask(id);
323
+ }
324
+ // ============================================================================
325
+ // Plan Step Schema and Function
326
+ // ============================================================================
327
+ export const AddPlanStepInputSchema = z.object({
328
+ description: z.string().min(1, 'Step description is required'),
329
+ status: z.enum(['pending', 'in-progress', 'completed', 'failed']).optional(),
330
+ command: z.string().optional(),
331
+ expectedOutcome: z.string().optional(),
332
+ });
333
+ export const AddCommentInputSchema = z.object({
334
+ author: z.string().min(1, 'Comment author is required'),
335
+ content: z.string().min(1, 'Comment content is required'),
336
+ });
337
+ /**
338
+ * Add a plan step to an existing task
339
+ */
340
+ export async function addPlanStep(taskId, step) {
341
+ if (!taskId || typeof taskId !== 'string') {
342
+ throw new Error('Task ID is required');
343
+ }
344
+ const validated = AddPlanStepInputSchema.parse(step);
345
+ const storage = getStorage();
346
+ const task = await storage.loadTask(taskId);
347
+ if (!task) {
348
+ throw new Error(`Task not found: ${taskId}`);
349
+ }
350
+ const existingSteps = task.planSteps || [];
351
+ const stepNum = (existingSteps.length + 1).toString().padStart(2, '0');
352
+ const stepId = `step-${stepNum}`;
353
+ const newStep = {
354
+ id: stepId,
355
+ description: validated.description,
356
+ status: validated.status || 'pending',
357
+ command: validated.command,
358
+ expectedOutcome: validated.expectedOutcome,
359
+ output: undefined,
360
+ executedAt: undefined,
361
+ };
362
+ // Ensure updatedAt is at least 1ms after createdAt to avoid duplicate detection
363
+ const createdAtTime = task.metadata.createdAt.getTime();
364
+ const now = Math.max(Date.now(), createdAtTime + 1);
365
+ const updatedTask = {
366
+ ...task,
367
+ planSteps: [...existingSteps, newStep],
368
+ metadata: {
369
+ ...task.metadata,
370
+ updatedAt: new Date(now),
371
+ },
372
+ };
373
+ await storage.saveTask(updatedTask);
374
+ logTaskEvent(TaskKinds.UPDATE, taskId, {
375
+ action: 'add_plan_step',
376
+ stepId,
377
+ stepDescription: validated.description,
378
+ });
379
+ return newStep;
380
+ }
381
+ /**
382
+ * Add a comment to an existing task
383
+ */
384
+ export async function addComment(taskId, comment) {
385
+ if (!taskId || typeof taskId !== 'string') {
386
+ throw new Error('Task ID is required');
387
+ }
388
+ const validated = AddCommentInputSchema.parse(comment);
389
+ const storage = getStorage();
390
+ const task = await storage.loadTask(taskId);
391
+ if (!task) {
392
+ throw new Error(`Task not found: ${taskId}`);
393
+ }
394
+ const existingComments = task.comments || [];
395
+ const commentNum = (existingComments.length + 1).toString().padStart(2, '0');
396
+ const commentId = `cmt-${commentNum}`;
397
+ const createdAt = new Date().toISOString();
398
+ const newComment = {
399
+ id: commentId,
400
+ author: validated.author,
401
+ content: validated.content,
402
+ createdAt,
403
+ };
404
+ // Ensure updatedAt is at least 1ms after createdAt to avoid duplicate detection
405
+ const createdAtTime = task.metadata.createdAt.getTime();
406
+ const now = Math.max(Date.now(), createdAtTime + 1);
407
+ const updatedTask = {
408
+ ...task,
409
+ comments: [...existingComments, newComment],
410
+ metadata: {
411
+ ...task.metadata,
412
+ updatedAt: new Date(now),
413
+ },
414
+ };
415
+ await storage.saveTask(updatedTask);
416
+ logTaskEvent(TaskKinds.UPDATE, taskId, {
417
+ action: 'add_comment',
418
+ commentId,
419
+ author: validated.author,
420
+ });
421
+ return newComment;
422
+ }
423
+ // ============================================================================
424
+ // Export all schemas for MCP tool generation
425
+ // ============================================================================
426
+ export const taskSchemas = {
427
+ TaskStatusSchema,
428
+ TaskPrioritySchema,
429
+ AuthorSchema,
430
+ TaskFiltersSchema,
431
+ PlanStepInputSchema,
432
+ CreateTaskInputSchema,
433
+ UpdateTaskInputSchema,
434
+ AddPlanStepInputSchema,
435
+ AddCommentInputSchema,
436
+ };
437
+ // ============================================================================
438
+ // Pre-computed JSON Schemas for MCP tool parameters
439
+ // ============================================================================
440
+ // Helper to extract properties from JSON schema
441
+ // Using 'any' to avoid TypeScript's deep type instantiation issues with zod-to-json-schema
442
+ function extractJsonSchemaProperties(schema) {
443
+ const jsonSchema = zodToJsonSchema(schema, { $refStrategy: 'none' });
444
+ return (jsonSchema.properties || {});
445
+ }
446
+ // Base schema for update (without .refine()) to avoid TypeScript issues
447
+ const UpdateTaskBaseSchema = z.object({
448
+ title: z.string().min(1).optional(),
449
+ /** @deprecated Use `title` instead. Will be removed in a future version. */
450
+ intent: z.string().min(1).optional(),
451
+ content: z.string().min(1).optional(),
452
+ status: TaskStatusSchema.optional(),
453
+ planSteps: z.array(PlanStepInputSchema).optional(),
454
+ metadata: z.object({
455
+ tags: z.array(z.string()).optional(),
456
+ priority: TaskPrioritySchema.optional(),
457
+ reviewers: z.array(z.string()).optional(),
458
+ }).optional(),
459
+ productSpecRef: z.string().optional(),
460
+ });
461
+ // Base schema for create (without .refine()) to avoid TypeScript issues
462
+ const CreateTaskBaseSchema = z.object({
463
+ title: z.string().min(1, 'Title is required').optional(),
464
+ /** @deprecated Use `title` instead. Will be removed in a future version. */
465
+ intent: z.string().min(1).optional(),
466
+ content: z.string().min(1, 'Content is required'),
467
+ author: AuthorSchema.optional(),
468
+ planSteps: z.array(PlanStepInputSchema).optional(),
469
+ status: TaskStatusSchema.optional().default('draft'),
470
+ metadata: z.object({
471
+ tags: z.array(z.string()).optional(),
472
+ priority: TaskPrioritySchema.optional(),
473
+ reviewers: z.array(z.string()).optional(),
474
+ }).optional(),
475
+ productSpecRef: z.string().optional(),
476
+ });
477
+ export const taskJsonSchemas = {
478
+ filters: extractJsonSchemaProperties(TaskFiltersSchema),
479
+ create: extractJsonSchemaProperties(CreateTaskBaseSchema),
480
+ update: extractJsonSchemaProperties(UpdateTaskBaseSchema),
481
+ createRequired: ['title', 'content'],
482
+ };
483
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovelybunch/core",
3
- "version": "1.0.75-alpha.1",
3
+ "version": "1.0.75-alpha.10",
4
4
  "description": "Core Coconut functionality",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -38,7 +38,7 @@
38
38
  "test:ui": "vitest --ui"
39
39
  },
40
40
  "dependencies": {
41
- "@lovelybunch/types": "^1.0.75-alpha.1",
41
+ "@lovelybunch/types": "^1.0.75-alpha.10",
42
42
  "fuse.js": "^7.0.0",
43
43
  "gray-matter": "^4.0.3",
44
44
  "nanoid": "^5.0.6",