@cleocode/core 2026.4.21 → 2026.4.22

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.
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@ export interface AddTaskResult {
36
36
  task: Task;
37
37
  duplicate?: boolean;
38
38
  dryRun?: boolean;
39
+ /** Non-blocking warnings emitted during validation. @task T089 */
40
+ warnings?: string[];
39
41
  }
40
42
  /**
41
43
  * Build the default verification metadata applied to every new task.
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/tasks/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/tasks/add.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,10 @@ export interface FindResult {
14
14
  priority: string;
15
15
  type?: string;
16
16
  parentId?: string | null;
17
+ /** Dependency IDs — essential for agents to determine task readiness. @task T091 */
18
+ depends?: string[];
19
+ /** Scope size estimate. @task T091 */
20
+ size?: string;
17
21
  score: number;
18
22
  /** Progressive disclosure directives for follow-up operations. */
19
23
  _next?: NextDirectives;
@@ -1 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/tasks/find.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAA0B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqC9D;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,EACzB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,eAAe,CAAC,CAgH1B"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/tasks/find.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAA0B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqC9D;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,EACzB,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,eAAe,CAAC,CAsH1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/core",
3
- "version": "2026.4.21",
3
+ "version": "2026.4.22",
4
4
  "description": "CLEO core business logic kernel — tasks, sessions, memory, orchestration, lifecycle, with bundled SQLite store",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -36,12 +36,12 @@
36
36
  "write-file-atomic": "^7.0.1",
37
37
  "yaml": "^2.8.3",
38
38
  "zod": "^4.3.6",
39
- "@cleocode/adapters": "2026.4.21",
40
- "@cleocode/agents": "2026.4.21",
41
- "@cleocode/caamp": "2026.4.21",
42
- "@cleocode/lafs": "2026.4.21",
43
- "@cleocode/contracts": "2026.4.21",
44
- "@cleocode/skills": "2026.4.21"
39
+ "@cleocode/adapters": "2026.4.22",
40
+ "@cleocode/caamp": "2026.4.22",
41
+ "@cleocode/contracts": "2026.4.22",
42
+ "@cleocode/lafs": "2026.4.22",
43
+ "@cleocode/agents": "2026.4.22",
44
+ "@cleocode/skills": "2026.4.22"
45
45
  },
