atabey 0.0.13 → 0.0.15

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 (282) hide show
  1. package/ATABEY.md +1 -1
  2. package/PRIVACY.md +8 -14
  3. package/README.md +405 -56
  4. package/bin/cli.js +72 -5
  5. package/dist/framework-mcp/src/index.js +988 -63
  6. package/dist/framework-mcp/src/index.js.map +1 -1
  7. package/dist/framework-mcp/src/tools/compliance/mask_pii.d.ts +17 -0
  8. package/dist/framework-mcp/src/tools/compliance/mask_pii.js +56 -0
  9. package/dist/framework-mcp/src/tools/compliance/mask_pii.js.map +1 -0
  10. package/dist/framework-mcp/src/tools/definitions.js +10 -9
  11. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  12. package/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
  13. package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -1
  14. package/dist/framework-mcp/src/tools/index.js +7 -8
  15. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  16. package/dist/framework-mcp/src/tools/messaging/approve_operation.d.ts +22 -0
  17. package/dist/framework-mcp/src/tools/messaging/approve_operation.js +81 -0
  18. package/dist/framework-mcp/src/tools/messaging/approve_operation.js.map +1 -0
  19. package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +15 -0
  20. package/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
  21. package/dist/framework-mcp/src/tools/messaging/ask_human.js.map +1 -1
  22. package/dist/framework-mcp/src/tools/observability/check_ports.d.ts +1 -0
  23. package/dist/framework-mcp/src/tools/observability/check_ports.js +24 -8
  24. package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
  25. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +13 -64
  26. package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js.map +1 -1
  27. package/dist/framework-mcp/src/tools/schemas.d.ts +48 -53
  28. package/dist/framework-mcp/src/tools/schemas.js +18 -22
  29. package/dist/framework-mcp/src/tools/schemas.js.map +1 -1
  30. package/dist/framework-mcp/src/tools/shell/run_command.js +146 -90
  31. package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
  32. package/dist/framework-mcp/src/tools/types.d.ts +11 -105
  33. package/dist/framework-mcp/src/tools/types.js +1 -0
  34. package/dist/framework-mcp/src/tools/types.js.map +1 -1
  35. package/dist/framework-mcp/src/utils/auth.d.ts +36 -0
  36. package/dist/framework-mcp/src/utils/auth.js +79 -0
  37. package/dist/framework-mcp/src/utils/auth.js.map +1 -0
  38. package/dist/framework-mcp/src/utils/auto-rollback.d.ts +71 -0
  39. package/dist/framework-mcp/src/utils/auto-rollback.js +266 -0
  40. package/dist/framework-mcp/src/utils/auto-rollback.js.map +1 -0
  41. package/dist/framework-mcp/src/utils/compliance.js +12 -4
  42. package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
  43. package/dist/framework-mcp/src/utils/context-optimizer.d.ts +69 -0
  44. package/dist/framework-mcp/src/utils/context-optimizer.js +157 -0
  45. package/dist/framework-mcp/src/utils/context-optimizer.js.map +1 -0
  46. package/dist/framework-mcp/src/utils/discipline.d.ts +68 -0
  47. package/dist/framework-mcp/src/utils/discipline.js +218 -0
  48. package/dist/framework-mcp/src/utils/discipline.js.map +1 -0
  49. package/dist/framework-mcp/src/utils/finops.d.ts +143 -0
  50. package/dist/framework-mcp/src/utils/finops.js +326 -0
  51. package/dist/framework-mcp/src/utils/finops.js.map +1 -0
  52. package/dist/framework-mcp/src/utils/human-in-loop.d.ts +95 -0
  53. package/dist/framework-mcp/src/utils/human-in-loop.js +216 -0
  54. package/dist/framework-mcp/src/utils/human-in-loop.js.map +1 -0
  55. package/dist/framework-mcp/src/utils/license-scanner.d.ts +71 -0
  56. package/dist/framework-mcp/src/utils/license-scanner.js +284 -0
  57. package/dist/framework-mcp/src/utils/license-scanner.js.map +1 -0
  58. package/dist/framework-mcp/src/utils/loop-detector.d.ts +105 -0
  59. package/dist/framework-mcp/src/utils/loop-detector.js +362 -0
  60. package/dist/framework-mcp/src/utils/loop-detector.js.map +1 -0
  61. package/dist/framework-mcp/src/utils/quality.d.ts +19 -0
  62. package/dist/framework-mcp/src/utils/quality.js +125 -0
  63. package/dist/framework-mcp/src/utils/quality.js.map +1 -0
  64. package/dist/framework-mcp/src/utils/rules-engine.d.ts +78 -0
  65. package/dist/framework-mcp/src/utils/rules-engine.js +232 -0
  66. package/dist/framework-mcp/src/utils/rules-engine.js.map +1 -0
  67. package/dist/framework-mcp/src/utils/silent-router.d.ts +49 -0
  68. package/dist/framework-mcp/src/utils/silent-router.js +155 -0
  69. package/dist/framework-mcp/src/utils/silent-router.js.map +1 -0
  70. package/dist/framework-mcp/src/utils/storage.d.ts +1 -0
  71. package/dist/framework-mcp/src/utils/storage.js +2 -2
  72. package/dist/framework-mcp/src/utils/storage.js.map +1 -1
  73. package/dist/framework-mcp/src/utils/telemetry-streamer.d.ts +133 -0
  74. package/dist/framework-mcp/src/utils/telemetry-streamer.js +397 -0
  75. package/dist/framework-mcp/src/utils/telemetry-streamer.js.map +1 -0
  76. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +2 -2
  77. package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
  78. package/dist/framework-mcp/tests/tools/framework/run_tests.test.d.ts +1 -0
  79. package/dist/framework-mcp/tests/tools/framework/run_tests.test.js +49 -0
  80. package/dist/framework-mcp/tests/tools/framework/run_tests.test.js.map +1 -0
  81. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +14 -5
  82. package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
  83. package/dist/framework-mcp/tests/tools/observability/check_ports.test.d.ts +1 -0
  84. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js +44 -0
  85. package/dist/framework-mcp/tests/tools/observability/check_ports.test.js.map +1 -0
  86. package/dist/framework-mcp/tests/tools/shell/run_command.test.js +44 -14
  87. package/dist/framework-mcp/tests/tools/shell/run_command.test.js.map +1 -1
  88. package/dist/framework-mcp/tests/utils/auto-rollback.test.d.ts +7 -0
  89. package/dist/framework-mcp/tests/utils/auto-rollback.test.js +178 -0
  90. package/dist/framework-mcp/tests/utils/auto-rollback.test.js.map +1 -0
  91. package/dist/framework-mcp/tests/utils/context-optimizer.test.d.ts +1 -0
  92. package/dist/framework-mcp/tests/utils/context-optimizer.test.js +62 -0
  93. package/dist/framework-mcp/tests/utils/context-optimizer.test.js.map +1 -0
  94. package/dist/framework-mcp/tests/utils/finops.test.d.ts +7 -0
  95. package/dist/framework-mcp/tests/utils/finops.test.js +157 -0
  96. package/dist/framework-mcp/tests/utils/finops.test.js.map +1 -0
  97. package/dist/framework-mcp/tests/utils/human-in-loop.test.d.ts +1 -0
  98. package/dist/framework-mcp/tests/utils/human-in-loop.test.js +59 -0
  99. package/dist/framework-mcp/tests/utils/human-in-loop.test.js.map +1 -0
  100. package/dist/framework-mcp/tests/utils/license-scanner.test.d.ts +7 -0
  101. package/dist/framework-mcp/tests/utils/license-scanner.test.js +131 -0
  102. package/dist/framework-mcp/tests/utils/license-scanner.test.js.map +1 -0
  103. package/dist/framework-mcp/tests/utils/loop-detector.test.d.ts +7 -0
  104. package/dist/framework-mcp/tests/utils/loop-detector.test.js +204 -0
  105. package/dist/framework-mcp/tests/utils/loop-detector.test.js.map +1 -0
  106. package/dist/framework-mcp/tests/utils/rules-engine.test.d.ts +1 -0
  107. package/dist/framework-mcp/tests/utils/rules-engine.test.js +106 -0
  108. package/dist/framework-mcp/tests/utils/rules-engine.test.js.map +1 -0
  109. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.d.ts +7 -0
  110. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js +201 -0
  111. package/dist/framework-mcp/tests/utils/telemetry-streamer.test.js.map +1 -0
  112. package/dist/src/cli/commands/check.js +16 -1
  113. package/dist/src/cli/commands/check.js.map +1 -1
  114. package/dist/src/cli/commands/dashboard.js +188 -164
  115. package/dist/src/cli/commands/dashboard.js.map +1 -1
  116. package/dist/src/cli/commands/gateway.js +2 -2
  117. package/dist/src/cli/commands/gateway.js.map +1 -1
  118. package/dist/src/cli/commands/init/scaffold-core.d.ts +2 -0
  119. package/dist/src/cli/commands/init/scaffold-core.js +16 -1
  120. package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
  121. package/dist/src/cli/commands/init/scaffold-ops.js +2 -2
  122. package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
  123. package/dist/src/cli/commands/init/scaffold-standards.js +13 -1
  124. package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
  125. package/dist/src/cli/commands/init.d.ts +4 -0
  126. package/dist/src/cli/commands/init.js +94 -31
  127. package/dist/src/cli/commands/init.js.map +1 -1
  128. package/dist/src/cli/commands/mcp.js +3 -1
  129. package/dist/src/cli/commands/mcp.js.map +1 -1
  130. package/dist/src/cli/commands/quickstart.d.ts +1 -1
  131. package/dist/src/cli/commands/quickstart.js +12 -24
  132. package/dist/src/cli/commands/quickstart.js.map +1 -1
  133. package/dist/src/cli/commands/script.js +8 -1
  134. package/dist/src/cli/commands/script.js.map +1 -1
  135. package/dist/src/cli/index.js +24 -23
  136. package/dist/src/cli/index.js.map +1 -1
  137. package/dist/src/cli/shims.js +7 -7
  138. package/dist/src/cli/utils/pkg.js +2 -3
  139. package/dist/src/cli/utils/pkg.js.map +1 -1
  140. package/dist/src/cli/utils/quality.d.ts +10 -0
  141. package/dist/src/cli/utils/quality.js +10 -0
  142. package/dist/src/cli/utils/quality.js.map +1 -0
  143. package/dist/src/modules/agents/definitions.js +45 -40
  144. package/dist/src/modules/agents/definitions.js.map +1 -1
  145. package/dist/src/modules/agents/registry/manager.js +6 -1
  146. package/dist/src/modules/agents/registry/manager.js.map +1 -1
  147. package/dist/src/modules/engines/agent-executor.d.ts +6 -10
  148. package/dist/src/modules/engines/agent-executor.js +63 -21
  149. package/dist/src/modules/engines/agent-executor.js.map +1 -1
  150. package/dist/src/modules/engines/agent-loop.d.ts +34 -0
  151. package/dist/src/modules/engines/agent-loop.js +102 -0
  152. package/dist/src/modules/engines/agent-loop.js.map +1 -0
  153. package/dist/src/modules/engines/evaluation-engine.d.ts +12 -2
  154. package/dist/src/modules/engines/evaluation-engine.js +78 -11
  155. package/dist/src/modules/engines/evaluation-engine.js.map +1 -1
  156. package/dist/src/modules/engines/quality-gate.d.ts +13 -5
  157. package/dist/src/modules/engines/quality-gate.js +39 -31
  158. package/dist/src/modules/engines/quality-gate.js.map +1 -1
  159. package/dist/src/modules/engines/routing-engine.d.ts +5 -3
  160. package/dist/src/modules/engines/routing-engine.js +16 -9
  161. package/dist/src/modules/engines/routing-engine.js.map +1 -1
  162. package/dist/src/modules/gateway/cost-tracker.d.ts +5 -0
  163. package/dist/src/modules/gateway/cost-tracker.js +71 -0
  164. package/dist/src/modules/gateway/cost-tracker.js.map +1 -1
  165. package/dist/src/modules/gateway/gateway.d.ts +4 -0
  166. package/dist/src/modules/gateway/gateway.js +8 -0
  167. package/dist/src/modules/gateway/gateway.js.map +1 -1
  168. package/dist/src/shared/audit.js +3 -2
  169. package/dist/src/shared/audit.js.map +1 -1
  170. package/dist/src/shared/pii.d.ts +41 -9
  171. package/dist/src/shared/pii.js +122 -31
  172. package/dist/src/shared/pii.js.map +1 -1
  173. package/dist/src/shared/storage.d.ts +62 -0
  174. package/dist/src/shared/storage.js +47 -7
  175. package/dist/src/shared/storage.js.map +1 -1
  176. package/dist/tests/embedding.test.d.ts +1 -0
  177. package/dist/tests/embedding.test.js +82 -0
  178. package/dist/tests/embedding.test.js.map +1 -0
  179. package/dist/tests/engines/evaluation-engine.test.d.ts +1 -0
  180. package/dist/tests/engines/evaluation-engine.test.js +71 -0
  181. package/dist/tests/engines/evaluation-engine.test.js.map +1 -0
  182. package/dist/tests/engines/planning-engine.test.d.ts +1 -0
  183. package/dist/tests/engines/planning-engine.test.js +100 -0
  184. package/dist/tests/engines/planning-engine.test.js.map +1 -0
  185. package/dist/tests/engines/quality-gate.test.d.ts +1 -0
  186. package/dist/tests/engines/quality-gate.test.js +59 -0
  187. package/dist/tests/engines/quality-gate.test.js.map +1 -0
  188. package/dist/tests/engines/risk-engine.test.d.ts +1 -0
  189. package/dist/tests/engines/risk-engine.test.js +80 -0
  190. package/dist/tests/engines/risk-engine.test.js.map +1 -0
  191. package/dist/tests/engines/routing-engine.test.d.ts +1 -0
  192. package/dist/tests/engines/routing-engine.test.js +78 -0
  193. package/dist/tests/engines/routing-engine.test.js.map +1 -0
  194. package/dist/tests/integration/hermes_locking.test.js +1 -0
  195. package/dist/tests/integration/hermes_locking.test.js.map +1 -1
  196. package/dist/tests/modules/engines/agent-executor.test.js +1 -1
  197. package/dist/tests/modules/engines/agent-executor.test.js.map +1 -1
  198. package/dist/tests/modules/gateway/cost-tracker.test.js +20 -1
  199. package/dist/tests/modules/gateway/cost-tracker.test.js.map +1 -1
  200. package/dist/tests/shared/lock.test.d.ts +1 -0
  201. package/dist/tests/shared/lock.test.js +95 -0
  202. package/dist/tests/shared/lock.test.js.map +1 -0
  203. package/dist/tests/shared/pii.test.d.ts +1 -0
  204. package/dist/tests/shared/pii.test.js +183 -0
  205. package/dist/tests/shared/pii.test.js.map +1 -0
  206. package/framework-mcp/README.md +307 -35
  207. package/framework-mcp/dist/dashboard/assets/index-B_rK57vi.js +1221 -0
  208. package/framework-mcp/dist/dashboard/index.html +1 -1
  209. package/framework-mcp/dist/framework-mcp/src/index.js +988 -63
  210. package/framework-mcp/dist/framework-mcp/src/tools/compliance/mask_pii.js +55 -0
  211. package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +10 -9
  212. package/framework-mcp/dist/framework-mcp/src/tools/framework/run_tests.js +25 -0
  213. package/framework-mcp/dist/framework-mcp/src/tools/index.js +7 -8
  214. package/framework-mcp/dist/framework-mcp/src/tools/messaging/approve_operation.js +80 -0
  215. package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +89 -20
  216. package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +24 -8
  217. package/framework-mcp/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +13 -64
  218. package/framework-mcp/dist/framework-mcp/src/tools/schemas.js +18 -22
  219. package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +146 -90
  220. package/framework-mcp/dist/framework-mcp/src/tools/types.js +1 -0
  221. package/framework-mcp/dist/framework-mcp/src/utils/auth.js +78 -0
  222. package/framework-mcp/dist/framework-mcp/src/utils/auto-rollback.js +265 -0
  223. package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +12 -4
  224. package/framework-mcp/dist/framework-mcp/src/utils/context-optimizer.js +156 -0
  225. package/framework-mcp/dist/framework-mcp/src/utils/discipline.js +217 -0
  226. package/framework-mcp/dist/framework-mcp/src/utils/finops.js +325 -0
  227. package/framework-mcp/dist/framework-mcp/src/utils/human-in-loop.js +215 -0
  228. package/framework-mcp/dist/framework-mcp/src/utils/license-scanner.js +283 -0
  229. package/framework-mcp/dist/framework-mcp/src/utils/loop-detector.js +361 -0
  230. package/framework-mcp/dist/framework-mcp/src/utils/quality.js +124 -0
  231. package/framework-mcp/dist/framework-mcp/src/utils/rules-engine.js +231 -0
  232. package/framework-mcp/dist/framework-mcp/src/utils/silent-router.js +154 -0
  233. package/framework-mcp/dist/framework-mcp/src/utils/storage.js +2 -2
  234. package/framework-mcp/dist/framework-mcp/src/utils/telemetry-streamer.js +396 -0
  235. package/framework-mcp/dist/src/cli/platforms/core.js +72 -0
  236. package/framework-mcp/dist/src/cli/platforms/index.js +5 -0
  237. package/framework-mcp/dist/src/cli/platforms/paths.js +101 -0
  238. package/framework-mcp/dist/src/cli/platforms/scaffold.js +72 -0
  239. package/framework-mcp/dist/src/cli/platforms/utils.js +75 -0
  240. package/framework-mcp/dist/src/cli/utils/claude.js +57 -0
  241. package/framework-mcp/dist/src/cli/utils/compliance.js +12 -0
  242. package/framework-mcp/dist/src/cli/utils/fs.js +138 -0
  243. package/framework-mcp/dist/src/cli/utils/pkg.js +282 -0
  244. package/framework-mcp/dist/src/cli/utils/quality.js +9 -0
  245. package/framework-mcp/dist/src/modules/agents/definitions.js +563 -0
  246. package/framework-mcp/dist/src/modules/agents/registry/analyst.js +39 -0
  247. package/framework-mcp/dist/src/modules/agents/registry/architect.js +42 -0
  248. package/framework-mcp/dist/src/modules/agents/registry/backend.js +50 -0
  249. package/framework-mcp/dist/src/modules/agents/registry/database.js +45 -0
  250. package/framework-mcp/dist/src/modules/agents/registry/devops.js +45 -0
  251. package/framework-mcp/dist/src/modules/agents/registry/explorer.js +37 -0
  252. package/framework-mcp/dist/src/modules/agents/registry/frontend.js +52 -0
  253. package/framework-mcp/dist/src/modules/agents/registry/git.js +36 -0
  254. package/framework-mcp/dist/src/modules/agents/registry/manager.js +64 -0
  255. package/framework-mcp/dist/src/modules/agents/registry/mobile.js +41 -0
  256. package/framework-mcp/dist/src/modules/agents/registry/native.js +41 -0
  257. package/framework-mcp/dist/src/modules/agents/registry/quality.js +43 -0
  258. package/framework-mcp/dist/src/modules/agents/registry/security.js +42 -0
  259. package/framework-mcp/dist/src/modules/agents/types.js +1 -0
  260. package/framework-mcp/dist/src/modules/engines/evaluation-engine.js +169 -0
  261. package/framework-mcp/dist/src/modules/engines/quality-gate.js +92 -0
  262. package/framework-mcp/dist/src/modules/engines/risk-engine.js +105 -0
  263. package/framework-mcp/dist/src/modules/engines/routing-engine.js +408 -0
  264. package/framework-mcp/dist/src/modules/engines/types.js +1 -0
  265. package/framework-mcp/dist/src/modules/providers/definitions.js +140 -0
  266. package/framework-mcp/dist/src/modules/providers/registry.js +18 -0
  267. package/framework-mcp/dist/src/modules/providers/shared.js +104 -0
  268. package/framework-mcp/dist/src/modules/providers/types.js +1 -0
  269. package/framework-mcp/dist/src/modules/skills/adapter-skills.js +449 -0
  270. package/framework-mcp/dist/src/modules/skills/definitions.js +70 -0
  271. package/framework-mcp/dist/src/shared/audit.js +220 -0
  272. package/framework-mcp/dist/src/shared/errors.js +68 -0
  273. package/framework-mcp/dist/src/shared/lock.js +159 -0
  274. package/framework-mcp/dist/src/shared/pii.js +122 -31
  275. package/framework-mcp/dist/src/shared/retention.js +170 -0
  276. package/framework-mcp/dist/src/shared/storage.js +47 -7
  277. package/framework-mcp/dist/src/shared/string.js +29 -0
  278. package/framework-mcp/package.json +8 -2
  279. package/mcp.json +12 -6
  280. package/package.json +11 -5
  281. package/templates/full/ATABEY_FULL.md +1 -1
  282. package/framework-mcp/dist/dashboard/assets/index-BAPGLiWE.js +0 -267
