@cleocode/core 2026.3.58 → 2026.3.60

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 (153) hide show
  1. package/dist/agents/agent-registry.d.ts +206 -0
  2. package/dist/agents/agent-registry.d.ts.map +1 -0
  3. package/dist/agents/agent-registry.js +288 -0
  4. package/dist/agents/agent-registry.js.map +1 -0
  5. package/dist/agents/agent-schema.js +5 -0
  6. package/dist/agents/agent-schema.js.map +1 -1
  7. package/dist/agents/execution-learning.js +474 -0
  8. package/dist/agents/execution-learning.js.map +1 -0
  9. package/dist/agents/health-monitor.d.ts +161 -0
  10. package/dist/agents/health-monitor.d.ts.map +1 -0
  11. package/dist/agents/health-monitor.js +217 -0
  12. package/dist/agents/health-monitor.js.map +1 -0
  13. package/dist/agents/index.d.ts +3 -1
  14. package/dist/agents/index.d.ts.map +1 -1
  15. package/dist/agents/index.js +9 -1
  16. package/dist/agents/index.js.map +1 -1
  17. package/dist/agents/retry.d.ts +57 -4
  18. package/dist/agents/retry.d.ts.map +1 -1
  19. package/dist/agents/retry.js +57 -4
  20. package/dist/agents/retry.js.map +1 -1
  21. package/dist/backfill/index.d.ts +27 -0
  22. package/dist/backfill/index.d.ts.map +1 -1
  23. package/dist/backfill/index.js +229 -0
  24. package/dist/backfill/index.js.map +1 -0
  25. package/dist/bootstrap.d.ts +2 -1
  26. package/dist/bootstrap.d.ts.map +1 -1
  27. package/dist/bootstrap.js +135 -28
  28. package/dist/bootstrap.js.map +1 -1
  29. package/dist/cleo.d.ts +40 -0
  30. package/dist/cleo.d.ts.map +1 -1
  31. package/dist/config.js +83 -0
  32. package/dist/config.js.map +1 -1
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1036 -536
  36. package/dist/index.js.map +4 -4
  37. package/dist/intelligence/adaptive-validation.js +497 -0
  38. package/dist/intelligence/adaptive-validation.js.map +1 -0
  39. package/dist/intelligence/impact.d.ts +34 -1
  40. package/dist/intelligence/impact.d.ts.map +1 -1
  41. package/dist/intelligence/impact.js +176 -0
  42. package/dist/intelligence/impact.js.map +1 -1
  43. package/dist/intelligence/index.d.ts +2 -2
  44. package/dist/intelligence/index.d.ts.map +1 -1
  45. package/dist/intelligence/index.js +6 -1
  46. package/dist/intelligence/index.js.map +1 -1
  47. package/dist/intelligence/types.d.ts +60 -0
  48. package/dist/intelligence/types.d.ts.map +1 -1
  49. package/dist/internal.d.ts +5 -4
  50. package/dist/internal.d.ts.map +1 -1
  51. package/dist/internal.js +11 -2
  52. package/dist/internal.js.map +1 -1
  53. package/dist/lib/index.d.ts +10 -0
  54. package/dist/lib/index.d.ts.map +1 -0
  55. package/dist/lib/index.js +10 -0
  56. package/dist/lib/index.js.map +1 -0
  57. package/dist/lib/retry.d.ts +128 -0
  58. package/dist/lib/retry.d.ts.map +1 -0
  59. package/dist/lib/retry.js +152 -0
  60. package/dist/lib/retry.js.map +1 -0
  61. package/dist/nexus/sharing/index.d.ts +48 -2
  62. package/dist/nexus/sharing/index.d.ts.map +1 -1
  63. package/dist/nexus/sharing/index.js +110 -1
  64. package/dist/nexus/sharing/index.js.map +1 -1
  65. package/dist/scaffold.d.ts.map +1 -1
  66. package/dist/scaffold.js +22 -2
  67. package/dist/scaffold.js.map +1 -1
  68. package/dist/sessions/session-enforcement.js +4 -0
  69. package/dist/sessions/session-enforcement.js.map +1 -1
  70. package/dist/stats/index.js +2 -0
  71. package/dist/stats/index.js.map +1 -1
  72. package/dist/stats/workflow-telemetry.d.ts +15 -0
  73. package/dist/stats/workflow-telemetry.d.ts.map +1 -1
  74. package/dist/stats/workflow-telemetry.js +400 -0
  75. package/dist/stats/workflow-telemetry.js.map +1 -0
  76. package/dist/store/brain-schema.js +4 -1
  77. package/dist/store/brain-schema.js.map +1 -1
  78. package/dist/store/converters.js +2 -0
  79. package/dist/store/converters.js.map +1 -1
  80. package/dist/store/cross-db-cleanup.d.ts +35 -0
  81. package/dist/store/cross-db-cleanup.d.ts.map +1 -1
  82. package/dist/store/cross-db-cleanup.js +169 -0
  83. package/dist/store/cross-db-cleanup.js.map +1 -0
  84. package/dist/store/db-helpers.js +2 -0
  85. package/dist/store/db-helpers.js.map +1 -1
  86. package/dist/store/migration-sqlite.js +5 -0
  87. package/dist/store/migration-sqlite.js.map +1 -1
  88. package/dist/store/sqlite-data-accessor.js +20 -28
  89. package/dist/store/sqlite-data-accessor.js.map +1 -1
  90. package/dist/store/sqlite.js +13 -2
  91. package/dist/store/sqlite.js.map +1 -1
  92. package/dist/store/task-store.js +4 -0
  93. package/dist/store/task-store.js.map +1 -1
  94. package/dist/store/tasks-schema.js +50 -20
  95. package/dist/store/tasks-schema.js.map +1 -1
  96. package/dist/tasks/add.js +87 -3
  97. package/dist/tasks/add.js.map +1 -1
  98. package/dist/tasks/complete.d.ts.map +1 -1
  99. package/dist/tasks/complete.js +15 -4
  100. package/dist/tasks/complete.js.map +1 -1
  101. package/dist/tasks/enforcement.d.ts.map +1 -1
  102. package/dist/tasks/enforcement.js +8 -1
  103. package/dist/tasks/enforcement.js.map +1 -1
  104. package/dist/tasks/epic-enforcement.d.ts +61 -0
  105. package/dist/tasks/epic-enforcement.d.ts.map +1 -1
  106. package/dist/tasks/epic-enforcement.js +294 -0
  107. package/dist/tasks/epic-enforcement.js.map +1 -0
  108. package/dist/tasks/index.js +1 -1
  109. package/dist/tasks/index.js.map +1 -1
  110. package/dist/tasks/pipeline-stage.d.ts +70 -1
  111. package/dist/tasks/pipeline-stage.d.ts.map +1 -1
  112. package/dist/tasks/pipeline-stage.js +248 -0
  113. package/dist/tasks/pipeline-stage.js.map +1 -0
  114. package/dist/tasks/update.js +28 -0
  115. package/dist/tasks/update.js.map +1 -1
  116. package/package.json +5 -5
  117. package/schemas/config.schema.json +37 -1547
  118. package/src/__tests__/sharing.test.ts +24 -0
  119. package/src/agents/__tests__/agent-registry.test.ts +351 -0
  120. package/src/agents/__tests__/health-monitor.test.ts +332 -0
  121. package/src/agents/agent-registry.ts +394 -0
  122. package/src/agents/health-monitor.ts +279 -0
  123. package/src/agents/index.ts +24 -1
  124. package/src/agents/retry.ts +57 -4
  125. package/src/backfill/index.ts +27 -0
  126. package/src/bootstrap.ts +171 -30
  127. package/src/cleo.ts +103 -2
  128. package/src/config.ts +3 -3
  129. package/src/index.ts +1 -0
  130. package/src/intelligence/__tests__/impact.test.ts +165 -1
  131. package/src/intelligence/impact.ts +203 -0
  132. package/src/intelligence/index.ts +3 -0
  133. package/src/intelligence/types.ts +76 -0
  134. package/src/internal.ts +20 -0
  135. package/src/lib/__tests__/retry.test.ts +321 -0
  136. package/src/lib/index.ts +16 -0
  137. package/src/lib/retry.ts +224 -0
  138. package/src/nexus/sharing/index.ts +142 -2
  139. package/src/scaffold.ts +24 -2
  140. package/src/stats/workflow-telemetry.ts +15 -0
  141. package/src/store/__tests__/session-store.test.ts +43 -7
  142. package/src/store/__tests__/task-store.test.ts +1 -1
  143. package/src/store/__tests__/test-db-helper.ts +7 -3
  144. package/src/store/cross-db-cleanup.ts +35 -0
  145. package/src/tasks/__tests__/epic-enforcement.test.ts +9 -4
  146. package/src/tasks/__tests__/minimal-test.test.ts +2 -2
  147. package/src/tasks/__tests__/update.test.ts +25 -25
  148. package/src/tasks/complete.ts +11 -6
  149. package/src/tasks/enforcement.ts +6 -3
  150. package/src/tasks/epic-enforcement.ts +61 -0
  151. package/src/tasks/pipeline-stage.ts +70 -1
  152. package/templates/config.template.json +5 -116
  153. package/templates/global-config.template.json +2 -44
