agent-enderun 1.1.2 → 1.1.4

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 (533) hide show
  1. package/{.enderun/ENDERUN.md → ENDERUN.md} +25 -25
  2. package/README.md +10 -6
  3. package/bin/compile.js +13 -14
  4. package/bin/enderun-dashboard.js +866 -0
  5. package/bin/generate-cursor-rules.js +78 -0
  6. package/bin/test-init-run.js +37 -26
  7. package/bin/validate-agent-army.js +65 -67
  8. package/bin/watch-memory.js +54 -0
  9. package/dist/framework-mcp/src/index.js +1 -1
  10. package/dist/framework-mcp/src/tools/control_plane/locking.d.ts +15 -0
  11. package/dist/framework-mcp/src/tools/control_plane/locking.js +65 -0
  12. package/dist/framework-mcp/src/tools/control_plane/locking.js.map +1 -0
  13. package/dist/framework-mcp/src/tools/control_plane/registry.d.ts +12 -0
  14. package/dist/framework-mcp/src/tools/control_plane/registry.js +35 -0
  15. package/dist/framework-mcp/src/tools/control_plane/registry.js.map +1 -0
  16. package/dist/framework-mcp/src/tools/definitions.js +46 -7
  17. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  18. package/dist/framework-mcp/src/tools/file_system/write_file.js +16 -2
  19. package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
  20. package/dist/framework-mcp/src/tools/index.d.ts +1 -1
  21. package/dist/framework-mcp/src/tools/index.js +5 -0
  22. package/dist/framework-mcp/src/tools/index.js.map +1 -1
  23. package/dist/framework-mcp/src/tools/messaging/send_message.d.ts +1 -1
  24. package/dist/framework-mcp/src/tools/messaging/send_message.js +2 -4
  25. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  26. package/dist/framework-mcp/src/utils/metrics.d.ts +10 -0
  27. package/dist/framework-mcp/src/utils/metrics.js +39 -0
  28. package/dist/framework-mcp/src/utils/metrics.js.map +1 -0
  29. package/dist/framework-mcp/src/utils/security.js +7 -3
  30. package/dist/framework-mcp/src/utils/security.js.map +1 -1
  31. package/dist/src/cli/adapters/types.d.ts +14 -0
  32. package/dist/src/cli/adapters/types.js +2 -0
  33. package/dist/src/cli/adapters/types.js.map +1 -0
  34. package/dist/src/cli/adapters.d.ts +4 -22
  35. package/dist/src/cli/adapters.js +123 -141
  36. package/dist/src/cli/adapters.js.map +1 -1
  37. package/dist/src/cli/commands/check.d.ts +0 -5
  38. package/dist/src/cli/commands/check.js +64 -76
  39. package/dist/src/cli/commands/check.js.map +1 -1
  40. package/dist/src/cli/commands/init.d.ts +1 -1
  41. package/dist/src/cli/commands/init.js +154 -319
  42. package/dist/src/cli/commands/init.js.map +1 -1
  43. package/dist/src/cli/commands/log.d.ts +1 -0
  44. package/dist/src/cli/commands/log.js.map +1 -1
  45. package/dist/src/cli/commands/memory.js +2 -69
  46. package/dist/src/cli/commands/memory.js.map +1 -1
  47. package/dist/src/cli/commands/orchestrate.d.ts +19 -9
  48. package/dist/src/cli/commands/orchestrate.js +56 -77
  49. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  50. package/dist/src/cli/index.js +112 -30
  51. package/dist/src/cli/index.js.map +1 -1
  52. package/dist/src/cli/utils/app.d.ts +1 -2
  53. package/dist/src/cli/utils/app.js +2 -2
  54. package/dist/src/cli/utils/app.js.map +1 -1
  55. package/dist/src/cli/utils/config-schema.d.ts +139 -0
  56. package/dist/src/cli/utils/config-schema.js +43 -0
  57. package/dist/src/cli/utils/config-schema.js.map +1 -0
  58. package/dist/src/cli/utils/fs.d.ts +2 -4
  59. package/dist/src/cli/utils/fs.js +9 -26
  60. package/dist/src/cli/utils/fs.js.map +1 -1
  61. package/dist/src/cli/utils/memory.d.ts +4 -3
  62. package/dist/src/cli/utils/memory.js +135 -116
  63. package/dist/src/cli/utils/memory.js.map +1 -1
  64. package/dist/src/cli/utils/pkg.js +4 -4
  65. package/dist/src/cli/utils/pkg.js.map +1 -1
  66. package/dist/src/cli/utils/ui.d.ts +30 -0
  67. package/dist/src/cli/utils/ui.js +56 -0
  68. package/dist/src/cli/utils/ui.js.map +1 -0
  69. package/dist/src/modules/adapters/antigravity-cli.d.ts +3 -0
  70. package/dist/src/modules/adapters/antigravity-cli.js +21 -0
  71. package/dist/src/modules/adapters/antigravity-cli.js.map +1 -0
  72. package/dist/src/modules/adapters/claude.d.ts +3 -0
  73. package/dist/src/modules/adapters/claude.js +36 -0
  74. package/dist/src/modules/adapters/claude.js.map +1 -0
  75. package/dist/src/modules/adapters/codex.d.ts +3 -0
  76. package/dist/src/modules/adapters/codex.js +20 -0
  77. package/dist/src/modules/adapters/codex.js.map +1 -0
  78. package/dist/src/modules/adapters/cursor.d.ts +3 -0
  79. package/dist/src/modules/adapters/cursor.js +20 -0
  80. package/dist/src/modules/adapters/cursor.js.map +1 -0
  81. package/dist/src/modules/adapters/gemini.d.ts +3 -0
  82. package/dist/src/modules/adapters/gemini.js +23 -0
  83. package/dist/src/modules/adapters/gemini.js.map +1 -0
  84. package/dist/src/modules/adapters/grok.d.ts +3 -0
  85. package/dist/src/modules/adapters/grok.js +18 -0
  86. package/dist/src/modules/adapters/grok.js.map +1 -0
  87. package/dist/src/modules/adapters/shared.d.ts +1 -0
  88. package/dist/src/modules/adapters/shared.js +79 -0
  89. package/dist/src/modules/adapters/shared.js.map +1 -0
  90. package/dist/src/modules/adapters/types.d.ts +14 -0
  91. package/dist/src/modules/adapters/types.js +2 -0
  92. package/dist/src/modules/adapters/types.js.map +1 -0
  93. package/dist/src/modules/agents/definitions.d.ts +13 -0
  94. package/dist/src/modules/agents/definitions.js +169 -0
  95. package/dist/src/modules/agents/definitions.js.map +1 -0
  96. package/dist/src/modules/skills/definitions.d.ts +31 -0
  97. package/dist/src/modules/skills/definitions.js +32 -0
  98. package/dist/src/modules/skills/definitions.js.map +1 -0
  99. package/dist/src/shared/fs.d.ts +3 -0
  100. package/dist/src/shared/fs.js +24 -0
  101. package/dist/src/shared/fs.js.map +1 -0
  102. package/eslint.config.js +1 -0
  103. package/framework-mcp/dist/index.js +1 -1
  104. package/framework-mcp/dist/tools/control_plane/locking.js +64 -0
  105. package/framework-mcp/dist/tools/control_plane/registry.js +34 -0
  106. package/framework-mcp/dist/tools/definitions.js +49 -8
  107. package/framework-mcp/dist/tools/file_system/read_file.js +20 -0
  108. package/framework-mcp/dist/tools/file_system/write_file.js +16 -2
  109. package/framework-mcp/dist/tools/index.js +5 -0
  110. package/framework-mcp/dist/tools/messaging/send_message.js +36 -15
  111. package/framework-mcp/dist/utils/metrics.js +38 -0
  112. package/framework-mcp/dist/utils/security.js +7 -3
  113. package/framework-mcp/package.json +1 -1
  114. package/framework-mcp/src/index.ts +1 -1
  115. package/framework-mcp/src/tools/control_plane/locking.ts +77 -0
  116. package/framework-mcp/src/tools/control_plane/registry.ts +44 -0
  117. package/framework-mcp/src/tools/definitions.ts +46 -7
  118. package/framework-mcp/src/tools/file_system/write_file.ts +19 -2
  119. package/framework-mcp/src/tools/index.ts +6 -1
  120. package/framework-mcp/src/tools/messaging/send_message.ts +2 -3
  121. package/framework-mcp/src/utils/metrics.ts +53 -0
  122. package/framework-mcp/src/utils/security.ts +8 -3
  123. package/framework-mcp/tests/tools/file_system/file_system_tools.test.ts +164 -0
  124. package/framework-mcp/tsconfig.json +4 -2
  125. package/package.json +12 -11
  126. package/src/cli/adapters/types.ts +16 -0
  127. package/src/cli/adapters.ts +130 -156
  128. package/src/cli/commands/check.ts +61 -77
  129. package/src/cli/commands/init.ts +163 -312
  130. package/src/cli/commands/log.ts +1 -1
  131. package/src/cli/commands/memory.ts +3 -80
  132. package/src/cli/commands/orchestrate.ts +76 -90
  133. package/src/cli/index.ts +121 -29
  134. package/src/cli/utils/app.ts +3 -3
  135. package/src/cli/utils/config-schema.ts +48 -0
  136. package/src/cli/utils/fs.ts +10 -27
  137. package/src/cli/utils/memory.ts +143 -112
  138. package/src/cli/utils/pkg.ts +4 -4
  139. package/src/cli/utils/ui.ts +63 -0
  140. package/src/modules/adapters/antigravity-cli.ts +25 -0
  141. package/src/modules/adapters/claude.ts +36 -0
  142. package/src/modules/adapters/codex.ts +22 -0
  143. package/src/modules/adapters/cursor.ts +22 -0
  144. package/src/modules/adapters/gemini.ts +27 -0
  145. package/src/modules/adapters/grok.ts +20 -0
  146. package/src/modules/adapters/shared.ts +90 -0
  147. package/src/modules/adapters/types.ts +16 -0
  148. package/src/modules/agents/definitions.ts +182 -0
  149. package/src/modules/skills/definitions.ts +32 -0
  150. package/src/shared/fs.ts +25 -0
  151. package/.enderun/BRAIN_DASHBOARD.md +0 -46
  152. package/.enderun/STATUS.md +0 -61
  153. package/.enderun/agents/agent_army_schema.json +0 -101
  154. package/.enderun/agents/analyst.json +0 -32
  155. package/.enderun/agents/backend.json +0 -32
  156. package/.enderun/agents/database.json +0 -32
  157. package/.enderun/agents/devops.json +0 -32
  158. package/.enderun/agents/explorer.json +0 -32
  159. package/.enderun/agents/frontend.json +0 -32
  160. package/.enderun/agents/git.json +0 -32
  161. package/.enderun/agents/manager.json +0 -32
  162. package/.enderun/agents/mobile.json +0 -32
  163. package/.enderun/agents/native.json +0 -32
  164. package/.enderun/agents/quality.json +0 -32
  165. package/.enderun/agents/schema/agent-lifecycle-schema.json +0 -41
  166. package/.enderun/agents/security.json +0 -32
  167. package/.enderun/benchmarks/.gitkeep +0 -0
  168. package/.enderun/cli-commands.json +0 -76
  169. package/.enderun/config.json +0 -13
  170. package/.enderun/knowledge/ARCHITECTURE.md +0 -1
  171. package/.enderun/knowledge/SECURITY.md +0 -1
  172. package/.enderun/knowledge/SHIM_TEMPLATE.md +0 -36
  173. package/.enderun/knowledge/analyst_reference_guide.md +0 -31
  174. package/.enderun/knowledge/async_error_handling.md +0 -27
  175. package/.enderun/knowledge/backend_reference_guide.md +0 -165
  176. package/.enderun/knowledge/blueprint_driven_construction.md +0 -22
  177. package/.enderun/knowledge/context_boundary_rules.md +0 -57
  178. package/.enderun/knowledge/corporate-governance/analyst-contract-integrity-guide.md +0 -92
  179. package/.enderun/knowledge/corporate-governance/audit-logging-standard.md +0 -59
  180. package/.enderun/knowledge/corporate-governance/backend-high-risk-endpoint-guide.md +0 -125
  181. package/.enderun/knowledge/corporate-governance/branded-types-law.md +0 -77
  182. package/.enderun/knowledge/corporate-governance/contract-drift-detection-simulation.md +0 -92
  183. package/.enderun/knowledge/corporate-governance/corporate-governance-playbook.md +0 -89
  184. package/.enderun/knowledge/corporate-governance/corporate-project-kickoff-checklist.md +0 -56
  185. package/.enderun/knowledge/corporate-governance/corporate-project-kickoff-simulation.md +0 -144
  186. package/.enderun/knowledge/corporate-governance/corporate-project-scaffolding-sop.md +0 -103
  187. package/.enderun/knowledge/corporate-governance/domain-error-handling-standard.md +0 -75
  188. package/.enderun/knowledge/corporate-governance/frontend-high-risk-modal-guide.md +0 -211
  189. package/.enderun/knowledge/corporate-governance/governance-baseline-briefing-template.md +0 -54
  190. package/.enderun/knowledge/corporate-governance/high-risk-action-approval-flow-simulation.md +0 -167
  191. package/.enderun/knowledge/corporate-governance/high-risk-action-approval-flow.md +0 -29
  192. package/.enderun/knowledge/corporate-governance/high-risk-actions-managerapproval.md +0 -76
  193. package/.enderun/knowledge/corporate-governance/high-risk-security-modal-hermes-flow.md +0 -49
  194. package/.enderun/knowledge/corporate-governance/manager-first-30-days-guide.md +0 -112
  195. package/.enderun/knowledge/corporate-governance/manager-first-three-briefings.md +0 -79
  196. package/.enderun/knowledge/database_reference_guide.md +0 -38
  197. package/.enderun/knowledge/devops_reference_guide.md +0 -43
  198. package/.enderun/knowledge/documentation_ownership.md +0 -53
  199. package/.enderun/knowledge/eslint-standards.md +0 -63
  200. package/.enderun/knowledge/evaluation_engine.md +0 -26
  201. package/.enderun/knowledge/explorer_reference_guide.md +0 -34
  202. package/.enderun/knowledge/framework_vs_user_project_boundary.md +0 -52
  203. package/.enderun/knowledge/frontend_professionalization_guidelines.md +0 -108
  204. package/.enderun/knowledge/frontend_reference_guide.md +0 -64
  205. package/.enderun/knowledge/git_reference_guide.md +0 -51
  206. package/.enderun/knowledge/hermes_live_test_guidelines.md +0 -90
  207. package/.enderun/knowledge/hermes_protocol.md +0 -59
  208. package/.enderun/knowledge/legacy_onboarding.md +0 -18
  209. package/.enderun/knowledge/lessons-learned.md +0 -14
  210. package/.enderun/knowledge/manager_authority_audit_enforcement.md +0 -104
  211. package/.enderun/knowledge/manager_reference_guide.md +0 -55
  212. package/.enderun/knowledge/mobile_reference_guide.md +0 -35
  213. package/.enderun/knowledge/native_reference_guide.md +0 -34
  214. package/.enderun/knowledge/project_scaffold_guidelines.md +0 -110
  215. package/.enderun/knowledge/quality_reference_guide.md +0 -42
  216. package/.enderun/knowledge/reference_application_guidelines.md +0 -101
  217. package/.enderun/knowledge/responsive_design_standards.md +0 -27
  218. package/.enderun/knowledge/router_logic.md +0 -29
  219. package/.enderun/knowledge/security_reference_guide.md +0 -35
  220. package/.enderun/knowledge/token_economy_and_memory.md +0 -129
  221. package/.enderun/knowledge/zero_ui_library_policy.md +0 -13
  222. package/.enderun/logs/manager.json +0 -52
  223. package/.enderun/mcp_config.json +0 -11
  224. package/.enderun/memory/BUSINESS_CONTEXT.md +0 -17
  225. package/.enderun/memory/DECISIONS.md +0 -24
  226. package/.enderun/memory/LESSONS_LEARNED.md +0 -12
  227. package/.enderun/memory/PATTERNS.md +0 -17
  228. package/.enderun/memory/PROJECT_MEMORY.md +0 -69
  229. package/.enderun/memory-graph/agent-contexts/analyst.json +0 -1
  230. package/.enderun/memory-graph/agent-contexts/backend.json +0 -1
  231. package/.enderun/memory-graph/agent-contexts/devops.json +0 -1
  232. package/.enderun/memory-graph/agent-contexts/explorer.json +0 -1
  233. package/.enderun/memory-graph/agent-contexts/frontend.json +0 -1
  234. package/.enderun/memory-graph/agent-contexts/git.json +0 -1
  235. package/.enderun/memory-graph/agent-contexts/manager.json +0 -1
  236. package/.enderun/memory-graph/agent-contexts/mobile.json +0 -1
  237. package/.enderun/memory-graph/agent-contexts/native.json +0 -1
  238. package/.enderun/memory-graph/agent-contexts/quality.json +0 -1
  239. package/.enderun/memory-graph/agent-contexts/security.json +0 -1
  240. package/.enderun/memory-graph/graph.json +0 -133
  241. package/.enderun/memory-graph/shared-facts.json +0 -46
  242. package/.enderun/monitoring/.gitkeep +0 -0
  243. package/.enderun/observability/AUDIT_LOG.md +0 -9
  244. package/.enderun/observability/METRICS.md +0 -10
  245. package/.enderun/observability/README.md +0 -19
  246. package/.enderun/observability/TRACE_LOG.md +0 -10
  247. package/.enderun/queue/README.md +0 -36
  248. package/.enderun/registry/agents.yaml +0 -69
  249. package/.enderun/skills/agent_handshake.md +0 -37
  250. package/.enderun/skills/multi_agent_coordination.md +0 -64
  251. package/.enderun/skills/subagent_lifecycle.md +0 -48
  252. package/CLAUDE.md +0 -21
  253. package/GEMINI.md +0 -24
  254. package/GROK.md +0 -20
  255. package/agent.md +0 -25
  256. package/dist/.keep +0 -1
  257. package/dist/tests/adapter.test.d.ts +0 -1
  258. package/dist/tests/adapter.test.js +0 -82
  259. package/dist/tests/adapter.test.js.map +0 -1
  260. package/dist/tests/gemini.test.d.ts +0 -1
  261. package/dist/tests/gemini.test.js +0 -39
  262. package/dist/tests/gemini.test.js.map +0 -1
  263. package/dist/tests/initial.test.d.ts +0 -1
  264. package/dist/tests/initial.test.js +0 -7
  265. package/dist/tests/initial.test.js.map +0 -1
  266. package/docs/project_analysis_report.md +0 -69
  267. package/framework-mcp/dist/src/index.js +0 -70
  268. package/framework-mcp/dist/src/tools/definitions.js +0 -112
  269. package/framework-mcp/dist/src/tools/file_system/patch_file.js +0 -18
  270. package/framework-mcp/dist/src/tools/file_system/read_file.js +0 -27
  271. package/framework-mcp/dist/src/tools/file_system/replace_text.js +0 -31
  272. package/framework-mcp/dist/src/tools/file_system/write_file.js +0 -9
  273. package/framework-mcp/dist/src/tools/framework/get_status.js +0 -5
  274. package/framework-mcp/dist/src/tools/framework/orchestrate.js +0 -5
  275. package/framework-mcp/dist/src/tools/framework/update_contract_hash.js +0 -5
  276. package/framework-mcp/dist/src/tools/framework/update_memory.js +0 -8
  277. package/framework-mcp/dist/src/tools/index.js +0 -25
  278. package/framework-mcp/dist/src/tools/messaging/log_action.js +0 -22
  279. package/framework-mcp/dist/src/tools/messaging/send_message.js +0 -46
  280. package/framework-mcp/dist/src/tools/types.js +0 -1
  281. package/framework-mcp/dist/src/utils/cli.js +0 -20
  282. package/framework-mcp/dist/src/utils/security.js +0 -53
  283. package/framework-mcp/dist/tests/tools/file_system/replace_text.test.js +0 -68
  284. package/framework-mcp/node_modules/@types/node/LICENSE +0 -21
  285. package/framework-mcp/node_modules/@types/node/README.md +0 -15
  286. package/framework-mcp/node_modules/@types/node/assert/strict.d.ts +0 -111
  287. package/framework-mcp/node_modules/@types/node/assert.d.ts +0 -1078
  288. package/framework-mcp/node_modules/@types/node/async_hooks.d.ts +0 -603
  289. package/framework-mcp/node_modules/@types/node/buffer.buffer.d.ts +0 -472
  290. package/framework-mcp/node_modules/@types/node/buffer.d.ts +0 -1934
  291. package/framework-mcp/node_modules/@types/node/child_process.d.ts +0 -1476
  292. package/framework-mcp/node_modules/@types/node/cluster.d.ts +0 -578
  293. package/framework-mcp/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  294. package/framework-mcp/node_modules/@types/node/compatibility/index.d.ts +0 -9
  295. package/framework-mcp/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  296. package/framework-mcp/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
  297. package/framework-mcp/node_modules/@types/node/console.d.ts +0 -452
  298. package/framework-mcp/node_modules/@types/node/constants.d.ts +0 -21
  299. package/framework-mcp/node_modules/@types/node/crypto.d.ts +0 -4545
  300. package/framework-mcp/node_modules/@types/node/dgram.d.ts +0 -600
  301. package/framework-mcp/node_modules/@types/node/diagnostics_channel.d.ts +0 -578
  302. package/framework-mcp/node_modules/@types/node/dns/promises.d.ts +0 -503
  303. package/framework-mcp/node_modules/@types/node/dns.d.ts +0 -923
  304. package/framework-mcp/node_modules/@types/node/domain.d.ts +0 -170
  305. package/framework-mcp/node_modules/@types/node/events.d.ts +0 -976
  306. package/framework-mcp/node_modules/@types/node/fs/promises.d.ts +0 -1295
  307. package/framework-mcp/node_modules/@types/node/fs.d.ts +0 -4461
  308. package/framework-mcp/node_modules/@types/node/globals.d.ts +0 -172
  309. package/framework-mcp/node_modules/@types/node/globals.typedarray.d.ts +0 -38
  310. package/framework-mcp/node_modules/@types/node/http.d.ts +0 -2089
  311. package/framework-mcp/node_modules/@types/node/http2.d.ts +0 -2721
  312. package/framework-mcp/node_modules/@types/node/https.d.ts +0 -579
  313. package/framework-mcp/node_modules/@types/node/index.d.ts +0 -97
  314. package/framework-mcp/node_modules/@types/node/inspector.d.ts +0 -253
  315. package/framework-mcp/node_modules/@types/node/inspector.generated.d.ts +0 -4052
  316. package/framework-mcp/node_modules/@types/node/module.d.ts +0 -891
  317. package/framework-mcp/node_modules/@types/node/net.d.ts +0 -1076
  318. package/framework-mcp/node_modules/@types/node/os.d.ts +0 -506
  319. package/framework-mcp/node_modules/@types/node/package.json +0 -145
  320. package/framework-mcp/node_modules/@types/node/path.d.ts +0 -200
  321. package/framework-mcp/node_modules/@types/node/perf_hooks.d.ts +0 -968
  322. package/framework-mcp/node_modules/@types/node/process.d.ts +0 -2084
  323. package/framework-mcp/node_modules/@types/node/punycode.d.ts +0 -117
  324. package/framework-mcp/node_modules/@types/node/querystring.d.ts +0 -152
  325. package/framework-mcp/node_modules/@types/node/readline/promises.d.ts +0 -161
  326. package/framework-mcp/node_modules/@types/node/readline.d.ts +0 -594
  327. package/framework-mcp/node_modules/@types/node/repl.d.ts +0 -428
  328. package/framework-mcp/node_modules/@types/node/sea.d.ts +0 -153
  329. package/framework-mcp/node_modules/@types/node/sqlite.d.ts +0 -721
  330. package/framework-mcp/node_modules/@types/node/stream/consumers.d.ts +0 -38
  331. package/framework-mcp/node_modules/@types/node/stream/promises.d.ts +0 -90
  332. package/framework-mcp/node_modules/@types/node/stream/web.d.ts +0 -622
  333. package/framework-mcp/node_modules/@types/node/stream.d.ts +0 -1687
  334. package/framework-mcp/node_modules/@types/node/string_decoder.d.ts +0 -67
  335. package/framework-mcp/node_modules/@types/node/test.d.ts +0 -2163
  336. package/framework-mcp/node_modules/@types/node/timers/promises.d.ts +0 -108
  337. package/framework-mcp/node_modules/@types/node/timers.d.ts +0 -287
  338. package/framework-mcp/node_modules/@types/node/tls.d.ts +0 -1319
  339. package/framework-mcp/node_modules/@types/node/trace_events.d.ts +0 -197
  340. package/framework-mcp/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -468
  341. package/framework-mcp/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -34
  342. package/framework-mcp/node_modules/@types/node/ts5.6/index.d.ts +0 -97
  343. package/framework-mcp/node_modules/@types/node/tty.d.ts +0 -208
  344. package/framework-mcp/node_modules/@types/node/url.d.ts +0 -984
  345. package/framework-mcp/node_modules/@types/node/util.d.ts +0 -2606
  346. package/framework-mcp/node_modules/@types/node/v8.d.ts +0 -920
  347. package/framework-mcp/node_modules/@types/node/vm.d.ts +0 -1000
  348. package/framework-mcp/node_modules/@types/node/wasi.d.ts +0 -181
  349. package/framework-mcp/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
  350. package/framework-mcp/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
  351. package/framework-mcp/node_modules/@types/node/web-globals/events.d.ts +0 -97
  352. package/framework-mcp/node_modules/@types/node/web-globals/fetch.d.ts +0 -55
  353. package/framework-mcp/node_modules/@types/node/web-globals/navigator.d.ts +0 -22
  354. package/framework-mcp/node_modules/@types/node/web-globals/storage.d.ts +0 -24
  355. package/framework-mcp/node_modules/@types/node/worker_threads.d.ts +0 -784
  356. package/framework-mcp/node_modules/@types/node/zlib.d.ts +0 -747
  357. package/framework-mcp/node_modules/typescript/LICENSE.txt +0 -55
  358. package/framework-mcp/node_modules/typescript/README.md +0 -50
  359. package/framework-mcp/node_modules/typescript/SECURITY.md +0 -41
  360. package/framework-mcp/node_modules/typescript/ThirdPartyNoticeText.txt +0 -193
  361. package/framework-mcp/node_modules/typescript/bin/tsc +0 -2
  362. package/framework-mcp/node_modules/typescript/bin/tsserver +0 -2
  363. package/framework-mcp/node_modules/typescript/lib/_tsc.js +0 -133818
  364. package/framework-mcp/node_modules/typescript/lib/_tsserver.js +0 -659
  365. package/framework-mcp/node_modules/typescript/lib/_typingsInstaller.js +0 -222
  366. package/framework-mcp/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
  367. package/framework-mcp/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
  368. package/framework-mcp/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
  369. package/framework-mcp/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
  370. package/framework-mcp/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
  371. package/framework-mcp/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
  372. package/framework-mcp/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
  373. package/framework-mcp/node_modules/typescript/lib/lib.d.ts +0 -22
  374. package/framework-mcp/node_modules/typescript/lib/lib.decorators.d.ts +0 -384
  375. package/framework-mcp/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -22
  376. package/framework-mcp/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -41
  377. package/framework-mcp/node_modules/typescript/lib/lib.dom.d.ts +0 -39429
  378. package/framework-mcp/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -571
  379. package/framework-mcp/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -147
  380. package/framework-mcp/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -597
  381. package/framework-mcp/node_modules/typescript/lib/lib.es2015.d.ts +0 -28
  382. package/framework-mcp/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -77
  383. package/framework-mcp/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -605
  384. package/framework-mcp/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -81
  385. package/framework-mcp/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -128
  386. package/framework-mcp/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -144
  387. package/framework-mcp/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -46
  388. package/framework-mcp/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -326
  389. package/framework-mcp/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -116
  390. package/framework-mcp/node_modules/typescript/lib/lib.es2016.d.ts +0 -21
  391. package/framework-mcp/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -23
  392. package/framework-mcp/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -31
  393. package/framework-mcp/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -21
  394. package/framework-mcp/node_modules/typescript/lib/lib.es2017.d.ts +0 -26
  395. package/framework-mcp/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -31
  396. package/framework-mcp/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -23
  397. package/framework-mcp/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -44
  398. package/framework-mcp/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -49
  399. package/framework-mcp/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -135
  400. package/framework-mcp/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -45
  401. package/framework-mcp/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -53
  402. package/framework-mcp/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -77
  403. package/framework-mcp/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -53
  404. package/framework-mcp/node_modules/typescript/lib/lib.es2018.d.ts +0 -24
  405. package/framework-mcp/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -24
  406. package/framework-mcp/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -83
  407. package/framework-mcp/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -30
  408. package/framework-mcp/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -37
  409. package/framework-mcp/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -79
  410. package/framework-mcp/node_modules/typescript/lib/lib.es2019.d.ts +0 -24
  411. package/framework-mcp/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -24
  412. package/framework-mcp/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -23
  413. package/framework-mcp/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -33
  414. package/framework-mcp/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -37
  415. package/framework-mcp/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -24
  416. package/framework-mcp/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -765
  417. package/framework-mcp/node_modules/typescript/lib/lib.es2020.d.ts +0 -27
  418. package/framework-mcp/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -42
  419. package/framework-mcp/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -24
  420. package/framework-mcp/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -474
  421. package/framework-mcp/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -28
  422. package/framework-mcp/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -47
  423. package/framework-mcp/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -99
  424. package/framework-mcp/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -44
  425. package/framework-mcp/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -41
  426. package/framework-mcp/node_modules/typescript/lib/lib.es2021.d.ts +0 -23
  427. package/framework-mcp/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -24
  428. package/framework-mcp/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -166
  429. package/framework-mcp/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -48
  430. package/framework-mcp/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -33
  431. package/framework-mcp/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -78
  432. package/framework-mcp/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -121
  433. package/framework-mcp/node_modules/typescript/lib/lib.es2022.d.ts +0 -25
  434. package/framework-mcp/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -75
  435. package/framework-mcp/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -24
  436. package/framework-mcp/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -145
  437. package/framework-mcp/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -26
  438. package/framework-mcp/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -39
  439. package/framework-mcp/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -25
  440. package/framework-mcp/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -924
  441. package/framework-mcp/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -21
  442. package/framework-mcp/node_modules/typescript/lib/lib.es2023.d.ts +0 -22
  443. package/framework-mcp/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -24
  444. package/framework-mcp/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -56
  445. package/framework-mcp/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -65
  446. package/framework-mcp/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -29
  447. package/framework-mcp/node_modules/typescript/lib/lib.es2024.d.ts +0 -26
  448. package/framework-mcp/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -24
  449. package/framework-mcp/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -29
  450. package/framework-mcp/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -35
  451. package/framework-mcp/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -25
  452. package/framework-mcp/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -68
  453. package/framework-mcp/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -29
  454. package/framework-mcp/node_modules/typescript/lib/lib.es5.d.ts +0 -4601
  455. package/framework-mcp/node_modules/typescript/lib/lib.es6.d.ts +0 -23
  456. package/framework-mcp/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -35
  457. package/framework-mcp/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -96
  458. package/framework-mcp/node_modules/typescript/lib/lib.esnext.d.ts +0 -29
  459. package/framework-mcp/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -28
  460. package/framework-mcp/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -193
  461. package/framework-mcp/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -24
  462. package/framework-mcp/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -445
  463. package/framework-mcp/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -24
  464. package/framework-mcp/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -21
  465. package/framework-mcp/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -148
  466. package/framework-mcp/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -34
  467. package/framework-mcp/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -25
  468. package/framework-mcp/node_modules/typescript/lib/lib.scripthost.d.ts +0 -322
  469. package/framework-mcp/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -41
  470. package/framework-mcp/node_modules/typescript/lib/lib.webworker.d.ts +0 -13150
  471. package/framework-mcp/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -23
  472. package/framework-mcp/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -340
  473. package/framework-mcp/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
  474. package/framework-mcp/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
  475. package/framework-mcp/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
  476. package/framework-mcp/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
  477. package/framework-mcp/node_modules/typescript/lib/tsc.js +0 -8
  478. package/framework-mcp/node_modules/typescript/lib/tsserver.js +0 -8
  479. package/framework-mcp/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -17
  480. package/framework-mcp/node_modules/typescript/lib/tsserverlibrary.js +0 -21
  481. package/framework-mcp/node_modules/typescript/lib/typesMap.json +0 -497
  482. package/framework-mcp/node_modules/typescript/lib/typescript.d.ts +0 -11437
  483. package/framework-mcp/node_modules/typescript/lib/typescript.js +0 -200276
  484. package/framework-mcp/node_modules/typescript/lib/typingsInstaller.js +0 -8
  485. package/framework-mcp/node_modules/typescript/lib/watchGuard.js +0 -53
  486. package/framework-mcp/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -2122
  487. package/framework-mcp/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -2122
  488. package/framework-mcp/node_modules/typescript/package.json +0 -120
  489. package/framework-mcp/node_modules/undici-types/LICENSE +0 -21
  490. package/framework-mcp/node_modules/undici-types/README.md +0 -6
  491. package/framework-mcp/node_modules/undici-types/agent.d.ts +0 -31
  492. package/framework-mcp/node_modules/undici-types/api.d.ts +0 -43
  493. package/framework-mcp/node_modules/undici-types/balanced-pool.d.ts +0 -29
  494. package/framework-mcp/node_modules/undici-types/cache.d.ts +0 -36
  495. package/framework-mcp/node_modules/undici-types/client.d.ts +0 -108
  496. package/framework-mcp/node_modules/undici-types/connector.d.ts +0 -34
  497. package/framework-mcp/node_modules/undici-types/content-type.d.ts +0 -21
  498. package/framework-mcp/node_modules/undici-types/cookies.d.ts +0 -28
  499. package/framework-mcp/node_modules/undici-types/diagnostics-channel.d.ts +0 -66
  500. package/framework-mcp/node_modules/undici-types/dispatcher.d.ts +0 -256
  501. package/framework-mcp/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -21
  502. package/framework-mcp/node_modules/undici-types/errors.d.ts +0 -149
  503. package/framework-mcp/node_modules/undici-types/eventsource.d.ts +0 -61
  504. package/framework-mcp/node_modules/undici-types/fetch.d.ts +0 -209
  505. package/framework-mcp/node_modules/undici-types/file.d.ts +0 -39
  506. package/framework-mcp/node_modules/undici-types/filereader.d.ts +0 -54
  507. package/framework-mcp/node_modules/undici-types/formdata.d.ts +0 -108
  508. package/framework-mcp/node_modules/undici-types/global-dispatcher.d.ts +0 -9
  509. package/framework-mcp/node_modules/undici-types/global-origin.d.ts +0 -7
  510. package/framework-mcp/node_modules/undici-types/handlers.d.ts +0 -15
  511. package/framework-mcp/node_modules/undici-types/header.d.ts +0 -4
  512. package/framework-mcp/node_modules/undici-types/index.d.ts +0 -71
  513. package/framework-mcp/node_modules/undici-types/interceptors.d.ts +0 -17
  514. package/framework-mcp/node_modules/undici-types/mock-agent.d.ts +0 -50
  515. package/framework-mcp/node_modules/undici-types/mock-client.d.ts +0 -25
  516. package/framework-mcp/node_modules/undici-types/mock-errors.d.ts +0 -12
  517. package/framework-mcp/node_modules/undici-types/mock-interceptor.d.ts +0 -93
  518. package/framework-mcp/node_modules/undici-types/mock-pool.d.ts +0 -25
  519. package/framework-mcp/node_modules/undici-types/package.json +0 -55
  520. package/framework-mcp/node_modules/undici-types/patch.d.ts +0 -33
  521. package/framework-mcp/node_modules/undici-types/pool-stats.d.ts +0 -19
  522. package/framework-mcp/node_modules/undici-types/pool.d.ts +0 -39
  523. package/framework-mcp/node_modules/undici-types/proxy-agent.d.ts +0 -28
  524. package/framework-mcp/node_modules/undici-types/readable.d.ts +0 -65
  525. package/framework-mcp/node_modules/undici-types/retry-agent.d.ts +0 -8
  526. package/framework-mcp/node_modules/undici-types/retry-handler.d.ts +0 -116
  527. package/framework-mcp/node_modules/undici-types/util.d.ts +0 -18
  528. package/framework-mcp/node_modules/undici-types/webidl.d.ts +0 -228
  529. package/framework-mcp/node_modules/undici-types/websocket.d.ts +0 -150
  530. package/framework-mcp/tests/tools/file_system/replace_text.test.js +0 -68
  531. package/framework-mcp/tests/tools/file_system/replace_text.test.ts +0 -77
  532. package/mcp.json +0 -11
  533. package/panda.config.ts +0 -100
