@cleocode/mcp-server 0.86.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.
- package/LICENSE +21 -0
- package/README.md +306 -0
- package/dist/domains/index.d.ts +16 -0
- package/dist/domains/index.d.ts.map +1 -0
- package/dist/domains/index.js +16 -0
- package/dist/domains/index.js.map +1 -0
- package/dist/domains/lifecycle.d.ts +147 -0
- package/dist/domains/lifecycle.d.ts.map +1 -0
- package/dist/domains/lifecycle.js +452 -0
- package/dist/domains/lifecycle.js.map +1 -0
- package/dist/domains/orchestrate.d.ts +133 -0
- package/dist/domains/orchestrate.d.ts.map +1 -0
- package/dist/domains/orchestrate.js +465 -0
- package/dist/domains/orchestrate.js.map +1 -0
- package/dist/domains/release.d.ts +109 -0
- package/dist/domains/release.d.ts.map +1 -0
- package/dist/domains/release.js +400 -0
- package/dist/domains/release.js.map +1 -0
- package/dist/domains/research.d.ts +139 -0
- package/dist/domains/research.d.ts.map +1 -0
- package/dist/domains/research.js +606 -0
- package/dist/domains/research.js.map +1 -0
- package/dist/domains/session.d.ts +129 -0
- package/dist/domains/session.d.ts.map +1 -0
- package/dist/domains/session.js +433 -0
- package/dist/domains/session.js.map +1 -0
- package/dist/domains/system.d.ts +92 -0
- package/dist/domains/system.d.ts.map +1 -0
- package/dist/domains/system.js +473 -0
- package/dist/domains/system.js.map +1 -0
- package/dist/domains/tasks.d.ts +180 -0
- package/dist/domains/tasks.d.ts.map +1 -0
- package/dist/domains/tasks.js +704 -0
- package/dist/domains/tasks.js.map +1 -0
- package/dist/domains/validate.d.ts +150 -0
- package/dist/domains/validate.d.ts.map +1 -0
- package/dist/domains/validate.js +568 -0
- package/dist/domains/validate.js.map +1 -0
- package/dist/gateways/mutate.d.ts +100 -0
- package/dist/gateways/mutate.d.ts.map +1 -0
- package/dist/gateways/mutate.js +937 -0
- package/dist/gateways/mutate.js.map +1 -0
- package/dist/gateways/query.d.ts +91 -0
- package/dist/gateways/query.d.ts.map +1 -0
- package/dist/gateways/query.js +245 -0
- package/dist/gateways/query.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +299 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/audit.d.ts +118 -0
- package/dist/lib/audit.d.ts.map +1 -0
- package/dist/lib/audit.js +311 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/background-jobs.d.ts +86 -0
- package/dist/lib/background-jobs.d.ts.map +1 -0
- package/dist/lib/background-jobs.js +183 -0
- package/dist/lib/background-jobs.js.map +1 -0
- package/dist/lib/cache.d.ts +78 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +204 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/command-builder.d.ts +52 -0
- package/dist/lib/command-builder.d.ts.map +1 -0
- package/dist/lib/command-builder.js +280 -0
- package/dist/lib/command-builder.js.map +1 -0
- package/dist/lib/config.d.ts +42 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +248 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/defaults.d.ts +115 -0
- package/dist/lib/defaults.d.ts.map +1 -0
- package/dist/lib/defaults.js +61 -0
- package/dist/lib/defaults.js.map +1 -0
- package/dist/lib/error-handler.d.ts +101 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +277 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/executor.d.ts +110 -0
- package/dist/lib/executor.d.ts.map +1 -0
- package/dist/lib/executor.js +362 -0
- package/dist/lib/executor.js.map +1 -0
- package/dist/lib/exit-codes.d.ts +190 -0
- package/dist/lib/exit-codes.d.ts.map +1 -0
- package/dist/lib/exit-codes.js +1027 -0
- package/dist/lib/exit-codes.js.map +1 -0
- package/dist/lib/formatter.d.ts +196 -0
- package/dist/lib/formatter.d.ts.map +1 -0
- package/dist/lib/formatter.js +260 -0
- package/dist/lib/formatter.js.map +1 -0
- package/dist/lib/gate-validators.d.ts +103 -0
- package/dist/lib/gate-validators.d.ts.map +1 -0
- package/dist/lib/gate-validators.js +689 -0
- package/dist/lib/gate-validators.js.map +1 -0
- package/dist/lib/manifest-parser.d.ts +61 -0
- package/dist/lib/manifest-parser.d.ts.map +1 -0
- package/dist/lib/manifest-parser.js +338 -0
- package/dist/lib/manifest-parser.js.map +1 -0
- package/dist/lib/manifest.d.ts +177 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +301 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/lib/protocol-enforcement.d.ts +105 -0
- package/dist/lib/protocol-enforcement.d.ts.map +1 -0
- package/dist/lib/protocol-enforcement.js +331 -0
- package/dist/lib/protocol-enforcement.js.map +1 -0
- package/dist/lib/protocol-rules.d.ts +55 -0
- package/dist/lib/protocol-rules.d.ts.map +1 -0
- package/dist/lib/protocol-rules.js +760 -0
- package/dist/lib/protocol-rules.js.map +1 -0
- package/dist/lib/rate-limiter.d.ts +110 -0
- package/dist/lib/rate-limiter.d.ts.map +1 -0
- package/dist/lib/rate-limiter.js +208 -0
- package/dist/lib/rate-limiter.js.map +1 -0
- package/dist/lib/router.d.ts +126 -0
- package/dist/lib/router.d.ts.map +1 -0
- package/dist/lib/router.js +276 -0
- package/dist/lib/router.js.map +1 -0
- package/dist/lib/schema.d.ts +55 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +70 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/security.d.ts +156 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +347 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/verification-gates.d.ts +287 -0
- package/dist/lib/verification-gates.d.ts.map +1 -0
- package/dist/lib/verification-gates.js +548 -0
- package/dist/lib/verification-gates.js.map +1 -0
- package/dist/types/domain.d.ts +29 -0
- package/dist/types/domain.d.ts.map +1 -0
- package/dist/types/domain.js +7 -0
- package/dist/types/domain.js.map +1 -0
- package/dist/types/error.d.ts +101 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +61 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/gateway.d.ts +78 -0
- package/dist/types/gateway.d.ts.map +1 -0
- package/dist/types/gateway.js +7 -0
- package/dist/types/gateway.js.map +1 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/operations/lifecycle.d.ts +140 -0
- package/dist/types/operations/lifecycle.d.ts.map +1 -0
- package/dist/types/operations/lifecycle.js +8 -0
- package/dist/types/operations/lifecycle.js.map +1 -0
- package/dist/types/operations/orchestrate.d.ts +140 -0
- package/dist/types/operations/orchestrate.d.ts.map +1 -0
- package/dist/types/operations/orchestrate.js +8 -0
- package/dist/types/operations/orchestrate.js.map +1 -0
- package/dist/types/operations/release.d.ts +97 -0
- package/dist/types/operations/release.d.ts.map +1 -0
- package/dist/types/operations/release.js +7 -0
- package/dist/types/operations/release.js.map +1 -0
- package/dist/types/operations/research.d.ts +122 -0
- package/dist/types/operations/research.d.ts.map +1 -0
- package/dist/types/operations/research.js +8 -0
- package/dist/types/operations/research.js.map +1 -0
- package/dist/types/operations/session.d.ts +108 -0
- package/dist/types/operations/session.d.ts.map +1 -0
- package/dist/types/operations/session.js +8 -0
- package/dist/types/operations/session.js.map +1 -0
- package/dist/types/operations/system.d.ts +147 -0
- package/dist/types/operations/system.d.ts.map +1 -0
- package/dist/types/operations/system.js +8 -0
- package/dist/types/operations/system.js.map +1 -0
- package/dist/types/operations/tasks.d.ts +186 -0
- package/dist/types/operations/tasks.d.ts.map +1 -0
- package/dist/types/operations/tasks.js +8 -0
- package/dist/types/operations/tasks.js.map +1 -0
- package/dist/types/operations/validate.d.ts +170 -0
- package/dist/types/operations/validate.d.ts.map +1 -0
- package/dist/types/operations/validate.js +8 -0
- package/dist/types/operations/validate.js.map +1 -0
- package/package.json +67 -0
- package/schemas/IMPLEMENTATION-SUMMARY.md +250 -0
- package/schemas/README.md +284 -0
- package/schemas/common/error.schema.json +54 -0
- package/schemas/common/meta.schema.json +39 -0
- package/schemas/common/pagination.schema.json +32 -0
- package/schemas/index.json +159 -0
- package/schemas/requests/lifecycle/check.schema.json +20 -0
- package/schemas/requests/lifecycle/gate.fail.schema.json +25 -0
- package/schemas/requests/lifecycle/gate.pass.schema.json +28 -0
- package/schemas/requests/lifecycle/gates.schema.json +15 -0
- package/schemas/requests/lifecycle/history.schema.json +15 -0
- package/schemas/requests/lifecycle/prerequisites.schema.json +15 -0
- package/schemas/requests/lifecycle/progress.schema.json +29 -0
- package/schemas/requests/lifecycle/reset.schema.json +25 -0
- package/schemas/requests/lifecycle/skip.schema.json +25 -0
- package/schemas/requests/lifecycle/status.schema.json +23 -0
- package/schemas/requests/orchestrate/analyze.schema.json +15 -0
- package/schemas/requests/orchestrate/context.schema.json +13 -0
- package/schemas/requests/orchestrate/next.schema.json +15 -0
- package/schemas/requests/orchestrate/parallel.end.schema.json +20 -0
- package/schemas/requests/orchestrate/parallel.start.schema.json +20 -0
- package/schemas/requests/orchestrate/ready.schema.json +15 -0
- package/schemas/requests/orchestrate/skill.list.schema.json +13 -0
- package/schemas/requests/orchestrate/spawn.schema.json +25 -0
- package/schemas/requests/orchestrate/startup.schema.json +15 -0
- package/schemas/requests/orchestrate/status.schema.json +15 -0
- package/schemas/requests/orchestrate/validate.schema.json +15 -0
- package/schemas/requests/orchestrate/waves.schema.json +15 -0
- package/schemas/requests/release/changelog.schema.json +23 -0
- package/schemas/requests/release/commit.schema.json +22 -0
- package/schemas/requests/release/gates.run.schema.json +17 -0
- package/schemas/requests/release/prepare.schema.json +20 -0
- package/schemas/requests/release/push.schema.json +20 -0
- package/schemas/requests/release/rollback.schema.json +20 -0
- package/schemas/requests/release/tag.schema.json +19 -0
- package/schemas/requests/research/inject.schema.json +24 -0
- package/schemas/requests/research/link.schema.json +25 -0
- package/schemas/requests/research/list.schema.json +19 -0
- package/schemas/requests/research/manifest.append.schema.json +20 -0
- package/schemas/requests/research/manifest.archive.schema.json +19 -0
- package/schemas/requests/research/manifest.read.schema.json +21 -0
- package/schemas/requests/research/pending.schema.json +14 -0
- package/schemas/requests/research/query.schema.json +21 -0
- package/schemas/requests/research/show.schema.json +14 -0
- package/schemas/requests/research/stats.schema.json +14 -0
- package/schemas/requests/session/end.schema.json +13 -0
- package/schemas/requests/session/focus.clear.schema.json +7 -0
- package/schemas/requests/session/focus.get.schema.json +7 -0
- package/schemas/requests/session/focus.set.schema.json +15 -0
- package/schemas/requests/session/gc.schema.json +14 -0
- package/schemas/requests/session/history.schema.json +16 -0
- package/schemas/requests/session/list.schema.json +13 -0
- package/schemas/requests/session/resume.schema.json +14 -0
- package/schemas/requests/session/show.schema.json +14 -0
- package/schemas/requests/session/start.schema.json +23 -0
- package/schemas/requests/session/status.schema.json +7 -0
- package/schemas/requests/session/suspend.schema.json +13 -0
- package/schemas/requests/system/backup.schema.json +19 -0
- package/schemas/requests/system/cleanup.schema.json +20 -0
- package/schemas/requests/system/config.get.schema.json +14 -0
- package/schemas/requests/system/config.set.schema.json +24 -0
- package/schemas/requests/system/context.schema.json +7 -0
- package/schemas/requests/system/doctor.schema.json +7 -0
- package/schemas/requests/system/init.schema.json +18 -0
- package/schemas/requests/system/migrate.schema.json +19 -0
- package/schemas/requests/system/restore.schema.json +14 -0
- package/schemas/requests/system/stats.schema.json +7 -0
- package/schemas/requests/system/sync.schema.json +15 -0
- package/schemas/requests/system/version.schema.json +7 -0
- package/schemas/requests/tasks/analyze.schema.json +14 -0
- package/schemas/requests/tasks/archive.schema.json +19 -0
- package/schemas/requests/tasks/blockers.schema.json +15 -0
- package/schemas/requests/tasks/complete.schema.json +24 -0
- package/schemas/requests/tasks/create.schema.json +48 -0
- package/schemas/requests/tasks/delete.schema.json +20 -0
- package/schemas/requests/tasks/deps.schema.json +21 -0
- package/schemas/requests/tasks/exists.schema.json +15 -0
- package/schemas/requests/tasks/find.schema.json +22 -0
- package/schemas/requests/tasks/get.schema.json +15 -0
- package/schemas/requests/tasks/list.schema.json +26 -0
- package/schemas/requests/tasks/next.schema.json +21 -0
- package/schemas/requests/tasks/promote.schema.json +15 -0
- package/schemas/requests/tasks/reopen.schema.json +15 -0
- package/schemas/requests/tasks/reorder.schema.json +20 -0
- package/schemas/requests/tasks/reparent.schema.json +20 -0
- package/schemas/requests/tasks/tree.schema.json +21 -0
- package/schemas/requests/tasks/unarchive.schema.json +15 -0
- package/schemas/requests/tasks/update.schema.json +41 -0
- package/schemas/requests/validate/compliance.record.schema.json +20 -0
- package/schemas/requests/validate/compliance.summary.schema.json +18 -0
- package/schemas/requests/validate/compliance.violations.schema.json +19 -0
- package/schemas/requests/validate/manifest.schema.json +23 -0
- package/schemas/requests/validate/output.schema.json +19 -0
- package/schemas/requests/validate/protocol.schema.json +20 -0
- package/schemas/requests/validate/schema.schema.json +19 -0
- package/schemas/requests/validate/task.schema.json +21 -0
- package/schemas/requests/validate/test.coverage.schema.json +14 -0
- package/schemas/requests/validate/test.run.schema.json +22 -0
- package/schemas/requests/validate/test.status.schema.json +14 -0
- package/schemas/responses/common-error.schema.json +20 -0
- package/schemas/responses/common-success.schema.json +21 -0
- package/schemas/responses/lifecycle/check.schema.json +18 -0
- package/schemas/responses/lifecycle/gate.fail.schema.json +18 -0
- package/schemas/responses/lifecycle/gate.pass.schema.json +18 -0
- package/schemas/responses/lifecycle/gates.schema.json +18 -0
- package/schemas/responses/lifecycle/history.schema.json +18 -0
- package/schemas/responses/lifecycle/prerequisites.schema.json +18 -0
- package/schemas/responses/lifecycle/progress.schema.json +18 -0
- package/schemas/responses/lifecycle/reset.schema.json +18 -0
- package/schemas/responses/lifecycle/skip.schema.json +18 -0
- package/schemas/responses/lifecycle/status.schema.json +18 -0
- package/schemas/responses/orchestrate/analyze.schema.json +18 -0
- package/schemas/responses/orchestrate/context.schema.json +18 -0
- package/schemas/responses/orchestrate/next.schema.json +18 -0
- package/schemas/responses/orchestrate/parallel.end.schema.json +18 -0
- package/schemas/responses/orchestrate/parallel.start.schema.json +18 -0
- package/schemas/responses/orchestrate/ready.schema.json +18 -0
- package/schemas/responses/orchestrate/skill.list.schema.json +18 -0
- package/schemas/responses/orchestrate/spawn.schema.json +18 -0
- package/schemas/responses/orchestrate/startup.schema.json +18 -0
- package/schemas/responses/orchestrate/status.schema.json +18 -0
- package/schemas/responses/orchestrate/validate.schema.json +18 -0
- package/schemas/responses/orchestrate/waves.schema.json +18 -0
- package/schemas/responses/release/changelog.schema.json +18 -0
- package/schemas/responses/release/commit.schema.json +18 -0
- package/schemas/responses/release/gates.run.schema.json +18 -0
- package/schemas/responses/release/prepare.schema.json +18 -0
- package/schemas/responses/release/push.schema.json +18 -0
- package/schemas/responses/release/rollback.schema.json +18 -0
- package/schemas/responses/release/tag.schema.json +18 -0
- package/schemas/responses/research/inject.schema.json +18 -0
- package/schemas/responses/research/link.schema.json +18 -0
- package/schemas/responses/research/list.schema.json +18 -0
- package/schemas/responses/research/manifest.append.schema.json +18 -0
- package/schemas/responses/research/manifest.archive.schema.json +18 -0
- package/schemas/responses/research/manifest.read.schema.json +18 -0
- package/schemas/responses/research/pending.schema.json +18 -0
- package/schemas/responses/research/query.schema.json +18 -0
- package/schemas/responses/research/show.schema.json +18 -0
- package/schemas/responses/research/stats.schema.json +18 -0
- package/schemas/responses/session/end.schema.json +18 -0
- package/schemas/responses/session/focus.clear.schema.json +18 -0
- package/schemas/responses/session/focus.get.schema.json +18 -0
- package/schemas/responses/session/focus.set.schema.json +18 -0
- package/schemas/responses/session/gc.schema.json +18 -0
- package/schemas/responses/session/history.schema.json +18 -0
- package/schemas/responses/session/list.schema.json +18 -0
- package/schemas/responses/session/resume.schema.json +18 -0
- package/schemas/responses/session/show.schema.json +18 -0
- package/schemas/responses/session/start.schema.json +18 -0
- package/schemas/responses/session/status.schema.json +18 -0
- package/schemas/responses/session/suspend.schema.json +18 -0
- package/schemas/responses/system/backup.schema.json +18 -0
- package/schemas/responses/system/cleanup.schema.json +18 -0
- package/schemas/responses/system/config.get.schema.json +18 -0
- package/schemas/responses/system/config.set.schema.json +18 -0
- package/schemas/responses/system/context.schema.json +18 -0
- package/schemas/responses/system/doctor.schema.json +18 -0
- package/schemas/responses/system/init.schema.json +18 -0
- package/schemas/responses/system/migrate.schema.json +18 -0
- package/schemas/responses/system/restore.schema.json +18 -0
- package/schemas/responses/system/stats.schema.json +18 -0
- package/schemas/responses/system/sync.schema.json +18 -0
- package/schemas/responses/system/version.schema.json +18 -0
- package/schemas/responses/tasks/analyze.schema.json +18 -0
- package/schemas/responses/tasks/archive.schema.json +18 -0
- package/schemas/responses/tasks/blockers.schema.json +18 -0
- package/schemas/responses/tasks/complete.schema.json +18 -0
- package/schemas/responses/tasks/create.schema.json +18 -0
- package/schemas/responses/tasks/delete.schema.json +18 -0
- package/schemas/responses/tasks/deps.schema.json +18 -0
- package/schemas/responses/tasks/exists.schema.json +18 -0
- package/schemas/responses/tasks/find.schema.json +18 -0
- package/schemas/responses/tasks/get.schema.json +87 -0
- package/schemas/responses/tasks/list.schema.json +18 -0
- package/schemas/responses/tasks/next.schema.json +18 -0
- package/schemas/responses/tasks/promote.schema.json +18 -0
- package/schemas/responses/tasks/reopen.schema.json +18 -0
- package/schemas/responses/tasks/reorder.schema.json +18 -0
- package/schemas/responses/tasks/reparent.schema.json +18 -0
- package/schemas/responses/tasks/tree.schema.json +18 -0
- package/schemas/responses/tasks/unarchive.schema.json +18 -0
- package/schemas/responses/tasks/update.schema.json +18 -0
- package/schemas/responses/validate/compliance.record.schema.json +18 -0
- package/schemas/responses/validate/compliance.summary.schema.json +18 -0
- package/schemas/responses/validate/compliance.violations.schema.json +18 -0
- package/schemas/responses/validate/manifest.schema.json +18 -0
- package/schemas/responses/validate/output.schema.json +18 -0
- package/schemas/responses/validate/protocol.schema.json +18 -0
- package/schemas/responses/validate/schema.schema.json +18 -0
- package/schemas/responses/validate/task.schema.json +18 -0
- package/schemas/responses/validate/test.coverage.schema.json +18 -0
- package/schemas/responses/validate/test.run.schema.json +18 -0
- package/schemas/responses/validate/test.status.schema.json +18 -0
- package/server.json +53 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handler for CLEO CLI operations
|
|
3
|
+
*
|
|
4
|
+
* @task T2913
|
|
5
|
+
* @epic T2908
|
|
6
|
+
*
|
|
7
|
+
* Processes CLI errors, generates contextual fix commands,
|
|
8
|
+
* and formats error responses with recovery suggestions.
|
|
9
|
+
*/
|
|
10
|
+
import { ExitCode, ErrorCategory, getErrorMapping, isError, isRetryable, isNonRecoverable, generateFixCommand, generateSuggestions, } from './exit-codes.js';
|
|
11
|
+
/**
|
|
12
|
+
* Handle CLI error and format response
|
|
13
|
+
*/
|
|
14
|
+
export function handleCLIError(exitCode, context) {
|
|
15
|
+
const mapping = getErrorMapping(exitCode);
|
|
16
|
+
// Extract context from stderr/stdout
|
|
17
|
+
const errorContext = extractErrorContext(exitCode, context);
|
|
18
|
+
// Generate fix command
|
|
19
|
+
const fix = generateFixCommand(exitCode, errorContext);
|
|
20
|
+
// Generate alternatives
|
|
21
|
+
const alternatives = generateSuggestions(exitCode, errorContext);
|
|
22
|
+
return {
|
|
23
|
+
code: mapping.code,
|
|
24
|
+
name: mapping.name,
|
|
25
|
+
exitCode,
|
|
26
|
+
message: formatErrorMessage(exitCode, context, errorContext),
|
|
27
|
+
description: mapping.description,
|
|
28
|
+
category: mapping.category,
|
|
29
|
+
severity: mapping.severity,
|
|
30
|
+
retryable: mapping.retryable,
|
|
31
|
+
fix,
|
|
32
|
+
alternatives,
|
|
33
|
+
context: errorContext,
|
|
34
|
+
documentation: mapping.documentation,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract error context from CLI output
|
|
39
|
+
*/
|
|
40
|
+
function extractErrorContext(exitCode, context) {
|
|
41
|
+
const extracted = {
|
|
42
|
+
command: context.command,
|
|
43
|
+
...context.details,
|
|
44
|
+
};
|
|
45
|
+
// Parse stderr for context clues
|
|
46
|
+
if (context.stderr) {
|
|
47
|
+
const stderr = context.stderr;
|
|
48
|
+
// Extract task IDs
|
|
49
|
+
const taskIdMatch = stderr.match(/T(\d+)/);
|
|
50
|
+
if (taskIdMatch) {
|
|
51
|
+
extracted.taskId = taskIdMatch[0];
|
|
52
|
+
}
|
|
53
|
+
// Extract parent IDs
|
|
54
|
+
const parentMatch = stderr.match(/parent[:\s]+T(\d+)/i);
|
|
55
|
+
if (parentMatch) {
|
|
56
|
+
extracted.parentId = parentMatch[0].match(/T\d+/)?.[0] || '';
|
|
57
|
+
}
|
|
58
|
+
// Extract epic IDs
|
|
59
|
+
const epicMatch = stderr.match(/epic[:\s]+T(\d+)/i);
|
|
60
|
+
if (epicMatch) {
|
|
61
|
+
extracted.epicId = epicMatch[0].match(/T\d+/)?.[0] || '';
|
|
62
|
+
}
|
|
63
|
+
// Extract session IDs
|
|
64
|
+
const sessionMatch = stderr.match(/session[:\s]+([a-z0-9_]+)/i);
|
|
65
|
+
if (sessionMatch) {
|
|
66
|
+
extracted.sessionId = sessionMatch[1];
|
|
67
|
+
}
|
|
68
|
+
// Extract gate names
|
|
69
|
+
const gateMatch = stderr.match(/gate[:\s]+(\w+)/i);
|
|
70
|
+
if (gateMatch) {
|
|
71
|
+
extracted.gateName = gateMatch[1];
|
|
72
|
+
}
|
|
73
|
+
// Extract agent names
|
|
74
|
+
const agentMatch = stderr.match(/agent[:\s]+(\w+)/i);
|
|
75
|
+
if (agentMatch) {
|
|
76
|
+
extracted.agentName = agentMatch[1];
|
|
77
|
+
}
|
|
78
|
+
// Extract resource names
|
|
79
|
+
const resourceMatch = stderr.match(/resource[:\s]+([^\s]+)/i);
|
|
80
|
+
if (resourceMatch) {
|
|
81
|
+
extracted.resource = resourceMatch[1];
|
|
82
|
+
}
|
|
83
|
+
// Extract query strings
|
|
84
|
+
const queryMatch = stderr.match(/query[:\s]+"([^"]+)"/i);
|
|
85
|
+
if (queryMatch) {
|
|
86
|
+
extracted.query = queryMatch[1];
|
|
87
|
+
}
|
|
88
|
+
// Extract percentages
|
|
89
|
+
const percentageMatch = stderr.match(/(\d+)%/);
|
|
90
|
+
if (percentageMatch) {
|
|
91
|
+
extracted.percentage = percentageMatch[1];
|
|
92
|
+
}
|
|
93
|
+
// Extract violations
|
|
94
|
+
const violationsMatch = stderr.match(/violations?[:\s]+(.+)/i);
|
|
95
|
+
if (violationsMatch) {
|
|
96
|
+
extracted.violations = violationsMatch[1];
|
|
97
|
+
}
|
|
98
|
+
// Extract stages
|
|
99
|
+
const stageMatch = stderr.match(/stage[:\s]+(\w+)/i);
|
|
100
|
+
if (stageMatch) {
|
|
101
|
+
extracted.stage = stageMatch[1];
|
|
102
|
+
}
|
|
103
|
+
// Extract missing stages
|
|
104
|
+
const missingStagesMatch = stderr.match(/missing[:\s]+(.+)/i);
|
|
105
|
+
if (missingStagesMatch) {
|
|
106
|
+
extracted.missingStages = missingStagesMatch[1];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return extracted;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Format error message with context
|
|
113
|
+
*/
|
|
114
|
+
function formatErrorMessage(exitCode, context, extracted) {
|
|
115
|
+
const mapping = getErrorMapping(exitCode);
|
|
116
|
+
// Start with base description
|
|
117
|
+
let message = mapping.description;
|
|
118
|
+
// Add context-specific details
|
|
119
|
+
if (context.stderr) {
|
|
120
|
+
// Try to extract first line of error message
|
|
121
|
+
const firstLine = context.stderr.split('\n')[0].trim();
|
|
122
|
+
if (firstLine && firstLine.length < 200) {
|
|
123
|
+
message = firstLine;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return message;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if error is recoverable (can be fixed by user action)
|
|
130
|
+
*/
|
|
131
|
+
export function isRecoverable(exitCode) {
|
|
132
|
+
const mapping = getErrorMapping(exitCode);
|
|
133
|
+
// Context errors require agent action, not user action
|
|
134
|
+
if (mapping.category === ErrorCategory.CONTEXT) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
// Verification locked errors cannot be recovered automatically
|
|
138
|
+
if (exitCode === ExitCode.E_VERIFICATION_LOCKED) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
// Cascade failures need manual intervention
|
|
142
|
+
if (exitCode === ExitCode.E_CASCADE_FAILED) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
// Session close blocked needs tasks to be completed first
|
|
146
|
+
if (exitCode === ExitCode.E_SESSION_CLOSE_BLOCKED) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
// Circular validation needs different agent
|
|
150
|
+
if (exitCode === ExitCode.E_CIRCULAR_VALIDATION) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
// Invalid lifecycle transitions cannot be recovered
|
|
154
|
+
if (exitCode === ExitCode.E_LIFECYCLE_TRANSITION_INVALID) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
// File errors and dependency errors are not recoverable
|
|
158
|
+
if (exitCode === ExitCode.E_FILE_ERROR ||
|
|
159
|
+
exitCode === ExitCode.E_DEPENDENCY_ERROR) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
// Circular references are not recoverable
|
|
163
|
+
if (exitCode === ExitCode.E_CIRCULAR_REFERENCE) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
// Most other errors are recoverable by user action
|
|
167
|
+
return isError(exitCode);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Format error for MCP response
|
|
171
|
+
*/
|
|
172
|
+
export function formatErrorForMCP(error) {
|
|
173
|
+
return {
|
|
174
|
+
success: false,
|
|
175
|
+
error: {
|
|
176
|
+
code: error.code,
|
|
177
|
+
exitCode: error.exitCode,
|
|
178
|
+
message: error.message,
|
|
179
|
+
details: {
|
|
180
|
+
description: error.description,
|
|
181
|
+
category: error.category,
|
|
182
|
+
severity: error.severity,
|
|
183
|
+
retryable: error.retryable,
|
|
184
|
+
recoverable: isRecoverable(error.exitCode),
|
|
185
|
+
context: error.context,
|
|
186
|
+
},
|
|
187
|
+
fix: error.fix,
|
|
188
|
+
alternatives: error.alternatives,
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Add error context from operation details
|
|
194
|
+
*/
|
|
195
|
+
export function addErrorContext(context, additionalDetails) {
|
|
196
|
+
return {
|
|
197
|
+
...context,
|
|
198
|
+
details: {
|
|
199
|
+
...context.details,
|
|
200
|
+
...additionalDetails,
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create error context from operation
|
|
206
|
+
*/
|
|
207
|
+
export function createErrorContext(command, args, stderr, stdout, details) {
|
|
208
|
+
return {
|
|
209
|
+
command,
|
|
210
|
+
args,
|
|
211
|
+
stderr,
|
|
212
|
+
stdout,
|
|
213
|
+
details,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Default maximum retry attempts
|
|
218
|
+
*
|
|
219
|
+
* @task T3142
|
|
220
|
+
*/
|
|
221
|
+
const DEFAULT_MAX_ATTEMPTS = 3;
|
|
222
|
+
/**
|
|
223
|
+
* Retry an operation with exponential backoff for retryable errors.
|
|
224
|
+
*
|
|
225
|
+
* Per MCP-SERVER-SPECIFICATION Section 9.1:
|
|
226
|
+
* - Exit codes 7, 20-22, 60-63 support retry with exponential backoff
|
|
227
|
+
* - Max 3 attempts by default
|
|
228
|
+
* - Backoff: 2^attempt seconds
|
|
229
|
+
* - Tracks retry count in response metadata
|
|
230
|
+
*
|
|
231
|
+
* Non-recoverable errors (Section 9.2) are never retried and
|
|
232
|
+
* immediately rethrown.
|
|
233
|
+
*
|
|
234
|
+
* @task T3142
|
|
235
|
+
*/
|
|
236
|
+
export async function retryOperation(fn, maxAttempts = DEFAULT_MAX_ATTEMPTS) {
|
|
237
|
+
const retriedExitCodes = [];
|
|
238
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
239
|
+
try {
|
|
240
|
+
const result = await fn();
|
|
241
|
+
return {
|
|
242
|
+
result,
|
|
243
|
+
attempts: attempt,
|
|
244
|
+
retriedExitCodes,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
const exitCode = error?.exitCode;
|
|
249
|
+
// Non-recoverable errors must never be retried (Section 9.2)
|
|
250
|
+
if (exitCode !== undefined && isNonRecoverable(exitCode)) {
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
// Non-retryable errors or last attempt: throw immediately
|
|
254
|
+
if (exitCode === undefined ||
|
|
255
|
+
!isRetryable(exitCode) ||
|
|
256
|
+
attempt === maxAttempts) {
|
|
257
|
+
throw error;
|
|
258
|
+
}
|
|
259
|
+
// Track the retried exit code
|
|
260
|
+
retriedExitCodes.push(exitCode);
|
|
261
|
+
// Exponential backoff: 2^attempt seconds
|
|
262
|
+
const delayMs = Math.pow(2, attempt) * 1000;
|
|
263
|
+
await sleep(delayMs);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Should never reach here, but TypeScript requires it
|
|
267
|
+
throw new Error('retryOperation: exhausted all attempts');
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Sleep for a given number of milliseconds
|
|
271
|
+
*
|
|
272
|
+
* @task T3142
|
|
273
|
+
*/
|
|
274
|
+
function sleep(ms) {
|
|
275
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/lib/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Executor Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Executes CLEO CLI commands safely with timeout handling, retry logic,
|
|
5
|
+
* and proper error parsing. Captures stdout, stderr, and exit codes.
|
|
6
|
+
*
|
|
7
|
+
* @task T2914
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Execution options
|
|
11
|
+
*/
|
|
12
|
+
export interface ExecutorOptions {
|
|
13
|
+
/** CLI command domain */
|
|
14
|
+
domain: string;
|
|
15
|
+
/** Operation to perform */
|
|
16
|
+
operation: string;
|
|
17
|
+
/** Positional arguments */
|
|
18
|
+
args?: Array<string | number>;
|
|
19
|
+
/** Named flags/options */
|
|
20
|
+
flags?: Record<string, unknown>;
|
|
21
|
+
/** Timeout in milliseconds (default: 30000) */
|
|
22
|
+
timeout?: number;
|
|
23
|
+
/** Maximum retry attempts (default: 3) */
|
|
24
|
+
maxRetries?: number;
|
|
25
|
+
/** Session ID to bind to */
|
|
26
|
+
sessionId?: string;
|
|
27
|
+
/** Working directory (default: process.cwd()) */
|
|
28
|
+
cwd?: string;
|
|
29
|
+
/** Custom command to execute instead of building from domain/operation */
|
|
30
|
+
customCommand?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Execution result
|
|
34
|
+
*/
|
|
35
|
+
export interface ExecutorResult<T = unknown> {
|
|
36
|
+
/** Whether execution succeeded */
|
|
37
|
+
success: boolean;
|
|
38
|
+
/** Parsed JSON data (if success=true) */
|
|
39
|
+
data?: T;
|
|
40
|
+
/** Error details (if success=false) */
|
|
41
|
+
error?: {
|
|
42
|
+
code: string;
|
|
43
|
+
exitCode?: number;
|
|
44
|
+
message: string;
|
|
45
|
+
details?: unknown;
|
|
46
|
+
fix?: string;
|
|
47
|
+
alternatives?: Array<{
|
|
48
|
+
action: string;
|
|
49
|
+
command: string;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
/** Exit code from CLI */
|
|
53
|
+
exitCode: number;
|
|
54
|
+
/** Raw stdout */
|
|
55
|
+
stdout: string;
|
|
56
|
+
/** Raw stderr */
|
|
57
|
+
stderr: string;
|
|
58
|
+
/** Execution duration in milliseconds */
|
|
59
|
+
duration: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* CLI executor class
|
|
63
|
+
*/
|
|
64
|
+
export declare class CLIExecutor {
|
|
65
|
+
private cliPath;
|
|
66
|
+
private defaultTimeout;
|
|
67
|
+
private defaultMaxRetries;
|
|
68
|
+
constructor(cliPath: string, defaultTimeout?: number, defaultMaxRetries?: number);
|
|
69
|
+
/**
|
|
70
|
+
* Execute CLI command with retry logic
|
|
71
|
+
*/
|
|
72
|
+
execute<T = unknown>(options: ExecutorOptions): Promise<ExecutorResult<T>>;
|
|
73
|
+
/**
|
|
74
|
+
* Execute CLI command once (no retry)
|
|
75
|
+
*/
|
|
76
|
+
private executeOnce;
|
|
77
|
+
/**
|
|
78
|
+
* Build CLI command string
|
|
79
|
+
*/
|
|
80
|
+
private buildCommand;
|
|
81
|
+
/**
|
|
82
|
+
* Build environment variables
|
|
83
|
+
*/
|
|
84
|
+
private buildEnvironment;
|
|
85
|
+
/**
|
|
86
|
+
* Parse command output
|
|
87
|
+
*/
|
|
88
|
+
private parseOutput;
|
|
89
|
+
/**
|
|
90
|
+
* Determine if error is retryable
|
|
91
|
+
*/
|
|
92
|
+
private shouldRetry;
|
|
93
|
+
/**
|
|
94
|
+
* Sleep for specified milliseconds
|
|
95
|
+
*/
|
|
96
|
+
private sleep;
|
|
97
|
+
/**
|
|
98
|
+
* Get CLI version
|
|
99
|
+
*/
|
|
100
|
+
getVersion(): Promise<string>;
|
|
101
|
+
/**
|
|
102
|
+
* Test CLI connection
|
|
103
|
+
*/
|
|
104
|
+
testConnection(): Promise<boolean>;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create executor instance from config
|
|
108
|
+
*/
|
|
109
|
+
export declare function createExecutor(cliPath: string, timeout?: number, maxRetries?: number): CLIExecutor;
|
|
110
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/lib/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IAEf,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAE9B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IAEjB,yCAAyC;IACzC,IAAI,CAAC,EAAE,CAAC,CAAC;IAET,uCAAuC;IACvC,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,KAAK,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC;IAEF,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IAEf,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;gBAFjB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAc,EAC9B,iBAAiB,GAAE,MAAU;IAGvC;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IA6BhF;;OAEG;YACW,WAAW;IAuEzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,WAAW;IA4KnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IA+BnC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAQzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,WAAW,CAEb"}
|