@@ -1,30 +1,99 @@
1
- import chalk from "chalk";
1
+ import fs from "fs";
2
+ import path from "path";
3
+ /**
4
+ * ─── ASK HUMAN — File Bridge ─────────────────────────────────────────
5
+ *
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
+ *
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
+ *
15
+ * Dashboard: Can also be answered via /api/approvals endpoint on the web dashboard.
16
+ */
2
17
  export async function handleAskHuman(root, args) {
3
- if (process.env.ATABEY_TEST_DIR || !process.stdin.isTTY) {
4
- return { content: [{ type: "text", text: "[SKIPPED] Non-interactive environment. Cannot ask human." }] };
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
- const readline = await import("readline");
8
- const rl = readline.createInterface({
9
- input: process.stdin,
10
- output: process.stdout
11
- });
12
- return new Promise((resolve) => {
13
- process.stdout.write("\n" + chalk.bgMagenta.white.bold(" [HUMAN-IN-THE-LOOP REQUIRED] ") + "\n");
14
- process.stdout.write(chalk.magenta("An agent has paused execution to ask you a question:\n"));
15
- rl.question(`\n${chalk.bold(args.question)}\n${chalk.gray("> ")}`, (answer) => {
16
- rl.close();
17
- resolve({
18
- content: [{ type: "text", text: `[HUMAN RESPONSE] ${answer}` }]
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] Failed to ask human: ${message}` }]
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,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAAkB;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0DAA0D,EAAE,CAAC,EAAE,CAAC;IAC7G,CAAC;IAED,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,GAAG,IAAI,CAAC,CAAC;YACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,CAAC;YAE9F,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC1E,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC;oBACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,MAAM,EAAE,EAAE,CAAC;iBAClE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACH,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,OAAO,EAAE,EAAE,CAAC;SAC/E,CAAC;IACN,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ask_human.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/ask_human.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,16 +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
- const filter = args.filter || ""; // Optional filter (e.g., ":3000")
7
+ const rawFilter = args.filter || "";
8
+ // Sanitize filter to prevent command injection (allow only alphanumeric, dots, colons, dashes, underscores)
9
+ const filter = rawFilter.replace(/[^a-zA-Z0-9.:_-]/g, "");
7
10
  try {
8
- // Using 'lsof -i -P -n' to list open files and network connections
9
- // Note: may require permissions or behave differently on non-Unix systems
10
- const command = process.platform === "win32"
11
- ? `netstat -ano | findstr LISTENING ${filter ? `| findstr ${filter}` : ""}`
12
- : `lsof -i -P -n | grep LISTEN ${filter ? `| grep ${filter}` : ""}`;
13
- 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
+ }
14
30
  return {
15
31
  content: [{
16
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,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,kCAAkC;IAEpE,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"}
@@ -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 complexityIssues = [];
85
- function scanDirectory(dir) {
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
- results.push(...complexityIssues);
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":"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"}
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 LLMGatewayQuerySchema: z.ZodObject<{
352
- messages: z.ZodArray<z.ZodObject<{
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
- messages: {
371
- content: string;
372
- role: "system" | "user" | "assistant" | "tool";
373
- }[];
359
+ action: "approve" | "reject" | "list";
374
360
  traceId?: string | undefined;
375
- strategy?: "round-robin" | "least-latency" | "cost-optimized" | "failover" | "priority-based" | "model-based" | undefined;
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
- messages: {
383
- content: string;
384
- role: "system" | "user" | "assistant" | "tool";
385
- }[];
363
+ action: "approve" | "reject" | "list";
386
364
  traceId?: string | undefined;
387
- strategy?: "round-robin" | "least-latency" | "cost-optimized" | "failover" | "priority-based" | "model-based" | undefined;
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 LLMGatewayQueryArgs = z.infer<typeof LLMGatewayQuerySchema>;
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
- // ─── LLM Gateway ────────────────────────────────────────────────────
155
- export const LLMGatewayQuerySchema = z.object({
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
- }).strict();
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