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.
Files changed (159) hide show
  1. package/LICENSE +672 -21
  2. package/PRIVACY.md +8 -14
  3. package/README.md +183 -25
  4. package/bin/cli.js +72 -5
  5. package/dist/framework-mcp/src/index.js +145 -13
  6. package/dist/framework-mcp/src/index.js.map +1 -1
  7. package/dist/framework-mcp/src/tools/control_plane/registry.d.ts +1 -1
  8. package/dist/framework-mcp/src/tools/control_plane/registry.js +52 -4
  9. package/dist/framework-mcp/src/tools/control_plane/registry.js.map +1 -1
  10. package/dist/framework-mcp/src/tools/definitions.js +1 -1
  11. package/dist/framework-mcp/src/tools/file_system/read_file.js +5 -0
  12. package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
  13. package/dist/framework-mcp/src/tools/messaging/approve_operation.d.ts +10 -8
  14. package/dist/framework-mcp/src/tools/messaging/approve_operation.js +12 -12
  15. package/dist/framework-mcp/src/tools/messaging/approve_operation.js.map +1 -1
  16. package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +8 -8
  17. package/dist/framework-mcp/src/tools/messaging/ask_human.js +8 -8
  18. package/dist/framework-mcp/src/tools/messaging/send_message.js +19 -3
  19. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  20. package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +1 -0
  21. package/dist/framework-mcp/src/tools/observability/check_ports.js +21 -7
  22. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
  23. package/dist/framework-mcp/src/tools/schemas.d.ts +4 -4
  24. package/dist/framework-mcp/src/tools/search/grep_search.js +11 -4
  25. package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
  26. package/dist/framework-mcp/src/tools/search/list_dir.js +3 -0
  27. package/dist/framework-mcp/src/tools/search/list_dir.js.map +1 -1
  28. package/dist/framework-mcp/src/tools/shell/run_command.js +185 -93
  29. package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
  30. package/dist/framework-mcp/src/utils/auth.d.ts +26 -2
  31. package/dist/framework-mcp/src/utils/auth.js +74 -7
  32. package/dist/framework-mcp/src/utils/auth.js.map +1 -1
  33. package/dist/framework-mcp/src/utils/compliance.js +45 -13
  34. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  35. package/dist/framework-mcp/src/utils/discipline.d.ts +1 -0
  36. package/dist/framework-mcp/src/utils/discipline.js +42 -3
  37. package/dist/framework-mcp/src/utils/discipline.js.map +1 -1
  38. package/dist/framework-mcp/src/utils/human-in-loop.d.ts +35 -2
  39. package/dist/framework-mcp/src/utils/human-in-loop.js +114 -10
  40. package/dist/framework-mcp/src/utils/human-in-loop.js.map +1 -1
  41. package/dist/framework-mcp/src/utils/loop-detector.js +3 -3
  42. package/dist/framework-mcp/src/utils/loop-detector.js.map +1 -1
  43. package/dist/framework-mcp/src/utils/permissions.d.ts +67 -3
  44. package/dist/framework-mcp/src/utils/permissions.js +179 -43
  45. package/dist/framework-mcp/src/utils/permissions.js.map +1 -1
  46. package/dist/framework-mcp/src/utils/prompt-injection.d.ts +20 -0
  47. package/dist/framework-mcp/src/utils/prompt-injection.js +64 -0
  48. package/dist/framework-mcp/src/utils/prompt-injection.js.map +1 -0
  49. package/dist/framework-mcp/src/utils/quality.js +4 -3
  50. package/dist/framework-mcp/src/utils/quality.js.map +1 -1
  51. package/dist/framework-mcp/src/utils/silent-router.d.ts +4 -2
  52. package/dist/framework-mcp/src/utils/silent-router.js +35 -9
  53. package/dist/framework-mcp/src/utils/silent-router.js.map +1 -1
  54. package/dist/framework-mcp/tests/tools/file_system/permissions.test.js +174 -71
  55. package/dist/framework-mcp/tests/tools/file_system/permissions.test.js.map +1 -1
  56. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +36 -30
  57. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  58. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js +26 -12
  59. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js.map +1 -1
  60. package/dist/framework-mcp/tests/tools/shell/run_command.test.js +38 -15
  61. package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -1
  62. package/dist/framework-mcp/tests/utils/human-in-loop.test.js +152 -4
  63. package/dist/framework-mcp/tests/utils/human-in-loop.test.js.map +1 -1
  64. package/dist/framework-mcp/tests/utils/loop-detector.test.js +0 -2
  65. package/dist/framework-mcp/tests/utils/loop-detector.test.js.map +1 -1
  66. package/dist/framework-mcp/tests/utils/prompt-injection.test.d.ts +1 -0
  67. package/dist/framework-mcp/tests/utils/prompt-injection.test.js +43 -0
  68. package/dist/framework-mcp/tests/utils/prompt-injection.test.js.map +1 -0
  69. package/dist/src/cli/commands/dashboard.js +167 -2
  70. package/dist/src/cli/commands/dashboard.js.map +1 -1
  71. package/dist/src/cli/commands/init/scaffold-standards.js +1 -1
  72. package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
  73. package/dist/src/cli/commands/init.js +14 -7
  74. package/dist/src/cli/commands/init.js.map +1 -1
  75. package/dist/src/cli/commands/log.js +8 -5
  76. package/dist/src/cli/commands/log.js.map +1 -1
  77. package/dist/src/cli/commands/mcp.js +3 -1
  78. package/dist/src/cli/commands/mcp.js.map +1 -1
  79. package/dist/src/cli/commands/orchestrate.d.ts +4 -4
  80. package/dist/src/cli/commands/orchestrate.js +14 -2
  81. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  82. package/dist/src/cli/commands/script.js +8 -1
  83. package/dist/src/cli/commands/script.js.map +1 -1
  84. package/dist/src/cli/commands/status.js +21 -1
  85. package/dist/src/cli/commands/status.js.map +1 -1
  86. package/dist/src/cli/utils/memory.js +6 -5
  87. package/dist/src/cli/utils/memory.js.map +1 -1
  88. package/dist/src/cli/utils/schemas.d.ts +2 -2
  89. package/dist/src/contracts/tasks.d.ts +4 -4
  90. package/dist/src/modules/contracts/api.d.ts +6 -6
  91. package/dist/src/modules/engines/agent-executor.js +41 -20
  92. package/dist/src/modules/engines/agent-executor.js.map +1 -1
  93. package/dist/src/modules/engines/agent-loop.d.ts +5 -5
  94. package/dist/src/modules/engines/agent-loop.js +5 -5
  95. package/dist/src/modules/engines/evaluation-engine.d.ts +9 -2
  96. package/dist/src/modules/engines/evaluation-engine.js +77 -9
  97. package/dist/src/modules/engines/evaluation-engine.js.map +1 -1
  98. package/dist/src/modules/engines/quality-gate.js +4 -2
  99. package/dist/src/modules/engines/quality-gate.js.map +1 -1
  100. package/dist/src/modules/engines/risk-engine.d.ts +17 -1
  101. package/dist/src/modules/engines/risk-engine.js +98 -3
  102. package/dist/src/modules/engines/risk-engine.js.map +1 -1
  103. package/dist/src/modules/engines/routing-engine.d.ts +26 -1
  104. package/dist/src/modules/engines/routing-engine.js +97 -1
  105. package/dist/src/modules/engines/routing-engine.js.map +1 -1
  106. package/dist/src/modules/providers/shared.js +2 -3
  107. package/dist/src/modules/providers/shared.js.map +1 -1
  108. package/dist/src/shared/pii.js +1 -1
  109. package/dist/src/shared/pii.js.map +1 -1
  110. package/dist/src/shared/storage.d.ts +60 -0
  111. package/dist/src/shared/storage.js +77 -3
  112. package/dist/src/shared/storage.js.map +1 -1
  113. package/dist/tests/cli/commands/dashboard-coverage.test.js +3 -1
  114. package/dist/tests/cli/commands/dashboard-coverage.test.js.map +1 -1
  115. package/dist/tests/modules/engines/agent-executor.test.js +1 -1
  116. package/dist/tests/modules/engines/agent-executor.test.js.map +1 -1
  117. package/dist/tests/modules/engines/evaluation-engine.test.js +2 -2
  118. package/dist/tests/modules/engines/evaluation-engine.test.js.map +1 -1
  119. package/dist/tests/status-cost.test.js +2 -0
  120. package/dist/tests/status-cost.test.js.map +1 -1
  121. package/dist/tests/storage-operations.test.js +31 -4
  122. package/dist/tests/storage-operations.test.js.map +1 -1
  123. package/dist/vitest.config.js +6 -4
  124. package/dist/vitest.config.js.map +1 -1
  125. package/framework-mcp/README.md +18 -32
  126. package/framework-mcp/dist/dashboard/assets/index-B-Eu7_J9.js +1260 -0
  127. package/framework-mcp/dist/dashboard/index.html +1 -1
  128. package/framework-mcp/dist/framework-mcp/src/index.js +145 -13
  129. package/framework-mcp/dist/framework-mcp/src/tools/control_plane/registry.js +52 -4
  130. package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +1 -1
  131. package/framework-mcp/dist/framework-mcp/src/tools/file_system/read_file.js +5 -0
  132. package/framework-mcp/dist/framework-mcp/src/tools/messaging/approve_operation.js +12 -12
  133. package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +8 -8
  134. package/framework-mcp/dist/framework-mcp/src/tools/messaging/send_message.js +19 -3
  135. package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +21 -7
  136. package/framework-mcp/dist/framework-mcp/src/tools/search/grep_search.js +11 -4
  137. package/framework-mcp/dist/framework-mcp/src/tools/search/list_dir.js +3 -0
  138. package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +185 -93
  139. package/framework-mcp/dist/framework-mcp/src/utils/auth.js +74 -7
  140. package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +45 -13
  141. package/framework-mcp/dist/framework-mcp/src/utils/discipline.js +42 -3
  142. package/framework-mcp/dist/framework-mcp/src/utils/human-in-loop.js +114 -10
  143. package/framework-mcp/dist/framework-mcp/src/utils/loop-detector.js +3 -3
  144. package/framework-mcp/dist/framework-mcp/src/utils/permissions.js +179 -43
  145. package/framework-mcp/dist/framework-mcp/src/utils/prompt-injection.js +63 -0
  146. package/framework-mcp/dist/framework-mcp/src/utils/quality.js +4 -3
  147. package/framework-mcp/dist/framework-mcp/src/utils/silent-router.js +35 -9
  148. package/framework-mcp/dist/src/cli/utils/memory.js +6 -5
  149. package/framework-mcp/dist/src/modules/engines/evaluation-engine.js +170 -0
  150. package/framework-mcp/dist/src/modules/engines/quality-gate.js +4 -2
  151. package/framework-mcp/dist/src/modules/engines/risk-engine.js +98 -3
  152. package/framework-mcp/dist/src/modules/engines/routing-engine.js +97 -1
  153. package/framework-mcp/dist/src/modules/providers/shared.js +2 -3
  154. package/framework-mcp/dist/src/shared/pii.js +1 -1
  155. package/framework-mcp/dist/src/shared/storage.js +77 -3
  156. package/framework-mcp/package.json +21 -18
  157. package/mcp.json +3 -2
  158. package/package.json +4 -5
  159. package/framework-mcp/dist/dashboard/assets/index-B2mYld0c.js +0 -1221
