agent-enderun 1.0.7 ā 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.enderun/ARCHITECTURE.md +1 -0
- package/.enderun/BRAIN_DASHBOARD.md +1 -1
- package/.enderun/ENDERUN.md +2 -2
- package/.enderun/SECURITY.md +1 -0
- package/.enderun/STATUS.md +5 -6
- package/.enderun/agents/agent_army_schema.json +71 -77
- package/.enderun/agents/analyst.json +32 -0
- package/.enderun/agents/backend.json +32 -0
- package/.enderun/agents/database.json +32 -0
- package/.enderun/agents/devops.json +32 -0
- package/.enderun/agents/explorer.json +32 -0
- package/.enderun/agents/frontend.json +32 -0
- package/.enderun/agents/git.json +32 -0
- package/.enderun/agents/manager.json +32 -0
- package/.enderun/agents/mobile.json +32 -0
- package/.enderun/agents/native.json +32 -0
- package/.enderun/agents/quality.json +32 -0
- package/.enderun/agents/schema/agent-lifecycle-schema.json +35 -80
- package/.enderun/agents/security.json +32 -0
- package/.enderun/cli-commands.json +7 -5
- package/.enderun/config.json +1 -1
- package/.enderun/knowledge/ARCHITECTURE.md +1 -0
- package/.enderun/knowledge/SECURITY.md +1 -0
- package/.enderun/knowledge/SHIM_TEMPLATE.md +12 -1
- package/.enderun/knowledge/evaluation_engine.md +11 -0
- package/.enderun/knowledge/legacy_onboarding.md +11 -0
- package/.enderun/knowledge/project_scaffold_guidelines.md +11 -0
- package/.enderun/knowledge/reference_application_guidelines.md +11 -0
- package/.enderun/logs/manager.json +52 -23
- package/.enderun/memory/PROJECT_MEMORY.md +14 -12
- package/.enderun/observability/README.md +19 -0
- package/README.md +38 -101
- package/agent.md +1 -1
- package/bin/hermes-sandbox.js +9 -0
- package/bin/init-check.js +9 -0
- package/bin/validate-agent-army.js +34 -92
- package/dist/apps/backend/src/types/index.d.ts +9 -0
- package/dist/apps/backend/src/types/index.js +5 -0
- package/dist/apps/backend/src/types/index.js.map +1 -0
- package/dist/apps/web/src/main.d.ts +1 -0
- package/dist/apps/web/src/main.js +9 -0
- package/dist/apps/web/src/main.js.map +1 -0
- package/dist/apps/web/vite.config.d.ts +2 -0
- package/dist/apps/web/vite.config.js +6 -0
- package/dist/apps/web/vite.config.js.map +1 -0
- package/dist/framework-mcp/src/index.d.ts +1 -0
- package/dist/framework-mcp/src/index.js +71 -0
- package/dist/framework-mcp/src/index.js.map +1 -0
- package/dist/framework-mcp/src/tools/definitions.d.ts +2 -0
- package/dist/framework-mcp/src/tools/definitions.js +111 -0
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.js +19 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js +8 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +32 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.d.ts +2 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.js +10 -0
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/get_status.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/get_status.js +6 -0
- package/dist/framework-mcp/src/tools/framework/get_status.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/orchestrate.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/orchestrate.js +6 -0
- package/dist/framework-mcp/src/tools/framework/orchestrate.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.js +6 -0
- package/dist/framework-mcp/src/tools/framework/update_contract_hash.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.d.ts +2 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.js +9 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.js.map +1 -0
- package/dist/framework-mcp/src/tools/index.d.ts +5 -0
- package/dist/framework-mcp/src/tools/index.js +26 -0
- package/dist/framework-mcp/src/tools/index.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/log_action.d.ts +2 -0
- package/dist/framework-mcp/src/tools/messaging/log_action.js +23 -0
- package/dist/framework-mcp/src/tools/messaging/log_action.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.d.ts +2 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.js +24 -0
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -0
- package/dist/framework-mcp/src/tools/types.d.ts +47 -0
- package/dist/framework-mcp/src/tools/types.js +2 -0
- package/dist/framework-mcp/src/tools/types.js.map +1 -0
- package/dist/framework-mcp/src/utils/cli.d.ts +5 -0
- package/dist/framework-mcp/src/utils/cli.js +21 -0
- package/dist/framework-mcp/src/utils/cli.js.map +1 -0
- package/dist/framework-mcp/src/utils/security.d.ts +12 -0
- package/dist/framework-mcp/src/utils/security.js +54 -0
- package/dist/framework-mcp/src/utils/security.js.map +1 -0
- package/dist/src/cli/adapters.d.ts +32 -0
- package/dist/src/cli/adapters.js +264 -0
- package/dist/src/cli/adapters.js.map +1 -0
- package/dist/src/cli/commands/app.d.ts +4 -0
- package/dist/src/cli/commands/app.js +32 -0
- package/dist/src/cli/commands/app.js.map +1 -0
- package/dist/src/cli/commands/check.d.ts +6 -0
- package/dist/src/cli/commands/check.js +110 -0
- package/dist/src/cli/commands/check.js.map +1 -0
- package/dist/src/cli/commands/compliance.d.ts +1 -0
- package/dist/src/cli/commands/compliance.js +51 -0
- package/dist/src/cli/commands/compliance.js.map +1 -0
- package/dist/src/cli/commands/contract.d.ts +8 -0
- package/dist/src/cli/commands/contract.js +73 -0
- package/dist/src/cli/commands/contract.js.map +1 -0
- package/dist/src/cli/commands/explorer.d.ts +2 -0
- package/dist/src/cli/commands/explorer.js +43 -0
- package/dist/src/cli/commands/explorer.js.map +1 -0
- package/dist/src/cli/commands/git.d.ts +2 -0
- package/dist/src/cli/commands/git.js +41 -0
- package/dist/src/cli/commands/git.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +1 -0
- package/dist/src/cli/commands/init.js +338 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/knowledge.d.ts +2 -0
- package/dist/src/cli/commands/knowledge.js +43 -0
- package/dist/src/cli/commands/knowledge.js.map +1 -0
- package/dist/src/cli/commands/lint.d.ts +4 -0
- package/dist/src/cli/commands/lint.js +24 -0
- package/dist/src/cli/commands/lint.js.map +1 -0
- package/dist/src/cli/commands/log.d.ts +9 -0
- package/dist/src/cli/commands/log.js +33 -0
- package/dist/src/cli/commands/log.js.map +1 -0
- package/dist/src/cli/commands/memory.d.ts +1 -0
- package/dist/src/cli/commands/memory.js +72 -0
- package/dist/src/cli/commands/memory.js.map +1 -0
- package/dist/src/cli/commands/orchestrate.d.ts +1 -0
- package/dist/src/cli/commands/orchestrate.js +111 -0
- package/dist/src/cli/commands/orchestrate.js.map +1 -0
- package/dist/src/cli/commands/script.d.ts +1 -0
- package/dist/src/cli/commands/script.js +20 -0
- package/dist/src/cli/commands/script.js.map +1 -0
- package/dist/src/cli/commands/security.d.ts +1 -0
- package/dist/src/cli/commands/security.js +37 -0
- package/dist/src/cli/commands/security.js.map +1 -0
- package/dist/src/cli/commands/status.d.ts +4 -0
- package/dist/src/cli/commands/status.js +56 -0
- package/dist/src/cli/commands/status.js.map +1 -0
- package/dist/src/cli/commands/trace.d.ts +4 -0
- package/dist/src/cli/commands/trace.js +42 -0
- package/dist/src/cli/commands/trace.js.map +1 -0
- package/dist/src/cli/index.d.ts +2 -0
- package/dist/src/cli/index.js +117 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/utils/app.d.ts +33 -0
- package/dist/src/cli/utils/app.js +710 -0
- package/dist/src/cli/utils/app.js.map +1 -0
- package/dist/src/cli/utils/claude.d.ts +8 -0
- package/dist/src/cli/utils/claude.js +56 -0
- package/dist/src/cli/utils/claude.js.map +1 -0
- package/dist/src/cli/utils/fs.d.ts +11 -0
- package/dist/src/cli/utils/fs.js +144 -0
- package/dist/src/cli/utils/fs.js.map +1 -0
- package/dist/src/cli/utils/memory.d.ts +14 -0
- package/dist/src/cli/utils/memory.js +173 -0
- package/dist/src/cli/utils/memory.js.map +1 -0
- package/dist/src/cli/utils/pkg.d.ts +24 -0
- package/dist/src/cli/utils/pkg.js +254 -0
- package/dist/src/cli/utils/pkg.js.map +1 -0
- package/dist/src/cli/utils/string.d.ts +6 -0
- package/dist/src/cli/utils/string.js +44 -0
- package/dist/src/cli/utils/string.js.map +1 -0
- package/dist/src/cli/utils/time.d.ts +2 -0
- package/dist/src/cli/utils/time.js +28 -0
- package/dist/src/cli/utils/time.js.map +1 -0
- package/dist/tests/adapter.test.d.ts +1 -0
- package/dist/tests/adapter.test.js +80 -0
- package/dist/tests/adapter.test.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/index.d.ts +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/index.js +71 -0
- package/dist/tests/framework-init-test/framework-mcp/src/index.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js +111 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js +19 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js +8 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js +32 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js +10 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js +6 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js +6 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js +6 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js +9 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.d.ts +5 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js +26 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js +23 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.d.ts +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js +24 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.d.ts +47 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js +2 -0
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.d.ts +5 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js +21 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.d.ts +12 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js +54 -0
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js.map +1 -0
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.d.ts +1 -0
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js +69 -0
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js.map +1 -0
- package/dist/tests/framework-init-test/panda.config.d.ts +4 -0
- package/dist/tests/framework-init-test/panda.config.js +95 -0
- package/dist/tests/framework-init-test/panda.config.js.map +1 -0
- package/dist/tests/framework-init-test/vitest.config.d.ts +2 -0
- package/dist/tests/framework-init-test/vitest.config.js +19 -0
- package/dist/tests/framework-init-test/vitest.config.js.map +1 -0
- package/dist/tests/gemini.test.d.ts +1 -0
- package/dist/tests/gemini.test.js +38 -0
- package/dist/tests/gemini.test.js.map +1 -0
- package/dist/tests/initial.test.d.ts +1 -0
- package/dist/tests/initial.test.js +7 -0
- package/dist/tests/initial.test.js.map +1 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +19 -0
- package/dist/vitest.config.js.map +1 -0
- package/docs/getting-started.md +4 -4
- package/eslint.config.js +1 -1
- package/framework-mcp/dist/index.js +2 -2
- package/framework-mcp/dist/src/index.js +70 -0
- package/framework-mcp/dist/src/tools/definitions.js +110 -0
- package/framework-mcp/dist/src/tools/file_system/patch_file.js +18 -0
- package/framework-mcp/dist/src/tools/file_system/read_file.js +7 -0
- package/framework-mcp/dist/src/tools/file_system/replace_text.js +31 -0
- package/framework-mcp/dist/src/tools/file_system/write_file.js +9 -0
- package/framework-mcp/dist/src/tools/framework/get_status.js +5 -0
- package/framework-mcp/dist/src/tools/framework/orchestrate.js +5 -0
- package/framework-mcp/dist/src/tools/framework/update_contract_hash.js +5 -0
- package/framework-mcp/dist/src/tools/framework/update_memory.js +8 -0
- package/framework-mcp/dist/src/tools/index.js +25 -0
- package/framework-mcp/dist/src/tools/messaging/log_action.js +22 -0
- package/framework-mcp/dist/src/tools/messaging/send_message.js +23 -0
- package/framework-mcp/dist/src/tools/types.js +1 -0
- package/framework-mcp/dist/src/utils/cli.js +20 -0
- package/framework-mcp/dist/src/utils/security.js +53 -0
- package/framework-mcp/dist/tests/tools/file_system/replace_text.test.js +68 -0
- package/framework-mcp/dist/tools/definitions.js +1 -0
- package/framework-mcp/dist/tools/file_system/replace_text.js +18 -1
- package/framework-mcp/dist/tools/framework/get_status.js +2 -2
- package/framework-mcp/dist/tools/framework/orchestrate.js +2 -2
- package/framework-mcp/dist/tools/framework/update_contract_hash.js +2 -2
- package/framework-mcp/dist/tools/framework/update_memory.js +1 -1
- package/framework-mcp/dist/tools/messaging/send_message.js +4 -2
- package/framework-mcp/dist/utils/cli.js +2 -2
- package/framework-mcp/dist/utils/security.js +23 -5
- package/framework-mcp/package.json +3 -3
- package/framework-mcp/src/index.ts +2 -2
- package/framework-mcp/src/tools/definitions.ts +1 -0
- package/framework-mcp/src/tools/file_system/replace_text.ts +21 -1
- package/framework-mcp/src/tools/framework/get_status.ts +3 -3
- package/framework-mcp/src/tools/framework/orchestrate.ts +3 -3
- package/framework-mcp/src/tools/framework/update_contract_hash.ts +3 -3
- package/framework-mcp/src/tools/framework/update_memory.ts +1 -1
- package/framework-mcp/src/tools/messaging/send_message.ts +5 -2
- package/framework-mcp/src/tools/types.ts +3 -0
- package/framework-mcp/src/utils/cli.ts +2 -2
- package/framework-mcp/src/utils/security.ts +23 -5
- package/framework-mcp/tests/tools/file_system/replace_text.test.js +68 -0
- package/framework-mcp/tests/tools/file_system/replace_text.test.ts +77 -0
- package/framework-mcp/tsconfig.json +1 -2
- package/mcp.json +4 -4
- package/package.json +4 -3
- package/src/cli/adapters.ts +16 -9
- package/src/cli/commands/check.ts +8 -5
- package/src/cli/commands/contract.ts +2 -2
- package/src/cli/commands/init.ts +213 -433
- package/src/cli/commands/memory.ts +5 -0
- package/src/cli/index.ts +12 -9
- package/src/cli/utils/app.ts +19 -16
- package/src/cli/utils/claude.ts +2 -1
- package/src/cli/utils/fs.ts +2 -1
- package/src/cli/utils/memory.ts +2 -2
- package/src/cli/utils/pkg.ts +72 -5
- package/.enderun/agents/analyst.md +0 -32
- package/.enderun/agents/backend.md +0 -49
- package/.enderun/agents/database.md +0 -41
- package/.enderun/agents/devops.md +0 -41
- package/.enderun/agents/explorer.md +0 -40
- package/.enderun/agents/frontend.md +0 -48
- package/.enderun/agents/git.md +0 -41
- package/.enderun/agents/manager.md +0 -43
- package/.enderun/agents/mobile.md +0 -42
- package/.enderun/agents/native.md +0 -41
- package/.enderun/agents/quality.md +0 -40
- package/.enderun/agents/security.md +0 -32
- package/docs/api-referans.md +0 -1137
- package/docs/is_akislari.md +0 -902
- package/docs/mimari.md +0 -926
- package/docs/moduller.md +0 -294
- package/docs/proje.md +0 -521
- package/docs/yap/304/261.md +0 -2150
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
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 { ToolArgs } from "../../../src/tools/types.js";
|
|
6
|
+
|
|
7
|
+
const TEST_DIR = path.join(__dirname, "../_temp_test_files");
|
|
8
|
+
const TEST_FILE = path.join(TEST_DIR, "test_file.txt");
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
fs.mkdirSync(TEST_DIR, { recursive: true });
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
fs.rmSync(TEST_DIR, { recursive: true, force: true });
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe("handleReplaceText", () => {
|
|
19
|
+
it("should replace a single occurrence of text", () => {
|
|
20
|
+
fs.writeFileSync(TEST_FILE, "hello world", "utf8");
|
|
21
|
+
const args: ToolArgs = {
|
|
22
|
+
path: TEST_FILE,
|
|
23
|
+
oldText: "world",
|
|
24
|
+
newText: "there",
|
|
25
|
+
};
|
|
26
|
+
const result = handleReplaceText(TEST_DIR, args);
|
|
27
|
+
expect(result.content[0].text).toContain("ā
Surgical edit successful");
|
|
28
|
+
expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("should throw an error if text is not found", () => {
|
|
32
|
+
fs.writeFileSync(TEST_FILE, "hello world", "utf8");
|
|
33
|
+
const args: ToolArgs = {
|
|
34
|
+
path: TEST_FILE,
|
|
35
|
+
oldText: "missing",
|
|
36
|
+
newText: "found",
|
|
37
|
+
};
|
|
38
|
+
expect(() => handleReplaceText(TEST_DIR, args)).toThrowError("Text not found in file");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("should throw an error for ambiguous replacement if allowMultiple is false", () => {
|
|
42
|
+
fs.writeFileSync(TEST_FILE, "hello world world", "utf8");
|
|
43
|
+
const args: ToolArgs = {
|
|
44
|
+
path: TEST_FILE,
|
|
45
|
+
oldText: "world",
|
|
46
|
+
newText: "there",
|
|
47
|
+
allowMultiple: false,
|
|
48
|
+
};
|
|
49
|
+
expect(() => handleReplaceText(TEST_DIR, args)).toThrowError("Ambiguous replacement");
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("should replace all occurrences of text if allowMultiple is true", () => {
|
|
53
|
+
fs.writeFileSync(TEST_FILE, "hello world world", "utf8");
|
|
54
|
+
const args: ToolArgs = {
|
|
55
|
+
path: TEST_FILE,
|
|
56
|
+
oldText: "world",
|
|
57
|
+
newText: "there",
|
|
58
|
+
allowMultiple: true,
|
|
59
|
+
};
|
|
60
|
+
const result = handleReplaceText(TEST_DIR, args);
|
|
61
|
+
expect(result.content[0].text).toContain("ā
Surgical edit successful");
|
|
62
|
+
expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there there");
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("should handle special characters in oldText when allowMultiple is true", () => {
|
|
66
|
+
fs.writeFileSync(TEST_FILE, "test.txt", "utf8");
|
|
67
|
+
const args: ToolArgs = {
|
|
68
|
+
path: TEST_FILE,
|
|
69
|
+
oldText: ".txt",
|
|
70
|
+
newText: ".md",
|
|
71
|
+
allowMultiple: true,
|
|
72
|
+
};
|
|
73
|
+
const result = handleReplaceText(TEST_DIR, args);
|
|
74
|
+
expect(result.content[0].text).toContain("ā
Surgical edit successful");
|
|
75
|
+
expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("test.md");
|
|
76
|
+
});
|
|
77
|
+
});
|
package/mcp.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"agent-enderun": {
|
|
4
4
|
"command": "node",
|
|
5
|
-
"args": [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
"args": ["/Users/ybekar/Desktop/Projeler/agent-enderun/framework-mcp/dist/index.js"],
|
|
6
|
+
"env": {
|
|
7
|
+
"ENDERUN_PROJECT_ROOT": "/Users/ybekar/Desktop/Projeler/agent-enderun"
|
|
8
|
+
}
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-enderun",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "The Supreme AI Governance & Orchestration Framework for Enterprise Development",
|
|
5
5
|
"author": "Yusuf BEKAR",
|
|
6
6
|
"license": "MIT",
|
|
@@ -82,8 +82,9 @@
|
|
|
82
82
|
"zod": "^3.24.2"
|
|
83
83
|
},
|
|
84
84
|
"enderun": {
|
|
85
|
-
"version": "1.0.
|
|
86
|
-
"initializedAt": "2026-05-31T09:58:25.773Z"
|
|
85
|
+
"version": "1.0.9",
|
|
86
|
+
"initializedAt": "2026-05-31T09:58:25.773Z",
|
|
87
|
+
"frameworkDir": ".enderun"
|
|
87
88
|
},
|
|
88
89
|
"dependencies": {}
|
|
89
90
|
}
|
package/src/cli/adapters.ts
CHANGED
|
@@ -71,22 +71,18 @@ export const ADAPTERS: Record<AdapterId, AdapterConfig> = {
|
|
|
71
71
|
},
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
-
/**
|
|
75
|
-
* All framework runtime directories (for discovery).
|
|
76
|
-
* Verified against 2026 industry standards.
|
|
77
|
-
*/
|
|
78
74
|
/**
|
|
79
75
|
* All framework runtime directories (for discovery).
|
|
80
76
|
* Verified against 2026 industry standards.
|
|
81
77
|
* Includes .agent for direct antigravity adapter installs.
|
|
82
78
|
*/
|
|
83
79
|
export const FRAMEWORK_DIR_CANDIDATES = [
|
|
84
|
-
".
|
|
85
|
-
".gemini",
|
|
80
|
+
".enderun",
|
|
86
81
|
".claude",
|
|
87
82
|
".grok",
|
|
88
|
-
".
|
|
89
|
-
".
|
|
83
|
+
".agent",
|
|
84
|
+
".gemini",
|
|
85
|
+
".agents", // Keep .agents for Antigravity-CLI compatibility
|
|
90
86
|
] as const;
|
|
91
87
|
|
|
92
88
|
const SHIM_FILES = ADAPTER_IDS.map((id) => ADAPTERS[id].shimFile);
|
|
@@ -116,7 +112,18 @@ export function resolveAdapter(input?: string): AdapterConfig {
|
|
|
116
112
|
if (fs.existsSync(pkgPath)) {
|
|
117
113
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
118
114
|
if (pkg.enderun && (pkg.enderun.frameworkDir === ".enderun" || pkg.enderun.frameworkDir === "unified")) {
|
|
119
|
-
|
|
115
|
+
// Only force enderun if not testing a specific adapter that expects a different frameworkDir
|
|
116
|
+
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
|
+
if (config.id !== "cursor" && config.id !== "codex") {
|
|
120
|
+
forceEnderun = false;
|
|
121
|
+
} else {
|
|
122
|
+
forceEnderun = true; // Still force if it's a unified adapter like cursor/codex
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
forceEnderun = true;
|
|
126
|
+
}
|
|
120
127
|
}
|
|
121
128
|
}
|
|
122
129
|
} catch {
|
|
@@ -3,7 +3,7 @@ import path from "path";
|
|
|
3
3
|
import { execSync } from "child_process";
|
|
4
4
|
|
|
5
5
|
import { getFrameworkDir, getConfiguredPaths, getMemoryPath } from "../utils/memory.js";
|
|
6
|
-
import { getPackageVersion } from "../utils/pkg.js"; // To get FRAMEWORK_VERSION
|
|
6
|
+
import { getPackageVersion, getValidatorPath } from "../utils/pkg.js"; // To get FRAMEWORK_VERSION + robust npm-installed bin/validator resolution
|
|
7
7
|
|
|
8
8
|
const FRAMEWORK_VERSION = getPackageVersion();
|
|
9
9
|
|
|
@@ -91,15 +91,18 @@ export function checkCommand() {
|
|
|
91
91
|
// === AL (Agent Lifecycle) Army Validation ===
|
|
92
92
|
// This makes `agent-enderun check` also enforce that init'ed agents are AL-compliant
|
|
93
93
|
// (stateMachine + tags present and parseable). Works across adapters (skills/plugins/agents).
|
|
94
|
+
// Uses getValidatorPath() so it resolves inside node_modules/... when installed via npm (not just source cwd).
|
|
94
95
|
console.warn("\nš”ļø Running Agent Army AL Compliance (validate-agent-army)...");
|
|
95
96
|
try {
|
|
96
|
-
|
|
97
|
+
const validatorPath = getValidatorPath();
|
|
98
|
+
execSync(`node "${validatorPath}"`, { stdio: "pipe" });
|
|
97
99
|
console.warn("ā
Agent Army AL validation PASSED (all agents have stateMachine + tags).");
|
|
98
|
-
} catch
|
|
100
|
+
} catch {
|
|
99
101
|
console.warn("ā Agent Army AL validation FAILED.");
|
|
100
|
-
console.warn(" Run manually:
|
|
102
|
+
console.warn(" Run manually: agent-enderun validate (or: npx agent-enderun validate-army)");
|
|
101
103
|
console.warn(" This usually means your init used an adapter that remapped agents (e.g. antigravity ā skills).");
|
|
102
104
|
console.warn(" The core .md definitions should still be correct; the standalone validator just couldn't locate them.");
|
|
105
|
+
console.warn(" (Note: from npm package, bare 'node bin/...' will not work ā use the CLI command above.)");
|
|
103
106
|
issues++;
|
|
104
107
|
}
|
|
105
108
|
|
|
@@ -110,4 +113,4 @@ export function checkCommand() {
|
|
|
110
113
|
ā ļø Found ${issues} issues. Please fix them before starting.`);
|
|
111
114
|
process.exit(1);
|
|
112
115
|
}
|
|
113
|
-
}
|
|
116
|
+
}
|
|
@@ -14,7 +14,7 @@ export function verifyApiContractCommand() {
|
|
|
14
14
|
|
|
15
15
|
if (!fs.existsSync(sharedDir) || !fs.existsSync(contractPath)) {
|
|
16
16
|
console.error("ā Error: API types or contract version file missing.");
|
|
17
|
-
|
|
17
|
+
process.exit(1);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const walk = (d: string): string[] => fs.readdirSync(d, { withFileTypes: true }).flatMap((e) => {
|
|
@@ -55,7 +55,7 @@ export function updateApiContractCommand() {
|
|
|
55
55
|
|
|
56
56
|
if (!fs.existsSync(sharedDir)) {
|
|
57
57
|
console.error("ā Error: API types directory missing.");
|
|
58
|
-
|
|
58
|
+
process.exit(1);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
const walk = (d: string): string[] => fs.readdirSync(d, { withFileTypes: true }).flatMap((e) => {
|