@@ -0,0 +1,164 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { handleReplaceText } from "../../../src/tools/file_system/replace_text.js";
5
+ import { handlePatchFile } from "../../../src/tools/file_system/patch_file.js";
6
+ import { handleReadFile } from "../../../src/tools/file_system/read_file.js";
7
+ import { handleWriteFile } from "../../../src/tools/file_system/write_file.js";
8
+ import { ToolArgs } from "../../../src/tools/types.js";
9
+
10
+ const TEST_DIR = path.join(__dirname, "../_temp_test_files");
11
+ const TEST_FILE = path.join(TEST_DIR, "test_file.txt");
12
+ const MEMORY_DIR = path.join(TEST_DIR, ".gemini/memory");
13
+ const MEMORY_FILE = path.join(MEMORY_DIR, "PROJECT_MEMORY.md");
14
+
15
+ beforeEach(() => {
16
+ fs.mkdirSync(TEST_DIR, { recursive: true });
17
+ });
18
+
19
+ afterEach(() => {
20
+ fs.rmSync(TEST_DIR, { recursive: true, force: true });
21
+ });
22
+
23
+ describe("File System Tools", () => {
24
+
25
+ describe("handleReplaceText", () => {
26
+ it("should replace a single occurrence of text", () => {
27
+ fs.writeFileSync(TEST_FILE, "hello world", "utf8");
28
+ const args: ToolArgs = {
29
+ path: TEST_FILE,
30
+ oldText: "world",
31
+ newText: "there",
32
+ };
33
+ const result = handleReplaceText(TEST_DIR, args);
34
+ expect(result.content[0].text).toContain("✅ Surgical edit successful");
35
+ expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there");
36
+ });
37
+
38
+ it("should throw an error if text is not found", () => {
39
+ fs.writeFileSync(TEST_FILE, "hello world", "utf8");
40
+ const args: ToolArgs = {
41
+ path: TEST_FILE,
42
+ oldText: "missing",
43
+ newText: "found",
44
+ };
45
+ expect(() => handleReplaceText(TEST_DIR, args)).toThrowError("Text not found in file");
46
+ });
47
+
48
+ it("should throw an error for ambiguous replacement if allowMultiple is false", () => {
49
+ fs.writeFileSync(TEST_FILE, "hello world world", "utf8");
50
+ const args: ToolArgs = {
51
+ path: TEST_FILE,
52
+ oldText: "world",
53
+ newText: "there",
54
+ allowMultiple: false,
55
+ };
56
+ expect(() => handleReplaceText(TEST_DIR, args)).toThrowError("Ambiguous replacement");
57
+ });
58
+
59
+ it("should replace all occurrences of text if allowMultiple is true", () => {
60
+ fs.writeFileSync(TEST_FILE, "hello world world", "utf8");
61
+ const args: ToolArgs = {
62
+ path: TEST_FILE,
63
+ oldText: "world",
64
+ newText: "there",
65
+ allowMultiple: true,
66
+ };
67
+ const result = handleReplaceText(TEST_DIR, args);
68
+ expect(result.content[0].text).toContain("✅ Surgical edit successful");
69
+ expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there there");
70
+ });
71
+ });
72
+
73
+ describe("handlePatchFile", () => {
74
+ it("should replace lines in specified range", () => {
75
+ fs.writeFileSync(TEST_FILE, "line1\nline2\nline3\nline4", "utf8");
76
+ const args: ToolArgs = {
77
+ path: TEST_FILE,
78
+ startLine: 2,
79
+ endLine: 3,
80
+ newContent: "patched2\npatched3",
81
+ };
82
+ const result = handlePatchFile(TEST_DIR, args);
83
+ expect(result.content[0].text).toContain("✅ File patched successfully");
84
+ expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("line1\npatched2\npatched3\nline4");
85
+ });
86
+
87
+ it("should throw an error for invalid start line", () => {
88
+ fs.writeFileSync(TEST_FILE, "line1\nline2", "utf8");
89
+ const args: ToolArgs = {
90
+ path: TEST_FILE,
91
+ startLine: 5,
92
+ endLine: 2,
93
+ newContent: "error",
94
+ };
95
+ expect(() => handlePatchFile(TEST_DIR, args)).toThrowError("Invalid start line");
96
+ });
97
+
98
+ it("should throw an error for invalid end line", () => {
99
+ fs.writeFileSync(TEST_FILE, "line1\nline2", "utf8");
100
+ const args: ToolArgs = {
101
+ path: TEST_FILE,
102
+ startLine: 1,
103
+ endLine: 5,
104
+ newContent: "error",
105
+ };
106
+ expect(() => handlePatchFile(TEST_DIR, args)).toThrowError("Invalid end line");
107
+ });
108
+ });
109
+
110
+ describe("handleReadFile", () => {
111
+ it("should read full file content", () => {
112
+ fs.writeFileSync(TEST_FILE, "hello world", "utf8");
113
+ const args: ToolArgs = { path: TEST_FILE };
114
+ const result = handleReadFile(TEST_DIR, args);
115
+ expect(result.content[0].text).toBe("hello world");
116
+ });
117
+
118
+ it("should read sliced lines", () => {
119
+ fs.writeFileSync(TEST_FILE, "line1\nline2\nline3\nline4", "utf8");
120
+ const args: ToolArgs = {
121
+ path: TEST_FILE,
122
+ startLine: 2,
123
+ endLine: 3
124
+ };
125
+ const result = handleReadFile(TEST_DIR, args);
126
+ expect(result.content[0].text).toBe("line2\nline3");
127
+ });
128
+
129
+ it("should truncate long files", () => {
130
+ const longContent = Array.from({ length: 1005 }, (_, i) => `line ${i + 1}`).join("\n");
131
+ fs.writeFileSync(TEST_FILE, longContent, "utf8");
132
+ const args: ToolArgs = { path: TEST_FILE };
133
+ const result = handleReadFile(TEST_DIR, args);
134
+ expect(result.content[0].text).toContain("TRUNCATED");
135
+ expect(result.content[0].text).toContain("line 1000");
136
+ expect(result.content[0].text).not.toContain("line 1001");
137
+ });
138
+ });
139
+
140
+ describe("handleWriteFile", () => {
141
+ it("should write new file and log usage", () => {
142
+ const args: ToolArgs = {
143
+ path: TEST_FILE,
144
+ content: "hello world"
145
+ };
146
+ const result = handleWriteFile(TEST_DIR, args);
147
+ expect(result.content[0].text).toContain("✅ File written");
148
+ expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello world");
149
+ });
150
+
151
+ it("should append update to PROJECT_MEMORY.md if it exists", () => {
152
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
153
+ fs.writeFileSync(MEMORY_FILE, "## CURRENT STATUS\n", "utf8");
154
+ const args: ToolArgs = {
155
+ path: TEST_FILE,
156
+ content: "hello world"
157
+ };
158
+ handleWriteFile(TEST_DIR, args);
159
+ const memoryContent = fs.readFileSync(MEMORY_FILE, "utf8");
160
+ expect(memoryContent).toContain("Auto-Update");
161
+ expect(memoryContent).toContain("wrote file");
162
+ });
163
+ });
164
+ });
@@ -3,10 +3,12 @@
3
3
  "target": "ES2022",
