@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,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Router for CLEO MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Routes operations to appropriate domain handlers based on:
|
|
5
|
+
* 1. Gateway type (query vs mutate)
|
|
6
|
+
* 2. Domain (tasks, session, orchestrate, etc.)
|
|
7
|
+
* 3. Operation (get, list, create, update, etc.)
|
|
8
|
+
*
|
|
9
|
+
* @task T2911
|
|
10
|
+
* @task T2912
|
|
11
|
+
* @task T3144 - Security hardening integration
|
|
12
|
+
*/
|
|
13
|
+
import { TasksHandler } from '../domains/tasks.js';
|
|
14
|
+
import { SessionHandler } from '../domains/session.js';
|
|
15
|
+
import { OrchestrateHandler } from '../domains/orchestrate.js';
|
|
16
|
+
import { ResearchHandler } from '../domains/research.js';
|
|
17
|
+
import { LifecycleHandler } from '../domains/lifecycle.js';
|
|
18
|
+
import { ValidateHandler } from '../domains/validate.js';
|
|
19
|
+
import { ReleaseHandler } from '../domains/release.js';
|
|
20
|
+
import { SystemHandler } from '../domains/system.js';
|
|
21
|
+
import { formatError, createError } from './formatter.js';
|
|
22
|
+
import { protocolEnforcer, ProtocolType } from './protocol-enforcement.js';
|
|
23
|
+
import { VerificationGate } from './verification-gates.js';
|
|
24
|
+
import { sanitizeParams, SecurityError } from './security.js';
|
|
25
|
+
import { RateLimiter } from './rate-limiter.js';
|
|
26
|
+
/**
|
|
27
|
+
* Domain routing validation error
|
|
28
|
+
*/
|
|
29
|
+
export class RouterError extends Error {
|
|
30
|
+
code;
|
|
31
|
+
exitCode;
|
|
32
|
+
constructor(message, code = 'E_ROUTING_ERROR', exitCode = 1) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.exitCode = exitCode;
|
|
36
|
+
this.name = 'RouterError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Main domain router that dispatches operations to appropriate handlers
|
|
41
|
+
*/
|
|
42
|
+
export class DomainRouter {
|
|
43
|
+
handlers;
|
|
44
|
+
useProtocolEnforcement;
|
|
45
|
+
verificationGate;
|
|
46
|
+
rateLimiter;
|
|
47
|
+
constructor(executor, useProtocolEnforcement = true, rateLimitConfig) {
|
|
48
|
+
// Initialize all domain handlers
|
|
49
|
+
this.handlers = new Map([
|
|
50
|
+
['tasks', new TasksHandler(executor)],
|
|
51
|
+
['session', new SessionHandler(executor)],
|
|
52
|
+
['orchestrate', new OrchestrateHandler(executor)],
|
|
53
|
+
['research', new ResearchHandler(executor)],
|
|
54
|
+
['lifecycle', new LifecycleHandler(executor)],
|
|
55
|
+
['validate', new ValidateHandler(executor)],
|
|
56
|
+
['release', new ReleaseHandler(executor)],
|
|
57
|
+
['system', new SystemHandler(executor)],
|
|
58
|
+
]);
|
|
59
|
+
this.useProtocolEnforcement = useProtocolEnforcement;
|
|
60
|
+
this.verificationGate = new VerificationGate(useProtocolEnforcement);
|
|
61
|
+
this.rateLimiter = new RateLimiter(rateLimitConfig);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Route an operation to the appropriate domain handler
|
|
65
|
+
*/
|
|
66
|
+
async routeOperation(request) {
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
try {
|
|
69
|
+
// Validate the route
|
|
70
|
+
this.validateRoute(request);
|
|
71
|
+
// Rate limiting check (Section 13.3)
|
|
72
|
+
// Support bypassRateLimit param for testing
|
|
73
|
+
const bypassRateLimit = !!request.params?.bypassRateLimit;
|
|
74
|
+
const rateLimitResult = bypassRateLimit
|
|
75
|
+
? { allowed: true, remaining: Infinity, limit: Infinity, resetMs: 0, category: 'bypassed' }
|
|
76
|
+
: this.rateLimiter.check(request.gateway, request.domain, request.operation);
|
|
77
|
+
if (!rateLimitResult.allowed) {
|
|
78
|
+
return {
|
|
79
|
+
_meta: {
|
|
80
|
+
gateway: request.gateway,
|
|
81
|
+
domain: request.domain,
|
|
82
|
+
operation: request.operation,
|
|
83
|
+
version: '1.0.0',
|
|
84
|
+
timestamp: new Date().toISOString(),
|
|
85
|
+
duration_ms: Date.now() - startTime,
|
|
86
|
+
rateLimit: {
|
|
87
|
+
limit: rateLimitResult.limit,
|
|
88
|
+
remaining: rateLimitResult.remaining,
|
|
89
|
+
resetMs: rateLimitResult.resetMs,
|
|
90
|
+
category: rateLimitResult.category,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
success: false,
|
|
94
|
+
error: {
|
|
95
|
+
code: 'E_RATE_LIMITED',
|
|
96
|
+
exitCode: 429,
|
|
97
|
+
message: `Rate limit exceeded for ${rateLimitResult.category} operations. Limit: ${rateLimitResult.limit}/min. Retry after ${Math.ceil(rateLimitResult.resetMs / 1000)}s.`,
|
|
98
|
+
details: {
|
|
99
|
+
category: rateLimitResult.category,
|
|
100
|
+
limit: rateLimitResult.limit,
|
|
101
|
+
resetMs: rateLimitResult.resetMs,
|
|
102
|
+
},
|
|
103
|
+
fix: `Wait ${Math.ceil(rateLimitResult.resetMs / 1000)} seconds before retrying`,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Sanitize input parameters (T3144)
|
|
108
|
+
if (request.params) {
|
|
109
|
+
try {
|
|
110
|
+
request = {
|
|
111
|
+
...request,
|
|
112
|
+
params: sanitizeParams(request.params),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (sanitizeError) {
|
|
116
|
+
if (sanitizeError instanceof SecurityError) {
|
|
117
|
+
const response = formatError(`${request.domain}.${request.operation}`, createError(sanitizeError.code, sanitizeError.message, 2, { context: { field: sanitizeError.field } }));
|
|
118
|
+
response._meta.duration_ms = Date.now() - startTime;
|
|
119
|
+
return response;
|
|
120
|
+
}
|
|
121
|
+
throw sanitizeError;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Get the handler
|
|
125
|
+
const handler = this.handlers.get(request.domain);
|
|
126
|
+
if (!handler) {
|
|
127
|
+
throw new RouterError(`Unknown domain: ${request.domain}`, 'E_INVALID_DOMAIN', 2);
|
|
128
|
+
}
|
|
129
|
+
// Apply verification gate middleware if enabled
|
|
130
|
+
if (this.useProtocolEnforcement && request.gateway === 'cleo_mutate') {
|
|
131
|
+
// Build operation context for verification
|
|
132
|
+
const context = {
|
|
133
|
+
domain: request.domain,
|
|
134
|
+
operation: request.operation,
|
|
135
|
+
gateway: request.gateway,
|
|
136
|
+
params: request.params,
|
|
137
|
+
taskId: request.params?.taskId,
|
|
138
|
+
protocolType: this.inferProtocolType(request),
|
|
139
|
+
};
|
|
140
|
+
// Run 4-layer verification gate
|
|
141
|
+
const gateResult = await this.verificationGate.verifyOperation(context);
|
|
142
|
+
// If verification fails, return error response
|
|
143
|
+
if (!gateResult.passed) {
|
|
144
|
+
const failedLayer = gateResult.layers[gateResult.blockedAt];
|
|
145
|
+
const response = formatError(`${request.domain}.${request.operation}`, createError(failedLayer.violations[0]?.code || 'E_VERIFICATION_FAILED', gateResult.summary, gateResult.exitCode));
|
|
146
|
+
response._meta.duration_ms = Date.now() - startTime;
|
|
147
|
+
response._meta.verificationGate = {
|
|
148
|
+
blockedAt: gateResult.blockedAt,
|
|
149
|
+
violations: failedLayer.violations,
|
|
150
|
+
};
|
|
151
|
+
return response;
|
|
152
|
+
}
|
|
153
|
+
// Verification passed, apply protocol enforcement
|
|
154
|
+
const response = await protocolEnforcer.enforceProtocol(request, async () => {
|
|
155
|
+
// Dispatch to appropriate gateway method
|
|
156
|
+
if (request.gateway === 'cleo_query') {
|
|
157
|
+
return await handler.query(request.operation, request.params);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
return await handler.mutate(request.operation, request.params);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// Add duration and rate limit metadata
|
|
164
|
+
response._meta.duration_ms = Date.now() - startTime;
|
|
165
|
+
this.addRateLimitMeta(response, rateLimitResult);
|
|
166
|
+
return response;
|
|
167
|
+
}
|
|
168
|
+
// Dispatch without middleware
|
|
169
|
+
let response;
|
|
170
|
+
if (request.gateway === 'cleo_query') {
|
|
171
|
+
response = await handler.query(request.operation, request.params);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
response = await handler.mutate(request.operation, request.params);
|
|
175
|
+
}
|
|
176
|
+
// Add duration and rate limit metadata
|
|
177
|
+
response._meta.duration_ms = Date.now() - startTime;
|
|
178
|
+
this.addRateLimitMeta(response, rateLimitResult);
|
|
179
|
+
return response;
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
// Handle routing errors
|
|
183
|
+
if (error instanceof RouterError) {
|
|
184
|
+
const response = formatError(`${request.domain}.${request.operation}`, createError(error.code, error.message, error.exitCode));
|
|
185
|
+
response._meta.duration_ms = Date.now() - startTime;
|
|
186
|
+
return response;
|
|
187
|
+
}
|
|
188
|
+
// Handle unexpected errors
|
|
189
|
+
const response = formatError(`${request.domain}.${request.operation}`, createError('E_INTERNAL_ERROR', error instanceof Error ? error.message : String(error), 1));
|
|
190
|
+
response._meta.duration_ms = Date.now() - startTime;
|
|
191
|
+
return response;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Validate that the domain/operation combination is valid
|
|
196
|
+
*/
|
|
197
|
+
validateRoute(request) {
|
|
198
|
+
const { gateway, domain, operation } = request;
|
|
199
|
+
// Validate domain exists
|
|
200
|
+
const handler = this.handlers.get(domain);
|
|
201
|
+
if (!handler) {
|
|
202
|
+
throw new RouterError(`Unknown domain: ${domain}`, 'E_INVALID_DOMAIN', 2);
|
|
203
|
+
}
|
|
204
|
+
// Get supported operations for this domain
|
|
205
|
+
const supported = handler.getSupportedOperations();
|
|
206
|
+
// Validate operation for gateway type
|
|
207
|
+
const gatewayType = gateway === 'cleo_query' ? 'query' : 'mutate';
|
|
208
|
+
const validOps = supported[gatewayType];
|
|
209
|
+
if (!validOps.includes(operation)) {
|
|
210
|
+
throw new RouterError(`Operation '${operation}' not supported for ${gateway} in domain '${domain}'`, 'E_INVALID_OPERATION', 2);
|
|
211
|
+
}
|
|
212
|
+
// Validate gateway/domain combination
|
|
213
|
+
if (gateway === 'cleo_query' && domain === 'release') {
|
|
214
|
+
throw new RouterError(`Domain 'release' only supports mutate operations`, 'E_INVALID_GATEWAY', 2);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get list of all domains
|
|
219
|
+
*/
|
|
220
|
+
getDomains() {
|
|
221
|
+
return Array.from(this.handlers.keys());
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get supported operations for a specific domain
|
|
225
|
+
*/
|
|
226
|
+
getDomainOperations(domain) {
|
|
227
|
+
const handler = this.handlers.get(domain);
|
|
228
|
+
return handler ? handler.getSupportedOperations() : null;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get the rate limiter instance (for testing/diagnostics)
|
|
232
|
+
*/
|
|
233
|
+
getRateLimiter() {
|
|
234
|
+
return this.rateLimiter;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Add rate limit metadata to response _meta
|
|
238
|
+
*/
|
|
239
|
+
addRateLimitMeta(response, rateLimitResult) {
|
|
240
|
+
response._meta.rateLimit = {
|
|
241
|
+
limit: rateLimitResult.limit,
|
|
242
|
+
remaining: rateLimitResult.remaining,
|
|
243
|
+
resetMs: rateLimitResult.resetMs,
|
|
244
|
+
category: rateLimitResult.category,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Infer protocol type from request context
|
|
249
|
+
*
|
|
250
|
+
* Used to determine which protocol validation rules apply.
|
|
251
|
+
*/
|
|
252
|
+
inferProtocolType(request) {
|
|
253
|
+
// Orchestrate domain operations map to protocol types
|
|
254
|
+
if (request.domain === 'orchestrate' && request.operation === 'spawn') {
|
|
255
|
+
return request.params?.protocolType;
|
|
256
|
+
}
|
|
257
|
+
// Research domain operations
|
|
258
|
+
if (request.domain === 'research') {
|
|
259
|
+
return ProtocolType.RESEARCH;
|
|
260
|
+
}
|
|
261
|
+
// Lifecycle domain operations map to lifecycle stages
|
|
262
|
+
if (request.domain === 'lifecycle') {
|
|
263
|
+
return request.params?.stage;
|
|
264
|
+
}
|
|
265
|
+
// Release domain operations
|
|
266
|
+
if (request.domain === 'release') {
|
|
267
|
+
return ProtocolType.RELEASE;
|
|
268
|
+
}
|
|
269
|
+
// Validate domain operations
|
|
270
|
+
if (request.domain === 'validate') {
|
|
271
|
+
return ProtocolType.VALIDATION;
|
|
272
|
+
}
|
|
273
|
+
return undefined;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/lib/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema constants and validation helpers for CLEO MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Defines schema URLs and validation utilities for CLEO data structures.
|
|
5
|
+
*
|
|
6
|
+
* @task T2912
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Schema URL for output response envelope
|
|
10
|
+
*/
|
|
11
|
+
export declare const SCHEMA_URL_OUTPUT = "https://cleo-dev.com/schemas/v1/output.schema.json";
|
|
12
|
+
/**
|
|
13
|
+
* Schema URL for task objects
|
|
14
|
+
*/
|
|
15
|
+
export declare const SCHEMA_URL_TASK = "https://cleo-dev.com/schemas/v1/task.schema.json";
|
|
16
|
+
/**
|
|
17
|
+
* Schema URL for session objects
|
|
18
|
+
*/
|
|
19
|
+
export declare const SCHEMA_URL_SESSION = "https://cleo-dev.com/schemas/v1/session.schema.json";
|
|
20
|
+
/**
|
|
21
|
+
* Schema URL for manifest entries
|
|
22
|
+
*/
|
|
23
|
+
export declare const SCHEMA_URL_MANIFEST = "https://cleo-dev.com/schemas/v1/manifest.schema.json";
|
|
24
|
+
/**
|
|
25
|
+
* Schema URL for config objects
|
|
26
|
+
*/
|
|
27
|
+
export declare const SCHEMA_URL_CONFIG = "https://cleo-dev.com/schemas/v1/config.schema.json";
|
|
28
|
+
/**
|
|
29
|
+
* All schema URLs by type
|
|
30
|
+
*/
|
|
31
|
+
export declare const SCHEMA_URLS: {
|
|
32
|
+
readonly output: "https://cleo-dev.com/schemas/v1/output.schema.json";
|
|
33
|
+
readonly task: "https://cleo-dev.com/schemas/v1/task.schema.json";
|
|
34
|
+
readonly session: "https://cleo-dev.com/schemas/v1/session.schema.json";
|
|
35
|
+
readonly manifest: "https://cleo-dev.com/schemas/v1/manifest.schema.json";
|
|
36
|
+
readonly config: "https://cleo-dev.com/schemas/v1/config.schema.json";
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Get schema URL by type
|
|
40
|
+
*/
|
|
41
|
+
export declare function getSchemaUrl(type: keyof typeof SCHEMA_URLS): string;
|
|
42
|
+
/**
|
|
43
|
+
* Validate that an object has the expected schema reference
|
|
44
|
+
*/
|
|
45
|
+
export declare function hasValidSchema(obj: unknown, expectedType: keyof typeof SCHEMA_URLS): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Schema validation error
|
|
48
|
+
*/
|
|
49
|
+
export declare class SchemaValidationError extends Error {
|
|
50
|
+
schemaType: string;
|
|
51
|
+
field: string;
|
|
52
|
+
constraint: string;
|
|
53
|
+
constructor(schemaType: string, field: string, constraint: string);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,uDAAuD,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,eAAe,qDAAqD,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,mBAAmB,yDAAyD,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,iBAAiB,uDAAuD,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC;AAEX;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,OAAO,WAAW,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,WAAW,GAAG,OAAO,CAS5F;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAErC,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,MAAM;IACb,UAAU,EAAE,MAAM;gBAFlB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM;CAK5B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema constants and validation helpers for CLEO MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Defines schema URLs and validation utilities for CLEO data structures.
|
|
5
|
+
*
|
|
6
|
+
* @task T2912
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Schema URL for output response envelope
|
|
10
|
+
*/
|
|
11
|
+
export const SCHEMA_URL_OUTPUT = 'https://cleo-dev.com/schemas/v1/output.schema.json';
|
|
12
|
+
/**
|
|
13
|
+
* Schema URL for task objects
|
|
14
|
+
*/
|
|
15
|
+
export const SCHEMA_URL_TASK = 'https://cleo-dev.com/schemas/v1/task.schema.json';
|
|
16
|
+
/**
|
|
17
|
+
* Schema URL for session objects
|
|
18
|
+
*/
|
|
19
|
+
export const SCHEMA_URL_SESSION = 'https://cleo-dev.com/schemas/v1/session.schema.json';
|
|
20
|
+
/**
|
|
21
|
+
* Schema URL for manifest entries
|
|
22
|
+
*/
|
|
23
|
+
export const SCHEMA_URL_MANIFEST = 'https://cleo-dev.com/schemas/v1/manifest.schema.json';
|
|
24
|
+
/**
|
|
25
|
+
* Schema URL for config objects
|
|
26
|
+
*/
|
|
27
|
+
export const SCHEMA_URL_CONFIG = 'https://cleo-dev.com/schemas/v1/config.schema.json';
|
|
28
|
+
/**
|
|
29
|
+
* All schema URLs by type
|
|
30
|
+
*/
|
|
31
|
+
export const SCHEMA_URLS = {
|
|
32
|
+
output: SCHEMA_URL_OUTPUT,
|
|
33
|
+
task: SCHEMA_URL_TASK,
|
|
34
|
+
session: SCHEMA_URL_SESSION,
|
|
35
|
+
manifest: SCHEMA_URL_MANIFEST,
|
|
36
|
+
config: SCHEMA_URL_CONFIG,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Get schema URL by type
|
|
40
|
+
*/
|
|
41
|
+
export function getSchemaUrl(type) {
|
|
42
|
+
return SCHEMA_URLS[type];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validate that an object has the expected schema reference
|
|
46
|
+
*/
|
|
47
|
+
export function hasValidSchema(obj, expectedType) {
|
|
48
|
+
if (typeof obj !== 'object' || obj === null) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const record = obj;
|
|
52
|
+
const expectedUrl = SCHEMA_URLS[expectedType];
|
|
53
|
+
return record.$schema === expectedUrl;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Schema validation error
|
|
57
|
+
*/
|
|
58
|
+
export class SchemaValidationError extends Error {
|
|
59
|
+
schemaType;
|
|
60
|
+
field;
|
|
61
|
+
constraint;
|
|
62
|
+
constructor(schemaType, field, constraint) {
|
|
63
|
+
super(`Schema validation failed for ${schemaType}.${field}: ${constraint}`);
|
|
64
|
+
this.schemaType = schemaType;
|
|
65
|
+
this.field = field;
|
|
66
|
+
this.constraint = constraint;
|
|
67
|
+
this.name = 'SchemaValidationError';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,oDAAoD,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,kDAAkD,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,qDAAqD,CAAC;AAExF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,sDAAsD,CAAC;AAE1F;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,oDAAoD,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,iBAAiB;IACzB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,iBAAiB;CACjB,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAA8B;IACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,YAAsC;IACjF,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAErC;IACA;IACA;IAHT,YACS,UAAkB,EAClB,KAAa,EACb,UAAkB;QAEzB,KAAK,CAAC,gCAAgC,UAAU,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC,CAAC;QAJrE,eAAU,GAAV,UAAU,CAAQ;QAClB,UAAK,GAAL,KAAK,CAAQ;QACb,eAAU,GAAV,UAAU,CAAQ;QAGzB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Hardening and Input Sanitization for CLEO MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Provides input validation, path sanitization, content filtering,
|
|
5
|
+
* enum checking, and rate limiting for all MCP operations.
|
|
6
|
+
*
|
|
7
|
+
* @task T3144
|
|
8
|
+
* @epic T3125
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Security validation error thrown when input fails sanitization
|
|
12
|
+
*/
|
|
13
|
+
export declare class SecurityError extends Error {
|
|
14
|
+
code: string;
|
|
15
|
+
field?: string | undefined;
|
|
16
|
+
constructor(message: string, code?: string, field?: string | undefined);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize and validate a task ID
|
|
20
|
+
*
|
|
21
|
+
* Validates format: ^T[0-9]+$
|
|
22
|
+
* Rejects empty, malformed, or excessively large IDs
|
|
23
|
+
*
|
|
24
|
+
* @param id - Raw task ID input
|
|
25
|
+
* @returns Sanitized task ID
|
|
26
|
+
* @throws SecurityError if ID is invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare function sanitizeTaskId(id: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Sanitize and validate a file path
|
|
31
|
+
*
|
|
32
|
+
* Prevents path traversal attacks by ensuring the resolved path
|
|
33
|
+
* stays within the project root directory.
|
|
34
|
+
*
|
|
35
|
+
* @param path - Raw path input
|
|
36
|
+
* @param projectRoot - Project root directory (absolute path)
|
|
37
|
+
* @returns Sanitized absolute path within project root
|
|
38
|
+
* @throws SecurityError if path escapes project root or is invalid
|
|
39
|
+
*/
|
|
40
|
+
export declare function sanitizePath(path: string, projectRoot: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Sanitize content string
|
|
43
|
+
*
|
|
44
|
+
* Enforces size limits and strips control characters (except newline, tab, CR).
|
|
45
|
+
*
|
|
46
|
+
* @param content - Raw content string
|
|
47
|
+
* @param maxLength - Maximum allowed length (default: 64KB)
|
|
48
|
+
* @returns Sanitized content string
|
|
49
|
+
* @throws SecurityError if content exceeds size limit
|
|
50
|
+
*/
|
|
51
|
+
export declare function sanitizeContent(content: string, maxLength?: number): string;
|
|
52
|
+
/**
|
|
53
|
+
* Validate that a value is in an allowed enum set
|
|
54
|
+
*
|
|
55
|
+
* @param value - Value to validate
|
|
56
|
+
* @param allowed - Array of allowed values
|
|
57
|
+
* @param fieldName - Name of the field (for error messages)
|
|
58
|
+
* @returns The validated value
|
|
59
|
+
* @throws SecurityError if value is not in allowed set
|
|
60
|
+
*/
|
|
61
|
+
export declare function validateEnum(value: string, allowed: string[], fieldName: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Known enum values for CLEO domains
|
|
64
|
+
*/
|
|
65
|
+
export declare const VALID_DOMAINS: readonly ["tasks", "session", "orchestrate", "research", "lifecycle", "validate", "release", "system"];
|
|
66
|
+
export declare const VALID_GATEWAYS: readonly ["cleo_query", "cleo_mutate"];
|
|
67
|
+
export declare const VALID_STATUSES: readonly ["pending", "active", "blocked", "done"];
|
|
68
|
+
export declare const VALID_PRIORITIES: readonly ["low", "medium", "high", "critical"];
|
|
69
|
+
/**
|
|
70
|
+
* Rate limiter configuration
|
|
71
|
+
*/
|
|
72
|
+
export interface RateLimitConfig {
|
|
73
|
+
/** Maximum requests allowed in the window */
|
|
74
|
+
maxRequests: number;
|
|
75
|
+
/** Time window in milliseconds */
|
|
76
|
+
windowMs: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Rate limit check result
|
|
80
|
+
*/
|
|
81
|
+
export interface RateLimitResult {
|
|
82
|
+
/** Whether the request is allowed */
|
|
83
|
+
allowed: boolean;
|
|
84
|
+
/** Remaining requests in current window */
|
|
85
|
+
remaining: number;
|
|
86
|
+
/** Milliseconds until window resets */
|
|
87
|
+
resetMs: number;
|
|
88
|
+
/** Total limit for the window */
|
|
89
|
+
limit: number;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Default rate limit configurations per operation type
|
|
93
|
+
*/
|
|
94
|
+
export declare const DEFAULT_RATE_LIMITS: Record<string, RateLimitConfig>;
|
|
95
|
+
/**
|
|
96
|
+
* In-memory sliding window rate limiter
|
|
97
|
+
*
|
|
98
|
+
* Tracks request timestamps per key and enforces configurable limits.
|
|
99
|
+
*/
|
|
100
|
+
export declare class RateLimiter {
|
|
101
|
+
private windows;
|
|
102
|
+
private configs;
|
|
103
|
+
constructor(configs?: Record<string, RateLimitConfig>);
|
|
104
|
+
/**
|
|
105
|
+
* Check if a request is allowed under rate limits
|
|
106
|
+
*
|
|
107
|
+
* @param key - Rate limit bucket key (e.g., 'query', 'mutate', 'spawn')
|
|
108
|
+
* @returns Rate limit check result
|
|
109
|
+
*/
|
|
110
|
+
check(key: string): RateLimitResult;
|
|
111
|
+
/**
|
|
112
|
+
* Record a request (call after check returns allowed: true)
|
|
113
|
+
*
|
|
114
|
+
* @param key - Rate limit bucket key
|
|
115
|
+
*/
|
|
116
|
+
record(key: string): void;
|
|
117
|
+
/**
|
|
118
|
+
* Check and record in one step
|
|
119
|
+
*
|
|
120
|
+
* @param key - Rate limit bucket key
|
|
121
|
+
* @returns Rate limit check result (recorded if allowed)
|
|
122
|
+
*/
|
|
123
|
+
consume(key: string): RateLimitResult;
|
|
124
|
+
/**
|
|
125
|
+
* Reset rate limit state for a specific key or all keys
|
|
126
|
+
*
|
|
127
|
+
* @param key - Optional key to reset (resets all if omitted)
|
|
128
|
+
*/
|
|
129
|
+
reset(key?: string): void;
|
|
130
|
+
/**
|
|
131
|
+
* Get current configuration for a key
|
|
132
|
+
*/
|
|
133
|
+
getConfig(key: string): RateLimitConfig | undefined;
|
|
134
|
+
/**
|
|
135
|
+
* Update configuration for a key
|
|
136
|
+
*/
|
|
137
|
+
setConfig(key: string, config: RateLimitConfig): void;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Sanitize all params in a DomainRequest before routing
|
|
141
|
+
*
|
|
142
|
+
* Applies appropriate sanitization based on known field names:
|
|
143
|
+
* - taskId, parent, epicId -> sanitizeTaskId
|
|
144
|
+
* - path, file -> sanitizePath (if projectRoot provided)
|
|
145
|
+
* - title, description, notes, content -> sanitizeContent
|
|
146
|
+
* - status -> validateEnum(VALID_STATUSES)
|
|
147
|
+
* - priority -> validateEnum(VALID_PRIORITIES)
|
|
148
|
+
* - domain -> validateEnum(VALID_DOMAINS)
|
|
149
|
+
*
|
|
150
|
+
* @param params - Raw request parameters
|
|
151
|
+
* @param projectRoot - Project root for path sanitization
|
|
152
|
+
* @returns Sanitized parameters
|
|
153
|
+
* @throws SecurityError on validation failure
|
|
154
|
+
*/
|
|
155
|
+
export declare function sanitizeParams(params: Record<string, unknown> | undefined, projectRoot?: string): Record<string, unknown> | undefined;
|
|
156
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,MAAM;gBAFrB,OAAO,EAAE,MAAM,EACR,IAAI,GAAE,MAA+B,EACrC,KAAK,CAAC,EAAE,MAAM,YAAA;CAKxB;AAsBD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAuCjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA4DtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAmC,GAC7C,MAAM,CAmBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAoBR;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,wGAGhB,CAAC;AAEX,eAAO,MAAM,cAAc,wCAAyC,CAAC;AAErE,eAAO,MAAM,cAAc,mDAAoD,CAAC;AAEhF,eAAO,MAAM,gBAAgB,gDAAiD,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAI/D,CAAC;AAEF;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,OAAO,CAA2C;gBAE9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAQrD;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAiCnC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMzB;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAUrC;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQzB;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAInD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;CAGtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA8ErC"}
|