agent-enderun 1.1.1 → 1.1.2

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 (140) hide show
  1. package/.enderun/STATUS.md +2 -2
  2. package/.enderun/agents/analyst.json +4 -4
  3. package/.enderun/agents/backend.json +4 -4
  4. package/.enderun/agents/database.json +4 -4
  5. package/.enderun/agents/devops.json +4 -4
  6. package/.enderun/agents/explorer.json +4 -4
  7. package/.enderun/agents/frontend.json +4 -4
  8. package/.enderun/agents/git.json +4 -4
  9. package/.enderun/agents/manager.json +4 -6
  10. package/.enderun/agents/mobile.json +4 -4
  11. package/.enderun/agents/native.json +4 -4
  12. package/.enderun/agents/quality.json +4 -4
  13. package/.enderun/agents/security.json +4 -4
  14. package/.enderun/config.json +3 -2
  15. package/.enderun/logs/manager.json +4 -0
  16. package/.enderun/memory/PROJECT_MEMORY.md +38 -0
  17. package/CLAUDE.md +5 -4
  18. package/GEMINI.md +5 -4
  19. package/GROK.md +3 -3
  20. package/README.md +2 -2
  21. package/agent.md +6 -6
  22. package/bin/cli.js +3 -4
  23. package/bin/compile.js +22 -0
  24. package/bin/test-init-run.js +136 -0
  25. package/dist/framework-mcp/src/index.js +1 -1
  26. package/dist/framework-mcp/src/tools/definitions.js +3 -1
  27. package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
  28. package/dist/framework-mcp/src/tools/file_system/read_file.js +20 -0
  29. package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
  30. package/dist/framework-mcp/src/tools/messaging/send_message.js +37 -14
  31. package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
  32. package/dist/src/cli/adapters.d.ts +3 -1
  33. package/dist/src/cli/adapters.js +13 -11
  34. package/dist/src/cli/adapters.js.map +1 -1
  35. package/dist/src/cli/commands/check.js +12 -1
  36. package/dist/src/cli/commands/check.js.map +1 -1
  37. package/dist/src/cli/commands/init.js +21 -11
  38. package/dist/src/cli/commands/init.js.map +1 -1
  39. package/dist/src/cli/commands/orchestrate.d.ts +15 -0
  40. package/dist/src/cli/commands/orchestrate.js +45 -1
  41. package/dist/src/cli/commands/orchestrate.js.map +1 -1
  42. package/dist/src/cli/index.js +84 -19
  43. package/dist/src/cli/index.js.map +1 -1
  44. package/dist/src/cli/utils/memory.js +4 -0
  45. package/dist/src/cli/utils/memory.js.map +1 -1
  46. package/dist/src/cli/utils/pkg.js +5 -1
  47. package/dist/src/cli/utils/pkg.js.map +1 -1
  48. package/dist/tests/adapter.test.js +10 -8
  49. package/dist/tests/adapter.test.js.map +1 -1
  50. package/dist/tests/gemini.test.js +8 -7
  51. package/dist/tests/gemini.test.js.map +1 -1
  52. package/dist/vitest.config.js +1 -1
  53. package/dist/vitest.config.js.map +1 -1
  54. package/docs/project_analysis_report.md +1 -1
  55. package/eslint.config.js +2 -2
  56. package/framework-mcp/dist/src/index.js +1 -1
  57. package/framework-mcp/dist/src/tools/definitions.js +3 -1
  58. package/framework-mcp/dist/src/tools/file_system/read_file.js +20 -0
  59. package/framework-mcp/package.json +2 -2
  60. package/framework-mcp/src/index.ts +1 -1
  61. package/framework-mcp/src/tools/definitions.ts +3 -1
  62. package/framework-mcp/src/tools/file_system/read_file.ts +24 -0
  63. package/package.json +10 -8
  64. package/src/cli/adapters.ts +10 -10
  65. package/src/cli/commands/check.ts +13 -1
  66. package/src/cli/commands/init.ts +12 -11
  67. package/src/cli/commands/orchestrate.ts +1 -1
  68. package/src/cli/utils/memory.ts +4 -0
  69. package/src/cli/utils/pkg.ts +5 -1
  70. package/tsconfig.json +0 -2
  71. package/.enderun/ARCHITECTURE.md +0 -1
  72. package/.enderun/SECURITY.md +0 -1
  73. package/bin/init-check.js +0 -86
  74. package/bin/update-contract.js +0 -93
  75. package/dist/apps/backend/src/types/index.d.ts +0 -9
  76. package/dist/apps/backend/src/types/index.js +0 -5
  77. package/dist/apps/backend/src/types/index.js.map +0 -1
  78. package/dist/apps/web/src/main.d.ts +0 -1
  79. package/dist/apps/web/src/main.js +0 -9
  80. package/dist/apps/web/src/main.js.map +0 -1
  81. package/dist/apps/web/vite.config.d.ts +0 -2
  82. package/dist/apps/web/vite.config.js +0 -6
  83. package/dist/apps/web/vite.config.js.map +0 -1
  84. package/dist/tests/framework-init-test/framework-mcp/src/index.d.ts +0 -1
  85. package/dist/tests/framework-init-test/framework-mcp/src/index.js +0 -71
  86. package/dist/tests/framework-init-test/framework-mcp/src/index.js.map +0 -1
  87. package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.d.ts +0 -2
  88. package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js +0 -111
  89. package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js.map +0 -1
  90. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.d.ts +0 -2
  91. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js +0 -19
  92. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js.map +0 -1
  93. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.d.ts +0 -2
  94. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js +0 -8
  95. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js.map +0 -1
  96. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.d.ts +0 -2
  97. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js +0 -32
  98. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js.map +0 -1
  99. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.d.ts +0 -2
  100. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js +0 -10
  101. package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js.map +0 -1
  102. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.d.ts +0 -2
  103. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js +0 -6
  104. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js.map +0 -1
  105. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.d.ts +0 -2
  106. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js +0 -6
  107. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js.map +0 -1
  108. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.d.ts +0 -2
  109. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js +0 -6
  110. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js.map +0 -1
  111. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.d.ts +0 -2
  112. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js +0 -9
  113. package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js.map +0 -1
  114. package/dist/tests/framework-init-test/framework-mcp/src/tools/index.d.ts +0 -5
  115. package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js +0 -26
  116. package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js.map +0 -1
  117. package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.d.ts +0 -2
  118. package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js +0 -23
  119. package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js.map +0 -1
  120. package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.d.ts +0 -2
  121. package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js +0 -24
  122. package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js.map +0 -1
  123. package/dist/tests/framework-init-test/framework-mcp/src/tools/types.d.ts +0 -47
  124. package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js +0 -2
  125. package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js.map +0 -1
  126. package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.d.ts +0 -5
  127. package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js +0 -21
  128. package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js.map +0 -1
  129. package/dist/tests/framework-init-test/framework-mcp/src/utils/security.d.ts +0 -12
  130. package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js +0 -54
  131. package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js.map +0 -1
  132. package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.d.ts +0 -1
  133. package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js +0 -69
  134. package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js.map +0 -1
  135. package/dist/tests/framework-init-test/panda.config.d.ts +0 -4
  136. package/dist/tests/framework-init-test/panda.config.js +0 -95
  137. package/dist/tests/framework-init-test/panda.config.js.map +0 -1
  138. package/dist/tests/framework-init-test/vitest.config.d.ts +0 -2
  139. package/dist/tests/framework-init-test/vitest.config.js +0 -19
  140. package/dist/tests/framework-init-test/vitest.config.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handlePatchFile(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,19 +0,0 @@
1
- import fs from "fs";
2
- import { safePath } from "../../utils/security.js";
3
- export function handlePatchFile(projectRoot, args) {
4
- const filePath = safePath(projectRoot, args.path);
5
- const lines = fs.readFileSync(filePath, "utf8").split("\n");
6
- const start = args.startLine - 1;
7
- const end = args.endLine;
8
- const newContent = args.newContent.split("\n");
9
- if (start < 0 || start > lines.length) {
10
- throw new Error(`Invalid start line: ${start + 1}. File has ${lines.length} lines.`);
11
- }
12
- if (end < start + 1 || end > lines.length) {
13
- throw new Error(`Invalid end line: ${end}. Must be between ${start + 1} and ${lines.length}.`);
14
- }
15
- lines.splice(start, end - start, ...newContent);
16
- fs.writeFileSync(filePath, lines.join("\n"));
17
- return { content: [{ type: "text", text: `✅ File patched successfully: ${args.path}` }] };
18
- }
19
- //# sourceMappingURL=patch_file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patch_file.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAc;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAI,IAAI,CAAC,SAAoB,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAiB,CAAC;IACnC,MAAM,UAAU,GAAI,IAAI,CAAC,UAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,GAAG,CAAC,cAAc,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,qBAAqB,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACnG,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC;IAChD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC9F,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleReadFile(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,8 +0,0 @@
1
- import fs from "fs";
2
- import { safePath } from "../../utils/security.js";
3
- export function handleReadFile(projectRoot, args) {
4
- const filePath = safePath(projectRoot, args.path);
5
- const content = fs.readFileSync(filePath, "utf8");
6
- return { content: [{ type: "text", text: content }] };
7
- }
8
- //# sourceMappingURL=read_file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAc;IAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC1D,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleReplaceText(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,32 +0,0 @@
1
- import fs from "fs";
2
- import { safePath } from "../../utils/security.js";
3
- export function handleReplaceText(projectRoot, args) {
4
- const filePath = safePath(projectRoot, args.path);
5
- let content = fs.readFileSync(filePath, "utf8");
6
- const oldText = args.oldText;
7
- const newText = args.newText;
8
- const allowMultiple = args.allowMultiple || false; // Default to false
9
- if (!content.includes(oldText)) {
10
- throw new Error(`Text not found in file: ${oldText.slice(0, 100)}...`);
11
- }
12
- // Surgical precision guard: reject ambiguous replacements unless allowMultiple is true.
13
- if (!allowMultiple) {
14
- const firstIndex = content.indexOf(oldText);
15
- const lastIndex = content.lastIndexOf(oldText);
16
- if (firstIndex !== lastIndex) {
17
- const count = (content.match(new RegExp(oldText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')) || []).length;
18
- throw new Error(`Ambiguous replacement: "${oldText.slice(0, 80)}..." found ${count} times in ${args.path}. ` +
19
- "Provide a longer, unique context string or set 'allow_multiple' to true.");
20
- }
21
- }
22
- // Perform replacement(s)
23
- if (allowMultiple) {
24
- content = content.replace(new RegExp(oldText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), newText);
25
- }
26
- else {
27
- content = content.replace(oldText, newText);
28
- }
29
- fs.writeFileSync(filePath, content);
30
- return { content: [{ type: "text", text: `✅ Surgical edit successful in ${args.path}` }] };
31
- }
32
- //# sourceMappingURL=replace_text.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replace_text.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAc;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,mBAAmB;IAEtE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,wFAAwF;IACxF,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC5G,MAAM,IAAI,KAAK,CACX,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,KAAK,aAAa,IAAI,CAAC,IAAI,IAAI;gBAC5F,0EAA0E,CAC7E,CAAC;QACN,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxG,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC/F,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleWriteFile(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,10 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { safePath } from "../../utils/security.js";
4
- export function handleWriteFile(projectRoot, args) {
5
- const filePath = safePath(projectRoot, args.path);
6
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
7
- fs.writeFileSync(filePath, args.content);
8
- return { content: [{ type: "text", text: `✅ File written: ${args.path}` }] };
9
- }
10
- //# sourceMappingURL=write_file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write_file.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGnD,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAc;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;IAC5D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAiB,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleGetFrameworkStatus(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,6 +0,0 @@
1
- import { safeExec } from "../../utils/cli.js";
2
- export function handleGetFrameworkStatus(projectRoot, args) {
3
- const output = safeExec("npx", ["agent-enderun", "status"], projectRoot, args.timeout);
4
- return { content: [{ type: "text", text: output }] };
5
- }
6
- //# sourceMappingURL=get_status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get_status.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/framework/get_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,UAAU,wBAAwB,CAAC,WAAmB,EAAE,IAAc;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleOrchestrateLoop(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,6 +0,0 @@
1
- import { safeExec } from "../../utils/cli.js";
2
- export function handleOrchestrateLoop(projectRoot, args) {
3
- const output = safeExec("npx", ["agent-enderun", "orchestrate"], projectRoot, args.timeout);
4
- return { content: [{ type: "text", text: output }] };
5
- }
6
- //# sourceMappingURL=orchestrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,UAAU,qBAAqB,CAAC,WAAmB,EAAE,IAAc;IACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleUpdateContractHash(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,6 +0,0 @@
1
- import { safeExec } from "../../utils/cli.js";
2
- export function handleUpdateContractHash(projectRoot, args) {
3
- const output = safeExec("npx", ["agent-enderun", "update-contract"], projectRoot, args.timeout);
4
- return { content: [{ type: "text", text: output }] };
5
- }
6
- //# sourceMappingURL=update_contract_hash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update_contract_hash.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,UAAU,wBAAwB,CAAC,WAAmB,EAAE,IAAc;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleUpdateProjectMemory(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,9 +0,0 @@
1
- import { safeExec } from "../../utils/cli.js";
2
- export function handleUpdateProjectMemory(projectRoot, args) {
3
- const section = args.section;
4
- const content = args.content;
5
- // Using execFileSync with array args prevents command injection
6
- safeExec("npx", ["agent-enderun", "update_project_memory", section, content], projectRoot, args.timeout);
7
- return { content: [{ type: "text", text: `✅ Section ${section} updated.` }] };
8
- }
9
- //# sourceMappingURL=update_memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update_memory.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,IAAc;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,OAAO,WAAW,EAAE,CAAC,EAAE,CAAC;AAClF,CAAC"}
@@ -1,5 +0,0 @@
1
- import { TOOLS } from "./definitions.js";
2
- import { ToolResult, ToolArgs } from "./types.js";
3
- export type ToolHandler = (projectRoot: string, args: ToolArgs) => ToolResult;
4
- export declare const toolHandlers: Record<string, ToolHandler>;
5
- export { TOOLS };
@@ -1,26 +0,0 @@
1
- import { TOOLS } from "./definitions.js";
2
- import { handleReadFile } from "./file_system/read_file.js";
3
- import { handleWriteFile } from "./file_system/write_file.js";
4
- import { handleReplaceText } from "./file_system/replace_text.js";
5
- import { handlePatchFile } from "./file_system/patch_file.js";
6
- import { handleGetFrameworkStatus } from "./framework/get_status.js";
7
- import { handleUpdateProjectMemory } from "./framework/update_memory.js";
8
- import { handleOrchestrateLoop } from "./framework/orchestrate.js";
9
- import { handleUpdateContractHash } from "./framework/update_contract_hash.js";
10
- import { handleSendAgentMessage } from "./messaging/send_message.js";
11
- import { handleLogAgentAction } from "./messaging/log_action.js";
12
- // Map of tool names to their handler functions
13
- export const toolHandlers = {
14
- read_file: handleReadFile,
15
- write_file: handleWriteFile,
16
- replace_text: handleReplaceText,
17
- patch_file: handlePatchFile,
18
- get_framework_status: handleGetFrameworkStatus,
19
- update_project_memory: handleUpdateProjectMemory,
20
- orchestrate_loop: handleOrchestrateLoop,
21
- send_agent_message: handleSendAgentMessage,
22
- log_agent_action: handleLogAgentAction,
23
- update_contract_hash: handleUpdateContractHash,
24
- };
25
- export { TOOLS };
26
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../tests/framework-init-test/framework-mcp/src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAMjE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAgC;IACrD,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,eAAe;IAC3B,YAAY,EAAE,iBAAiB;IAC/B,UAAU,EAAE,eAAe;IAC3B,oBAAoB,EAAE,wBAAwB;IAC9C,qBAAqB,EAAE,yBAAyB;IAChD,gBAAgB,EAAE,qBAAqB;IACvC,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,oBAAoB;IACtC,oBAAoB,EAAE,wBAAwB;CACjD,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleLogAgentAction(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,23 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { resolveFrameworkDir } from "../../utils/security.js";
4
- export function handleLogAgentAction(projectRoot, args) {
5
- const { agent, action, traceId, status, summary } = args;
6
- const findings = args.findings ? args.findings.split(",").map(f => f.trim()) : [];
7
- const frameworkDir = resolveFrameworkDir(projectRoot);
8
- const agentName = agent.replace("@", "");
9
- const logPath = path.join(projectRoot, frameworkDir, "logs", `${agentName}.json`);
10
- const logEntry = {
11
- timestamp: new Date().toISOString(),
12
- agent,
13
- action,
14
- requestId: traceId,
15
- status,
16
- summary,
17
- findings
18
- };
19
- fs.mkdirSync(path.dirname(logPath), { recursive: true });
20
- fs.appendFileSync(logPath, JSON.stringify(logEntry) + "\n");
21
- return { content: [{ type: "text", text: `✅ Action logged for ${agent} to ${path.join(frameworkDir, "logs", `${agentName}.json`)}` }] };
22
- }
23
- //# sourceMappingURL=log_action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"log_action.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,IAAc;IACpE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAuF,CAAC;IAC5I,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElF,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,SAAS,GAAI,KAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAElF,MAAM,QAAQ,GAAG;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,MAAM;QACN,SAAS,EAAE,OAAO;QAClB,MAAM;QACN,OAAO;QACP,QAAQ;KACX,CAAC;IAEF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC5I,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ToolArgs, ToolResult } from "../types.js";
2
- export declare function handleSendAgentMessage(projectRoot: string, args: ToolArgs): ToolResult;
@@ -1,24 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { resolveFrameworkDir } from "../../utils/security.js";
4
- export function handleSendAgentMessage(projectRoot, args) {
5
- const { to, category, content, traceId } = args;
6
- // `from` is optional — falls back to "@mcp" for backward compatibility
7
- const from = args.from || "@mcp";
8
- const frameworkDir = resolveFrameworkDir(projectRoot);
9
- const agentName = to.replace("@", "");
10
- const messagePath = path.join(projectRoot, frameworkDir, "messages", `${agentName}.json`);
11
- const message = {
12
- timestamp: new Date().toISOString(),
13
- from,
14
- to,
15
- category,
16
- traceId,
17
- content,
18
- status: "PENDING"
19
- };
20
- fs.mkdirSync(path.dirname(messagePath), { recursive: true });
21
- fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
22
- return { content: [{ type: "text", text: `✅ Message sent to ${to} (from: ${from})` }] };
23
- }
24
- //# sourceMappingURL=send_message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,IAAc;IACtE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAA2E,CAAC;IACvH,uEAAuE;IACvE,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,MAAM,CAAC;IAE7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAG;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI;QACJ,EAAE;QACF,QAAQ;QACR,OAAO;QACP,OAAO;QACP,MAAM,EAAE,SAAS;KACpB,CAAC;IAEF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAE/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;AAC5F,CAAC"}
@@ -1,47 +0,0 @@
1
- export interface ToolDefinition {
2
- name: string;
3
- description: string;
4
- inputSchema: {
5
- type: "object";
6
- properties: Record<string, {
7
- type: string;
8
- description?: string;
9
- enum?: string[];
10
- }>;
11
- required?: string[];
12
- };
13
- }
14
- export interface CallToolRequest {
15
- params: {
16
- name: string;
17
- arguments?: ToolArgs;
18
- };
19
- }
20
- export interface ToolArgs {
21
- path?: string;
22
- content?: string;
23
- oldText?: string;
24
- newText?: string;
25
- startLine?: number;
26
- endLine?: number;
27
- newContent?: string;
28
- section?: string;
29
- to?: string;
30
- category?: "ACTION" | "DELEGATION" | "INFO" | "ALERT";
31
- traceId?: string;
32
- agent?: string;
33
- action?: string;
34
- status?: "SUCCESS" | "FAILURE";
35
- summary?: string;
36
- findings?: string;
37
- allowMultiple?: boolean;
38
- timeout?: number;
39
- from?: string;
40
- }
41
- export interface ToolResult {
42
- isError?: boolean;
43
- content: Array<{
44
- type: "text";
45
- text: string;
46
- }>;
47
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../tests/framework-init-test/framework-mcp/src/tools/types.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- /**
2
- * Executes a CLI command safely using execFileSync (no shell injection risk).
3
- * Captures stderr gracefully to prevent stream crashes.
4
- */
5
- export declare function safeExec(command: string, args: string[], cwd: string, timeout?: number): string;
@@ -1,21 +0,0 @@
1
- import { execFileSync } from "child_process";
2
- /**
3
- * Executes a CLI command safely using execFileSync (no shell injection risk).
4
- * Captures stderr gracefully to prevent stream crashes.
5
- */
6
- export function safeExec(command, args, cwd, timeout) {
7
- try {
8
- return execFileSync(command, args, {
9
- cwd,
10
- encoding: "utf8",
11
- timeout: timeout || 30000,
12
- maxBuffer: 1024 * 1024,
13
- stdio: ["pipe", "pipe", "pipe"],
14
- });
15
- }
16
- catch (error) {
17
- const err = error;
18
- throw new Error(err.stderr || err.message || "Command execution failed", { cause: error });
19
- }
20
- }
21
- //# sourceMappingURL=cli.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../../../tests/framework-init-test/framework-mcp/src/utils/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAc,EAAE,GAAW,EAAE,OAAgB;IACnF,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE;YAC/B,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,OAAO,IAAI,KAAK;YACzB,SAAS,EAAE,IAAI,GAAG,IAAI;YACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;IACP,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAA8C,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,0BAA0B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC;AACL,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Validates and resolves a user-provided path to prevent path traversal attacks.
3
- * Ensures the resolved path stays within the project root boundary.
4
- */
5
- export declare function safePath(projectRoot: string, userPath: string): string;
6
- /**
7
- * Resolves the active framework directory.
8
- * Priority: package.json `enderun.frameworkDir` → `.enderun` → adapter dirs.
9
- * This ensures the canonical framework directory is always used,
10
- * even when adapter-specific dirs (e.g. `.gemini`) exist alongside it.
11
- */
12
- export declare function resolveFrameworkDir(projectRoot: string): string;
@@ -1,54 +0,0 @@
1
- import path from "path";
2
- import fs from "fs";
3
- /**
4
- * Validates and resolves a user-provided path to prevent path traversal attacks.
5
- * Ensures the resolved path stays within the project root boundary.
6
- */
7
- export function safePath(projectRoot, userPath) {
8
- const resolved = path.resolve(projectRoot, userPath);
9
- const normalizedRoot = path.resolve(projectRoot);
10
- if (!resolved.startsWith(normalizedRoot + path.sep) && resolved !== normalizedRoot) {
11
- throw new Error(`Access denied: path "${userPath}" escapes project root.`);
12
- }
13
- return resolved;
14
- }
15
- /**
16
- * Resolves the active framework directory.
17
- * Priority: package.json `enderun.frameworkDir` → `.enderun` → adapter dirs.
18
- * This ensures the canonical framework directory is always used,
19
- * even when adapter-specific dirs (e.g. `.gemini`) exist alongside it.
20
- */
21
- export function resolveFrameworkDir(projectRoot) {
22
- // 1. Authoritative source: read from package.json if present
23
- try {
24
- const pkgPath = path.join(projectRoot, "package.json");
25
- if (fs.existsSync(pkgPath)) {
26
- const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
27
- const enderunConfig = pkg["enderun"];
28
- if (enderunConfig && typeof enderunConfig["frameworkDir"] === "string") {
29
- return enderunConfig["frameworkDir"];
30
- }
31
- }
32
- }
33
- catch {
34
- // ignore — fall through to filesystem scan
35
- }
36
- // 2. Filesystem scan — .enderun takes precedence over adapter-specific dirs
37
- const candidates = [
38
- ".enderun",
39
- ".claude",
40
- ".grok",
41
- ".agent",
42
- ".gemini/antigravity",
43
- ".gemini/antigravity-cli",
44
- ".gemini",
45
- ];
46
- for (const candidate of candidates) {
47
- const candidatePath = path.join(projectRoot, candidate);
48
- if (fs.existsSync(candidatePath)) {
49
- return candidate;
50
- }
51
- }
52
- return ".enderun";
53
- }
54
- //# sourceMappingURL=security.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../../../tests/framework-init-test/framework-mcp/src/utils/security.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,WAAmB,EAAE,QAAgB;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,yBAAyB,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACnD,6DAA6D;IAC7D,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAA4B,CAAC;YACpF,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAwC,CAAC;YAC5E,IAAI,aAAa,IAAI,OAAO,aAAa,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACrE,OAAO,aAAa,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,2CAA2C;IAC/C,CAAC;IAED,4EAA4E;IAC5E,MAAM,UAAU,GAAG;QACf,UAAU;QACV,SAAS;QACT,OAAO;QACP,QAAQ;QACR,qBAAqB;QACrB,yBAAyB;QACzB,SAAS;KACZ,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
@@ -1,69 +0,0 @@
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";
5
- const TEST_DIR = path.join(__dirname, "../_temp_test_files");
6
- const TEST_FILE = path.join(TEST_DIR, "test_file.txt");
7
- beforeEach(() => {
8
- fs.mkdirSync(TEST_DIR, { recursive: true });
9
- });
10
- afterEach(() => {
11
- fs.rmSync(TEST_DIR, { recursive: true, force: true });
12
- });
13
- describe("handleReplaceText", () => {
14
- it("should replace a single occurrence of text", () => {
15
- fs.writeFileSync(TEST_FILE, "hello world", "utf8");
16
- const args = {
17
- path: TEST_FILE,
18
- oldText: "world",
19
- newText: "there",
20
- };
21
- const result = handleReplaceText(TEST_DIR, args);
22
- expect(result.content[0].text).toContain("✅ Surgical edit successful");
23
- expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there");
24
- });
25
- it("should throw an error if text is not found", () => {
26
- fs.writeFileSync(TEST_FILE, "hello world", "utf8");
27
- const args = {
28
- path: TEST_FILE,
29
- oldText: "missing",
30
- newText: "found",
31
- };
32
- expect(() => handleReplaceText(TEST_DIR, args)).toThrowError("Text not found in file");
33
- });
34
- it("should throw an error for ambiguous replacement if allowMultiple is false", () => {
35
- fs.writeFileSync(TEST_FILE, "hello world world", "utf8");
36
- const args = {
37
- path: TEST_FILE,
38
- oldText: "world",
39
- newText: "there",
40
- allowMultiple: false,
41
- };
42
- expect(() => handleReplaceText(TEST_DIR, args)).toThrowError("Ambiguous replacement");
43
- });
44
- it("should replace all occurrences of text if allowMultiple is true", () => {
45
- fs.writeFileSync(TEST_FILE, "hello world world", "utf8");
46
- const args = {
47
- path: TEST_FILE,
48
- oldText: "world",
49
- newText: "there",
50
- allowMultiple: true,
51
- };
52
- const result = handleReplaceText(TEST_DIR, args);
53
- expect(result.content[0].text).toContain("✅ Surgical edit successful");
54
- expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there there");
55
- });
56
- it("should handle special characters in oldText when allowMultiple is true", () => {
57
- fs.writeFileSync(TEST_FILE, "test.txt", "utf8");
58
- const args = {
59
- path: TEST_FILE,
60
- oldText: ".txt",
61
- newText: ".md",
62
- allowMultiple: true,
63
- };
64
- const result = handleReplaceText(TEST_DIR, args);
65
- expect(result.content[0].text).toContain("✅ Surgical edit successful");
66
- expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("test.md");
67
- });
68
- });
69
- //# sourceMappingURL=replace_text.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replace_text.test.js","sourceRoot":"","sources":["../../../../../../../tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAGhF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAEvD,UAAU,CAAC,GAAG,EAAE;IACZ,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACX,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,GAAa;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;SACnB,CAAC;QACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,GAAa;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,OAAO;SACnB,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACjF,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,IAAI,GAAa;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,KAAK;SACvB,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACvE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,IAAI,GAAa;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAC9E,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAa;YACnB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- declare const _default: import("@pandacss/dev").Config & {
2
- name: string;
3
- };
4
- export default _default;