4
4
  "module": "NodeNext",
5
5
  "moduleResolution": "NodeNext",
6
+ "rootDir": "src",
6
7
  "outDir": "./dist",
7
8
  "strict": true,
8
9
  "skipLibCheck": true,
9
- "esModuleInterop": true
10
+ "esModuleInterop": true,
11
+ "types": ["node"]
10
12
  },
11
- "include": ["src/**/*.ts", "tests/**/*.ts"]
13
+ "include": ["src/**/*.ts"]
12
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-enderun",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "The Supreme AI Governance & Orchestration Framework for Enterprise Development",
5
5
  "author": "Yusuf BEKAR",
6
6
  "license": "MIT",
@@ -38,7 +38,6 @@
38
38
  "ENDERUN.md",
39
39
  "README.md",
40
40
  "LICENSE",
41
- "mcp.json",
42
41
  "tsconfig.json",
43
42
  "eslint.config.js",
44
43
  "panda.config.ts",
@@ -46,7 +45,9 @@
46
45
  "CLAUDE.md",
47
46
  "GROK.md",
48
47
  "agent.md",
49
- "docs"
48
+ "docs",
49
+ ".cursor",
50
+ ".github"
50
51
  ],
51
52
  "scripts": {
52
53
  "build": "tsc && npm run build --prefix framework-mcp",
@@ -58,6 +59,7 @@
58
59
  "enderun:verify": "agent-enderun verify-contract",
59
60
  "enderun:update-contract": "agent-enderun update-contract",
60
61
  "enderun:check": "agent-enderun check",
62
+ "enderun:dashboard": "node bin/enderun-dashboard.js",
61
63
  "test:init": "node dist/src/cli/index.js init",
62
64
  "test:init:run": "node bin/test-init-run.js",
63
65
  "enderun:lint": "eslint .",
@@ -73,20 +75,19 @@
73
75
  "@modelcontextprotocol/sdk": "^1.26.0",
74
76
  "@pandacss/dev": "^1.11.1",
75
77
  "@types/node": "^25.9.1",
76
- "concurrently": "^9.2.1",
77
78
  "eslint": "^10.4.0",
78
79
  "globals": "^17.6.0",
79
- "ts-morph": "^28.0.0",
80
80
  "tsx": "^4.22.3",
81
81
  "typescript": "^6.0.3",
82
82
  "typescript-eslint": "^8.60.0",
83
83
  "vitest": "^4.1.7",
84
- "zod": "^3.24.2",
85
- "agent-enderun": "^1.1.2"
84
+ "zod": "^3.24.2"
86
85
  },
