atabey 0.0.13 → 0.0.14
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/ATABEY.md +1 -1
- package/README.md +252 -52
- package/dist/framework-mcp/src/index.js +914 -62
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/compliance/mask_pii.d.ts +17 -0
- package/dist/framework-mcp/src/tools/compliance/mask_pii.js +56 -0
- package/dist/framework-mcp/src/tools/compliance/mask_pii.js.map +1 -0
- package/dist/framework-mcp/src/tools/definitions.js +10 -9
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
- package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -1
- package/dist/framework-mcp/src/tools/index.js +7 -8
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/approve_operation.d.ts +22 -0
- package/dist/framework-mcp/src/tools/messaging/approve_operation.js +81 -0
- package/dist/framework-mcp/src/tools/messaging/approve_operation.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +15 -0
- package/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
- package/dist/framework-mcp/src/tools/messaging/ask_human.js.map +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.js +3 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
- package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +13 -64
- package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js.map +1 -1
- package/dist/framework-mcp/src/tools/schemas.d.ts +48 -53
- package/dist/framework-mcp/src/tools/schemas.js +18 -22
- package/dist/framework-mcp/src/tools/schemas.js.map +1 -1
- package/dist/framework-mcp/src/tools/shell/run_command.js +10 -0
- package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
- package/dist/framework-mcp/src/tools/types.d.ts +11 -105
- package/dist/framework-mcp/src/tools/types.js +1 -0
- package/dist/framework-mcp/src/tools/types.js.map +1 -1
- package/dist/framework-mcp/src/utils/auth.d.ts +36 -0
- package/dist/framework-mcp/src/utils/auth.js +79 -0
- package/dist/framework-mcp/src/utils/auth.js.map +1 -0
- package/dist/framework-mcp/src/utils/auto-rollback.d.ts +71 -0
- package/dist/framework-mcp/src/utils/auto-rollback.js +266 -0
- package/dist/framework-mcp/src/utils/auto-rollback.js.map +1 -0
- package/dist/framework-mcp/src/utils/compliance.js +12 -4
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
- package/dist/framework-mcp/src/utils/context-optimizer.d.ts +69 -0
- package/dist/framework-mcp/src/utils/context-optimizer.js +157 -0
- package/dist/framework-mcp/src/utils/context-optimizer.js.map +1 -0
- package/dist/framework-mcp/src/utils/discipline.d.ts +68 -0
- package/dist/framework-mcp/src/utils/discipline.js +218 -0
- package/dist/framework-mcp/src/utils/discipline.js.map +1 -0
- package/dist/framework-mcp/src/utils/finops.d.ts +143 -0
- package/dist/framework-mcp/src/utils/finops.js +326 -0
- package/dist/framework-mcp/src/utils/finops.js.map +1 -0
- package/dist/framework-mcp/src/utils/human-in-loop.d.ts +95 -0
- package/dist/framework-mcp/src/utils/human-in-loop.js +216 -0
- package/dist/framework-mcp/src/utils/human-in-loop.js.map +1 -0
- package/dist/framework-mcp/src/utils/license-scanner.d.ts +71 -0
- package/dist/framework-mcp/src/utils/license-scanner.js +284 -0
- package/dist/framework-mcp/src/utils/license-scanner.js.map +1 -0
- package/dist/framework-mcp/src/utils/loop-detector.d.ts +105 -0
- package/dist/framework-mcp/src/utils/loop-detector.js +362 -0
- package/dist/framework-mcp/src/utils/loop-detector.js.map +1 -0
- package/dist/framework-mcp/src/utils/quality.d.ts +19 -0
- package/dist/framework-mcp/src/utils/quality.js +124 -0
- package/dist/framework-mcp/src/utils/quality.js.map +1 -0
- package/dist/framework-mcp/src/utils/rules-engine.d.ts +78 -0
- package/dist/framework-mcp/src/utils/rules-engine.js +232 -0
- package/dist/framework-mcp/src/utils/rules-engine.js.map +1 -0
- package/dist/framework-mcp/src/utils/silent-router.d.ts +47 -0
- package/dist/framework-mcp/src/utils/silent-router.js +129 -0
- package/dist/framework-mcp/src/utils/silent-router.js.map +1 -0
- package/dist/framework-mcp/src/utils/storage.d.ts +1 -0
- package/dist/framework-mcp/src/utils/storage.js +2 -2
- package/dist/framework-mcp/src/utils/storage.js.map +1 -1
- package/dist/framework-mcp/src/utils/telemetry-streamer.d.ts +133 -0
- package/dist/framework-mcp/src/utils/telemetry-streamer.js +397 -0
- package/dist/framework-mcp/src/utils/telemetry-streamer.js.map +1 -0
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +2 -2
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/framework/run_tests.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/framework/run_tests.test.js +49 -0
- package/dist/framework-mcp/tests/tools/framework/run_tests.test.js.map +1 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +14 -5
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/observability/check_ports.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/observability/check_ports.test.js +30 -0
- package/dist/framework-mcp/tests/tools/observability/check_ports.test.js.map +1 -0
- package/dist/framework-mcp/tests/tools/shell/run_command.test.js +7 -0
- package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -1
- package/dist/framework-mcp/tests/utils/auto-rollback.test.d.ts +7 -0
- package/dist/framework-mcp/tests/utils/auto-rollback.test.js +178 -0
- package/dist/framework-mcp/tests/utils/auto-rollback.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/context-optimizer.test.d.ts +1 -0
- package/dist/framework-mcp/tests/utils/context-optimizer.test.js +62 -0
- package/dist/framework-mcp/tests/utils/context-optimizer.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/finops.test.d.ts +7 -0
- package/dist/framework-mcp/tests/utils/finops.test.js +157 -0
- package/dist/framework-mcp/tests/utils/finops.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/human-in-loop.test.d.ts +1 -0
- package/dist/framework-mcp/tests/utils/human-in-loop.test.js +59 -0
- package/dist/framework-mcp/tests/utils/human-in-loop.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/license-scanner.test.d.ts +7 -0
- package/dist/framework-mcp/tests/utils/license-scanner.test.js +131 -0
- package/dist/framework-mcp/tests/utils/license-scanner.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/loop-detector.test.d.ts +7 -0
- package/dist/framework-mcp/tests/utils/loop-detector.test.js +204 -0
- package/dist/framework-mcp/tests/utils/loop-detector.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/rules-engine.test.d.ts +1 -0
- package/dist/framework-mcp/tests/utils/rules-engine.test.js +106 -0
- package/dist/framework-mcp/tests/utils/rules-engine.test.js.map +1 -0
- package/dist/framework-mcp/tests/utils/telemetry-streamer.test.d.ts +7 -0
- package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js +201 -0
- package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js.map +1 -0
- package/dist/src/cli/commands/check.js +16 -1
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/dashboard.js +188 -164
- package/dist/src/cli/commands/dashboard.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +2 -2
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-core.d.ts +2 -0
- package/dist/src/cli/commands/init/scaffold-core.js +16 -1
- package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-ops.js +2 -2
- package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-standards.js +13 -1
- package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts +4 -0
- package/dist/src/cli/commands/init.js +80 -24
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/quickstart.d.ts +1 -1
- package/dist/src/cli/commands/quickstart.js +12 -24
- package/dist/src/cli/commands/quickstart.js.map +1 -1
- package/dist/src/cli/index.js +24 -23
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/shims.js +7 -7
- package/dist/src/cli/utils/pkg.js +2 -3
- package/dist/src/cli/utils/pkg.js.map +1 -1
- package/dist/src/cli/utils/quality.d.ts +10 -0
- package/dist/src/cli/utils/quality.js +10 -0
- package/dist/src/cli/utils/quality.js.map +1 -0
- package/dist/src/modules/agents/definitions.js +45 -40
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/modules/agents/registry/manager.js +6 -1
- package/dist/src/modules/agents/registry/manager.js.map +1 -1
- package/dist/src/modules/engines/agent-executor.d.ts +6 -10
- package/dist/src/modules/engines/agent-executor.js +53 -21
- package/dist/src/modules/engines/agent-executor.js.map +1 -1
- package/dist/src/modules/engines/agent-loop.d.ts +34 -0
- package/dist/src/modules/engines/agent-loop.js +102 -0
- package/dist/src/modules/engines/agent-loop.js.map +1 -0
- package/dist/src/modules/engines/evaluation-engine.js +2 -2
- package/dist/src/modules/engines/evaluation-engine.js.map +1 -1
- package/dist/src/modules/engines/quality-gate.d.ts +13 -5
- package/dist/src/modules/engines/quality-gate.js +39 -31
- package/dist/src/modules/engines/quality-gate.js.map +1 -1
- package/dist/src/modules/engines/routing-engine.d.ts +5 -3
- package/dist/src/modules/engines/routing-engine.js +16 -9
- package/dist/src/modules/engines/routing-engine.js.map +1 -1
- package/dist/src/modules/gateway/cost-tracker.d.ts +5 -0
- package/dist/src/modules/gateway/cost-tracker.js +71 -0
- package/dist/src/modules/gateway/cost-tracker.js.map +1 -1
- package/dist/src/modules/gateway/gateway.d.ts +4 -0
- package/dist/src/modules/gateway/gateway.js +8 -0
- package/dist/src/modules/gateway/gateway.js.map +1 -1
- package/dist/src/shared/audit.js +3 -2
- package/dist/src/shared/audit.js.map +1 -1
- package/dist/src/shared/pii.d.ts +41 -9
- package/dist/src/shared/pii.js +122 -31
- package/dist/src/shared/pii.js.map +1 -1
- package/dist/src/shared/storage.d.ts +19 -0
- package/dist/src/shared/storage.js +46 -6
- package/dist/src/shared/storage.js.map +1 -1
- package/dist/tests/embedding.test.d.ts +1 -0
- package/dist/tests/embedding.test.js +82 -0
- package/dist/tests/embedding.test.js.map +1 -0
- package/dist/tests/engines/evaluation-engine.test.d.ts +1 -0
- package/dist/tests/engines/evaluation-engine.test.js +71 -0
- package/dist/tests/engines/evaluation-engine.test.js.map +1 -0
- package/dist/tests/engines/planning-engine.test.d.ts +1 -0
- package/dist/tests/engines/planning-engine.test.js +100 -0
- package/dist/tests/engines/planning-engine.test.js.map +1 -0
- package/dist/tests/engines/quality-gate.test.d.ts +1 -0
- package/dist/tests/engines/quality-gate.test.js +59 -0
- package/dist/tests/engines/quality-gate.test.js.map +1 -0
- package/dist/tests/engines/risk-engine.test.d.ts +1 -0
- package/dist/tests/engines/risk-engine.test.js +80 -0
- package/dist/tests/engines/risk-engine.test.js.map +1 -0
- package/dist/tests/engines/routing-engine.test.d.ts +1 -0
- package/dist/tests/engines/routing-engine.test.js +78 -0
- package/dist/tests/engines/routing-engine.test.js.map +1 -0
- package/dist/tests/integration/hermes_locking.test.js +1 -0
- package/dist/tests/integration/hermes_locking.test.js.map +1 -1
- package/dist/tests/modules/gateway/cost-tracker.test.js +20 -1
- package/dist/tests/modules/gateway/cost-tracker.test.js.map +1 -1
- package/dist/tests/shared/lock.test.d.ts +1 -0
- package/dist/tests/shared/lock.test.js +95 -0
- package/dist/tests/shared/lock.test.js.map +1 -0
- package/dist/tests/shared/pii.test.d.ts +1 -0
- package/dist/tests/shared/pii.test.js +183 -0
- package/dist/tests/shared/pii.test.js.map +1 -0
- package/framework-mcp/README.md +307 -35
- package/framework-mcp/dist/dashboard/assets/index-B2mYld0c.js +1221 -0
- package/framework-mcp/dist/dashboard/index.html +1 -1
- package/framework-mcp/dist/framework-mcp/src/index.js +914 -62
- package/framework-mcp/dist/framework-mcp/src/tools/compliance/mask_pii.js +55 -0
- package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +10 -9
- package/framework-mcp/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
- package/framework-mcp/dist/framework-mcp/src/tools/index.js +7 -8
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/approve_operation.js +80 -0
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
- package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +3 -1
- package/framework-mcp/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +13 -64
- package/framework-mcp/dist/framework-mcp/src/tools/schemas.js +18 -22
- package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +10 -0
- package/framework-mcp/dist/framework-mcp/src/tools/types.js +1 -0
- package/framework-mcp/dist/framework-mcp/src/utils/auth.js +78 -0
- package/framework-mcp/dist/framework-mcp/src/utils/auto-rollback.js +265 -0
- package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +12 -4
- package/framework-mcp/dist/framework-mcp/src/utils/context-optimizer.js +156 -0
- package/framework-mcp/dist/framework-mcp/src/utils/discipline.js +217 -0
- package/framework-mcp/dist/framework-mcp/src/utils/finops.js +325 -0
- package/framework-mcp/dist/framework-mcp/src/utils/human-in-loop.js +215 -0
- package/framework-mcp/dist/framework-mcp/src/utils/license-scanner.js +283 -0
- package/framework-mcp/dist/framework-mcp/src/utils/loop-detector.js +361 -0
- package/framework-mcp/dist/framework-mcp/src/utils/quality.js +123 -0
- package/framework-mcp/dist/framework-mcp/src/utils/rules-engine.js +231 -0
- package/framework-mcp/dist/framework-mcp/src/utils/silent-router.js +128 -0
- package/framework-mcp/dist/framework-mcp/src/utils/storage.js +2 -2
- package/framework-mcp/dist/framework-mcp/src/utils/telemetry-streamer.js +396 -0
- package/framework-mcp/dist/src/cli/platforms/core.js +72 -0
- package/framework-mcp/dist/src/cli/platforms/index.js +5 -0
- package/framework-mcp/dist/src/cli/platforms/paths.js +101 -0
- package/framework-mcp/dist/src/cli/platforms/scaffold.js +72 -0
- package/framework-mcp/dist/src/cli/platforms/utils.js +75 -0
- package/framework-mcp/dist/src/cli/utils/claude.js +57 -0
- package/framework-mcp/dist/src/cli/utils/compliance.js +12 -0
- package/framework-mcp/dist/src/cli/utils/fs.js +138 -0
- package/framework-mcp/dist/src/cli/utils/pkg.js +282 -0
- package/framework-mcp/dist/src/cli/utils/quality.js +9 -0
- package/framework-mcp/dist/src/modules/agents/definitions.js +563 -0
- package/framework-mcp/dist/src/modules/agents/registry/analyst.js +39 -0
- package/framework-mcp/dist/src/modules/agents/registry/architect.js +42 -0
- package/framework-mcp/dist/src/modules/agents/registry/backend.js +50 -0
- package/framework-mcp/dist/src/modules/agents/registry/database.js +45 -0
- package/framework-mcp/dist/src/modules/agents/registry/devops.js +45 -0
- package/framework-mcp/dist/src/modules/agents/registry/explorer.js +37 -0
- package/framework-mcp/dist/src/modules/agents/registry/frontend.js +52 -0
- package/framework-mcp/dist/src/modules/agents/registry/git.js +36 -0
- package/framework-mcp/dist/src/modules/agents/registry/manager.js +64 -0
- package/framework-mcp/dist/src/modules/agents/registry/mobile.js +41 -0
- package/framework-mcp/dist/src/modules/agents/registry/native.js +41 -0
- package/framework-mcp/dist/src/modules/agents/registry/quality.js +43 -0
- package/framework-mcp/dist/src/modules/agents/registry/security.js +42 -0
- package/framework-mcp/dist/src/modules/agents/types.js +1 -0
- package/framework-mcp/dist/src/modules/engines/quality-gate.js +92 -0
- package/framework-mcp/dist/src/modules/engines/risk-engine.js +105 -0
- package/framework-mcp/dist/src/modules/engines/routing-engine.js +408 -0
- package/framework-mcp/dist/src/modules/engines/types.js +1 -0
- package/framework-mcp/dist/src/modules/providers/definitions.js +140 -0
- package/framework-mcp/dist/src/modules/providers/registry.js +18 -0
- package/framework-mcp/dist/src/modules/providers/shared.js +104 -0
- package/framework-mcp/dist/src/modules/providers/types.js +1 -0
- package/framework-mcp/dist/src/modules/skills/adapter-skills.js +449 -0
- package/framework-mcp/dist/src/modules/skills/definitions.js +70 -0
- package/framework-mcp/dist/src/shared/audit.js +220 -0
- package/framework-mcp/dist/src/shared/errors.js +68 -0
- package/framework-mcp/dist/src/shared/lock.js +159 -0
- package/framework-mcp/dist/src/shared/pii.js +122 -31
- package/framework-mcp/dist/src/shared/retention.js +170 -0
- package/framework-mcp/dist/src/shared/storage.js +46 -6
- package/framework-mcp/dist/src/shared/string.js +29 -0
- package/framework-mcp/package.json +8 -2
- package/mcp.json +11 -6
- package/package.json +13 -6
- package/templates/full/ATABEY_FULL.md +1 -1
- package/framework-mcp/dist/dashboard/assets/index-BAPGLiWE.js +0 -267
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ─── RULES ENGINE (Prompt Conflict Resolution) ────────────────────
|
|
3
|
+
*
|
|
4
|
+
* Resolves conflicts between AI CLI built-in prompts and Atabey governance rules.
|
|
5
|
+
* Ensures Atabey's critical rules ALWAYS override CLI-level instructions.
|
|
6
|
+
*
|
|
7
|
+
* Priority System:
|
|
8
|
+
* - CRITICAL (P0): Non-bypassable rules (zero any, no console.log, PII masking)
|
|
9
|
+
* - HIGH (P1): Important rules that should not be violated
|
|
10
|
+
* - MEDIUM (P2): Standard best practices
|
|
11
|
+
* - LOW (P3): Recommendations only
|
|
12
|
+
*
|
|
13
|
+
* Enforcement Mechanisms:
|
|
14
|
+
* 1. Pre-execution: Rule validation BEFORE tool runs
|
|
15
|
+
* 2. Post-execution: Scan changed files for violations → auto-rollback
|
|
16
|
+
* 3. CLI System Prompt Override: Inject critical rules at MCP initialization
|
|
17
|
+
*/
|
|
18
|
+
export type RulePriority = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
|
|
19
|
+
export interface GovernanceRule {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
priority: RulePriority;
|
|
24
|
+
/** Regex pattern to detect violations in file content */
|
|
25
|
+
detectPattern?: RegExp;
|
|
26
|
+
/** Tool names this rule applies to */
|
|
27
|
+
appliesToTools?: string[];
|
|
28
|
+
/** File extensions this rule applies to (e.g., .ts, .tsx) */
|
|
29
|
+
appliesToExtensions?: string[];
|
|
30
|
+
/** Error message when violated */
|
|
31
|
+
errorMessage: string;
|
|
32
|
+
/** Auto-fix expression (optional) */
|
|
33
|
+
autoFix?: string;
|
|
34
|
+
/** Whether this rule can be bypassed */
|
|
35
|
+
bypassable: boolean;
|
|
36
|
+
}
|
|
37
|
+
declare const GOVERNANCE_RULES: GovernanceRule[];
|
|
38
|
+
/**
|
|
39
|
+
* Get all governance rules.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getAllRules(): GovernanceRule[];
|
|
42
|
+
/**
|
|
43
|
+
* Get rules by priority level.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getRulesByPriority(priority: RulePriority): GovernanceRule[];
|
|
46
|
+
/**
|
|
47
|
+
* Get non-bypassable rules (CRITICAL + HIGH non-bypassable).
|
|
48
|
+
*/
|
|
49
|
+
export declare function getNonBypassableRules(): GovernanceRule[];
|
|
50
|
+
/**
|
|
51
|
+
* Scan file content for rule violations.
|
|
52
|
+
* Returns array of violations found.
|
|
53
|
+
*/
|
|
54
|
+
export declare function scanFileForViolations(filePath: string, content: string): Array<{
|
|
55
|
+
rule: GovernanceRule;
|
|
56
|
+
match: string;
|
|
57
|
+
line: number;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Validate tool arguments against governance rules.
|
|
61
|
+
* Returns violation messages if any critical rule is violated.
|
|
62
|
+
*/
|
|
63
|
+
export declare function validateArgsAgainstRules(toolName: string, args: Record<string, unknown>): string | null;
|
|
64
|
+
/**
|
|
65
|
+
* Validate tool response for governance violations.
|
|
66
|
+
* Returns violation messages if found.
|
|
67
|
+
*/
|
|
68
|
+
export declare function validateResponseAgainstRules(toolName: string, responseText: string): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Build system prompt override block for CLI initialization.
|
|
71
|
+
* This is injected into the AI's system prompt at MCP connect time.
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildSystemPromptOverride(): string;
|
|
74
|
+
/**
|
|
75
|
+
* Add a custom governance rule at runtime.
|
|
76
|
+
*/
|
|
77
|
+
export declare function addRule(rule: GovernanceRule): void;
|
|
78
|
+
export { GOVERNANCE_RULES as DefaultGovernanceRules };
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ─── RULES ENGINE (Prompt Conflict Resolution) ────────────────────
|
|
3
|
+
*
|
|
4
|
+
* Resolves conflicts between AI CLI built-in prompts and Atabey governance rules.
|
|
5
|
+
* Ensures Atabey's critical rules ALWAYS override CLI-level instructions.
|
|
6
|
+
*
|
|
7
|
+
* Priority System:
|
|
8
|
+
* - CRITICAL (P0): Non-bypassable rules (zero any, no console.log, PII masking)
|
|
9
|
+
* - HIGH (P1): Important rules that should not be violated
|
|
10
|
+
* - MEDIUM (P2): Standard best practices
|
|
11
|
+
* - LOW (P3): Recommendations only
|
|
12
|
+
*
|
|
13
|
+
* Enforcement Mechanisms:
|
|
14
|
+
* 1. Pre-execution: Rule validation BEFORE tool runs
|
|
15
|
+
* 2. Post-execution: Scan changed files for violations → auto-rollback
|
|
16
|
+
* 3. CLI System Prompt Override: Inject critical rules at MCP initialization
|
|
17
|
+
*/
|
|
18
|
+
import path from "path";
|
|
19
|
+
// ─── Built-in Governance Rules ────────────────────────────────────
|
|
20
|
+
const GOVERNANCE_RULES = [
|
|
21
|
+
// ── CRITICAL (P0) Rules ────────────────────────────────────
|
|
22
|
+
{
|
|
23
|
+
id: "no-any-types",
|
|
24
|
+
name: "Zero Any Type Policy",
|
|
25
|
+
description: "TypeScript 'any' type is strictly forbidden",
|
|
26
|
+
priority: "CRITICAL",
|
|
27
|
+
detectPattern: /:\s*any\b/g,
|
|
28
|
+
appliesToExtensions: [".ts", ".tsx"],
|
|
29
|
+
errorMessage: "CRITICAL: 'any' type is forbidden. Use 'unknown' with proper type guards instead.",
|
|
30
|
+
bypassable: false,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: "no-console-log",
|
|
34
|
+
name: "No Console Log",
|
|
35
|
+
description: "console.log/error/warn is forbidden (use logger instead)",
|
|
36
|
+
priority: "CRITICAL",
|
|
37
|
+
detectPattern: /console\.(log|error|warn|debug|info)\s*\(/g,
|
|
38
|
+
appliesToExtensions: [".ts", ".tsx", ".js", ".jsx"],
|
|
39
|
+
errorMessage: "CRITICAL: console.log/error/warn is forbidden. Use the project's logger instead.",
|
|
40
|
+
bypassable: false,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "pii-masking",
|
|
44
|
+
name: "PII Masking Required",
|
|
45
|
+
description: "Sensitive data must be masked before logging or storing",
|
|
46
|
+
priority: "CRITICAL",
|
|
47
|
+
errorMessage: "CRITICAL: Detected potential PII in unmasked form. Use maskText() / maskObject() from pii.ts.",
|
|
48
|
+
bypassable: false,
|
|
49
|
+
},
|
|
50
|
+
// ── HIGH (P1) Rules ────────────────────────────────────────
|
|
51
|
+
{
|
|
52
|
+
id: "no-hardcoded-secrets",
|
|
53
|
+
name: "No Hardcoded Secrets",
|
|
54
|
+
description: "API keys, tokens, passwords must use environment variables",
|
|
55
|
+
priority: "HIGH",
|
|
56
|
+
detectPattern: /(['"])sk-[a-zA-Z0-9]{20,}['"]|(['"])ghp_[a-zA-Z0-9]{36,}['"]|(['"])AIza[0-9A-Za-z_-]{35}['"]/g,
|
|
57
|
+
appliesToExtensions: [".ts", ".tsx", ".js", ".jsx", ".py", ".go", ".java", ".yaml", ".yml", ".env.example"],
|
|
58
|
+
errorMessage: "HIGH: Hardcoded API keys/tokens detected. Use environment variables (process.env.*).",
|
|
59
|
+
bypassable: false,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: "no-commented-code",
|
|
63
|
+
name: "No Commented-Out Code",
|
|
64
|
+
description: "Dead code should be removed, not commented out",
|
|
65
|
+
priority: "HIGH",
|
|
66
|
+
detectPattern: /\/\/\s*.{10,}/g,
|
|
67
|
+
appliesToExtensions: [".ts", ".tsx", ".js", ".jsx"],
|
|
68
|
+
errorMessage: "HIGH: Commented-out code detected. Remove dead code instead of commenting.",
|
|
69
|
+
bypassable: true,
|
|
70
|
+
},
|
|
71
|
+
// ── MEDIUM (P2) Rules ──────────────────────────────────────
|
|
72
|
+
{
|
|
73
|
+
id: "no-console-in-jsx",
|
|
74
|
+
name: "No Console in JSX",
|
|
75
|
+
description: "Avoid console statements inside JSX/TSX components",
|
|
76
|
+
priority: "MEDIUM",
|
|
77
|
+
detectPattern: /{.*console\.(log|error|warn)\(.*}/g,
|
|
78
|
+
appliesToExtensions: [".tsx", ".jsx"],
|
|
79
|
+
errorMessage: "MEDIUM: Console statement inside JSX detected. Move to event handler or useEffect.",
|
|
80
|
+
bypassable: true,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: "i18n-usage",
|
|
84
|
+
name: "Internationalization Required",
|
|
85
|
+
description: "Use i18n for user-facing strings",
|
|
86
|
+
priority: "MEDIUM",
|
|
87
|
+
detectPattern: /(['"])([A-Z][a-z]+ [a-z]+ [a-z]+)['"]/g,
|
|
88
|
+
appliesToExtensions: [".tsx", ".jsx"],
|
|
89
|
+
errorMessage: "MEDIUM: User-facing string detected. Use i18n translation function instead.",
|
|
90
|
+
bypassable: true,
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
// ─── Rule Engine ──────────────────────────────────────────────────
|
|
94
|
+
let rulesMap = null;
|
|
95
|
+
function getRulesMap() {
|
|
96
|
+
if (!rulesMap) {
|
|
97
|
+
rulesMap = new Map();
|
|
98
|
+
for (const rule of GOVERNANCE_RULES) {
|
|
99
|
+
rulesMap.set(rule.id, rule);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return rulesMap;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get all governance rules.
|
|
106
|
+
*/
|
|
107
|
+
export function getAllRules() {
|
|
108
|
+
return [...GOVERNANCE_RULES];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get rules by priority level.
|
|
112
|
+
*/
|
|
113
|
+
export function getRulesByPriority(priority) {
|
|
114
|
+
return GOVERNANCE_RULES.filter(r => r.priority === priority);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get non-bypassable rules (CRITICAL + HIGH non-bypassable).
|
|
118
|
+
*/
|
|
119
|
+
export function getNonBypassableRules() {
|
|
120
|
+
return GOVERNANCE_RULES.filter(r => !r.bypassable);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Scan file content for rule violations.
|
|
124
|
+
* Returns array of violations found.
|
|
125
|
+
*/
|
|
126
|
+
export function scanFileForViolations(filePath, content) {
|
|
127
|
+
const ext = path.extname(filePath);
|
|
128
|
+
const violations = [];
|
|
129
|
+
const lines = content.split("\n");
|
|
130
|
+
for (const rule of GOVERNANCE_RULES) {
|
|
131
|
+
// Check if rule applies to this file extension
|
|
132
|
+
if (rule.appliesToExtensions && !rule.appliesToExtensions.includes(ext)) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
// Check if rule has a detect pattern
|
|
136
|
+
if (!rule.detectPattern)
|
|
137
|
+
continue;
|
|
138
|
+
// Scan each line
|
|
139
|
+
for (let i = 0; i < lines.length; i++) {
|
|
140
|
+
const match = lines[i].match(rule.detectPattern);
|
|
141
|
+
if (match) {
|
|
142
|
+
violations.push({
|
|
143
|
+
rule,
|
|
144
|
+
match: match[0],
|
|
145
|
+
line: i + 1,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return violations;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Validate tool arguments against governance rules.
|
|
154
|
+
* Returns violation messages if any critical rule is violated.
|
|
155
|
+
*/
|
|
156
|
+
export function validateArgsAgainstRules(toolName, args) {
|
|
157
|
+
const nonBypassable = getNonBypassableRules();
|
|
158
|
+
for (const rule of nonBypassable) {
|
|
159
|
+
// Check if rule applies to this tool
|
|
160
|
+
if (rule.appliesToTools && !rule.appliesToTools.includes(toolName)) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
// For write_file and replace_text, check content for violations
|
|
164
|
+
if ((toolName === "write_file" || toolName === "replace_text") && args.content) {
|
|
165
|
+
const content = args.content;
|
|
166
|
+
const filePath = args.path || "unknown.ts";
|
|
167
|
+
const violations = scanFileForViolations(filePath, content);
|
|
168
|
+
if (violations.length > 0) {
|
|
169
|
+
const details = violations.map(v => ` Line ${v.line}: ${v.match} (${v.rule.name} - ${v.rule.priority})`).join("\n");
|
|
170
|
+
return [
|
|
171
|
+
`[GOVERNANCE] ${rule.priority} rule violation: ${rule.name}`,
|
|
172
|
+
`${rule.errorMessage}`,
|
|
173
|
+
"\nViolations:",
|
|
174
|
+
details,
|
|
175
|
+
].join("\n");
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Validate tool response for governance violations.
|
|
183
|
+
* Returns violation messages if found.
|
|
184
|
+
*/
|
|
185
|
+
export function validateResponseAgainstRules(toolName, responseText) {
|
|
186
|
+
// For file reads, check if the content contains PII or secrets
|
|
187
|
+
if (toolName === "read_file" && responseText.length > 0) {
|
|
188
|
+
const criticalRules = getNonBypassableRules();
|
|
189
|
+
for (const rule of criticalRules) {
|
|
190
|
+
if (rule.detectPattern && rule.detectPattern.test(responseText)) {
|
|
191
|
+
return `[GOVERNANCE] ${rule.priority} violation detected in response: ${rule.name}. ${rule.errorMessage}`;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Build system prompt override block for CLI initialization.
|
|
199
|
+
* This is injected into the AI's system prompt at MCP connect time.
|
|
200
|
+
*/
|
|
201
|
+
export function buildSystemPromptOverride() {
|
|
202
|
+
const criticalRules = getRulesByPriority("CRITICAL");
|
|
203
|
+
const highRules = getRulesByPriority("HIGH");
|
|
204
|
+
return [
|
|
205
|
+
"## [ATABEY GOVERNANCE] Critical Rules — DO NOT OVERRIDE",
|
|
206
|
+
"",
|
|
207
|
+
"The following rules are ENFORCED by the Atabey Governance Layer.",
|
|
208
|
+
"They CANNOT be bypassed or disabled.",
|
|
209
|
+
"",
|
|
210
|
+
"### Critical Rules (Non-Bypassable)",
|
|
211
|
+
...criticalRules.map(r => `- 🔴 ${r.name}: ${r.description}`),
|
|
212
|
+
"",
|
|
213
|
+
"### High Priority Rules",
|
|
214
|
+
...highRules.map(r => `- 🟠 ${r.name}: ${r.description}`),
|
|
215
|
+
"",
|
|
216
|
+
"> These rules are injected at the MCP middleware layer and enforced",
|
|
217
|
+
"> at both pre-execution and post-execution stages.",
|
|
218
|
+
"",
|
|
219
|
+
].join("\n");
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Add a custom governance rule at runtime.
|
|
223
|
+
*/
|
|
224
|
+
export function addRule(rule) {
|
|
225
|
+
const map = getRulesMap();
|
|
226
|
+
if (!map.has(rule.id)) {
|
|
227
|
+
GOVERNANCE_RULES.push(rule);
|
|
228
|
+
map.set(rule.id, rule);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export { GOVERNANCE_RULES as DefaultGovernanceRules };
|
|
232
|
+
//# sourceMappingURL=rules-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-engine.js","sourceRoot":"","sources":["../../../../framework-mcp/src/utils/rules-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAyBxB,qEAAqE;AAErE,MAAM,gBAAgB,GAAqB;IACvC,8DAA8D;IAC9D;QACI,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,6CAA6C;QAC1D,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,YAAY;QAC3B,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QACpC,YAAY,EAAE,mFAAmF;QACjG,UAAU,EAAE,KAAK;KACpB;IACD;QACI,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,0DAA0D;QACvE,QAAQ,EAAE,UAAU;QACpB,aAAa,EAAE,4CAA4C;QAC3D,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QACnD,YAAY,EAAE,kFAAkF;QAChG,UAAU,EAAE,KAAK;KACpB;IACD;QACI,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,UAAU;QACpB,YAAY,EAAE,+FAA+F;QAC7G,UAAU,EAAE,KAAK;KACpB;IAED,8DAA8D;IAC9D;QACI,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,4DAA4D;QACzE,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,+FAA+F;QAC9G,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC;QAC3G,YAAY,EAAE,sFAAsF;QACpG,UAAU,EAAE,KAAK;KACpB;IACD;QACI,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,gDAAgD;QAC7D,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,gBAAgB;QAC/B,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QACnD,YAAY,EAAE,4EAA4E;QAC1F,UAAU,EAAE,IAAI;KACnB;IAED,8DAA8D;IAC9D;QACI,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,oDAAoD;QACjE,QAAQ,EAAE,QAAQ;QAClB,aAAa,EAAE,oCAAoC;QACnD,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACrC,YAAY,EAAE,oFAAoF;QAClG,UAAU,EAAE,IAAI;KACnB;IACD;QACI,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,QAAQ;QAClB,aAAa,EAAE,wCAAwC;QACvD,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACrC,YAAY,EAAE,6EAA6E;QAC3F,UAAU,EAAE,IAAI;KACnB;CACJ,CAAC;AAEF,qEAAqE;AAErE,IAAI,QAAQ,GAAuC,IAAI,CAAC;AAExD,SAAS,WAAW;IAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACvB,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACrD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACjC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACjC,QAAgB,EAChB,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,UAAU,GAAiE,EAAE,CAAC;IACpF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QAClC,+CAA+C;QAC/C,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,SAAS;QACb,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,SAAS;QAElC,iBAAiB;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,KAAK,EAAE,CAAC;gBACR,UAAU,CAAC,IAAI,CAAC;oBACZ,IAAI;oBACJ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;oBACf,IAAI,EAAE,CAAC,GAAG,CAAC;iBACd,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACpC,QAAgB,EAChB,IAA6B;IAE7B,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAC/B,qCAAqC;QACrC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,SAAS;QACb,CAAC;QAED,gEAAgE;QAChE,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;YACvC,MAAM,QAAQ,GAAI,IAAI,CAAC,IAAe,IAAI,YAAY,CAAC;YACvD,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC/B,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,OAAO;oBACH,gBAAgB,IAAI,CAAC,QAAQ,oBAAoB,IAAI,CAAC,IAAI,EAAE;oBAC5D,GAAG,IAAI,CAAC,YAAY,EAAE;oBACtB,eAAe;oBACf,OAAO;iBACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CACxC,QAAgB,EAChB,YAAoB;IAEpB,+DAA+D;IAC/D,IAAI,QAAQ,KAAK,WAAW,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9D,OAAO,gBAAgB,IAAI,CAAC,QAAQ,oCAAoC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9G,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACrC,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO;QACH,yDAAyD;QACzD,EAAE;QACF,kEAAkE;QAClE,sCAAsC;QACtC,EAAE;QACF,qCAAqC;QACrC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,EAAE;QACF,yBAAyB;QACzB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACzD,EAAE;QACF,qEAAqE;QACrE,oDAAoD;QACpD,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAoB;IACxC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,OAAO,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ─── SILENT ROUTER ─────────────────────────────────────────────────
|
|
3
|
+
*
|
|
4
|
+
* Automatically routes tool calls to the most appropriate agent
|
|
5
|
+
* WITHOUT requiring the developer to type `@agent` commands.
|
|
6
|
+
*
|
|
7
|
+
* The magic: developer types "Make this API secure" and Atabey
|
|
8
|
+
* silently activates @security agent rules behind the scenes.
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Auto-agent detection from tool call context
|
|
12
|
+
* - Silent system prompt injection
|
|
13
|
+
* - Multi-agent chain support
|
|
14
|
+
* - Stealth notifications (stderr/dashboard only, never chat)
|
|
15
|
+
*/
|
|
16
|
+
declare const CONFIG: {
|
|
17
|
+
/** Enable silent routing (default: true) */
|
|
18
|
+
ENABLED: boolean;
|
|
19
|
+
/** Enable stealth notifications to stderr */
|
|
20
|
+
STEALTH_NOTIFY: boolean;
|
|
21
|
+
/** Agent override via env (for testing/debugging) */
|
|
22
|
+
FORCE_AGENT: string | null;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Detect the most appropriate agent for a given tool call and arguments.
|
|
26
|
+
* Uses RoutingEngine's TF-IDF matching on the args context.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectAgent(toolName: string, args: Record<string, unknown>): string;
|
|
29
|
+
/**
|
|
30
|
+
* Get the system prompt rules for a given agent.
|
|
31
|
+
* Used to inject discipline silently into tool context.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getAgentPrompt(agentName: string): Promise<string | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Build a silent context injection payload.
|
|
36
|
+
* This is prepended to tool responses to guide the AI without @agent commands.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildSilentContext(detectedAgent: string, toolName: string, responseText: string): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Send a stealth notification to stderr (never to the chat).
|
|
41
|
+
*/
|
|
42
|
+
export declare function stealthNotify(agent: string, toolName: string, message: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get silent router config.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSilentRouterConfig(): typeof CONFIG;
|
|
47
|
+
export { CONFIG as SilentRouterConfig };
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ─── SILENT ROUTER ─────────────────────────────────────────────────
|
|
3
|
+
*
|
|
4
|
+
* Automatically routes tool calls to the most appropriate agent
|
|
5
|
+
* WITHOUT requiring the developer to type `@agent` commands.
|
|
6
|
+
*
|
|
7
|
+
* The magic: developer types "Make this API secure" and Atabey
|
|
8
|
+
* silently activates @security agent rules behind the scenes.
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Auto-agent detection from tool call context
|
|
12
|
+
* - Silent system prompt injection
|
|
13
|
+
* - Multi-agent chain support
|
|
14
|
+
* - Stealth notifications (stderr/dashboard only, never chat)
|
|
15
|
+
*/
|
|
16
|
+
import { RoutingEngine } from "../../../src/modules/engines/routing-engine.js";
|
|
17
|
+
// ─── Configuration ────────────────────────────────────────────────
|
|
18
|
+
const CONFIG = {
|
|
19
|
+
/** Enable silent routing (default: true) */
|
|
20
|
+
ENABLED: process.env.MCP_SILENT_ROUTING !== "false",
|
|
21
|
+
/** Enable stealth notifications to stderr */
|
|
22
|
+
STEALTH_NOTIFY: process.env.MCP_SILENT_STEALTH !== "false",
|
|
23
|
+
/** Agent override via env (for testing/debugging) */
|
|
24
|
+
FORCE_AGENT: process.env.MCP_FORCE_AGENT || null,
|
|
25
|
+
};
|
|
26
|
+
let agentRuleCache = null;
|
|
27
|
+
async function loadAgentRules() {
|
|
28
|
+
if (agentRuleCache)
|
|
29
|
+
return agentRuleCache;
|
|
30
|
+
try {
|
|
31
|
+
const { ALL_AGENTS } = await import("../../../src/modules/agents/definitions.js");
|
|
32
|
+
agentRuleCache = new Map();
|
|
33
|
+
for (const agent of ALL_AGENTS) {
|
|
34
|
+
agentRuleCache.set(agent.name, {
|
|
35
|
+
name: agent.name,
|
|
36
|
+
identity: agent.instructions.identity,
|
|
37
|
+
mission: agent.instructions.mission,
|
|
38
|
+
rules: agent.instructions.rules,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Fallback: use discipline rules file
|
|
44
|
+
agentRuleCache = new Map();
|
|
45
|
+
}
|
|
46
|
+
return agentRuleCache;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Detect the most appropriate agent for a given tool call and arguments.
|
|
50
|
+
* Uses RoutingEngine's TF-IDF matching on the args context.
|
|
51
|
+
*/
|
|
52
|
+
export function detectAgent(toolName, args) {
|
|
53
|
+
if (CONFIG.FORCE_AGENT)
|
|
54
|
+
return CONFIG.FORCE_AGENT;
|
|
55
|
+
// Build context from args for routing
|
|
56
|
+
const contextParts = [toolName];
|
|
57
|
+
for (const [key, value] of Object.entries(args)) {
|
|
58
|
+
if (typeof value === "string") {
|
|
59
|
+
contextParts.push(value);
|
|
60
|
+
}
|
|
61
|
+
else if (Array.isArray(value)) {
|
|
62
|
+
contextParts.push(value.filter(v => typeof v === "string").join(" "));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const context = contextParts.join(" ").substring(0, 500);
|
|
66
|
+
// Use RoutingEngine to detect the best agent
|
|
67
|
+
return RoutingEngine.resolveAgent(context);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get the system prompt rules for a given agent.
|
|
71
|
+
* Used to inject discipline silently into tool context.
|
|
72
|
+
*/
|
|
73
|
+
export async function getAgentPrompt(agentName) {
|
|
74
|
+
const rules = await loadAgentRules();
|
|
75
|
+
const agent = rules.get(agentName.replace("@", ""));
|
|
76
|
+
if (!agent)
|
|
77
|
+
return null;
|
|
78
|
+
return [
|
|
79
|
+
`## [ATABEY SILENT] ${agent.name} (${agent.identity})`,
|
|
80
|
+
"",
|
|
81
|
+
"### Mission",
|
|
82
|
+
`${agent.mission}`,
|
|
83
|
+
"",
|
|
84
|
+
"### Active Disciplines",
|
|
85
|
+
...agent.rules.map(r => `- ${r}`),
|
|
86
|
+
"",
|
|
87
|
+
"> These rules are injected by Atabey governance layer.",
|
|
88
|
+
"> They supplement (not replace) your existing instructions.",
|
|
89
|
+
].join("\n");
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Build a silent context injection payload.
|
|
93
|
+
* This is prepended to tool responses to guide the AI without @agent commands.
|
|
94
|
+
*/
|
|
95
|
+
export async function buildSilentContext(detectedAgent, toolName, responseText) {
|
|
96
|
+
if (!CONFIG.ENABLED)
|
|
97
|
+
return responseText;
|
|
98
|
+
const agentPrompt = await getAgentPrompt(detectedAgent);
|
|
99
|
+
if (!agentPrompt)
|
|
100
|
+
return responseText;
|
|
101
|
+
// Only inject if the response is substantial enough to warrant governance
|
|
102
|
+
if (responseText.length < 50)
|
|
103
|
+
return responseText;
|
|
104
|
+
// Inject as a comment block that won't break tool results
|
|
105
|
+
const injection = [
|
|
106
|
+
"",
|
|
107
|
+
`<!-- ATABEY_GOVERNANCE agent="${detectedAgent}" tool="${toolName}" -->`,
|
|
108
|
+
`${agentPrompt}`,
|
|
109
|
+
"<!-- /ATABEY_GOVERNANCE -->",
|
|
110
|
+
"",
|
|
111
|
+
].join("\n");
|
|
112
|
+
return injection + responseText;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Send a stealth notification to stderr (never to the chat).
|
|
116
|
+
*/
|
|
117
|
+
export function stealthNotify(agent, toolName, message) {
|
|
118
|
+
if (!CONFIG.STEALTH_NOTIFY)
|
|
119
|
+
return;
|
|
120
|
+
process.stderr.write(`[ATABEY:${agent}] ${message} (tool: ${toolName})\n`);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get silent router config.
|
|
124
|
+
*/
|
|
125
|
+
export function getSilentRouterConfig() {
|
|
126
|
+
return { ...CONFIG };
|
|
127
|
+
}
|
|
128
|
+
export { CONFIG as SilentRouterConfig };
|
|
129
|
+
//# sourceMappingURL=silent-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"silent-router.js","sourceRoot":"","sources":["../../../../framework-mcp/src/utils/silent-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -149,7 +149,6 @@ export class Storage {
|
|
|
149
149
|
let deps = [];
|
|
150
150
|
try {
|
|
151
151
|
const parsed = JSON.parse(r.dependencies || "[]");
|
|
152
|
-
// Handle cases where dependencies might be double-stringified or are raw JSON strings
|
|
153
152
|
deps = Array.isArray(parsed) ? parsed : JSON.parse(parsed);
|
|
154
153
|
}
|
|
155
154
|
catch {
|
|
@@ -162,7 +161,8 @@ export class Storage {
|
|
|
162
161
|
agent: r.agent,
|
|
163
162
|
status: r.status,
|
|
164
163
|
priority: r.priority,
|
|
165
|
-
dependencies: deps
|
|
164
|
+
dependencies: deps,
|
|
165
|
+
createdAt: r.created_at
|
|
166
166
|
};
|
|
167
167
|
});
|
|
168
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../framework-mcp/src/utils/storage.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../framework-mcp/src/utils/storage.ts"],"names":[],"mappings":"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"}
|