46
46
  "optionalDependencies": {
47
47
  "tree-sitter-c": "^0.24.1",
package/src/paths.ts CHANGED
@@ -288,9 +288,11 @@ export function getProjectRoot(cwd?: string): string {
288
288
  return scope.worktreeRoot;
289
289
  }
290
290
 
291
- // 1. Honour CLEO_ROOT env var — bypass walk entirely
292
- if (process.env['CLEO_ROOT']) {
293
- return process.env['CLEO_ROOT'];
291
+ // 1. Honour CLEO_ROOT / CLEO_PROJECT_ROOT env var — bypass walk entirely.
292
+ // CLEO_PROJECT_ROOT is the agent-friendly alias (T090).
293
+ const envRoot = process.env['CLEO_ROOT'] ?? process.env['CLEO_PROJECT_ROOT'];
294
+ if (envRoot) {
295
+ return envRoot;
294
296
  }
295
297
 
296
298
  // 2. If CLEO_DIR is an absolute path, derive the project root from it.
package/src/tasks/add.ts CHANGED
@@ -63,6 +63,8 @@ export interface AddTaskResult {
63
63
  task: Task;
64
64
  duplicate?: boolean;
65
65
  dryRun?: boolean;
66
+ /** Non-blocking warnings emitted during validation. @task T089 */
67
+ warnings?: string[];
66
68
  }
67
69
 
68
70
  /**
@@ -275,6 +277,65 @@ export function validatePhaseFormat(phase: string): void {
275
277
  }
276
278
  }
277
279
 
280
+ /**
281
+ * Individual validation issue for all-at-once error reporting.
282
+ * Instead of throwing on the first validation failure, issues are collected
283
+ * and reported together so agents can fix all problems in a single retry.
284
+ * @task T089
285
+ */
286
+ interface ValidationIssue {
287
+ /** The field that failed validation. */
288
+ field: string;
289
+ /** Human-readable error message. */
290
+ message: string;
291
+ /** Suggested fix command or instruction. */
292
+ fix?: string;
293
+ }
294
+
295
+ /**
296
+ * Throw a combined CleoError with all collected validation issues.
297
+ * Includes the original submitted params in the error details so agents
298
+ * can see which flags they provided and preserve them on retry.
299
+ * @task T089
300
+ */
301
+ function throwCombinedValidationError(issues: ValidationIssue[], options: AddTaskOptions): never {
302
+ const summary =
303
+ issues.length === 1
304
+ ? issues[0].message
305
+ : `${issues.length} validation issues found:\n${issues.map((i, n) => ` ${n + 1}. ${i.message}`).join('\n')}`;
306
+
307
+ const fixes = issues.map((i) => i.fix).filter(Boolean) as string[];
308
+ const fixSummary =
309
+ fixes.length === 0
310
+ ? undefined
311
+ : fixes.length === 1
312
+ ? fixes[0]
313
+ : fixes.map((f, n) => `${n + 1}. ${f}`).join('\n');
314
+
315
+ // Include original params so agents can see what was submitted and preserve flags on retry.
316
+ // This prevents the common failure mode where agents drop --parent when retrying after AC errors.
317
+ const submittedParams: Record<string, unknown> = { title: options.title };
318
+ if (options.parentId) submittedParams.parent = options.parentId;
319
+ if (options.type) submittedParams.type = options.type;
320
+ if (options.priority) submittedParams.priority = options.priority;
321
+ if (options.size) submittedParams.size = options.size;
322
+ if (options.description) submittedParams.description = '(provided)';
323
+ if (options.acceptance?.length)
324
+ submittedParams.acceptance = `${options.acceptance.length} criteria`;
325
+ if (options.depends?.length) submittedParams.depends = options.depends;
326
+ if (options.phase) submittedParams.phase = options.phase;
327
+ if (options.labels?.length) submittedParams.labels = options.labels;
328
+
329
+ throw new CleoError(ExitCode.VALIDATION_ERROR, summary, {
330
+ fix: fixSummary,
331
+ details: {
332
+ field: issues.length === 1 ? issues[0].field : 'multiple',
333
+ issues,
334
+ submittedParams,
335
+ },
336
+ });
337
+ }
338
+
278
339
  /**
279
340
  * Validate dependency IDs exist.
280
341
  * @task T4460
@@ -470,27 +531,30 @@ export async function addTask(
470
531
  cwd?: string,
471
532
  accessor?: DataAccessor,
472
533
  ): Promise<AddTaskResult> {
473
- // Validate title
534
+ // Validate title (early-exit — can't proceed without a title)
474
535
  validateTitle(options.title);
475
536
 
537
+ // Skip session enforcement for dry-run — no data is written
538
+ if (!options.dryRun) {
539
+ await requireActiveSession('tasks.add', cwd);
540
+ }
541
+
542
+ // === Collect all validation issues before throwing (T089) ===
543
+ // This ensures agents see ALL problems in one response and only need one retry,
544
+ // preventing the common failure mode where agents drop flags like --parent.
545
+ const issues: ValidationIssue[] = [];
546
+ const warnings: string[] = [];
547
+
476
548
  // Anti-hallucination: title and description must be different (T5698)
477
549
  if (
478
550
  options.description &&
479
551
  options.title.trim().toLowerCase() === options.description.trim().toLowerCase()
480
552
  ) {
481
- throw new CleoError(
482
- ExitCode.VALIDATION_ERROR,
483
- 'Title and description must be different (anti-hallucination rule)',
484
- {
485
- fix: 'Provide --desc with a description different from the title',
486
- details: { field: 'description' },
487
- },
488
- );
489
- }
490
-
491
- // Skip session enforcement for dry-run — no data is written
492
- if (!options.dryRun) {
493
- await requireActiveSession('tasks.add', cwd);
553
+ issues.push({
554
+ field: 'description',
555
+ message: 'Title and description must be different (anti-hallucination rule)',
556
+ fix: 'Provide --desc with a description different from the title',
557
+ });
494
558
  }
495
559
 
496
560
  // Orphan prevention (T101): non-epic tasks must have a parent in strict mode.
@@ -500,18 +564,16 @@ export async function addTask(
500
564
  if (!options.dryRun && !parentId && options.type !== 'epic') {
501
565
  const lifecycleMode = await getLifecycleMode(cwd);
502
566
  if (lifecycleMode === 'strict') {
503
- throw new CleoError(
504
- ExitCode.VALIDATION_ERROR,
505
- 'Tasks must have a parent (epic or task) in strict mode. Use --parent <epicId>, --type epic for a root-level epic, or set lifecycle.mode to "advisory".',
506
- {
507
- fix: 'cleo add "Task title" --parent T### --acceptance "AC1|AC2|AC3"',
508
- alternatives: [
509
- {
510
- action: 'Create as epic',
511
- command: 'cleo add "Epic title" --type epic --priority high',
512
- },
513
- ],
514
- },
567
+ issues.push({
568
+ field: 'parentId',
569
+ message:
570
+ 'Tasks must have a parent (epic or task) in strict mode. Use --parent <epicId>, --type epic for a root-level epic, or set lifecycle.mode to "advisory".',
571
+ fix: 'cleo add "Task title" --parent T### --acceptance "AC1|AC2|AC3"',
572
+ });
573
+ } else {
574
+ // Advisory mode: warn about parentless task creation (T089)
575
+ warnings.push(
576
+ 'Task created without a parent. Use --parent <epicId> to assign to an epic hierarchy.',
515
577
  );
516
578
  }
517
579
  }
@@ -520,17 +582,44 @@ export async function addTask(
520
582
  const dataAccessor =
521
583
  accessor ?? (await (await import('../store/data-accessor.js')).getAccessor(cwd));
522
584
 
523
- // Resolve defaults
585
+ // Resolve defaults — wrap normalizePriority to collect instead of throwing
524
586
  const status = options.status ?? 'pending';
525
- const priority = normalizePriority(options.priority ?? 'medium');
587
+ let priority: TaskPriority;
588
+ try {
589
+ priority = normalizePriority(options.priority ?? 'medium');
590
+ } catch (err) {
591
+ if (err instanceof CleoError) {
592
+ issues.push({ field: 'priority', message: err.message, fix: err.fix });
593
+ }
594
+ priority = 'medium'; // fallback so subsequent AC checks use a valid priority
595
+ }
526
596
  const size = options.size ?? 'medium';
527
597
  let taskType = options.type;
528
598
 
529
- // Validate inputs
530
- validateStatus(status);
531
- // priority is already normalized above
532
- validateSize(size);
533
- if (options.labels?.length) validateLabels(options.labels);
599
+ // Validate inputs — collect instead of throwing (T089)
600
+ try {
601
+ validateStatus(status);
602
+ } catch (err) {
603
+ if (err instanceof CleoError) {
604
+ issues.push({ field: 'status', message: err.message, fix: err.fix });
605
+ }
606
+ }
607
+ try {
608
+ validateSize(size);
609
+ } catch (err) {
610
+ if (err instanceof CleoError) {
611
+ issues.push({ field: 'size', message: err.message, fix: err.fix });
612
+ }
613
+ }
614
+ if (options.labels?.length) {
615
+ try {
616
+ validateLabels(options.labels);
617
+ } catch (err) {
618
+ if (err instanceof CleoError) {
619
+ issues.push({ field: 'labels', message: err.message, fix: err.fix });
620
+ }
621
+ }
622
+ }
534
623
 
535
624
  // Skip enforcement checks for dry-run — no data is written
536
625
  if (!options.dryRun) {
@@ -541,20 +630,33 @@ export async function addTask(
541
630
  priority: priority,
542
631
  });
543
632
  if (!acValidation.valid) {
544
- throw new CleoError(acValidation.exitCode ?? ExitCode.VALIDATION_ERROR, acValidation.error!, {
633
+ issues.push({
634
+ field: 'acceptance',
635
+ message: acValidation.error!,
545
636
  fix: acValidation.fix,
546
637
  });
547
638
  }
548
639
 
549
640
  // Epic-specific creation enforcement (T062): min 5 AC + non-empty description.
550
641
  if (options.type === 'epic') {
551
- await validateEpicCreation(
552
- { acceptance: options.acceptance, description: options.description },
553
- cwd,
554
- );
642
+ try {
643
+ await validateEpicCreation(
644
+ { acceptance: options.acceptance, description: options.description },
645
+ cwd,
646
+ );
647
+ } catch (err) {
648
+ if (err instanceof CleoError) {
649
+ issues.push({ field: 'epic', message: err.message, fix: err.fix });
650
+ }
651
+ }
555
652
  }
556
653
  }
557
654
 
655
+ // === Throw combined error if any pre-creation issues found (T089) ===
656
+ if (issues.length > 0) {
657
+ throwCombinedValidationError(issues, options);
658
+ }
659
+
558
660
  // Validate dependency IDs exist using targeted queries
559
661
  if (options.depends?.length) {
560
662
  for (const depId of options.depends) {
@@ -936,5 +1038,5 @@ export async function addTask(
936
1038
  });
937
1039
  });
938
1040
 
939
- return { task };
1041
+ return { task, ...(warnings.length > 0 && { warnings }) };
940
1042
  }
package/src/tasks/find.ts CHANGED
@@ -20,6 +20,10 @@ export interface FindResult {
20
20
  priority: string;
21
21
  type?: string;
22
22
  parentId?: string | null;
23
+ /** Dependency IDs — essential for agents to determine task readiness. @task T091 */
24
+ depends?: string[];
25
+ /** Scope size estimate. @task T091 */
26
+ size?: string;
23
27
  score: number;
24
28
  /** Progressive disclosure directives for follow-up operations. */
25
29
  _next?: NextDirectives;
@@ -99,7 +103,7 @@ export async function findTasks(
99
103
  cwd?: string,
100
104
  accessor?: DataAccessor,
101
105
  ): Promise<FindTasksResult> {
102
- if (!options.query && !options.id) {
106
+ if (options.query == null && !options.id) {
103
107
  throw new CleoError(ExitCode.INVALID_INPUT, 'Search query or --id is required', {
104
108
  fix: 'cleo find "<query>"',
105
109
  details: { field: 'query' },
@@ -146,6 +150,8 @@ export async function findTasks(
146
150
  priority: t.priority,
147
151
  type: t.type,
148
152
  parentId: t.parentId,
153
+ depends: t.depends ?? [],
154
+ size: t.size ?? undefined,
149
155
  score:
150
156
  t.id.toUpperCase() === idQuery ? 100 : t.id.toUpperCase().startsWith(idQuery) ? 80 : 50,
151
157
  }));
@@ -162,6 +168,8 @@ export async function findTasks(
162
168
  priority: t.priority,
163
169
  type: t.type,
164
170
  parentId: t.parentId,
171
+ depends: t.depends ?? [],
172
+ size: t.size ?? undefined,
165
173
  score: 100,
166
174
  }));
167
175
  } else {
@@ -183,6 +191,8 @@ export async function findTasks(
183
191
  priority: t.priority,
184
192
  type: t.type,
185
193
  parentId: t.parentId,
194
+ depends: t.depends ?? [],
195
+ size: t.size ?? undefined,
186
196
  score: Math.round(score),
187
197
  });
188
198
  }