87
86
  "enderun": {
88
- "version": "1.1.2",
89
- "initializedAt": "2026-06-03T19:49:46.747Z"
87
+ "version": "1.1.4",
88
+ "initializedAt": "2026-06-04T18:51:28.970Z"
90
89
  },
91
- "dependencies": {}
92
- }
90
+ "dependencies": {
91
+ "chalk": "^5.6.2"
92
+ }
93
+ }
@@ -0,0 +1,16 @@
1
+ export const ADAPTER_IDS = ["gemini", "claude", "grok", "cursor", "codex", "antigravity-cli"] as const;
2
+ export type AdapterId = (typeof ADAPTER_IDS)[number];
3
+
4
+ export type AdapterRole = "commander" | "architect" | "researcher" | "implementer" | "general";
5
+
6
+ export interface AdapterConfig {
7
+ id: AdapterId;
8
+ frameworkDir: string;
9
+ shimFile: string;
10
+ shimTemplate: string;
11
+ role: AdapterRole;
12
+ templateDir: ".enderun";
13
+ nestedDirs?: string[];
14
+ rulesDir?: string; // Directory to write individual rules, relative to projectRoot
15
+ rulesExt?: string; // Extensions for rules files (.md or .mdc)
16
+ }
@@ -1,106 +1,62 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
+ import { writeJsonFile } from "./utils/fs.js";
4
+ import { getPackageRoot } from "./utils/pkg.js";
3
5
 
