atabey 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +672 -21
- package/PRIVACY.md +8 -14
- package/README.md +183 -25
- package/bin/cli.js +72 -5
- package/dist/framework-mcp/src/index.js +145 -13
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/control_plane/registry.d.ts +1 -1
- package/dist/framework-mcp/src/tools/control_plane/registry.js +52 -4
- package/dist/framework-mcp/src/tools/control_plane/registry.js.map +1 -1
- package/dist/framework-mcp/src/tools/definitions.js +1 -1
- package/dist/framework-mcp/src/tools/file_system/read_file.js +5 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/approve_operation.d.ts +10 -8
- package/dist/framework-mcp/src/tools/messaging/approve_operation.js +12 -12
- package/dist/framework-mcp/src/tools/messaging/approve_operation.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +8 -8
- package/dist/framework-mcp/src/tools/messaging/ask_human.js +8 -8
- package/dist/framework-mcp/src/tools/messaging/send_message.js +19 -3
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +1 -0
- package/dist/framework-mcp/src/tools/observability/check_ports.js +21 -7
- package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
- package/dist/framework-mcp/src/tools/schemas.d.ts +4 -4
- package/dist/framework-mcp/src/tools/search/grep_search.js +11 -4
- package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/list_dir.js +3 -0
- package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -1
- package/dist/framework-mcp/src/tools/shell/run_command.js +185 -93
- package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
- package/dist/framework-mcp/src/utils/auth.d.ts +26 -2
- package/dist/framework-mcp/src/utils/auth.js +74 -7
- package/dist/framework-mcp/src/utils/auth.js.map +1 -1
- package/dist/framework-mcp/src/utils/compliance.js +45 -13
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
- package/dist/framework-mcp/src/utils/discipline.d.ts +1 -0
- package/dist/framework-mcp/src/utils/discipline.js +42 -3
- package/dist/framework-mcp/src/utils/discipline.js.map +1 -1
- package/dist/framework-mcp/src/utils/human-in-loop.d.ts +35 -2
- package/dist/framework-mcp/src/utils/human-in-loop.js +114 -10
- package/dist/framework-mcp/src/utils/human-in-loop.js.map +1 -1
- package/dist/framework-mcp/src/utils/loop-detector.js +3 -3
- package/dist/framework-mcp/src/utils/loop-detector.js.map +1 -1
- package/dist/framework-mcp/src/utils/permissions.d.ts +67 -3
- package/dist/framework-mcp/src/utils/permissions.js +179 -43
- package/dist/framework-mcp/src/utils/permissions.js.map +1 -1
- package/dist/framework-mcp/src/utils/prompt-injection.d.ts +20 -0
- package/dist/framework-mcp/src/utils/prompt-injection.js +64 -0
- package/dist/framework-mcp/src/utils/prompt-injection.js.map +1 -0
- package/dist/framework-mcp/src/utils/quality.js +4 -3
- package/dist/framework-mcp/src/utils/quality.js.map +1 -1
- package/dist/framework-mcp/src/utils/silent-router.d.ts +4 -2
- package/dist/framework-mcp/src/utils/silent-router.js +35 -9
- package/dist/framework-mcp/src/utils/silent-router.js.map +1 -1
- package/dist/framework-mcp/tests/tools/file_system/permissions.test.js +174 -71
- package/dist/framework-mcp/tests/tools/file_system/permissions.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +36 -30
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/observability/check_ports.test.js +26 -12
- package/dist/framework-mcp/tests/tools/observability/check_ports.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/shell/run_command.test.js +38 -15
- package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -1
- package/dist/framework-mcp/tests/utils/human-in-loop.test.js +152 -4
- package/dist/framework-mcp/tests/utils/human-in-loop.test.js.map +1 -1
- package/dist/framework-mcp/tests/utils/loop-detector.test.js +0 -2
- package/dist/framework-mcp/tests/utils/loop-detector.test.js.map +1 -1
- package/dist/framework-mcp/tests/utils/prompt-injection.test.d.ts +1 -0
- package/dist/framework-mcp/tests/utils/prompt-injection.test.js +43 -0
- package/dist/framework-mcp/tests/utils/prompt-injection.test.js.map +1 -0
- package/dist/src/cli/commands/dashboard.js +167 -2
- package/dist/src/cli/commands/dashboard.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-standards.js +1 -1
- package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
- package/dist/src/cli/commands/init.js +14 -7
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/log.js +8 -5
- package/dist/src/cli/commands/log.js.map +1 -1
- package/dist/src/cli/commands/mcp.js +3 -1
- package/dist/src/cli/commands/mcp.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +4 -4
- package/dist/src/cli/commands/orchestrate.js +14 -2
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/script.js +8 -1
- package/dist/src/cli/commands/script.js.map +1 -1
- package/dist/src/cli/commands/status.js +21 -1
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/utils/memory.js +6 -5
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/cli/utils/schemas.d.ts +2 -2
- package/dist/src/contracts/tasks.d.ts +4 -4
- package/dist/src/modules/contracts/api.d.ts +6 -6
- package/dist/src/modules/engines/agent-executor.js +41 -20
- package/dist/src/modules/engines/agent-executor.js.map +1 -1
- package/dist/src/modules/engines/agent-loop.d.ts +5 -5
- package/dist/src/modules/engines/agent-loop.js +5 -5
- package/dist/src/modules/engines/evaluation-engine.d.ts +9 -2
- package/dist/src/modules/engines/evaluation-engine.js +77 -9
- package/dist/src/modules/engines/evaluation-engine.js.map +1 -1
- package/dist/src/modules/engines/quality-gate.js +4 -2
- package/dist/src/modules/engines/quality-gate.js.map +1 -1
- package/dist/src/modules/engines/risk-engine.d.ts +17 -1
- package/dist/src/modules/engines/risk-engine.js +98 -3
- package/dist/src/modules/engines/risk-engine.js.map +1 -1
- package/dist/src/modules/engines/routing-engine.d.ts +26 -1
- package/dist/src/modules/engines/routing-engine.js +97 -1
- package/dist/src/modules/engines/routing-engine.js.map +1 -1
- package/dist/src/modules/providers/shared.js +2 -3
- package/dist/src/modules/providers/shared.js.map +1 -1
- package/dist/src/shared/pii.js +1 -1
- package/dist/src/shared/pii.js.map +1 -1
- package/dist/src/shared/storage.d.ts +60 -0
- package/dist/src/shared/storage.js +77 -3
- package/dist/src/shared/storage.js.map +1 -1
- package/dist/tests/cli/commands/dashboard-coverage.test.js +3 -1
- package/dist/tests/cli/commands/dashboard-coverage.test.js.map +1 -1
- package/dist/tests/modules/engines/agent-executor.test.js +1 -1
- package/dist/tests/modules/engines/agent-executor.test.js.map +1 -1
- package/dist/tests/modules/engines/evaluation-engine.test.js +2 -2
- package/dist/tests/modules/engines/evaluation-engine.test.js.map +1 -1
- package/dist/tests/status-cost.test.js +2 -0
- package/dist/tests/status-cost.test.js.map +1 -1
- package/dist/tests/storage-operations.test.js +31 -4
- package/dist/tests/storage-operations.test.js.map +1 -1
- package/dist/vitest.config.js +6 -4
- package/dist/vitest.config.js.map +1 -1
- package/framework-mcp/README.md +18 -32
- package/framework-mcp/dist/dashboard/assets/index-B-Eu7_J9.js +1260 -0
- package/framework-mcp/dist/dashboard/index.html +1 -1
- package/framework-mcp/dist/framework-mcp/src/index.js +145 -13
- package/framework-mcp/dist/framework-mcp/src/tools/control_plane/registry.js +52 -4
- package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +1 -1
- package/framework-mcp/dist/framework-mcp/src/tools/file_system/read_file.js +5 -0
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/approve_operation.js +12 -12
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +8 -8
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/send_message.js +19 -3
- package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +21 -7
- package/framework-mcp/dist/framework-mcp/src/tools/search/grep_search.js +11 -4
- package/framework-mcp/dist/framework-mcp/src/tools/search/list_dir.js +3 -0
- package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +185 -93
- package/framework-mcp/dist/framework-mcp/src/utils/auth.js +74 -7
- package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +45 -13
- package/framework-mcp/dist/framework-mcp/src/utils/discipline.js +42 -3
- package/framework-mcp/dist/framework-mcp/src/utils/human-in-loop.js +114 -10
- package/framework-mcp/dist/framework-mcp/src/utils/loop-detector.js +3 -3
- package/framework-mcp/dist/framework-mcp/src/utils/permissions.js +179 -43
- package/framework-mcp/dist/framework-mcp/src/utils/prompt-injection.js +63 -0
- package/framework-mcp/dist/framework-mcp/src/utils/quality.js +4 -3
- package/framework-mcp/dist/framework-mcp/src/utils/silent-router.js +35 -9
- package/framework-mcp/dist/src/cli/utils/memory.js +6 -5
- package/framework-mcp/dist/src/modules/engines/evaluation-engine.js +170 -0
- package/framework-mcp/dist/src/modules/engines/quality-gate.js +4 -2
- package/framework-mcp/dist/src/modules/engines/risk-engine.js +98 -3
- package/framework-mcp/dist/src/modules/engines/routing-engine.js +97 -1
- package/framework-mcp/dist/src/modules/providers/shared.js +2 -3
- package/framework-mcp/dist/src/shared/pii.js +1 -1
- package/framework-mcp/dist/src/shared/storage.js +77 -3
- package/framework-mcp/package.json +21 -18
- package/mcp.json +3 -2
- package/package.json +4 -5
- package/framework-mcp/dist/dashboard/assets/index-B2mYld0c.js +0 -1221
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { approveOperation,
|
|
1
|
+
import { approveOperation, getPendingApprovals, rejectOperation } from "../../utils/human-in-loop.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* MCP Tool: approve_operation
|
|
4
4
|
*
|
|
5
|
-
* AI CLI
|
|
6
|
-
*
|
|
5
|
+
* In AI CLI (Claude Code, Gemini CLI), running "atabey approve <traceId>"
|
|
6
|
+
* is not possible — anything typed in chat is treated as a message, not a CLI command.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* This tool moves the risk gate approval flow directly into an MCP tool call:
|
|
9
9
|
*
|
|
10
|
-
* 1. Atabey
|
|
11
|
-
* 2.
|
|
12
|
-
* 3. AI
|
|
10
|
+
* 1. Atabey blocks a high-risk operation
|
|
11
|
+
* 2. Tells the developer: "call the approve_operation tool"
|
|
12
|
+
* 3. AI calls this tool → operation is approved/rejected
|
|
13
13
|
*
|
|
14
|
-
*
|
|
14
|
+
* Developer never has to switch to terminal.
|
|
15
15
|
*/
|
|
16
16
|
export async function handleApproveOperation(_root, args) {
|
|
17
17
|
const { action, traceId, reason } = args;
|
|
18
|
-
// LIST:
|
|
18
|
+
// LIST: Show pending approvals
|
|
19
19
|
if (action === "list") {
|
|
20
20
|
const pending = getPendingApprovals();
|
|
21
21
|
if (pending.length === 0) {
|
|
@@ -42,7 +42,7 @@ export async function handleApproveOperation(_root, args) {
|
|
|
42
42
|
content: [{ type: "text", text: lines.join("\n") }],
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
// APPROVE or REJECT: traceId
|
|
45
|
+
// APPROVE or REJECT: traceId is required
|
|
46
46
|
if (!traceId) {
|
|
47
47
|
return {
|
|
48
48
|
isError: true,
|
|
@@ -50,7 +50,7 @@ export async function handleApproveOperation(_root, args) {
|
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
52
|
if (action === "approve") {
|
|
53
|
-
const result = approveOperation(traceId);
|
|
53
|
+
const result = approveOperation(traceId, args.passcode, args.userRole);
|
|
54
54
|
return {
|
|
55
55
|
content: [{
|
|
56
56
|
type: "text",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve_operation.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/approve_operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"approve_operation.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/approve_operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,16 +6,16 @@ interface AskHumanArgs {
|
|
|
6
6
|
/**
|
|
7
7
|
* ─── ASK HUMAN — File Bridge ─────────────────────────────────────────
|
|
8
8
|
*
|
|
9
|
-
* AI
|
|
10
|
-
*
|
|
9
|
+
* AI CLIs (Claude Code, Gemini CLI) start the MCP server as a stdio subprocess.
|
|
10
|
+
* In this subprocess, stdin is isTTY=false (used for MCP JSON-RPC).
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* 1.
|
|
14
|
-
* 2.
|
|
15
|
-
* 3.
|
|
16
|
-
* 4.
|
|
12
|
+
* Solution: File-based Q&A bridge.
|
|
13
|
+
* 1. Question → written to .atabey/hitl/question.txt
|
|
14
|
+
* 2. Developer answers via `atabey hitl` command
|
|
15
|
+
* 3. Answer → written to .atabey/hitl/answer.txt
|
|
16
|
+
* 4. This handler reads the answer and returns it to the AI
|
|
17
17
|
*
|
|
18
|
-
* Dashboard: /api/approvals endpoint
|
|
18
|
+
* Dashboard: Can also be answered via /api/approvals endpoint on the web dashboard.
|
|
19
19
|
*/
|
|
20
20
|
export declare function handleAskHuman(root: string, args: AskHumanArgs): Promise<ToolResult>;
|
|
21
21
|
export {};
|
|
@@ -3,16 +3,16 @@ import path from "path";
|
|
|
3
3
|
/**
|
|
4
4
|
* ─── ASK HUMAN — File Bridge ─────────────────────────────────────────
|
|
5
5
|
*
|
|
6
|
-
* AI
|
|
7
|
-
*
|
|
6
|
+
* AI CLIs (Claude Code, Gemini CLI) start the MCP server as a stdio subprocess.
|
|
7
|
+
* In this subprocess, stdin is isTTY=false (used for MCP JSON-RPC).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* 1.
|
|
11
|
-
* 2.
|
|
12
|
-
* 3.
|
|
13
|
-
* 4.
|
|
9
|
+
* Solution: File-based Q&A bridge.
|
|
10
|
+
* 1. Question → written to .atabey/hitl/question.txt
|
|
11
|
+
* 2. Developer answers via `atabey hitl` command
|
|
12
|
+
* 3. Answer → written to .atabey/hitl/answer.txt
|
|
13
|
+
* 4. This handler reads the answer and returns it to the AI
|
|
14
14
|
*
|
|
15
|
-
* Dashboard: /api/approvals endpoint
|
|
15
|
+
* Dashboard: Can also be answered via /api/approvals endpoint on the web dashboard.
|
|
16
16
|
*/
|
|
17
17
|
export async function handleAskHuman(root, args) {
|
|
18
18
|
const timeoutSeconds = args.timeoutSeconds ?? 120;
|
|
@@ -2,15 +2,31 @@ import fs from "fs";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { resolveFrameworkDir } from "../../utils/security.js";
|
|
4
4
|
import { Metrics } from "../../utils/metrics.js";
|
|
5
|
+
import { verifyMessagingPermission, resolveActiveAgent } from "../../utils/permissions.js";
|
|
5
6
|
export async function handleSendAgentMessage(projectRoot, args) {
|
|
6
7
|
const { to, category, content, traceId, parentId, requiresApproval } = args;
|
|
7
|
-
const
|
|
8
|
+
const frameworkDir = resolveFrameworkDir(projectRoot);
|
|
9
|
+
const absoluteFrameworkPath = path.isAbsolute(frameworkDir)
|
|
10
|
+
? frameworkDir
|
|
11
|
+
: path.resolve(projectRoot, frameworkDir);
|
|
12
|
+
const activeAgent = resolveActiveAgent(absoluteFrameworkPath);
|
|
13
|
+
const from = activeAgent || args.from || "@mcp";
|
|
8
14
|
if (!to || !category || !content || !traceId) {
|
|
9
15
|
const err = "Missing required messaging arguments (to, category, content, or traceId).";
|
|
10
16
|
Metrics.logError(projectRoot, from, "send_agent_message", err);
|
|
11
17
|
return { isError: true, content: [{ type: "text", text: `[ERROR] ${err}` }] };
|
|
12
18
|
}
|
|
13
|
-
|
|
19
|
+
// ENFORCE AGENT TIER MESSAGING RBAC
|
|
20
|
+
// Prevents core agents from delegating to recon agents, bypassing the quality gate.
|
|
21
|
+
// This is the AI Governance enforcement point for Claude Code, Gemini CLI, Cursor.
|
|
22
|
+
try {
|
|
23
|
+
verifyMessagingPermission(from, to);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
const err = String(e instanceof Error ? e.message : e);
|
|
27
|
+
Metrics.logError(projectRoot, from, "send_agent_message", err);
|
|
28
|
+
return { isError: true, content: [{ type: "text", text: `[ERROR] ${err}` }] };
|
|
29
|
+
}
|
|
14
30
|
const messagesDir = path.join(projectRoot, frameworkDir, "messages");
|
|
15
31
|
const agentName = to.replace("@", "");
|
|
16
32
|
const messagePath = path.join(messagesDir, `${agentName}.json`);
|
|
@@ -23,7 +39,7 @@ export async function handleSendAgentMessage(projectRoot, args) {
|
|
|
23
39
|
if (fs.existsSync(lockPath)) {
|
|
24
40
|
try {
|
|
25
41
|
const stats = fs.statSync(lockPath);
|
|
26
|
-
if (Date.now() - stats.mtimeMs >
|
|
42
|
+
if (Date.now() - stats.mtimeMs > 15000) {
|
|
27
43
|
const tempLockPath = `${lockPath}.${Math.random().toString(36).substring(2)}.old`;
|
|
28
44
|
fs.renameSync(lockPath, tempLockPath);
|
|
29
45
|
fs.unlinkSync(tempLockPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/send_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/send_message.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CheckActivePortsArgs, ToolResult } from "../types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Checks for active network ports and their status.
|
|
4
|
+
* Uses spawnSync instead of execSync to prevent shell injection.
|
|
4
5
|
*/
|
|
5
6
|
export declare function handleCheckPorts(projectRoot: string, args: CheckActivePortsArgs): ToolResult;
|
|
@@ -1,18 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawnSync } from "child_process";
|
|
2
2
|
/**
|
|
3
3
|
* Checks for active network ports and their status.
|
|
4
|
+
* Uses spawnSync instead of execSync to prevent shell injection.
|
|
4
5
|
*/
|
|
5
6
|
export function handleCheckPorts(projectRoot, args) {
|
|
6
7
|
const rawFilter = args.filter || "";
|
|
7
8
|
// Sanitize filter to prevent command injection (allow only alphanumeric, dots, colons, dashes, underscores)
|
|
8
9
|
const filter = rawFilter.replace(/[^a-zA-Z0-9.:_-]/g, "");
|
|
9
10
|
try {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
let output;
|
|
12
|
+
if (process.platform === "win32") {
|
|
13
|
+
const result = spawnSync("netstat", ["-ano"], { encoding: "utf8" });
|
|
14
|
+
if (result.error)
|
|
15
|
+
throw result.error;
|
|
16
|
+
const lines = (result.stdout || "").split("\n").filter(l => l.includes("LISTENING"));
|
|
17
|
+
output = filter
|
|
18
|
+
? lines.filter(l => l.includes(filter)).join("\n")
|
|
19
|
+
: lines.join("\n");
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const result = spawnSync("lsof", ["-i", "-P", "-n"], { encoding: "utf8" });
|
|
23
|
+
if (result.error)
|
|
24
|
+
throw result.error;
|
|
25
|
+
const lines = (result.stdout || "").split("\n").filter(l => l.includes("LISTEN"));
|
|
26
|
+
output = filter
|
|
27
|
+
? lines.filter(l => l.includes(filter)).join("\n")
|
|
28
|
+
: lines.join("\n");
|
|
29
|
+
}
|
|
16
30
|
return {
|
|
17
31
|
content: [{
|
|
18
32
|
type: "text",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_ports.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/observability/check_ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"check_ports.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/observability/check_ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C;;;GAGG;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,IAAI,MAAc,CAAC;QAEnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,IAAI,MAAM,CAAC,KAAK;gBAAE,MAAM,MAAM,CAAC,KAAK,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YACrF,MAAM,GAAG,MAAM;gBACX,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,IAAI,MAAM,CAAC,KAAK;gBAAE,MAAM,MAAM,CAAC,KAAK,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClF,MAAM,GAAG,MAAM;gBACX,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,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"}
|
|
@@ -285,11 +285,11 @@ export declare const DeleteKnowledgeSchema: z.ZodObject<{
|
|
|
285
285
|
id: z.ZodOptional<z.ZodString>;
|
|
286
286
|
category: z.ZodOptional<z.ZodEnum<["ARCHITECTURE", "DECISION", "CODE_SNIPPET", "RULE", "TASK_HISTORY"]>>;
|
|
287
287
|
}, "strict", z.ZodTypeAny, {
|
|
288
|
-
id?: string | undefined;
|
|
289
288
|
category?: "ARCHITECTURE" | "DECISION" | "CODE_SNIPPET" | "RULE" | "TASK_HISTORY" | undefined;
|
|
290
|
-
}, {
|
|
291
289
|
id?: string | undefined;
|
|
290
|
+
}, {
|
|
292
291
|
category?: "ARCHITECTURE" | "DECISION" | "CODE_SNIPPET" | "RULE" | "TASK_HISTORY" | undefined;
|
|
292
|
+
id?: string | undefined;
|
|
293
293
|
}>;
|
|
294
294
|
export declare const SendAgentMessageSchema: z.ZodObject<{
|
|
295
295
|
from: z.ZodString;
|
|
@@ -303,7 +303,7 @@ export declare const SendAgentMessageSchema: z.ZodObject<{
|
|
|
303
303
|
}, "strict", z.ZodTypeAny, {
|
|
304
304
|
traceId: string;
|
|
305
305
|
from: string;
|
|
306
|
-
priority: "NORMAL" | "
|
|
306
|
+
priority: "NORMAL" | "LOW" | "HIGH";
|
|
307
307
|
to: string;
|
|
308
308
|
category: "ALERT" | "DELEGATION" | "ACTION" | "SUBTASK" | "REPLY";
|
|
309
309
|
content: string;
|
|
@@ -315,7 +315,7 @@ export declare const SendAgentMessageSchema: z.ZodObject<{
|
|
|
315
315
|
to: string;
|
|
316
316
|
category: "ALERT" | "DELEGATION" | "ACTION" | "SUBTASK" | "REPLY";
|
|
317
317
|
content: string;
|
|
318
|
-
priority?: "NORMAL" | "
|
|
318
|
+
priority?: "NORMAL" | "LOW" | "HIGH" | undefined;
|
|
319
319
|
parentId?: string | undefined;
|
|
320
320
|
requiresApproval?: boolean | undefined;
|
|
321
321
|
}>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { Metrics } from "../../utils/metrics.js";
|
|
4
|
+
import { verifyReadPermission } from "../../utils/permissions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Searches for a regex pattern within files in the project.
|
|
6
7
|
*/
|
|
@@ -42,12 +43,18 @@ export function handleGrepSearch(projectRoot, args) {
|
|
|
42
43
|
if (includePattern && !filePath.endsWith(includePattern)) {
|
|
43
44
|
continue;
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
try {
|
|
47
|
+
verifyReadPermission(projectRoot, filePath);
|
|
48
|
+
const content = fs.readFileSync(filePath, "utf8");
|
|
49
|
+
if (new RegExp(pattern).test(content)) {
|
|
50
|
+
if (results.length < 30) {
|
|
51
|
+
results.push(filePath);
|
|
52
|
+
}
|
|
49
53
|
}
|
|
50
54
|
}
|
|
55
|
+
catch {
|
|
56
|
+
// Silently skip files without read permissions
|
|
57
|
+
}
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep_search.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/grep_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"grep_search.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/grep_search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { safePath } from "../../utils/security.js";
|
|
4
|
+
import { verifyReadPermission } from "../../utils/permissions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Lists the contents of a directory.
|
|
6
7
|
*/
|
|
7
8
|
export function handleListDir(projectRoot, args) {
|
|
8
9
|
const dirPath = safePath(projectRoot, args.path || ".");
|
|
10
|
+
// ENFORCE READ PERMISSION MATRIX FOR DIRECTORY
|
|
11
|
+
verifyReadPermission(projectRoot, path.join(args.path || ".", "placeholder"));
|
|
9
12
|
if (!fs.existsSync(dirPath)) {
|
|
10
13
|
throw new Error(`Directory not found: ${args.path}`);
|
|
11
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_dir.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/list_dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"list_dir.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/search/list_dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,IAAiB;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAExD,+CAA+C;IAC/C,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO,EAAE,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yBAAyB,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC9E,CAAC;KACL,CAAC;AACN,CAAC"}
|