@cleocode/mcp-server 0.90.3 → 0.94.1

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 (112) hide show
  1. package/README.md +2 -2
  2. package/dist/domains/index.d.ts +1 -0
  3. package/dist/domains/index.d.ts.map +1 -1
  4. package/dist/domains/index.js +1 -0
  5. package/dist/domains/index.js.map +1 -1
  6. package/dist/domains/issues.d.ts +44 -0
  7. package/dist/domains/issues.d.ts.map +1 -0
  8. package/dist/domains/issues.js +182 -0
  9. package/dist/domains/issues.js.map +1 -0
  10. package/dist/domains/lifecycle.d.ts.map +1 -1
  11. package/dist/domains/lifecycle.js +8 -0
  12. package/dist/domains/lifecycle.js.map +1 -1
  13. package/dist/domains/orchestrate.js +6 -6
  14. package/dist/domains/orchestrate.js.map +1 -1
  15. package/dist/domains/release.js +4 -4
  16. package/dist/domains/release.js.map +1 -1
  17. package/dist/domains/research.d.ts.map +1 -1
  18. package/dist/domains/research.js +8 -0
  19. package/dist/domains/research.js.map +1 -1
  20. package/dist/domains/session.d.ts +20 -1
  21. package/dist/domains/session.d.ts.map +1 -1
  22. package/dist/domains/session.js +133 -7
  23. package/dist/domains/session.js.map +1 -1
  24. package/dist/domains/system.d.ts +20 -1
  25. package/dist/domains/system.d.ts.map +1 -1
  26. package/dist/domains/system.js +211 -7
  27. package/dist/domains/system.js.map +1 -1
  28. package/dist/domains/tasks.d.ts +20 -1
  29. package/dist/domains/tasks.d.ts.map +1 -1
  30. package/dist/domains/tasks.js +165 -1
  31. package/dist/domains/tasks.js.map +1 -1
  32. package/dist/domains/validate.d.ts.map +1 -1
  33. package/dist/domains/validate.js +8 -0
  34. package/dist/domains/validate.js.map +1 -1
  35. package/dist/engine/caamp-adapter.d.ts +93 -0
  36. package/dist/engine/caamp-adapter.d.ts.map +1 -0
  37. package/dist/engine/caamp-adapter.js +358 -0
  38. package/dist/engine/caamp-adapter.js.map +1 -0
  39. package/dist/engine/caamp-verify.d.ts +2 -0
  40. package/dist/engine/caamp-verify.d.ts.map +1 -0
  41. package/dist/engine/caamp-verify.js +15 -0
  42. package/dist/engine/caamp-verify.js.map +1 -0
  43. package/dist/engine/capability-matrix.d.ts +67 -0
  44. package/dist/engine/capability-matrix.d.ts.map +1 -0
  45. package/dist/engine/capability-matrix.js +227 -0
  46. package/dist/engine/capability-matrix.js.map +1 -0
  47. package/dist/engine/config-engine.d.ts +29 -0
  48. package/dist/engine/config-engine.d.ts.map +1 -0
  49. package/dist/engine/config-engine.js +110 -0
  50. package/dist/engine/config-engine.js.map +1 -0
  51. package/dist/engine/id-generator.d.ts +34 -0
  52. package/dist/engine/id-generator.d.ts.map +1 -0
  53. package/dist/engine/id-generator.js +91 -0
  54. package/dist/engine/id-generator.js.map +1 -0
  55. package/dist/engine/index.d.ts +18 -0
  56. package/dist/engine/index.d.ts.map +1 -0
  57. package/dist/engine/index.js +28 -0
  58. package/dist/engine/index.js.map +1 -0
  59. package/dist/engine/init-engine.d.ts +52 -0
  60. package/dist/engine/init-engine.d.ts.map +1 -0
  61. package/dist/engine/init-engine.js +222 -0
  62. package/dist/engine/init-engine.js.map +1 -0
  63. package/dist/engine/schema-validator.d.ts +47 -0
  64. package/dist/engine/schema-validator.d.ts.map +1 -0
  65. package/dist/engine/schema-validator.js +219 -0
  66. package/dist/engine/schema-validator.js.map +1 -0
  67. package/dist/engine/session-engine.d.ts +139 -0
  68. package/dist/engine/session-engine.d.ts.map +1 -0
  69. package/dist/engine/session-engine.js +401 -0
  70. package/dist/engine/session-engine.js.map +1 -0
  71. package/dist/engine/store.d.ts +67 -0
  72. package/dist/engine/store.d.ts.map +1 -0
  73. package/dist/engine/store.js +284 -0
  74. package/dist/engine/store.js.map +1 -0
  75. package/dist/engine/task-engine.d.ts +139 -0
  76. package/dist/engine/task-engine.d.ts.map +1 -0
  77. package/dist/engine/task-engine.js +481 -0
  78. package/dist/engine/task-engine.js.map +1 -0
  79. package/dist/engine/validation-rules.d.ts +78 -0
  80. package/dist/engine/validation-rules.d.ts.map +1 -0
  81. package/dist/engine/validation-rules.js +218 -0
  82. package/dist/engine/validation-rules.js.map +1 -0
  83. package/dist/gateways/mutate.d.ts +1 -1
  84. package/dist/gateways/mutate.d.ts.map +1 -1
  85. package/dist/gateways/mutate.js +6 -1
  86. package/dist/gateways/mutate.js.map +1 -1
  87. package/dist/gateways/query.d.ts +1 -1
  88. package/dist/gateways/query.d.ts.map +1 -1
  89. package/dist/gateways/query.js +4 -1
  90. package/dist/gateways/query.js.map +1 -1
  91. package/dist/index.js +31 -8
  92. package/dist/index.js.map +1 -1
  93. package/dist/lib/executor.d.ts +12 -0
  94. package/dist/lib/executor.d.ts.map +1 -1
  95. package/dist/lib/executor.js +16 -0
  96. package/dist/lib/executor.js.map +1 -1
  97. package/dist/lib/mode-detector.d.ts +71 -0
  98. package/dist/lib/mode-detector.d.ts.map +1 -0
  99. package/dist/lib/mode-detector.js +184 -0
  100. package/dist/lib/mode-detector.js.map +1 -0
  101. package/dist/lib/router.d.ts +2 -1
  102. package/dist/lib/router.d.ts.map +1 -1
  103. package/dist/lib/router.js +7 -5
  104. package/dist/lib/router.js.map +1 -1
  105. package/dist/types/index.d.ts +1 -1
  106. package/dist/types/index.js +1 -1
  107. package/package.json +8 -3
  108. package/schemas/requests/issues/create.schema.json +37 -0
  109. package/schemas/requests/issues/diagnostics.schema.json +8 -0
  110. package/schemas/responses/issues/create.schema.json +49 -0
  111. package/schemas/responses/issues/diagnostics.schema.json +45 -0
  112. package/server.json +2 -2
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Capability Matrix
3
+ *
4
+ * Defines which operations can run natively in TypeScript vs requiring
5
+ * the CLEO CLI (bash). Used by dual-mode routing to determine execution path.
6
+ *
7
+ * Each operation is tagged as:
8
+ * - native: Runs in TypeScript, works cross-platform (no bash needed)
9
+ * - cli: Requires CLEO CLI subprocess (Unix-only)
10
+ * - hybrid: Can run either way (prefers CLI when available)
11
+ */
12
+ /**
13
+ * The capability matrix - source of truth for operation routing.
14
+ *
15
+ * native: TypeScript engine handles directly (cross-platform)
16
+ * cli: Requires CLEO CLI (bash, Unix-only)
17
+ * hybrid: Can use either path (prefers CLI when available for richer output)
18
+ */
19
+ const CAPABILITY_MATRIX = [
20
+ // === Tasks Domain ===
21
+ // Native query operations (core CRUD reads)
22
+ { domain: 'tasks', operation: 'show', gateway: 'query', mode: 'native' },
23
+ { domain: 'tasks', operation: 'get', gateway: 'query', mode: 'native' },
24
+ { domain: 'tasks', operation: 'list', gateway: 'query', mode: 'native' },
25
+ { domain: 'tasks', operation: 'find', gateway: 'query', mode: 'native' },
26
+ { domain: 'tasks', operation: 'exists', gateway: 'query', mode: 'native' },
27
+ // CLI-only query operations (complex analysis)
28
+ { domain: 'tasks', operation: 'next', gateway: 'query', mode: 'cli' },
29
+ { domain: 'tasks', operation: 'depends', gateway: 'query', mode: 'cli' },
30
+ { domain: 'tasks', operation: 'deps', gateway: 'query', mode: 'cli' },
31
+ { domain: 'tasks', operation: 'stats', gateway: 'query', mode: 'cli' },
32
+ { domain: 'tasks', operation: 'export', gateway: 'query', mode: 'cli' },
33
+ { domain: 'tasks', operation: 'history', gateway: 'query', mode: 'cli' },
34
+ { domain: 'tasks', operation: 'lint', gateway: 'query', mode: 'cli' },
35
+ { domain: 'tasks', operation: 'batch-validate', gateway: 'query', mode: 'cli' },
36
+ { domain: 'tasks', operation: 'manifest', gateway: 'query', mode: 'native' },
37
+ { domain: 'tasks', operation: 'tree', gateway: 'query', mode: 'cli' },
38
+ { domain: 'tasks', operation: 'blockers', gateway: 'query', mode: 'cli' },
39
+ { domain: 'tasks', operation: 'analyze', gateway: 'query', mode: 'cli' },
40
+ { domain: 'tasks', operation: 'relates', gateway: 'query', mode: 'cli' },
41
+ // Native mutate operations (core CRUD writes)
42
+ { domain: 'tasks', operation: 'add', gateway: 'mutate', mode: 'native' },
43
+ { domain: 'tasks', operation: 'create', gateway: 'mutate', mode: 'native' },
44
+ { domain: 'tasks', operation: 'update', gateway: 'mutate', mode: 'native' },
45
+ { domain: 'tasks', operation: 'complete', gateway: 'mutate', mode: 'native' },
46
+ { domain: 'tasks', operation: 'delete', gateway: 'mutate', mode: 'native' },
47
+ { domain: 'tasks', operation: 'archive', gateway: 'mutate', mode: 'native' },
48
+ // CLI-only mutate operations
49
+ { domain: 'tasks', operation: 'restore', gateway: 'mutate', mode: 'cli' },
50
+ { domain: 'tasks', operation: 'unarchive', gateway: 'mutate', mode: 'cli' },
51
+ { domain: 'tasks', operation: 'import', gateway: 'mutate', mode: 'cli' },
52
+ { domain: 'tasks', operation: 'reorder', gateway: 'mutate', mode: 'cli' },
53
+ { domain: 'tasks', operation: 'reparent', gateway: 'mutate', mode: 'cli' },
54
+ { domain: 'tasks', operation: 'promote', gateway: 'mutate', mode: 'cli' },
55
+ { domain: 'tasks', operation: 'reopen', gateway: 'mutate', mode: 'cli' },
56
+ { domain: 'tasks', operation: 'relates.add', gateway: 'mutate', mode: 'cli' },
57
+ // === Session Domain ===
58
+ // Native query operations
59
+ { domain: 'session', operation: 'status', gateway: 'query', mode: 'native' },
60
+ { domain: 'session', operation: 'list', gateway: 'query', mode: 'native' },
61
+ { domain: 'session', operation: 'show', gateway: 'query', mode: 'native' },
62
+ { domain: 'session', operation: 'focus-show', gateway: 'query', mode: 'native' },
63
+ { domain: 'session', operation: 'focus.get', gateway: 'query', mode: 'native' },
64
+ // CLI-only query operations
65
+ { domain: 'session', operation: 'history', gateway: 'query', mode: 'cli' },
66
+ { domain: 'session', operation: 'stats', gateway: 'query', mode: 'cli' },
67
+ // Native mutate operations
68
+ { domain: 'session', operation: 'start', gateway: 'mutate', mode: 'native' },
69
+ { domain: 'session', operation: 'end', gateway: 'mutate', mode: 'native' },
70
+ { domain: 'session', operation: 'focus-set', gateway: 'mutate', mode: 'native' },
71
+ { domain: 'session', operation: 'focus.set', gateway: 'mutate', mode: 'native' },
72
+ { domain: 'session', operation: 'focus-clear', gateway: 'mutate', mode: 'native' },
73
+ { domain: 'session', operation: 'focus.clear', gateway: 'mutate', mode: 'native' },
74
+ // CLI-only mutate operations
75
+ { domain: 'session', operation: 'resume', gateway: 'mutate', mode: 'cli' },
76
+ { domain: 'session', operation: 'switch', gateway: 'mutate', mode: 'cli' },
77
+ { domain: 'session', operation: 'archive', gateway: 'mutate', mode: 'cli' },
78
+ { domain: 'session', operation: 'cleanup', gateway: 'mutate', mode: 'cli' },
79
+ { domain: 'session', operation: 'suspend', gateway: 'mutate', mode: 'cli' },
80
+ { domain: 'session', operation: 'gc', gateway: 'mutate', mode: 'cli' },
81
+ // === System Domain ===
82
+ { domain: 'system', operation: 'version', gateway: 'query', mode: 'native' },
83
+ { domain: 'system', operation: 'doctor', gateway: 'query', mode: 'hybrid' },
84
+ { domain: 'system', operation: 'config', gateway: 'query', mode: 'native' },
85
+ { domain: 'system', operation: 'config.get', gateway: 'query', mode: 'native' },
86
+ { domain: 'system', operation: 'context', gateway: 'query', mode: 'cli' },
87
+ { domain: 'system', operation: 'metrics', gateway: 'query', mode: 'cli' },
88
+ { domain: 'system', operation: 'health', gateway: 'query', mode: 'cli' },
89
+ { domain: 'system', operation: 'diagnostics', gateway: 'query', mode: 'cli' },
90
+ { domain: 'system', operation: 'stats', gateway: 'query', mode: 'cli' },
91
+ { domain: 'system', operation: 'help', gateway: 'query', mode: 'cli' },
92
+ { domain: 'system', operation: 'dash', gateway: 'query', mode: 'cli' },
93
+ { domain: 'system', operation: 'roadmap', gateway: 'query', mode: 'cli' },
94
+ { domain: 'system', operation: 'labels', gateway: 'query', mode: 'cli' },
95
+ { domain: 'system', operation: 'compliance', gateway: 'query', mode: 'cli' },
96
+ { domain: 'system', operation: 'log', gateway: 'query', mode: 'cli' },
97
+ { domain: 'system', operation: 'archive-stats', gateway: 'query', mode: 'cli' },
98
+ { domain: 'system', operation: 'sequence', gateway: 'query', mode: 'cli' },
99
+ { domain: 'system', operation: 'job.status', gateway: 'query', mode: 'cli' },
100
+ { domain: 'system', operation: 'job.list', gateway: 'query', mode: 'cli' },
101
+ { domain: 'system', operation: 'init', gateway: 'mutate', mode: 'native' },
102
+ { domain: 'system', operation: 'config.set', gateway: 'mutate', mode: 'native' },
103
+ { domain: 'system', operation: 'backup', gateway: 'mutate', mode: 'cli' },
104
+ { domain: 'system', operation: 'restore', gateway: 'mutate', mode: 'cli' },
105
+ { domain: 'system', operation: 'migrate', gateway: 'mutate', mode: 'cli' },
106
+ { domain: 'system', operation: 'cleanup', gateway: 'mutate', mode: 'cli' },
107
+ { domain: 'system', operation: 'audit', gateway: 'mutate', mode: 'cli' },
108
+ { domain: 'system', operation: 'sync', gateway: 'mutate', mode: 'cli' },
109
+ { domain: 'system', operation: 'job.cancel', gateway: 'mutate', mode: 'cli' },
110
+ { domain: 'system', operation: 'safestop', gateway: 'mutate', mode: 'cli' },
111
+ { domain: 'system', operation: 'uncancel', gateway: 'mutate', mode: 'cli' },
112
+ // === Validate Domain ===
113
+ { domain: 'validate', operation: 'schema', gateway: 'query', mode: 'native' },
114
+ { domain: 'validate', operation: 'protocol', gateway: 'query', mode: 'cli' },
115
+ { domain: 'validate', operation: 'task', gateway: 'query', mode: 'cli' },
116
+ { domain: 'validate', operation: 'manifest', gateway: 'query', mode: 'cli' },
117
+ { domain: 'validate', operation: 'output', gateway: 'query', mode: 'cli' },
118
+ { domain: 'validate', operation: 'compliance.summary', gateway: 'query', mode: 'cli' },
119
+ { domain: 'validate', operation: 'compliance.record', gateway: 'mutate', mode: 'cli' },
120
+ { domain: 'validate', operation: 'test.run', gateway: 'mutate', mode: 'cli' },
121
+ { domain: 'validate', operation: 'test.coverage', gateway: 'mutate', mode: 'cli' },
122
+ { domain: 'validate', operation: 'test.status', gateway: 'mutate', mode: 'cli' },
123
+ { domain: 'validate', operation: 'batch-validate', gateway: 'mutate', mode: 'cli' },
124
+ // === Orchestrate Domain (all CLI) ===
125
+ { domain: 'orchestrate', operation: 'status', gateway: 'query', mode: 'cli' },
126
+ { domain: 'orchestrate', operation: 'next', gateway: 'query', mode: 'cli' },
127
+ { domain: 'orchestrate', operation: 'ready', gateway: 'query', mode: 'cli' },
128
+ { domain: 'orchestrate', operation: 'analyze', gateway: 'query', mode: 'cli' },
129
+ { domain: 'orchestrate', operation: 'context', gateway: 'query', mode: 'cli' },
130
+ { domain: 'orchestrate', operation: 'waves', gateway: 'query', mode: 'cli' },
131
+ { domain: 'orchestrate', operation: 'skill.list', gateway: 'query', mode: 'cli' },
132
+ { domain: 'orchestrate', operation: 'startup', gateway: 'mutate', mode: 'cli' },
133
+ { domain: 'orchestrate', operation: 'spawn', gateway: 'mutate', mode: 'cli' },
134
+ { domain: 'orchestrate', operation: 'validate', gateway: 'mutate', mode: 'cli' },
135
+ { domain: 'orchestrate', operation: 'parallel.start', gateway: 'mutate', mode: 'cli' },
136
+ { domain: 'orchestrate', operation: 'parallel.end', gateway: 'mutate', mode: 'cli' },
137
+ { domain: 'orchestrate', operation: 'check', gateway: 'mutate', mode: 'cli' },
138
+ { domain: 'orchestrate', operation: 'skill.inject', gateway: 'mutate', mode: 'cli' },
139
+ // === Research Domain (all CLI) ===
140
+ { domain: 'research', operation: 'show', gateway: 'query', mode: 'cli' },
141
+ { domain: 'research', operation: 'list', gateway: 'query', mode: 'cli' },
142
+ { domain: 'research', operation: 'query', gateway: 'query', mode: 'cli' },
143
+ { domain: 'research', operation: 'pending', gateway: 'query', mode: 'cli' },
144
+ { domain: 'research', operation: 'stats', gateway: 'query', mode: 'cli' },
145
+ { domain: 'research', operation: 'manifest.read', gateway: 'query', mode: 'cli' },
146
+ { domain: 'research', operation: 'inject', gateway: 'mutate', mode: 'cli' },
147
+ { domain: 'research', operation: 'link', gateway: 'mutate', mode: 'cli' },
148
+ { domain: 'research', operation: 'manifest.append', gateway: 'mutate', mode: 'cli' },
149
+ { domain: 'research', operation: 'manifest.archive', gateway: 'mutate', mode: 'cli' },
150
+ { domain: 'research', operation: 'compact', gateway: 'mutate', mode: 'cli' },
151
+ { domain: 'research', operation: 'validate', gateway: 'mutate', mode: 'cli' },
152
+ // === Lifecycle Domain (all CLI) ===
153
+ { domain: 'lifecycle', operation: 'check', gateway: 'query', mode: 'cli' },
154
+ { domain: 'lifecycle', operation: 'status', gateway: 'query', mode: 'cli' },
155
+ { domain: 'lifecycle', operation: 'history', gateway: 'query', mode: 'cli' },
156
+ { domain: 'lifecycle', operation: 'gates', gateway: 'query', mode: 'cli' },
157
+ { domain: 'lifecycle', operation: 'prerequisites', gateway: 'query', mode: 'cli' },
158
+ { domain: 'lifecycle', operation: 'progress', gateway: 'mutate', mode: 'cli' },
159
+ { domain: 'lifecycle', operation: 'skip', gateway: 'mutate', mode: 'cli' },
160
+ { domain: 'lifecycle', operation: 'reset', gateway: 'mutate', mode: 'cli' },
161
+ { domain: 'lifecycle', operation: 'gate.pass', gateway: 'mutate', mode: 'cli' },
162
+ { domain: 'lifecycle', operation: 'gate.fail', gateway: 'mutate', mode: 'cli' },
163
+ // === Release Domain (all CLI) ===
164
+ { domain: 'release', operation: 'prepare', gateway: 'mutate', mode: 'cli' },
165
+ { domain: 'release', operation: 'changelog', gateway: 'mutate', mode: 'cli' },
166
+ { domain: 'release', operation: 'commit', gateway: 'mutate', mode: 'cli' },
167
+ { domain: 'release', operation: 'tag', gateway: 'mutate', mode: 'cli' },
168
+ { domain: 'release', operation: 'push', gateway: 'mutate', mode: 'cli' },
169
+ { domain: 'release', operation: 'gates.run', gateway: 'mutate', mode: 'cli' },
170
+ { domain: 'release', operation: 'rollback', gateway: 'mutate', mode: 'cli' },
171
+ ];
172
+ /**
173
+ * Lookup the execution mode for a specific operation
174
+ */
175
+ export function getOperationMode(domain, operation, gateway) {
176
+ const entry = CAPABILITY_MATRIX.find((cap) => cap.domain === domain &&
177
+ cap.operation === operation &&
178
+ cap.gateway === gateway);
179
+ return entry?.mode;
180
+ }
181
+ /**
182
+ * Check if an operation can run natively (without CLI)
183
+ */
184
+ export function canRunNatively(domain, operation, gateway) {
185
+ const mode = getOperationMode(domain, operation, gateway);
186
+ return mode === 'native' || mode === 'hybrid';
187
+ }
188
+ /**
189
+ * Check if an operation requires CLI
190
+ */
191
+ export function requiresCLI(domain, operation, gateway) {
192
+ const mode = getOperationMode(domain, operation, gateway);
193
+ return mode === 'cli';
194
+ }
195
+ /**
196
+ * Get all native-capable operations for a domain
197
+ */
198
+ export function getNativeOperations(domain) {
199
+ return CAPABILITY_MATRIX.filter((cap) => cap.domain === domain && (cap.mode === 'native' || cap.mode === 'hybrid'));
200
+ }
201
+ /**
202
+ * Generate a capability report for system.doctor
203
+ */
204
+ export function generateCapabilityReport() {
205
+ const domains = {};
206
+ for (const cap of CAPABILITY_MATRIX) {
207
+ if (!domains[cap.domain]) {
208
+ domains[cap.domain] = { native: [], cli: [], hybrid: [] };
209
+ }
210
+ const key = `${cap.gateway}:${cap.operation}`;
211
+ domains[cap.domain][cap.mode].push(key);
212
+ }
213
+ return {
214
+ totalOperations: CAPABILITY_MATRIX.length,
215
+ native: CAPABILITY_MATRIX.filter((c) => c.mode === 'native').length,
216
+ cli: CAPABILITY_MATRIX.filter((c) => c.mode === 'cli').length,
217
+ hybrid: CAPABILITY_MATRIX.filter((c) => c.mode === 'hybrid').length,
218
+ domains,
219
+ };
220
+ }
221
+ /**
222
+ * Get the full capability matrix (for testing/introspection)
223
+ */
224
+ export function getCapabilityMatrix() {
225
+ return CAPABILITY_MATRIX;
226
+ }
227
+ //# sourceMappingURL=capability-matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-matrix.js","sourceRoot":"","sources":["../../src/engine/capability-matrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Config Engine
3
+ *
4
+ * Native TypeScript implementation for reading/writing .cleo/config.json.
5
+ */
6
+ /**
7
+ * Engine result wrapper
8
+ */
9
+ export interface EngineResult<T = unknown> {
10
+ success: boolean;
11
+ data?: T;
12
+ error?: {
13
+ code: string;
14
+ message: string;
15
+ details?: unknown;
16
+ };
17
+ }
18
+ /**
19
+ * Get config value by key (dot-notation supported)
20
+ */
21
+ export declare function configGet(projectRoot: string, key?: string): EngineResult<unknown>;
22
+ /**
23
+ * Set a config value by key (dot-notation supported)
24
+ */
25
+ export declare function configSet(projectRoot: string, key: string, value: unknown): Promise<EngineResult<{
26
+ key: string;
27
+ value: unknown;
28
+ }>>;
29
+ //# sourceMappingURL=config-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-engine.d.ts","sourceRoot":"","sources":["../../src/engine/config-engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,GACX,YAAY,CAAC,OAAO,CAAC,CA4CvB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,YAAY,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CA0DxD"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Config Engine
3
+ *
4
+ * Native TypeScript implementation for reading/writing .cleo/config.json.
5
+ */
6
+ import { readJsonFile, writeJsonFileAtomic, getDataPath } from './store.js';
7
+ import { existsSync, writeFileSync } from 'fs';
8
+ import * as lockfile from 'proper-lockfile';
9
+ /**
10
+ * Get config value by key (dot-notation supported)
11
+ */
12
+ export function configGet(projectRoot, key) {
13
+ const configPath = getDataPath(projectRoot, 'config.json');
14
+ const config = readJsonFile(configPath);
15
+ if (!config) {
16
+ return {
17
+ success: false,
18
+ error: { code: 'E_NOT_INITIALIZED', message: 'No config.json found' },
19
+ };
20
+ }
21
+ if (!key) {
22
+ // Return all config
23
+ return { success: true, data: config };
24
+ }
25
+ // Dot-notation navigation
26
+ const parts = key.split('.');
27
+ let current = config;
28
+ for (const part of parts) {
29
+ if (current === null || current === undefined || typeof current !== 'object') {
30
+ return {
31
+ success: false,
32
+ error: {
33
+ code: 'E_CONFIG_KEY_NOT_FOUND',
34
+ message: `Config key '${key}' not found`,
35
+ },
36
+ };
37
+ }
38
+ current = current[part];
39
+ }
40
+ if (current === undefined) {
41
+ return {
42
+ success: false,
43
+ error: {
44
+ code: 'E_CONFIG_KEY_NOT_FOUND',
45
+ message: `Config key '${key}' not found`,
46
+ },
47
+ };
48
+ }
49
+ return { success: true, data: current };
50
+ }
51
+ /**
52
+ * Set a config value by key (dot-notation supported)
53
+ */
54
+ export async function configSet(projectRoot, key, value) {
55
+ const configPath = getDataPath(projectRoot, 'config.json');
56
+ // Ensure file exists for locking
57
+ if (!existsSync(configPath)) {
58
+ writeFileSync(configPath, '{}', 'utf-8');
59
+ }
60
+ let release;
61
+ try {
62
+ release = await lockfile.lock(configPath, {
63
+ retries: { retries: 5, factor: 2, minTimeout: 100, maxTimeout: 5000 },
64
+ stale: 30000,
65
+ });
66
+ const config = readJsonFile(configPath) || {};
67
+ // Dot-notation navigation to set
68
+ const parts = key.split('.');
69
+ let target = config;
70
+ for (let i = 0; i < parts.length - 1; i++) {
71
+ const part = parts[i];
72
+ if (target[part] === undefined || typeof target[part] !== 'object') {
73
+ target[part] = {};
74
+ }
75
+ target = target[part];
76
+ }
77
+ const lastPart = parts[parts.length - 1];
78
+ // Parse value if it looks like JSON
79
+ let parsedValue = value;
80
+ if (typeof value === 'string') {
81
+ if (value === 'true')
82
+ parsedValue = true;
83
+ else if (value === 'false')
84
+ parsedValue = false;
85
+ else if (value === 'null')
86
+ parsedValue = null;
87
+ else if (/^-?\d+$/.test(value))
88
+ parsedValue = parseInt(value, 10);
89
+ else if (/^-?\d+\.\d+$/.test(value))
90
+ parsedValue = parseFloat(value);
91
+ else {
92
+ try {
93
+ parsedValue = JSON.parse(value);
94
+ }
95
+ catch {
96
+ // Keep as string
97
+ }
98
+ }
99
+ }
100
+ target[lastPart] = parsedValue;
101
+ writeJsonFileAtomic(configPath, config);
102
+ return { success: true, data: { key, value: parsedValue } };
103
+ }
104
+ finally {
105
+ if (release) {
106
+ await release();
107
+ }
108
+ }
109
+ }
110
+ //# sourceMappingURL=config-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-engine.js","sourceRoot":"","sources":["../../src/engine/config-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Task ID Generator
3
+ *
4
+ * Generates unique task IDs in the T#### format used by CLEO.
5
+ * Ensures uniqueness across both todo.json and todo-archive.json.
6
+ */
7
+ /**
8
+ * Collect all existing task IDs from todo.json and archive
9
+ */
10
+ export declare function collectAllIds(projectRoot: string): Set<string>;
11
+ /**
12
+ * Find the highest existing task ID number
13
+ */
14
+ export declare function findHighestId(existingIds: Set<string>): number;
15
+ /**
16
+ * Generate the next available task ID.
17
+ *
18
+ * Finds the highest existing ID number across todo.json and archive,
19
+ * then returns the next sequential ID.
20
+ *
21
+ * @param projectRoot - Project root directory
22
+ * @returns New unique task ID (e.g., "T4321")
23
+ */
24
+ export declare function generateNextId(projectRoot: string): string;
25
+ /**
26
+ * Generate the next ID given an explicit set of existing IDs.
27
+ * Useful when caller has already loaded task data.
28
+ */
29
+ export declare function generateNextIdFromSet(existingIds: Set<string>): string;
30
+ /**
31
+ * Validate that a task ID matches the expected format
32
+ */
33
+ export declare function isValidTaskId(id: string): boolean;
34
+ //# sourceMappingURL=id-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../../src/engine/id-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAwB9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAS9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAKtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEjD"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Task ID Generator
3
+ *
4
+ * Generates unique task IDs in the T#### format used by CLEO.
5
+ * Ensures uniqueness across both todo.json and todo-archive.json.
6
+ */
7
+ import { readJsonFile } from './store.js';
8
+ import { join } from 'path';
9
+ /**
10
+ * Task ID pattern: T followed by 3+ digits
11
+ */
12
+ const TASK_ID_PATTERN = /^T(\d{3,})$/;
13
+ /**
14
+ * Extract the numeric part from a task ID
15
+ */
16
+ function extractNumber(id) {
17
+ const match = id.match(TASK_ID_PATTERN);
18
+ return match ? parseInt(match[1], 10) : 0;
19
+ }
20
+ /**
21
+ * Collect all existing task IDs from todo.json and archive
22
+ */
23
+ export function collectAllIds(projectRoot) {
24
+ const ids = new Set();
25
+ // Read todo.json
26
+ const todoPath = join(projectRoot, '.cleo', 'todo.json');
27
+ const todoData = readJsonFile(todoPath);
28
+ if (todoData?.tasks) {
29
+ for (const task of todoData.tasks) {
30
+ if (task.id)
31
+ ids.add(task.id);
32
+ }
33
+ }
34
+ // Read archive
35
+ const archivePath = join(projectRoot, '.cleo', 'todo-archive.json');
36
+ const archiveData = readJsonFile(archivePath);
37
+ if (archiveData?.archivedTasks) {
38
+ for (const task of archiveData.archivedTasks) {
39
+ if (task.id)
40
+ ids.add(task.id);
41
+ }
42
+ }
43
+ return ids;
44
+ }
45
+ /**
46
+ * Find the highest existing task ID number
47
+ */
48
+ export function findHighestId(existingIds) {
49
+ let highest = 0;
50
+ for (const id of existingIds) {
51
+ const num = extractNumber(id);
52
+ if (num > highest) {
53
+ highest = num;
54
+ }
55
+ }
56
+ return highest;
57
+ }
58
+ /**
59
+ * Generate the next available task ID.
60
+ *
61
+ * Finds the highest existing ID number across todo.json and archive,
62
+ * then returns the next sequential ID.
63
+ *
64
+ * @param projectRoot - Project root directory
65
+ * @returns New unique task ID (e.g., "T4321")
66
+ */
67
+ export function generateNextId(projectRoot) {
68
+ const existingIds = collectAllIds(projectRoot);
69
+ const highest = findHighestId(existingIds);
70
+ const next = highest + 1;
71
+ // Pad to at least 3 digits
72
+ const padded = next.toString().padStart(3, '0');
73
+ return `T${padded}`;
74
+ }
75
+ /**
76
+ * Generate the next ID given an explicit set of existing IDs.
77
+ * Useful when caller has already loaded task data.
78
+ */
79
+ export function generateNextIdFromSet(existingIds) {
80
+ const highest = findHighestId(existingIds);
81
+ const next = highest + 1;
82
+ const padded = next.toString().padStart(3, '0');
83
+ return `T${padded}`;
84
+ }
85
+ /**
86
+ * Validate that a task ID matches the expected format
87
+ */
88
+ export function isValidTaskId(id) {
89
+ return TASK_ID_PATTERN.test(id);
90
+ }
91
+ //# sourceMappingURL=id-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../../src/engine/id-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Native TypeScript Engine - Barrel Export
3
+ *
4
+ * The engine provides cross-platform data operations that work
5
+ * without the CLEO CLI (bash). Used when MCP_EXECUTION_MODE is
6
+ * 'native' or 'auto' (when CLI is unavailable).
7
+ */
8
+ export { readJsonFile, writeJsonFileAtomic, withLock, withFileLock, withMultiLock, isProjectInitialized, resolveProjectRoot, getDataPath, listBackups, } from './store.js';
9
+ export { validateSchema, validateTask, clearSchemaCache, type ValidationResult, type ValidationError, type SchemaType, } from './schema-validator.js';
10
+ export { validateTitleDescription, validateTimestamps, validateIdUniqueness, validateNoDuplicateDescription, validateHierarchy, validateStatusTransition, validateNewTask, hasErrors, type RuleViolation, } from './validation-rules.js';
11
+ export { generateNextId, generateNextIdFromSet, collectAllIds, findHighestId, isValidTaskId, } from './id-generator.js';
12
+ export { taskShow, taskList, taskFind, taskExists, taskCreate, taskUpdate, taskComplete, taskDelete, taskArchive, type TaskRecord, type MinimalTaskRecord, } from './task-engine.js';
13
+ export { sessionStatus, sessionList, sessionShow, focusGet, focusSet, focusClear, sessionStart, sessionEnd, type SessionRecord, } from './session-engine.js';
14
+ export { configGet, configSet, } from './config-engine.js';
15
+ export { initProject, isAutoInitEnabled, ensureInitialized, getVersion, } from './init-engine.js';
16
+ export { providerList, providerGet, providerDetect, providerInstalled, providerCount, registryVersion, mcpList, mcpListAll, mcpInstall, mcpRemove, mcpConfigPath, injectionCheck, injectionCheckAll, injectionUpdate, injectionUpdateAll, caampResolveAlias, caampBuildServerConfig, caampGenerateInjectionContent, caampGetInstructionFiles, } from './caamp-adapter.js';
17
+ export { getOperationMode, canRunNatively, requiresCLI, getNativeOperations, generateCapabilityReport, getCapabilityMatrix, type ExecutionMode, type OperationCapability, type CapabilityReport, } from './capability-matrix.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,8BAA8B,EAC9B,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,SAAS,EACT,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,UAAU,EACf,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,KAAK,aAAa,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,SAAS,EACT,SAAS,GACV,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Native TypeScript Engine - Barrel Export
3
+ *
4
+ * The engine provides cross-platform data operations that work
5
+ * without the CLEO CLI (bash). Used when MCP_EXECUTION_MODE is
6
+ * 'native' or 'auto' (when CLI is unavailable).
7
+ */
8
+ // Store: atomic file I/O, locking, backup rotation
9
+ export { readJsonFile, writeJsonFileAtomic, withLock, withFileLock, withMultiLock, isProjectInitialized, resolveProjectRoot, getDataPath, listBackups, } from './store.js';
10
+ // Schema validation (Ajv-based)
11
+ export { validateSchema, validateTask, clearSchemaCache, } from './schema-validator.js';
12
+ // Anti-hallucination validation rules
13
+ export { validateTitleDescription, validateTimestamps, validateIdUniqueness, validateNoDuplicateDescription, validateHierarchy, validateStatusTransition, validateNewTask, hasErrors, } from './validation-rules.js';
14
+ // Task ID generation
15
+ export { generateNextId, generateNextIdFromSet, collectAllIds, findHighestId, isValidTaskId, } from './id-generator.js';
16
+ // Task engine (CRUD operations)
17
+ export { taskShow, taskList, taskFind, taskExists, taskCreate, taskUpdate, taskComplete, taskDelete, taskArchive, } from './task-engine.js';
18
+ // Session engine
19
+ export { sessionStatus, sessionList, sessionShow, focusGet, focusSet, focusClear, sessionStart, sessionEnd, } from './session-engine.js';
20
+ // Config engine
21
+ export { configGet, configSet, } from './config-engine.js';
22
+ // Init engine
23
+ export { initProject, isAutoInitEnabled, ensureInitialized, getVersion, } from './init-engine.js';
24
+ // CAAMP adapter (provider registry, MCP config, injection)
25
+ export { providerList, providerGet, providerDetect, providerInstalled, providerCount, registryVersion, mcpList, mcpListAll, mcpInstall, mcpRemove, mcpConfigPath, injectionCheck, injectionCheckAll, injectionUpdate, injectionUpdateAll, caampResolveAlias, caampBuildServerConfig, caampGenerateInjectionContent, caampGetInstructionFiles, } from './caamp-adapter.js';
26
+ // Capability matrix
27
+ export { getOperationMode, canRunNatively, requiresCLI, getNativeOperations, generateCapabilityReport, getCapabilityMatrix, } from './capability-matrix.js';
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mDAAmD;AACnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,gCAAgC;AAChC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,GAIjB,MAAM,uBAAuB,CAAC;AAE/B,sCAAsC;AACtC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,8BAA8B,EAC9B,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,SAAS,GAEV,MAAM,uBAAuB,CAAC;AAE/B,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,gCAAgC;AAChC,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,WAAW,GAGZ,MAAM,kBAAkB,CAAC;AAE1B,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,GAEX,MAAM,qBAAqB,CAAC;AAE7B,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,SAAS,GACV,MAAM,oBAAoB,CAAC;AAE5B,cAAc;AACd,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAE1B,2DAA2D;AAC3D,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,GAIpB,MAAM,wBAAwB,CAAC"}