4
- import { findClaudeConfigPath, addMcpServerToClaude } from "./utils/claude.js";
5
- import { writeJsonFile, writeTextFile } from "./utils/fs.js";
6
-
7
- export const ADAPTER_IDS = ["gemini", "claude", "grok", "cursor", "codex", "antigravity", "antigravity-cli"] as const;
8
- export type AdapterId = (typeof ADAPTER_IDS)[number];
9
-
10
- export interface AdapterConfig {
11
- id: AdapterId;
12
- /** Runtime framework directory created by init */
13
- frameworkDir: string;
14
- /** Root shim file (e.g. gemini.md) */
15
- shimFile: string;
16
- /** Package template copied into frameworkDir */
17
- templateDir: ".enderun";
18
- /** Extra directories under frameworkDir (gemini only for nested auto-scaffold) */
19
- nestedDirs?: string[];
20
- }
6
+ import type { AdapterId, AdapterConfig } from "./adapters/types.js";
7
+ export { ADAPTER_IDS, type AdapterId, type AdapterRole, type AdapterConfig } from "./adapters/types.js";
8
+
9
+ import * as gemini from "../modules/adapters/gemini.js";
10
+ import * as claude from "../modules/adapters/claude.js";
11
+ import * as grok from "../modules/adapters/grok.js";
12
+ import * as cursor from "../modules/adapters/cursor.js";
13
+ import * as codex from "../modules/adapters/codex.js";
14
+ import * as antigravityCli from "../modules/adapters/antigravity-cli.js";
21
15
 