@@ -1,21 +1,21 @@
1
- import { approveOperation, rejectOperation, getPendingApprovals } from "../../utils/human-in-loop.js";
1
+ import { approveOperation, getPendingApprovals, rejectOperation } from "../../utils/human-in-loop.js";
2
2
  /**
3
- * ─── APPROVE OPERATION — In-Chat Risk Gate ──────────────────────────
3
+ * MCP Tool: approve_operation
4
4
  *
5
- * AI CLI kullanımında "atabey approve <traceId>" CLI komutu çalıştırmak mümkün
6
- * değildir — chat'e yazılan şey CLI komutu olarak değil mesaj olarak işlenir.
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
- * Bu tool, risk gate approval flow'unu doğrudan MCP tool çağrısına taşır:
8
+ * This tool moves the risk gate approval flow directly into an MCP tool call:
9
9
  *
10
- * 1. Atabey yüksek riskli bir operasyonu bloklar
11
- * 2. Geliştiriciye: "approve_operation tool'unu çağır" der
12
- * 3. AI bu tool'u çağırır operasyon onaylanır/reddedilir
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
- * Geliştirici terminale geçmek zorunda kalmaz.
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: Bekleyen approval'ları göster
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 zorunlu
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":"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"}
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 CLI'lar (Claude Code, Gemini CLI) MCP server stdio subprocess olarak
10
- * başlatır. Bu subprocess'te stdin isTTY=false olur (MCP JSON-RPC için kullanılır).
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
- * Çözüm: File-based Q&A bridge.
13
- * 1. Soru → .atabey/hitl/question.txt dosyasına yazılır
14
- * 2. Geliştirici `atabey hitl` komutuyla cevap girer
15
- * 3. Cevap → .atabey/hitl/answer.txt dosyasına yazılır
16
- * 4. Bu handler cevabı okur ve AI'ya döner
12
+ * Solution: File-based Q&A bridge.
13
+ * 1. Questionwritten to .atabey/hitl/question.txt
14
+ * 2. Developer answers via `atabey hitl` command
15
+ * 3. Answerwritten 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'i üzerinden web dashboard'dan da cevaplanabilir.
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 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).
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
- * Çö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
9
+ * Solution: File-based Q&A bridge.
10
+ * 1. Questionwritten to .atabey/hitl/question.txt
11
+ * 2. Developer answers via `atabey hitl` command
12
+ * 3. Answerwritten 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'i üzerinden web dashboard'dan da cevaplanabilir.
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 from = args.from || "@mcp";
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
- const frameworkDir = resolveFrameworkDir(projectRoot);
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 > 10000) {
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":"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"}
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 { execSync } from "child_process";
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
- // Using 'lsof -i -P -n' to list open files and network connections
11
- // Note: may require permissions or behave differently on non-Unix systems
12
- const command = process.platform === "win32"
13
- ? `netstat -ano | findstr LISTENING ${filter ? `| findstr ${filter}` : ""}`
14
- : `lsof -i -P -n | grep LISTEN ${filter ? `| grep ${filter}` : ""}`;
15
- const output = execSync(command, { encoding: "utf8" });
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,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
+ {"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" | "HIGH" | "LOW";
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" | "HIGH" | "LOW" | undefined;
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
- const content = fs.readFileSync(filePath, "utf8");
46
- if (new RegExp(pattern).test(content)) {
47
- if (results.length < 30) {
48
- results.push(filePath);
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":"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"}
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;AAGnD;;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,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"}
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"}