@@ -67,6 +67,18 @@ export interface EpicEnforcementResult {
67
67
  * Read `lifecycle.mode` from config. Falls back to "strict" when unset
68
68
  * (matches the DEFAULTS in config.ts).
69
69
  *
70
+ * @remarks
71
+ * In VITEST environments, returns "off" to avoid blocking tests.
72
+ *
73
+ * @param cwd - Working directory for config resolution
74
+ * @returns The resolved lifecycle mode
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * const mode = await getLifecycleMode();
79
+ * // => 'strict' | 'advisory' | 'off'
80
+ * ```
81
+ *
70
82
  * @task T062
71
83
  */
72
84
  export async function getLifecycleMode(cwd?: string): Promise<LifecycleMode> {
@@ -91,12 +103,23 @@ export async function getLifecycleMode(cwd?: string): Promise<LifecycleMode> {
91
103
  *
92
104
  * In **off** mode this function is a no-op.
93
105
  *
106
+ * @remarks
107
+ * The description field serves as a proxy for completion criteria — epics
108
+ * without a description have no definition of "done" and should be blocked.
109
+ *
110
+ * @param options - Epic creation parameters
94
111
  * @param options.acceptance - Acceptance criteria array supplied by the caller.
95
112
  * @param options.description - Task description (used as completion criteria proxy).
96
113
  * @param cwd - Working directory for config resolution.
97
114
  * @returns EpicEnforcementResult — `valid: false` only in strict mode on error.
98
115
  * @throws CleoError(VALIDATION_ERROR) in strict mode when constraints are violated.
99
116
  *
117
+ * @example
118
+ * ```ts
119
+ * await validateEpicCreation({ acceptance: ['AC1','AC2','AC3','AC4','AC5'] });
120
+ * // => { valid: true }
121
+ * ```
122
+ *
100
123
  * @task T062
101
124
  */
102
125
  export async function validateEpicCreation(
@@ -151,6 +174,11 @@ export async function validateEpicCreation(
151
174
  * The check walks the task's ancestor chain to find the nearest epic ancestor.
152
175
  * If none exists, the check is skipped.
153
176
  *
177
+ * @remarks
178
+ * Skips the check if the epic has no pipeline stage set, or if the child
179
+ * stage is not a recognised value (those are handled by separate validation).
180
+ *
181
+ * @param options - Ceiling check parameters
154
182
  * @param options.childStage - The proposed pipeline stage for the child.
155
183
  * @param options.epicId - ID of the epic ancestor to check against.
156
184
  * @param accessor - DataAccessor for task lookups.
@@ -158,6 +186,14 @@ export async function validateEpicCreation(
158
186
  * @returns EpicEnforcementResult
159
187
  * @throws CleoError(VALIDATION_ERROR) in strict mode when the child stage exceeds the epic.
160
188
  *
189
+ * @example
190
+ * ```ts
191
+ * await validateChildStageCeiling(
192
+ * { childStage: 'testing', epicId: 'T001' },
193
+ * accessor,
194
+ * );
195
+ * ```
196
+ *
161
197
  * @task T062
162
198
  */
163
199
  export async function validateChildStageCeiling(
@@ -204,10 +240,20 @@ export async function validateChildStageCeiling(
204
240
  * Walks the ancestor chain (root-first) and returns the first task whose
205
241
  * type is "epic", or null if no epic ancestor exists.
206
242
  *
243
+ * @remarks
244
+ * Scans from closest ancestor to root so the *nearest* epic is returned,
245
+ * not the highest-level one.
246
+ *
207
247
  * @param taskId - ID of the task whose ancestors to inspect.
208
248
  * @param accessor - DataAccessor for the ancestor chain query.
209
249
  * @returns The nearest epic ancestor, or null.
210
250
  *
251
+ * @example
252
+ * ```ts
253
+ * const epic = await findEpicAncestor('T042', accessor);
254
+ * if (epic) console.log(epic.id); // e.g. 'T029'
255
+ * ```
256
+ *
211
257
  * @task T062
212
258
  */
213
259
  export async function findEpicAncestor(
@@ -240,6 +286,13 @@ export async function findEpicAncestor(
240
286
  * in. Moving the epic forward while children are unfinished at the current
241
287
  * stage violates the pipeline discipline.
242
288
  *
289
+ * @remarks
290
+ * Only fires on genuine forward advancement — same-stage updates and
291
+ * backward moves are handled by {@link validatePipelineTransition}.
292
+ * Children with status "done", "cancelled", or "archived" are excluded
293
+ * from the blocker check.
294
+ *
295
+ * @param options - Advancement check parameters
243
296
  * @param options.epicId - ID of the epic being advanced.
244
297
  * @param options.currentStage - Epic's current pipeline stage (before the update).
245
298
  * @param options.newStage - Proposed new pipeline stage.
@@ -248,6 +301,14 @@ export async function findEpicAncestor(
248
301
  * @returns EpicEnforcementResult
249
302
  * @throws CleoError(VALIDATION_ERROR) in strict mode when incomplete children exist.
250
303
  *
304
+ * @example
305
+ * ```ts
306
+ * await validateEpicStageAdvancement(
307
+ * { epicId: 'T029', currentStage: 'research', newStage: 'consensus' },
308
+ * accessor,
309
+ * );
310
+ * ```
311
+ *
251
312
  * @task T062
252
313
  */
253
314
  export async function validateEpicStageAdvancement(
@@ -81,9 +81,19 @@ const STAGE_ORDER: Record<TaskPipelineStage, number> = {
81
81
  /**
82
82
  * Check whether a string is a valid pipeline stage name.
83
83
  *
84
+ * @remarks
85
+ * Uses a type-narrowing signature so callers can safely use the value
86
+ * as {@link TaskPipelineStage} after a truthy check.
87
+ *
84
88
  * @param stage - Raw string to test
85
89
  * @returns True if it is a valid stage name
86
90
  *
91
+ * @example
92
+ * ```ts
93
+ * isValidPipelineStage('research'); // => true
94
+ * isValidPipelineStage('not_a_stage'); // => false
95
+ * ```
96
+ *
87
97
  * @task T060
88
98
  */
89
99
  export function isValidPipelineStage(stage: string): stage is TaskPipelineStage {
@@ -93,9 +103,20 @@ export function isValidPipelineStage(stage: string): stage is TaskPipelineStage
93
103
  /**
94
104
  * Validate a pipeline stage name and throw a CleoError on failure.
95
105
  *
106
+ * @remarks
107
+ * Uses an assertion signature — after a successful call the compiler
108
+ * narrows `stage` to {@link TaskPipelineStage}.
109
+ *
96
110
  * @param stage - Stage name to validate
111
+ * @returns void (assertion function — narrows type on success)
97
112
  * @throws CleoError(VALIDATION_ERROR) if invalid
98
113
  *
114
+ * @example
115
+ * ```ts
116
+ * validatePipelineStage('implementation'); // passes
117
+ * validatePipelineStage('invalid'); // throws CleoError
118
+ * ```
119
+ *
99
120
  * @task T060
100
121
  */
101
122
  export function validatePipelineStage(stage: string): asserts stage is TaskPipelineStage {
@@ -121,11 +142,26 @@ export function validatePipelineStage(stage: string): asserts stage is TaskPipel
121
142
  * 3. If the task type is 'epic', default to 'research'.
122
143
  * 4. Otherwise default to 'implementation'.
123
144
  *
145
+ * @remarks
146
+ * Priority order ensures explicit caller intent wins, then parent
147
+ * inheritance, then type-based defaults. This avoids surprising
148
+ * overrides when parent stages differ from the default.
149
+ *
150
+ * @param options - Resolution inputs
124
151
  * @param options.explicitStage - Stage explicitly provided by the caller
125
152
  * @param options.taskType - Type of the task being created
126
153
  * @param options.parentTask - Parent task (if any), for inheritance
127
154
  * @returns The resolved pipeline stage name
128
155
  *
156
+ * @example
157
+ * ```ts
158
+ * resolveDefaultPipelineStage({ taskType: 'epic' });
159
+ * // => 'research'
160
+ *
161
+ * resolveDefaultPipelineStage({ taskType: 'task' });
162
+ * // => 'implementation'
163
+ * ```
164
+ *
129
165
  * @task T060
130
166
  */
131
167
  export function resolveDefaultPipelineStage(options: {
@@ -161,8 +197,19 @@ export function resolveDefaultPipelineStage(options: {
161
197
  /**
162
198
  * Get the numeric order of a pipeline stage (1-based).
163
199
  *
200
+ * @remarks
201
+ * Returns -1 for unrecognised stage names so callers can distinguish
202
+ * "unknown" from a valid low-order stage.
203
+ *
164
204
  * @param stage - Stage name (must be valid)
165
- * @returns Numeric order, or -1 if not found
205
+ * @returns Numeric order (1–10), or -1 if not found
206
+ *
207
+ * @example
208
+ * ```ts
209
+ * getPipelineStageOrder('research'); // => 1
210
+ * getPipelineStageOrder('implementation'); // => 6
211
+ * getPipelineStageOrder('unknown'); // => -1
212
+ * ```
166
213
  *
167
214
  * @task T060
168
215
  */
@@ -176,10 +223,20 @@ export function getPipelineStageOrder(stage: string): number {
176
223
  * "Forward" means the new stage's order is greater than or equal to the current
177
224
  * stage's order (same stage is a no-op and is considered valid).
178
225
  *
226
+ * @remarks
227
+ * Unknown stages are treated as valid to avoid blocking tasks with
228
+ * legacy or custom stage names that predate the standard set.
229
+ *
179
230
  * @param currentStage - The task's current pipeline stage
180
231
  * @param newStage - The requested new pipeline stage
181
232
  * @returns True if the transition is allowed (forward or same)
182
233
  *
234
+ * @example
235
+ * ```ts
236
+ * isPipelineTransitionForward('research', 'implementation'); // => true
237
+ * isPipelineTransitionForward('testing', 'research'); // => false
238
+ * ```
239
+ *
183
240
  * @task T060
184
241
  */
185
242
  export function isPipelineTransitionForward(currentStage: string, newStage: string): boolean {
@@ -192,10 +249,22 @@ export function isPipelineTransitionForward(currentStage: string, newStage: stri
192
249
  /**
193
250
  * Validate a pipeline stage transition and throw if it would move backward.
194
251
  *
252
+ * @remarks
253
+ * Validates the new stage name first via {@link validatePipelineStage},
254
+ * then checks directionality. A null/undefined current stage accepts any
255
+ * valid new stage (first assignment).
256
+ *
195
257
  * @param currentStage - The task's current pipeline stage (may be null/undefined)
196
258
  * @param newStage - The new stage being requested
197
259
  * @throws CleoError(VALIDATION_ERROR) if the transition is backward
198
260
  *
261
+ * @example
262
+ * ```ts
263
+ * validatePipelineTransition(null, 'research'); // passes (first assignment)
264
+ * validatePipelineTransition('research', 'implementation'); // passes (forward)
265
+ * validatePipelineTransition('testing', 'research'); // throws (backward)
266
+ * ```
267
+ *
199
268
  * @task T060
200
269
  */
201
270
  export function validatePipelineTransition(
@@ -16,13 +16,6 @@
16
16
  "autoArchiveOnComplete": false
17
17
  },
18
18
 
19
- "logging": {
20
- "enabled": true,
21
- "retentionDays": 30,
22
- "level": "standard",
23
- "logSessionEvents": true
24
- },
25
-
26
19
  "enforcement": {
27
20
  "acceptance": {
28
21
  "mode": "block",
@@ -57,41 +50,12 @@
57
50
  "maxSiblings": 0
58
51
  },
59
52
 
60
- "validation": {
61
- "strictMode": false,
62
- "checksumEnabled": true,
63
- "enforceAcceptance": true,
64
- "requireDescription": false,
65
- "maxActiveTasks": 1,
66
- "validateDependencies": true,
67
- "detectCircularDeps": true
68
- },
69
-
70
53
  "defaults": {
71
- "priority": "medium",
72
- "phase": "core",
73
- "labels": []
54
+ "priority": "medium"
74
55
  },
75
56
 
76
57
  "session": {
77
- "requireSession": true,
78
- "requireSessionNote": true,
79
- "requireNotesOnComplete": true,
80
- "warnOnNoFocus": true,
81
- "allowNestedSessions": true,
82
- "allowParallelAgents": true,
83
- "autoStartSession": true,
84
- "autoDiscoveryOnStart": true,
85
- "sessionTimeoutHours": 72
86
- },
87
-
88
- "multiSession": {
89
- "enabled": true,
90
- "maxConcurrentSessions": 5,
91
- "maxActiveTasksPerScope": 1,
92
- "scopeValidation": "strict",
93
- "allowNestedScopes": true,
94
- "allowScopeOverlap": false
58
+ "enforcement": "strict"
95
59
  },
96
60
 
97
61
  "release": {
@@ -104,43 +68,12 @@
104
68
  }
105
69
  },
106
70
 
107
- "display": {
108
- "showArchiveCount": true,
109
- "showLogSummary": true,
110
- "warnStaleDays": 30
111
- },
112
-
113
71
  "output": {
114
72
  "defaultFormat": "text",
115
73
  "showColor": true,
116
74
  "showUnicode": true,
117
75
  "showProgressBars": true,
118
- "csvDelimiter": ",",
119
- "dateFormat": "iso8601",
120
- "showCompactTitles": false,
121
- "maxTitleLength": 80
122
- },
123
-
124
- "cli": {
125
- "aliases": {
126
- "ls": "list",
127
- "done": "complete",
128
- "new": "add",
129
- "edit": "update",
130
- "rm": "archive",
131
- "check": "validate"
132
- },
133
- "plugins": {
134
- "enabled": true,
135
- "directories": ["~/.cleo/plugins", "./.cleo/plugins"],
136
- "autoDiscover": true
137
- },
138
- "debug": {
139
- "enabled": true,
140
- "validateMappings": true,
141
- "checksumVerify": true,
142
- "showTimings": false
143
- }
76
+ "dateFormat": "iso8601"
144
77
  },
145
78
 
146
79
  "backup": {
@@ -153,17 +86,8 @@
153
86
  "safetyRetentionDays": 7
154
87
  },
155
88
 
156
- "cancellation": {
157
- "cascadeConfirmThreshold": 10,
158
- "requireReason": true,
159
- "daysUntilArchive": 3,
160
- "allowCascade": true,
161
- "defaultChildStrategy": "block"
162
- },
163
-
164
89
  "contextAlerts": {
165
90
  "enabled": true,
166
- "minThreshold": "warning",
167
91
  "triggerCommands": ["complete", "start", "stop", "add", "session"],
168
92
  "suppressDuration": 0
169
93
  },
@@ -172,50 +96,15 @@
172
96
  "contextThresholds": {
173
97
  "warning": 70,
174
98
  "critical": 80
175
- },
176
- "autoStopOnCritical": true,
177
- "hitlSummaryOnPause": true
99
+ }
178
100
  },
179
101
 
180
102
  "agentOutputs": {
181
103
  "directory": ".cleo/agent-outputs",
182
- "manifestFile": "MANIFEST.jsonl",
183
- "archiveDir": "archive",
184
- "archiveDays": 30
104
+ "manifestFile": "MANIFEST.jsonl"
185
105
  },
186
106
 
187
107
  "retention": {
188
- "maxArchivedSessions": 100,
189
- "autoArchiveEndedAfterDays": 30,
190
- "autoDeleteArchivedAfterDays": 90,
191
- "contextStateRetentionDays": 7,
192
- "cleanupOnSessionEnd": true,
193
- "dryRunByDefault": true,
194
- "maxSessionsInMemory": 100,
195
108
  "autoEndActiveAfterDays": 7
196
- },
197
-
198
- "project": {
199
- "status": {
200
- "health": "unknown",
201
- "lastCheck": null,
202
- "schemaVersions": {
203
- "todo": "{{SCHEMA_VERSION_TODO}}",
204
- "config": "{{SCHEMA_VERSION_CONFIG}}",
205
- "archive": "{{SCHEMA_VERSION_ARCHIVE}}",
206
- "log": "{{SCHEMA_VERSION_LOG}}"
207
- },
208
- "validation": {
209
- "lastValidated": null,
210
- "passed": false,
211
- "errors": [],
212
- "warnings": []
213
- },
214
- "injection": {
215
- "CLAUDE.md": "not_found",
216
- "AGENTS.md": "not_found",
217
- "GEMINI.md": "not_found"
218
- }
219
- }
220
109
  }
221
110
  }
@@ -6,40 +6,7 @@
6
6
  "showColor": true,
7
7
  "showUnicode": true,
8
8
  "showProgressBars": true,
9
- "dateFormat": "iso8601",
10
- "showCompactTitles": false,
11
- "maxTitleLength": 80
12
- },
13
- "display": {
14
- "showArchiveCount": true,
15
- "showLogSummary": true,
16
- "warnStaleDays": 30
17
- },
18
- "cli": {
19
- "aliases": {
20
- "ls": "list",
21
- "done": "complete",
22
- "new": "add",
23
- "edit": "update",
24
- "rm": "archive",
25
- "check": "validate",
26
- "tags": "labels",
27
- "overview": "dash"
28
- },
29
- "plugins": {
30
- "enabled": true,
31
- "directories": [
32
- "~/.cleo/plugins",
33
- "./.cleo/plugins"
34
- ],
35
- "autoDiscover": true
36
- },
37
- "debug": {
38
- "enabled": false,
39
- "validateMappings": true,
40
- "checksumVerify": true,
41
- "showTimings": false
42
- }
9
+ "dateFormat": "iso8601"
43
10
  },
44
11
  "enforcement": {
45
12
  "acceptance": {
@@ -68,15 +35,6 @@
68
35
  "mode": "strict"
69
36
  },
70
37
  "defaults": {
71
- "priority": "medium",
72
- "labels": []
73
- },
74
- "multiSession": {
75
- "enabled": true,
76
- "maxConcurrentSessions": 5,
77
- "maxActiveTasksPerScope": 1,
78
- "scopeValidation": "strict",
79
- "allowNestedScopes": true,
80
- "allowScopeOverlap": false
38
+ "priority": "medium"
81
39
  }
82
40
  }