22
16
  export const ADAPTERS: Record<AdapterId, AdapterConfig> = {
23
- gemini: {
24
- id: "gemini",
25
- frameworkDir: ".enderun",
26
- shimFile: "GEMINI.md",
27
- templateDir: ".enderun",
28
- nestedDirs: ["agents", "skills", "knowledge"],
29
- },
30
- claude: {
31
- id: "claude",
32
- frameworkDir: ".enderun",
33
- shimFile: "CLAUDE.md",
34
- templateDir: ".enderun",
35
- nestedDirs: ["agents", "skills", "knowledge"],
36
- },
37
- cursor: {
38
- id: "cursor",
39
- frameworkDir: ".enderun",
40
- shimFile: ".cursor/rules/global.mdc",
41
- templateDir: ".enderun",
42
- nestedDirs: ["agents", "skills", "knowledge"],
43
- },
44
- codex: {
45
- id: "codex",
46
- frameworkDir: ".enderun",
47
- shimFile: ".github/copilot-instructions.md",
48
- templateDir: ".enderun",
49
- nestedDirs: ["agents", "skills", "knowledge"],
50
- },
51
- grok: {
52
- id: "grok",
53
- frameworkDir: ".enderun",
54
- shimFile: "GROK.md",
55
- templateDir: ".enderun",
56
- nestedDirs: ["agents", "skills", "knowledge"],
57
- },
58
- antigravity: {
59
- id: "antigravity",
60
- frameworkDir: ".enderun",
61
- shimFile: "agent.md",
62
- templateDir: ".enderun",
63
- nestedDirs: ["agents", "skills", "knowledge"],
64
- },
65
- "antigravity-cli": {
66
- id: "antigravity-cli",
67
- frameworkDir: ".enderun",
68
- shimFile: "agent.md",
69
- templateDir: ".enderun",
70
- nestedDirs: ["agents", "skills", "knowledge"],
71
- },
17
+ gemini: gemini.config,
18
+ claude: claude.config,
19
+ grok: grok.config,
20
+ cursor: cursor.config,
21
+ codex: codex.config,
22
+ "antigravity-cli": antigravityCli.config,
23
+ };
24
+
25
+ const POST_INIT_MAP: Record<AdapterId, (projectRoot: string, mcpBlock: unknown) => void> = {
26
+ gemini: gemini.postInit,
27
+ claude: claude.postInit,
28
+ grok: grok.postInit,
29
+ cursor: cursor.postInit,
30
+ codex: codex.postInit,
31
+ "antigravity-cli": antigravityCli.postInit,
72
32
  };
