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