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
|
@@ -1,30 +1,99 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
/**
|
|
4
|
+
* ─── ASK HUMAN — File Bridge ─────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* AI CLI'lar (Claude Code, Gemini CLI) MCP server'ı stdio subprocess olarak
|
|
7
|
+
* başlatır. Bu subprocess'te stdin isTTY=false olur (MCP JSON-RPC için kullanılır).
|
|
8
|
+
*
|
|
9
|
+
* Çözüm: File-based Q&A bridge.
|
|
10
|
+
* 1. Soru → .atabey/hitl/question.txt dosyasına yazılır
|
|
11
|
+
* 2. Geliştirici `atabey hitl` komutuyla cevap girer
|
|
12
|
+
* 3. Cevap → .atabey/hitl/answer.txt dosyasına yazılır
|
|
13
|
+
* 4. Bu handler cevabı okur ve AI'ya döner
|
|
14
|
+
*
|
|
15
|
+
* Dashboard: /api/approvals endpoint'i üzerinden web dashboard'dan da cevaplanabilir.
|
|
16
|
+
*/
|
|
2
17
|
export async function handleAskHuman(root, args) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
18
|
+
const timeoutSeconds = args.timeoutSeconds ?? 120;
|
|
19
|
+
const hitlDir = path.join(root, ".atabey", "hitl");
|
|
20
|
+
const questionFile = path.join(hitlDir, "question.txt");
|
|
21
|
+
const answerFile = path.join(hitlDir, "answer.txt");
|
|
6
22
|
try {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
// Ensure hitl directory exists
|
|
24
|
+
fs.mkdirSync(hitlDir, { recursive: true });
|
|
25
|
+
// Clear any stale answer file
|
|
26
|
+
if (fs.existsSync(answerFile)) {
|
|
27
|
+
fs.unlinkSync(answerFile);
|
|
28
|
+
}
|
|
29
|
+
// Write the question with metadata
|
|
30
|
+
const questionPayload = JSON.stringify({
|
|
31
|
+
timestamp: new Date().toISOString(),
|
|
32
|
+
question: args.question,
|
|
33
|
+
timeoutAt: new Date(Date.now() + timeoutSeconds * 1000).toISOString(),
|
|
34
|
+
}, null, 2);
|
|
35
|
+
fs.writeFileSync(questionFile, questionPayload);
|
|
36
|
+
// Write human-readable prompt file alongside
|
|
37
|
+
fs.writeFileSync(path.join(hitlDir, "PENDING.txt"), [
|
|
38
|
+
"═══════════════════════════════════════════════════",
|
|
39
|
+
" [ATABEY] AGENT WAITING FOR YOUR ANSWER",
|
|
40
|
+
"═══════════════════════════════════════════════════",
|
|
41
|
+
"",
|
|
42
|
+
`QUESTION: ${args.question}`,
|
|
43
|
+
"",
|
|
44
|
+
"To answer, run in your terminal:",
|
|
45
|
+
" atabey hitl answer \"your answer here\"",
|
|
46
|
+
"",
|
|
47
|
+
"Or use the dashboard: http://localhost:5858",
|
|
48
|
+
"═══════════════════════════════════════════════════",
|
|
49
|
+
].join("\n"));
|
|
50
|
+
process.stderr.write(`[HITL] Question written to ${questionFile}\n`);
|
|
51
|
+
process.stderr.write("[HITL] Run: atabey hitl answer \"your answer\"\n");
|
|
52
|
+
// Poll for answer file
|
|
53
|
+
const pollIntervalMs = 1000;
|
|
54
|
+
const maxAttempts = timeoutSeconds;
|
|
55
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
56
|
+
await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
|
|
57
|
+
if (fs.existsSync(answerFile)) {
|
|
58
|
+
const answer = fs.readFileSync(answerFile, "utf8").trim();
|
|
59
|
+
// Clean up
|
|
60
|
+
try {
|
|
61
|
+
fs.unlinkSync(questionFile);
|
|
62
|
+
fs.unlinkSync(answerFile);
|
|
63
|
+
const pendingFile = path.join(hitlDir, "PENDING.txt");
|
|
64
|
+
if (fs.existsSync(pendingFile))
|
|
65
|
+
fs.unlinkSync(pendingFile);
|
|
66
|
+
}
|
|
67
|
+
catch { /* cleanup is best-effort */ }
|
|
68
|
+
process.stderr.write("[HITL] Answer received.\n");
|
|
69
|
+
return {
|
|
70
|
+
content: [{ type: "text", text: `[HUMAN RESPONSE] ${answer}` }],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Timeout — clean up question file
|
|
75
|
+
try {
|
|
76
|
+
if (fs.existsSync(questionFile))
|
|
77
|
+
fs.unlinkSync(questionFile);
|
|
78
|
+
const pendingFile = path.join(hitlDir, "PENDING.txt");
|
|
79
|
+
if (fs.existsSync(pendingFile))
|
|
80
|
+
fs.unlinkSync(pendingFile);
|
|
81
|
+
}
|
|
82
|
+
catch { /* cleanup is best-effort */ }
|
|
83
|
+
return {
|
|
84
|
+
content: [{
|
|
85
|
+
type: "text",
|
|
86
|
+
text: `[HITL TIMEOUT] No answer received within ${timeoutSeconds}s.\n` +
|
|
87
|
+
`Question was: "${args.question}"\n` +
|
|
88
|
+
"To answer pending questions, run: atabey hitl answer \"your answer\"",
|
|
89
|
+
}],
|
|
90
|
+
};
|
|
22
91
|
}
|
|
23
92
|
catch (error) {
|
|
24
93
|
const message = error instanceof Error ? error.message : String(error);
|
|
25
94
|
return {
|
|
26
95
|
isError: true,
|
|
27
|
-
content: [{ type: "text", text: `[ERROR]
|
|
96
|
+
content: [{ type: "text", text: `[ERROR] ask_human failed: ${message}` }],
|
|
28
97
|
};
|
|
29
98
|
}
|
|
30
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask_human.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/ask_human.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ask_human.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/ask_human.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,9 @@ import { execSync } from "child_process";
|
|
|
3
3
|
* Checks for active network ports and their status.
|
|
4
4
|
*/
|
|
5
5
|
export function handleCheckPorts(projectRoot, args) {
|
|
6
|
-
const
|
|
6
|
+
const rawFilter = args.filter || "";
|
|
7
|
+
// Sanitize filter to prevent command injection (allow only alphanumeric, dots, colons, dashes, underscores)
|
|
8
|
+
const filter = rawFilter.replace(/[^a-zA-Z0-9.:_-]/g, "");
|
|
7
9
|
try {
|
|
8
10
|
// Using 'lsof -i -P -n' to list open files and network connections
|
|
9
11
|
// Note: may require permissions or behave differently on non-Unix systems
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_ports.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/observability/check_ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAA0B;IAC5E,MAAM,
|
|
1
|
+
{"version":3,"file":"check_ports.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/observability/check_ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAA0B;IAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACpC,4GAA4G;IAC5G,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAE1D,IAAI,CAAC;QACD,mEAAmE;QACnE,0EAA0E;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;YACxC,CAAC,CAAC,oCAAoC,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3E,CAAC,CAAC,+BAA+B,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAExE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvD,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2CAA2C,MAAM,IAAI,kDAAkD,EAAE;iBAClH,CAAC;SACL,CAAC;IACN,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACV,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0FAA0F,EAAE,CAAC;SAChI,CAAC;IACN,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import path from "path";
|
|
4
|
+
import { analyzePathQuality } from "../../utils/quality.js";
|
|
4
5
|
/**
|
|
5
6
|
* Code quality analysis tool for Atabey MCP.
|
|
6
7
|
*
|
|
@@ -10,6 +11,13 @@ import path from "path";
|
|
|
10
11
|
* - Code complexity analysis (checkComplexity)
|
|
11
12
|
*/
|
|
12
13
|
export function handleAnalyzeCodeQuality(projectRoot, args) {
|
|
14
|
+
// Validate path parameter to prevent command injection
|
|
15
|
+
if (!/^[a-zA-Z0-9_./-]+$/.test(args.path)) {
|
|
16
|
+
return {
|
|
17
|
+
isError: true,
|
|
18
|
+
content: [{ type: "text", text: `[ERROR] Invalid path characters detected: ${args.path}` }]
|
|
19
|
+
};
|
|
20
|
+
}
|
|
13
21
|
const targetPath = path.resolve(projectRoot, args.path);
|
|
14
22
|
if (!fs.existsSync(targetPath)) {
|
|
15
23
|
return {
|
|
@@ -81,73 +89,14 @@ export function handleAnalyzeCodeQuality(projectRoot, args) {
|
|
|
81
89
|
}
|
|
82
90
|
// 3. Code Complexity Check (basic heuristic)
|
|
83
91
|
if (args.checkComplexity !== false) {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
if (!fs.existsSync(dir))
|
|
87
|
-
return;
|
|
88
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
89
|
-
for (const entry of entries) {
|
|
90
|
-
const fullPath = path.join(dir, entry.name);
|
|
91
|
-
if (entry.isDirectory() && !entry.name.startsWith("node_modules") && !entry.name.startsWith(".")) {
|
|
92
|
-
scanDirectory(fullPath);
|
|
93
|
-
}
|
|
94
|
-
else if (entry.isFile() && (entry.name.endsWith(".ts") || entry.name.endsWith(".tsx"))) {
|
|
95
|
-
try {
|
|
96
|
-
const content = fs.readFileSync(fullPath, "utf8");
|
|
97
|
-
const lines = content.split("\n");
|
|
98
|
-
// Check for long functions (>50 lines)
|
|
99
|
-
let inFunction = false;
|
|
100
|
-
let funcLines = 0;
|
|
101
|
-
let funcName = "";
|
|
102
|
-
const relativePath = path.relative(projectRoot, fullPath);
|
|
103
|
-
for (let i = 0; i < lines.length; i++) {
|
|
104
|
-
const line = lines[i];
|
|
105
|
-
// Detect function start
|
|
106
|
-
const funcMatch = line.match(/(?:public|private|protected|static\s+)?(?:async\s+)?(?:function\s+)?(\w+)\s*\([^)]*\)\s*{/);
|
|
107
|
-
if (funcMatch) {
|
|
108
|
-
inFunction = true;
|
|
109
|
-
funcLines = 1;
|
|
110
|
-
funcName = funcMatch[1];
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
// Detect method in class
|
|
114
|
-
const methodMatch = line.match(/^\s*(?:public|private|protected|static\s+)?(\w+)\s*\([^)]*\)\s*{/);
|
|
115
|
-
if (methodMatch && !line.includes("function")) {
|
|
116
|
-
inFunction = true;
|
|
117
|
-
funcLines = 1;
|
|
118
|
-
funcName = methodMatch[1];
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
if (inFunction) {
|
|
122
|
-
if (line.includes("}")) {
|
|
123
|
-
if (funcLines > 50) {
|
|
124
|
-
complexityIssues.push(`- ${relativePath}:${i + 1} — Function \`${funcName}\` is ${funcLines} lines long (max: 50)`);
|
|
125
|
-
}
|
|
126
|
-
inFunction = false;
|
|
127
|
-
}
|
|
128
|
-
funcLines++;
|
|
129
|
-
}
|
|
130
|
-
// Check nesting depth (>4 levels)
|
|
131
|
-
const indentMatch = line.match(/^(?:\s{2}){5,}/);
|
|
132
|
-
if (indentMatch && !line.trim().startsWith("//") && !line.trim().startsWith("*")) {
|
|
133
|
-
const depth = Math.floor(indentMatch[0].length / 2);
|
|
134
|
-
if (depth > 4) {
|
|
135
|
-
complexityIssues.push(`- ${relativePath}:${i + 1} — Nesting depth ${depth} (max: 4)`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
// Skip files that can't be read
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
scanDirectory(targetPath);
|
|
92
|
+
const qualityResult = analyzePathQuality(projectRoot, args.path);
|
|
93
|
+
const complexityIssues = qualityResult.issues.filter(issue => issue.type === "complexity");
|
|
147
94
|
if (complexityIssues.length > 0) {
|
|
148
95
|
hasErrors = true;
|
|
149
96
|
results.push(`## ⚠️ Code Complexity Issues (${complexityIssues.length})`);
|
|
150
|
-
|
|
97
|
+
complexityIssues.forEach(issue => {
|
|
98
|
+
results.push(`- ${issue.file}:${issue.line} — ${issue.message}`);
|
|
99
|
+
});
|
|
151
100
|
}
|
|
152
101
|
else {
|
|
153
102
|
results.push("## ✅ Code Complexity: OK");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze_code_quality.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/quality/analyze_code_quality.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"analyze_code_quality.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/quality/analyze_code_quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ export declare const ReplaceTextSchema: z.ZodObject<{
|
|
|
42
42
|
path: z.ZodString;
|
|
43
43
|
oldText: z.ZodString;
|
|
44
44
|
newText: z.ZodString;
|
|
45
|
-
allowMultiple: z.ZodDefault<z.ZodBoolean
|
|
45
|
+
allowMultiple: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
46
46
|
}, "strict", z.ZodTypeAny, {
|
|
47
47
|
path: string;
|
|
48
48
|
oldText: string;
|
|
@@ -96,7 +96,7 @@ export declare const BatchSurgicalEditSchema: z.ZodObject<{
|
|
|
96
96
|
path: z.ZodString;
|
|
97
97
|
oldText: z.ZodString;
|
|
98
98
|
newText: z.ZodString;
|
|
99
|
-
allowMultiple: z.ZodDefault<z.ZodBoolean
|
|
99
|
+
allowMultiple: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
100
100
|
}, "strip", z.ZodTypeAny, {
|
|
101
101
|
path: string;
|
|
102
102
|
oldText: string;
|
|
@@ -210,7 +210,7 @@ export declare const SubmitPlanSchema: z.ZodObject<{
|
|
|
210
210
|
export declare const AcquireLockSchema: z.ZodObject<{
|
|
211
211
|
resource: z.ZodString;
|
|
212
212
|
agent: z.ZodString;
|
|
213
|
-
ttl: z.ZodDefault<z.ZodNumber
|
|
213
|
+
ttl: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
214
214
|
}, "strict", z.ZodTypeAny, {
|
|
215
215
|
agent: string;
|
|
216
216
|
resource: string;
|
|
@@ -233,7 +233,7 @@ export declare const ReleaseLockSchema: z.ZodObject<{
|
|
|
233
233
|
export declare const RegisterAgentSchema: z.ZodObject<{
|
|
234
234
|
agent: z.ZodString;
|
|
235
235
|
role: z.ZodString;
|
|
236
|
-
capability: z.ZodDefault<z.ZodNumber
|
|
236
|
+
capability: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
237
237
|
specialties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
238
238
|
}, "strict", z.ZodTypeAny, {
|
|
239
239
|
agent: string;
|
|
@@ -271,7 +271,7 @@ export declare const StoreKnowledgeSchema: z.ZodObject<{
|
|
|
271
271
|
export declare const SearchKnowledgeSchema: z.ZodObject<{
|
|
272
272
|
query: z.ZodString;
|
|
273
273
|
category: z.ZodOptional<z.ZodEnum<["ARCHITECTURE", "DECISION", "CODE_SNIPPET", "RULE", "TASK_HISTORY"]>>;
|
|
274
|
-
limit: z.ZodDefault<z.ZodNumber
|
|
274
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
275
275
|
}, "strict", z.ZodTypeAny, {
|
|
276
276
|
query: string;
|
|
277
277
|
limit: number;
|
|
@@ -298,8 +298,8 @@ export declare const SendAgentMessageSchema: z.ZodObject<{
|
|
|
298
298
|
content: z.ZodString;
|
|
299
299
|
traceId: z.ZodString;
|
|
300
300
|
parentId: z.ZodOptional<z.ZodString>;
|
|
301
|
-
priority: z.ZodDefault<z.ZodEnum<["HIGH", "NORMAL", "LOW"]
|
|
302
|
-
requiresApproval: z.ZodDefault<z.ZodBoolean
|
|
301
|
+
priority: z.ZodDefault<z.ZodOptional<z.ZodEnum<["HIGH", "NORMAL", "LOW"]>>>;
|
|
302
|
+
requiresApproval: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
303
303
|
}, "strict", z.ZodTypeAny, {
|
|
304
304
|
traceId: string;
|
|
305
305
|
from: string;
|
|
@@ -343,60 +343,26 @@ export declare const LogAgentActionSchema: z.ZodObject<{
|
|
|
343
343
|
}>;
|
|
344
344
|
export declare const AskHumanSchema: z.ZodObject<{
|
|
345
345
|
question: z.ZodString;
|
|
346
|
+
timeoutSeconds: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
346
347
|
}, "strict", z.ZodTypeAny, {
|
|
347
348
|
question: string;
|
|
349
|
+
timeoutSeconds: number;
|
|
348
350
|
}, {
|
|
349
351
|
question: string;
|
|
352
|
+
timeoutSeconds?: number | undefined;
|
|
350
353
|
}>;
|
|
351
|
-
export declare const
|
|
352
|
-
|
|
353
|
-
role: z.ZodEnum<["system", "user", "assistant", "tool"]>;
|
|
354
|
-
content: z.ZodString;
|
|
355
|
-
}, "strip", z.ZodTypeAny, {
|
|
356
|
-
content: string;
|
|
357
|
-
role: "system" | "user" | "assistant" | "tool";
|
|
358
|
-
}, {
|
|
359
|
-
content: string;
|
|
360
|
-
role: "system" | "user" | "assistant" | "tool";
|
|
361
|
-
}>, "many">;
|
|
362
|
-
system: z.ZodOptional<z.ZodString>;
|
|
363
|
-
model: z.ZodOptional<z.ZodString>;
|
|
364
|
-
provider: z.ZodOptional<z.ZodEnum<["openai", "anthropic", "google", "grok", "ollama"]>>;
|
|
365
|
-
strategy: z.ZodOptional<z.ZodEnum<["round-robin", "least-latency", "cost-optimized", "failover", "priority-based", "model-based"]>>;
|
|
366
|
-
temperature: z.ZodOptional<z.ZodNumber>;
|
|
367
|
-
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
354
|
+
export declare const ApproveOperationSchema: z.ZodObject<{
|
|
355
|
+
action: z.ZodEnum<["approve", "reject", "list"]>;
|
|
368
356
|
traceId: z.ZodOptional<z.ZodString>;
|
|
357
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
369
358
|
}, "strict", z.ZodTypeAny, {
|
|
370
|
-
|
|
371
|
-
content: string;
|
|
372
|
-
role: "system" | "user" | "assistant" | "tool";
|
|
373
|
-
}[];
|
|
359
|
+
action: "approve" | "reject" | "list";
|
|
374
360
|
traceId?: string | undefined;
|
|
375
|
-
|
|
376
|
-
system?: string | undefined;
|
|
377
|
-
provider?: "grok" | "openai" | "anthropic" | "google" | "ollama" | undefined;
|
|
378
|
-
model?: string | undefined;
|
|
379
|
-
temperature?: number | undefined;
|
|
380
|
-
maxTokens?: number | undefined;
|
|
361
|
+
reason?: string | undefined;
|
|
381
362
|
}, {
|
|
382
|
-
|
|
383
|
-
content: string;
|
|
384
|
-
role: "system" | "user" | "assistant" | "tool";
|
|
385
|
-
}[];
|
|
363
|
+
action: "approve" | "reject" | "list";
|
|
386
364
|
traceId?: string | undefined;
|
|
387
|
-
|
|
388
|
-
system?: string | undefined;
|
|
389
|
-
provider?: "grok" | "openai" | "anthropic" | "google" | "ollama" | undefined;
|
|
390
|
-
model?: string | undefined;
|
|
391
|
-
temperature?: number | undefined;
|
|
392
|
-
maxTokens?: number | undefined;
|
|
393
|
-
}>;
|
|
394
|
-
export declare const LLMGatewayStatusSchema: z.ZodObject<{
|
|
395
|
-
detail: z.ZodDefault<z.ZodOptional<z.ZodEnum<["overview", "providers", "stats"]>>>;
|
|
396
|
-
}, "strict", z.ZodTypeAny, {
|
|
397
|
-
detail: "providers" | "stats" | "overview";
|
|
398
|
-
}, {
|
|
399
|
-
detail?: "providers" | "stats" | "overview" | undefined;
|
|
365
|
+
reason?: string | undefined;
|
|
400
366
|
}>;
|
|
401
367
|
export declare const AnalyzeCodeQualitySchema: z.ZodObject<{
|
|
402
368
|
path: z.ZodString;
|
|
@@ -424,16 +390,45 @@ export declare const CheckArchitectureComplianceSchema: z.ZodObject<{
|
|
|
424
390
|
path: string;
|
|
425
391
|
rules?: string[] | undefined;
|
|
426
392
|
}>;
|
|
393
|
+
export declare const MaskPIISchema: z.ZodObject<{
|
|
394
|
+
text: z.ZodOptional<z.ZodString>;
|
|
395
|
+
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
396
|
+
mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["text", "object", "auto"]>>>;
|
|
397
|
+
strictMode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
398
|
+
}, "strict", z.ZodTypeAny, {
|
|
399
|
+
mode: "object" | "text" | "auto";
|
|
400
|
+
strictMode: boolean;
|
|
401
|
+
text?: string | undefined;
|
|
402
|
+
data?: Record<string, unknown> | undefined;
|
|
403
|
+
}, {
|
|
404
|
+
text?: string | undefined;
|
|
405
|
+
data?: Record<string, unknown> | undefined;
|
|
406
|
+
mode?: "object" | "text" | "auto" | undefined;
|
|
407
|
+
strictMode?: boolean | undefined;
|
|
408
|
+
}>;
|
|
427
409
|
/**
|
|
428
410
|
* ─── TYPE INFERENCE ────────────────────────────────────────────────
|
|
429
411
|
* Deriving types directly from schemas to ensure ZERO DRIFT.
|
|
412
|
+
* Every exported type below is used by types.ts' ToolArgs union.
|
|
430
413
|
*/
|
|
431
414
|
export type ReadFileArgs = z.infer<typeof ReadFileSchema>;
|
|
432
415
|
export type WriteFileArgs = z.infer<typeof WriteFileSchema>;
|
|
433
416
|
export type ReplaceTextArgs = z.infer<typeof ReplaceTextSchema>;
|
|
417
|
+
export type PatchFileArgs = z.infer<typeof PatchFileSchema>;
|
|
418
|
+
export type BatchSurgicalEditArgs = z.infer<typeof BatchSurgicalEditSchema>;
|
|
419
|
+
export type ListDirArgs = z.infer<typeof ListDirSchema>;
|
|
420
|
+
export type GrepSearchArgs = z.infer<typeof GrepSearchSchema>;
|
|
421
|
+
export type GetProjectMapArgs = z.infer<typeof GetProjectMapSchema>;
|
|
422
|
+
export type GetProjectGapsArgs = z.infer<typeof GetProjectGapsSchema>;
|
|
434
423
|
export type SendAgentMessageArgs = z.infer<typeof SendAgentMessageSchema>;
|
|
435
424
|
export type LogAgentActionArgs = z.infer<typeof LogAgentActionSchema>;
|
|
425
|
+
export type AcquireLockArgs = z.infer<typeof AcquireLockSchema>;
|
|
426
|
+
export type ReleaseLockArgs = z.infer<typeof ReleaseLockSchema>;
|
|
427
|
+
export type RegisterAgentArgs = z.infer<typeof RegisterAgentSchema>;
|
|
428
|
+
export type CheckPortsArgs = z.infer<typeof CheckPortsSchema>;
|
|
429
|
+
export type RunTestsArgs = z.infer<typeof RunTestsSchema>;
|
|
430
|
+
export type UpdateProjectMemoryArgs = z.infer<typeof UpdateProjectMemorySchema>;
|
|
431
|
+
export type RunShellCommandArgs = z.infer<typeof RunShellCommandSchema>;
|
|
436
432
|
export type AnalyzeCodeQualityArgs = z.infer<typeof AnalyzeCodeQualitySchema>;
|
|
437
433
|
export type CheckArchitectureComplianceArgs = z.infer<typeof CheckArchitectureComplianceSchema>;
|
|
438
|
-
export type
|
|
439
|
-
export type LLMGatewayStatusArgs = z.infer<typeof LLMGatewayStatusSchema>;
|
|
434
|
+
export type ApproveOperationArgs = z.infer<typeof ApproveOperationSchema>;
|
|
@@ -34,7 +34,7 @@ export const ReplaceTextSchema = z.object({
|
|
|
34
34
|
path: z.string().min(1, "Path is required"),
|
|
35
35
|
oldText: z.string().min(1, "oldText is required"),
|
|
36
36
|
newText: z.string(),
|
|
37
|
-
allowMultiple: z.boolean().default(false),
|
|
37
|
+
allowMultiple: z.boolean().optional().default(false),
|
|
38
38
|
}).strict();
|
|
39
39
|
// ─── Search & Exploration
|
|
40
40
|
export const ListDirSchema = z.object({
|
|
@@ -58,7 +58,7 @@ export const BatchSurgicalEditSchema = z.object({
|
|
|
58
58
|
path: z.string().min(1),
|
|
59
59
|
oldText: z.string().min(1),
|
|
60
60
|
newText: z.string(),
|
|
61
|
-
allowMultiple: z.boolean().default(false),
|
|
61
|
+
allowMultiple: z.boolean().optional().default(false),
|
|
62
62
|
})),
|
|
63
63
|
}).strict();
|
|
64
64
|
export const PatchFileSchema = z.object({
|
|
@@ -97,7 +97,7 @@ export const SubmitPlanSchema = z.object({
|
|
|
97
97
|
export const AcquireLockSchema = z.object({
|
|
98
98
|
resource: z.string().min(1),
|
|
99
99
|
agent: AgentIDSchema,
|
|
100
|
-
ttl: z.number().int().positive().default(60),
|
|
100
|
+
ttl: z.number().int().positive().optional().default(60),
|
|
101
101
|
}).strict();
|
|
102
102
|
export const ReleaseLockSchema = z.object({
|
|
103
103
|
resource: z.string().min(1),
|
|
@@ -106,7 +106,7 @@ export const ReleaseLockSchema = z.object({
|
|
|
106
106
|
export const RegisterAgentSchema = z.object({
|
|
107
107
|
agent: AgentIDSchema,
|
|
108
108
|
role: z.string().min(1),
|
|
109
|
-
capability: z.number().int().min(1).max(10).default(5),
|
|
109
|
+
capability: z.number().int().min(1).max(10).optional().default(5),
|
|
110
110
|
specialties: z.record(z.number()).optional(),
|
|
111
111
|
}).strict();
|
|
112
112
|
export const UpdateContractHashSchema = z.object({}).strict();
|
|
@@ -123,7 +123,7 @@ export const StoreKnowledgeSchema = z.object({
|
|
|
123
123
|
export const SearchKnowledgeSchema = z.object({
|
|
124
124
|
query: z.string().min(1, "Query is required"),
|
|
125
125
|
category: z.enum(["ARCHITECTURE", "DECISION", "CODE_SNIPPET", "RULE", "TASK_HISTORY"]).optional(),
|
|
126
|
-
limit: z.number().int().positive().default(5),
|
|
126
|
+
limit: z.number().int().positive().optional().default(5),
|
|
127
127
|
}).strict();
|
|
128
128
|
export const DeleteKnowledgeSchema = z.object({
|
|
129
129
|
id: z.string().optional(),
|
|
@@ -137,8 +137,8 @@ export const SendAgentMessageSchema = z.object({
|
|
|
137
137
|
content: z.string().min(1, "Content cannot be empty"),
|
|
138
138
|
traceId: TraceIDSchema,
|
|
139
139
|
parentId: TaskIDSchema.optional(),
|
|
140
|
-
priority: z.enum(["HIGH", "NORMAL", "LOW"]).default("NORMAL"),
|
|
141
|
-
requiresApproval: z.boolean().default(false),
|
|
140
|
+
priority: z.enum(["HIGH", "NORMAL", "LOW"]).optional().default("NORMAL"),
|
|
141
|
+
requiresApproval: z.boolean().optional().default(false),
|
|
142
142
|
}).strict();
|
|
143
143
|
export const LogAgentActionSchema = z.object({
|
|
144
144
|
agent: AgentIDSchema,
|
|
@@ -150,23 +150,12 @@ export const LogAgentActionSchema = z.object({
|
|
|
150
150
|
}).strict();
|
|
151
151
|
export const AskHumanSchema = z.object({
|
|
152
152
|
question: z.string().min(10, "Question must be clear and detailed."),
|
|
153
|
+
timeoutSeconds: z.number().int().positive().optional().default(120),
|
|
153
154
|
}).strict();
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
messages: z.array(z.object({
|
|
157
|
-
role: z.enum(["system", "user", "assistant", "tool"]),
|
|
158
|
-
content: z.string().min(1),
|
|
159
|
-
})).min(1, "At least one message is required"),
|
|
160
|
-
system: z.string().optional(),
|
|
161
|
-
model: z.string().optional(),
|
|
162
|
-
provider: z.enum(["openai", "anthropic", "google", "grok", "ollama"]).optional(),
|
|
163
|
-
strategy: z.enum(["round-robin", "least-latency", "cost-optimized", "failover", "priority-based", "model-based"]).optional(),
|
|
164
|
-
temperature: z.number().min(0).max(2).optional(),
|
|
165
|
-
maxTokens: z.number().int().positive().optional(),
|
|
155
|
+
export const ApproveOperationSchema = z.object({
|
|
156
|
+
action: z.enum(["approve", "reject", "list"]),
|
|
166
157
|
traceId: z.string().optional(),
|
|
167
|
-
|
|
168
|
-
export const LLMGatewayStatusSchema = z.object({
|
|
169
|
-
detail: z.enum(["overview", "providers", "stats"]).optional().default("overview"),
|
|
158
|
+
reason: z.string().optional(),
|
|
170
159
|
}).strict();
|
|
171
160
|
// ─── Code Quality Analysis ──────────────────────────────────────────
|
|
172
161
|
export const AnalyzeCodeQualitySchema = z.object({
|
|
@@ -180,4 +169,11 @@ export const CheckArchitectureComplianceSchema = z.object({
|
|
|
180
169
|
path: z.string().min(1, "Path to check is required"),
|
|
181
170
|
rules: z.array(z.string()).optional(),
|
|
182
171
|
}).strict();
|
|
172
|
+
// ─── PII / Compliance ───────────────────────────────────────────────
|
|
173
|
+
export const MaskPIISchema = z.object({
|
|
174
|
+
text: z.string().optional(),
|
|
175
|
+
data: z.record(z.unknown()).optional(),
|
|
176
|
+
mode: z.enum(["text", "object", "auto"]).optional().default("auto"),
|
|
177
|
+
strictMode: z.boolean().optional().default(false),
|
|
178
|
+
}).strict();
|
|
183
179
|
//# sourceMappingURL=schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE;KAClC,KAAK,CAAC,mBAAmB,EAAE,8EAA8E,CAAC;KAC1G,GAAG,CAAC,CAAC,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE;KAClC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE;KACjC,KAAK,CAAC,eAAe,EAAE,2CAA2C,CAAC;KACnE,GAAG,CAAC,CAAC,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7F;;;;GAIG;AAEH,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAClD,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,6 +95,16 @@ export function handleRunCommand(projectRoot, args) {
|
|
|
95
95
|
isError: true,
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
|
+
// Harden to prevent shell command injection / chaining
|
|
99
|
+
const hasShellMetacharacters = /[;&|><$`\n\r]/.test(command);
|
|
100
|
+
if (hasShellMetacharacters) {
|
|
101
|
+
const errorMsg = "Command rejected: Shell metacharacters are forbidden to prevent command injection.";
|
|
102
|
+
Metrics.logError(projectRoot, "@mcp", `run_shell_command: ${command} (denied: metacharacters)`, errorMsg);
|
|
103
|
+
return Promise.resolve({
|
|
104
|
+
content: [{ type: "text", text: `ERROR: ${errorMsg}` }],
|
|
105
|
+
isError: true,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
98
108
|
return new Promise((resolve) => {
|
|
99
109
|
exec(command, { cwd: projectRoot, timeout: TIMEOUT }, (error, stdout, stderr) => {
|
|
100
110
|
const output = stdout + stderr;
|