73
33
 
74
- /**
75
- * All framework runtime directories (for discovery).
76
- * Verified against 2026 industry standards.
77
- * Includes .agent for direct antigravity adapter installs.
78
- */
79
34
  export const FRAMEWORK_DIR_CANDIDATES = [
80
35
  ".enderun",
36
+ ".cursor",
81
37
  ".claude",
38
+ ".github",
82
39
  ".grok",
40
+ ".windsurf",
41
+ ".antigravity",
83
42
  ".agent",
43
+ ".gemini/antigravity-cli",
84
44
  ".gemini",
85
- ".agents", // Keep .agents for Antigravity-CLI compatibility
45
+ ".agents",
86
46
  ] as const;
87
47
 
88
- const SHIM_FILES = ADAPTER_IDS.map((id) => ADAPTERS[id].shimFile);
48
+ const SHIM_FILES = (Object.keys(ADAPTERS) as AdapterId[]).map((id) => ADAPTERS[id].shimFile);
89
49
 
90
50
  export function resolveAdapter(input?: string): AdapterConfig {
91
51
  const normalized = (input || "gemini").toLowerCase() as AdapterId;
92
52
  let config: AdapterConfig;
93
- if (ADAPTER_IDS.includes(normalized)) {
53
+ if (normalized in ADAPTERS) {
94
54
  config = { ...ADAPTERS[normalized] };
95
55
  } else {
96
- console.warn(`⚠️ Unknown adapter "${input}". Falling back to gemini (.gemini/).`);
56
+ console.warn(`⚠️ Unknown adapter "${input}". Falling back to gemini.`);
97
57
  config = { ...ADAPTERS.gemini };
98
58
  }
99
59
 
100
- // Dynamic Unified Mode Check:
101
- // If a root `.enderun` folder exists, --unified flag is passed, or configured in package.json,
102
- // we override `frameworkDir` to be `.enderun` to avoid folder clutter!
103
- // We bypass the folder exists check if running unit tests (Vitest) to preserve test integrity.
104
60
  const targetDir = process.cwd();
105
61
  const enderunExists = fs.existsSync(path.join(targetDir, ".enderun"));
106
62
  const hasUnifiedFlag = process.argv.includes("--unified");
@@ -112,14 +68,11 @@ export function resolveAdapter(input?: string): AdapterConfig {
112
68
  if (fs.existsSync(pkgPath)) {
113
69
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
114
70
  if (pkg.enderun && (pkg.enderun.frameworkDir === ".enderun" || pkg.enderun.frameworkDir === "unified")) {
115
- // Only force enderun if not testing a specific adapter that expects a different frameworkDir
116
71
  if (isTesting && config.frameworkDir !== ".enderun") {
117
- // Do not force .enderun if we are testing adapters that expect a different frameworkDir
118
- // and this is not a 'unified' adapter.
119
72
  if (config.id !== "cursor" && config.id !== "codex") {
120
73
  forceEnderun = false;
121
74
  } else {
122
- forceEnderun = true; // Still force if it's a unified adapter like cursor/codex
75
+ forceEnderun = true;
123
76
  }
124
77
  } else {
125
78
  forceEnderun = true;
@@ -132,7 +85,6 @@ export function resolveAdapter(input?: string): AdapterConfig {
132
85
 
133
86
  if (forceEnderun) {
134
87
  config.frameworkDir = ".enderun";
135
- // Ensure standard folder names inside .enderun for universal access
136
88
  config.nestedDirs = ["agents", "skills", "knowledge"];
137
89
  }
138
90
 
@@ -150,34 +102,29 @@ export function remapFrameworkContent(
150
102
  ): string {
151
103
  let result = content;
152
104
 
153
- // 1. Dynamic Agent Folder Mapping based on adapter (Only remap if NOT in unified .enderun mode)
105
+ result = result.replace(/\{\{FRAMEWORK_DIR\}\}/g, frameworkDir);
106
+ result = result.replace(/\{\{ADAPTER\}\}/g, adapterId);
107
+
154
108
  let agentFolder = "agents";
155
109
  let knowledgeFolder = "knowledge";
156
-
110
+
157
111
  if (frameworkDir !== ".enderun") {
158
- if (adapterId === "antigravity") {
159
- agentFolder = "skills";
112
+ if (adapterId === "antigravity-cli") {
113
+ agentFolder = "agents";
160
114
  knowledgeFolder = "rules";
161
115
  } else if (adapterId === "grok") {
162
116
  agentFolder = "plugins";
163
117
  }
164
118
  }
165
119
 
166
- // 2. Replacements
167
- result = result.replace(/\{\{FRAMEWORK_DIR\}\}/g, frameworkDir);
168
- result = result.replace(/\{\{ADAPTER\}\}/g, adapterId);
169
-
170
- // Replace standard patterns with adapter-specific ones
171
120
  const frameworkPattern = ".enderun/";
172
121
  result = result.replace(new RegExp(frameworkPattern + "agents/", "g"), `${frameworkDir}/${agentFolder}/`);
173
122
  result = result.replace(new RegExp(frameworkPattern + "knowledge/", "g"), `${frameworkDir}/${knowledgeFolder}/`);
174
-
175
- // Generic fallback for other .enderun/ paths
123
+
176
124
  result = result.replace(/\.enderun\//g, `${frameworkDir}/`);
177
125
  result = result.replace(/`\.enderun`/g, `\`${frameworkDir}\``);
178
126
  result = result.replace(/\.enderun(?![\w/-])/g, frameworkDir);
179
127
 
180
- // Read config paths dynamically to map directory tokens
181
128
  let backend = "apps/backend";
182
129
  let frontend = "apps/web";
183
130
  let docs = "docs";
@@ -208,88 +155,115 @@ export function remapFrameworkContent(
208
155
  export function buildMcpServerEntry(projectRoot: string) {
209
156
  return {
210
157
  command: "node",
211
- args: [path.join(projectRoot, "framework-mcp/dist/index.js")],
158
+ args: [path.join(getPackageRoot(), "framework-mcp/dist/index.js")],
212
159
  env: {
213
160
  ENDERUN_PROJECT_ROOT: projectRoot,
214
161
  },
215
162
  };
216
163
  }
217
164
 
218
- function writeAntigravityScaffold(frameworkDirPath: string): void {
219
- const antigravityReadme = `# Antigravity IDE — Agent Enderun
165
+ export function generateAdapterAgentRules(projectRoot: string, frameworkDir: string, adapterId: AdapterId): void {
166
+ const agentsDir = path.join(projectRoot, frameworkDir, "agents");
167
+ if (!fs.existsSync(agentsDir)) return;
168
+
169
+ const adapter = ADAPTERS[adapterId];
170
+ if (!adapter || !adapter.rulesDir || !adapter.rulesExt) return;
171
+
172
+ const destRulesDir = path.join(projectRoot, adapter.rulesDir);
173
+ const fileExt = adapter.rulesExt;
174
+
175
+ try {
176
+ fs.mkdirSync(destRulesDir, { recursive: true });
177
+ const files = fs.readdirSync(agentsDir).filter((f) => f.endsWith(".json") && f !== "agent_army_schema.json");
178
+
179
+ const GLOB_MAP: Record<string, string> = {
180
+ backend: "apps/backend/**/*",
181
+ frontend: "apps/web/**/*",
182
+ database: "apps/backend/src/database/**/*",
183
+ mobile: "apps/mobile/**/*",
184
+ native: "apps/native/**/*",
185
+ quality: "*",
186
+ security: "*",
187
+ devops: "*",
188
+ explorer: "*",
189
+ git: "*",
190
+ analyst: "*",
191
+ manager: "*",
192
+ };
220
193
 
221
- Antigravity IDE integration for the Gemini adapter.
194
+ for (const file of files) {
195
+ const filePath = path.join(agentsDir, file);
196
+ const agent = JSON.parse(fs.readFileSync(filePath, "utf8"));
197
+ const name = agent.name;
198
+ const displayName = agent.displayName || name;
199
+ const description = agent.description || "";
200
+ const systemPrompt = agent.customAgentSpec?.customAgent?.systemPromptSections?.[0]?.content || "";
201
+ const glob = GLOB_MAP[name] || "*";
202
+ const ruleDestPath = path.join(destRulesDir, `${name}${fileExt}`);
222
203
 
223
- - Framework root: \`${path.basename(frameworkDirPath)}/\`
224
- - Nested path: \`antigravity/\`
225
- - Use the parent \`mcp_config.json\` and \`gemini.md\` entrypoint at the project root.
204
+ let mdcContent: string;
205
+ if (fileExt === ".mdc") {
206
+ mdcContent = `---
207
+ description: Agent Enderun — @${name} rules for ${displayName}. ${description.slice(0, 100)}
208
+ globs: ${glob}
209
+ alwaysApply: false
210
+ ---
211
+
212
+ # 🎖️ Agent Enderun — @${name} (${displayName})
213
+
214
+ You are the **${displayName}** of the Agent Enderun Army.
215
+
216
+ ## 🏛️ Hierarchy of Authority
217
+ 1. **Supreme Law:** [\`${frameworkDir}/ENDERUN.md\`](\`${frameworkDir}/ENDERUN.md\`)
218
+ 2. **Global Rules:** [\`${frameworkDir}/knowledge/ARCHITECTURE.md\`](\`${frameworkDir}/knowledge/ARCHITECTURE.md\`), [\`${frameworkDir}/knowledge/SECURITY.md\`](\`${frameworkDir}/knowledge/SECURITY.md\`)
219
+ 3. **Project Memory:** [\`${frameworkDir}/memory/PROJECT_MEMORY.md\`](\`${frameworkDir}/memory/PROJECT_MEMORY.md\`)
220
+
221
+ ## 🤖 Specialist Directive (Role: @${name})
222
+ ${systemPrompt}
223
+
224
+ ## 🛡️ Core Mandates
225
+ - **Surgical Precision:** Enforce replace_text / replace_file_content for all code modifications.
226
+ - **Traceability:** Inherit and pass the active Trace ID across all delegations.
227
+ - **Approval Signature:** High-risk actions require manager approval signature.
226
228
  `;
229
+ } else {
230
+ mdcContent = `# 🎖️ Agent Enderun — @${name} (${displayName})
231
+
232
+ You are the **${displayName}** of the Agent Enderun Army.
227
233
 
228
- const antigravityCliReadme = `# Antigravity CLI — Agent Enderun
234
+ ## 🏛️ Hierarchy of Authority
235
+ 1. **Supreme Law:** [\`${frameworkDir}/ENDERUN.md\`](\`${frameworkDir}/ENDERUN.md\`)
236
+ 2. **Global Rules:** [\`${frameworkDir}/knowledge/ARCHITECTURE.md\`](\`${frameworkDir}/knowledge/ARCHITECTURE.md\`), [\`${frameworkDir}/knowledge/SECURITY.md\`](\`${frameworkDir}/knowledge/SECURITY.md\`)
237
+ 3. **Project Memory:** [\`${frameworkDir}/memory/PROJECT_MEMORY.md\`](\`${frameworkDir}/memory/PROJECT_MEMORY.md\`)
229
238
 
230
- Antigravity CLI integration for the Gemini adapter.
239
+ ## 🤖 Specialist Directive (Role: @${name})
240
+ ${systemPrompt}
231
241
 
232
- - Framework root: \`${path.basename(frameworkDirPath)}/\`
233
- - Nested path: \`antigravity-cli/\`
234
- - Register MCP from the project root \`mcp.json\` or \`.gemini/mcp_config.json\`.
242
+ ## 🛡️ Core Mandates
243
+ - **Surgical Precision:** Enforce replace_text / replace_file_content for all code modifications.
244
+ - **Traceability:** Inherit and pass the active Trace ID across all delegations.
245
+ - **Approval Signature:** High-risk actions require manager approval signature.
235
246
  `;
247
+ }
236
248
 
237
- writeTextFile(path.join(frameworkDirPath, "antigravity/README.md"), antigravityReadme);
238
- writeTextFile(path.join(frameworkDirPath, "antigravity-cli/README.md"), antigravityCliReadme);
249
+ fs.writeFileSync(ruleDestPath, mdcContent);
250
+ }
251
+ console.warn(`✅ Generated 12 Agent Rules under ${path.relative(projectRoot, destRulesDir)}/`);
252
+ } catch (e) {
253
+ console.warn(`⚠️ Failed to generate Agent rules: ${e}`);
254
+ }
239
255
  }
240
256
 
241
- /**
242
- * Adapter-specific MCP and IDE hooks after scaffold.
243
- */
244
257
  export function runAdapterPostInit(adapter: AdapterConfig, projectRoot: string): void {
245
258
  const mcpEntry = buildMcpServerEntry(projectRoot);
246
259
  const mcpBlock = { mcpServers: { "agent-enderun": mcpEntry } };
247
260
 
248
- switch (adapter.id) {
249
- case "gemini": {
250
- writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
251
- writeAntigravityScaffold(path.join(projectRoot, adapter.frameworkDir));
252
- console.warn(`✅ Gemini MCP → ${adapter.frameworkDir}/mcp_config.json`);
253
- console.warn(`✅ Antigravity → ${adapter.frameworkDir}/antigravity/ & antigravity-cli/`);
254
- break;
255
- }
256
- case "antigravity": {
257
- writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
258
- console.warn(`✅ Antigravity IDE MCP → ${adapter.frameworkDir}/mcp_config.json`);
259
- break;
260
- }
261
- case "antigravity-cli": {
262
- writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
263
- console.warn(`✅ Antigravity CLI MCP → ${adapter.frameworkDir}/mcp_config.json`);
264
- break;
265
- }
266
- case "grok": {
267
- writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
268
- console.warn(`✅ Grok MCP → ${adapter.frameworkDir}/mcp_config.json`);
269
- break;
270
- }
271
- case "claude": {
272
- const configPath = findClaudeConfigPath();
273
- if (configPath) {
274
- const ok = addMcpServerToClaude(configPath, "agent-enderun", mcpEntry);
275
- if (ok) {
276
- console.warn(`✅ Claude MCP registered → ${configPath}`);
277
- } else {
278
- console.warn("⚠️ Could not patch Claude config automatically.");
279
- }
280
- } else {
281
- console.warn("⚠️ Claude config not found. Add MCP manually (see README).");
282
- }
283
- writeJsonFile(path.join(projectRoot, adapter.frameworkDir, "mcp_config.json"), mcpBlock);
284
- writeJsonFile(path.join(projectRoot, ".mcp.json"), mcpBlock);
285
- console.warn("✅ Claude Code Project MCP → .mcp.json");
286
- break;
287
- }
288
- default:
289
- break;
261
+ const postInitFn = POST_INIT_MAP[adapter.id];
262
+ if (postInitFn) {
263
+ postInitFn(projectRoot, mcpBlock);
264
+ generateAdapterAgentRules(projectRoot, adapter.frameworkDir, adapter.id);
290
265
  }
291
266
 
292
- // Keep root mcp.json in sync when missing or empty
293
267
  const rootMcpPath = path.join(projectRoot, "mcp.json");
294
268
  if (!fs.existsSync(rootMcpPath)) {
295
269
  writeJsonFile(rootMcpPath, mcpBlock);