agent-enderun 1.1.0 → 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.
- package/.enderun/ENDERUN.md +1 -1
- package/.enderun/STATUS.md +2 -2
- package/.enderun/agents/analyst.json +4 -4
- package/.enderun/agents/backend.json +4 -4
- package/.enderun/agents/database.json +4 -4
- package/.enderun/agents/devops.json +4 -4
- package/.enderun/agents/explorer.json +4 -4
- package/.enderun/agents/frontend.json +4 -4
- package/.enderun/agents/git.json +4 -4
- package/.enderun/agents/manager.json +4 -6
- package/.enderun/agents/mobile.json +4 -4
- package/.enderun/agents/native.json +4 -4
- package/.enderun/agents/quality.json +4 -4
- package/.enderun/agents/security.json +4 -4
- package/.enderun/config.json +3 -2
- package/.enderun/logs/manager.json +26 -47
- package/.enderun/memory/PROJECT_MEMORY.md +42 -9
- package/CLAUDE.md +5 -4
- package/GEMINI.md +5 -4
- package/GROK.md +3 -3
- package/README.md +8 -8
- package/agent.md +6 -6
- package/bin/cli.js +3 -4
- package/bin/compile.js +22 -0
- package/bin/test-init-run.js +136 -0
- package/dist/framework-mcp/src/index.js +1 -1
- package/dist/framework-mcp/src/tools/definitions.js +3 -1
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/read_file.js +20 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.js +37 -14
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/src/cli/adapters.d.ts +3 -1
- package/dist/src/cli/adapters.js +13 -11
- package/dist/src/cli/adapters.js.map +1 -1
- package/dist/src/cli/commands/check.js +12 -1
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/init.js +21 -11
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +15 -0
- package/dist/src/cli/commands/orchestrate.js +45 -1
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/index.js +84 -19
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/memory.js +4 -0
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/cli/utils/pkg.js +5 -1
- package/dist/src/cli/utils/pkg.js.map +1 -1
- package/dist/tests/adapter.test.js +10 -8
- package/dist/tests/adapter.test.js.map +1 -1
- package/dist/tests/gemini.test.js +8 -7
- package/dist/tests/gemini.test.js.map +1 -1
- package/dist/vitest.config.js +1 -1
- package/dist/vitest.config.js.map +1 -1
- package/docs/project_analysis_report.md +69 -0
- package/eslint.config.js +2 -2
- package/framework-mcp/dist/src/index.js +1 -1
- package/framework-mcp/dist/src/tools/definitions.js +3 -1
- package/framework-mcp/dist/src/tools/file_system/read_file.js +20 -0
- package/framework-mcp/package.json +2 -2
- package/framework-mcp/src/index.ts +1 -1
- package/framework-mcp/src/tools/definitions.ts +3 -1
- package/framework-mcp/src/tools/file_system/read_file.ts +24 -0
- package/package.json +10 -8
- package/src/cli/adapters.ts +13 -11
- package/src/cli/commands/check.ts +13 -1
- package/src/cli/commands/init.ts +20 -11
- package/src/cli/commands/orchestrate.ts +1 -1
- package/src/cli/utils/memory.ts +4 -0
- package/src/cli/utils/pkg.ts +5 -1
- package/tsconfig.json +0 -2
- package/.enderun/ARCHITECTURE.md +0 -1
- package/.enderun/SECURITY.md +0 -1
- package/bin/init-check.js +0 -86
- package/bin/update-contract.js +0 -93
- package/dist/apps/backend/src/types/index.d.ts +0 -9
- package/dist/apps/backend/src/types/index.js +0 -5
- package/dist/apps/backend/src/types/index.js.map +0 -1
- package/dist/apps/web/src/main.d.ts +0 -1
- package/dist/apps/web/src/main.js +0 -9
- package/dist/apps/web/src/main.js.map +0 -1
- package/dist/apps/web/vite.config.d.ts +0 -2
- package/dist/apps/web/vite.config.js +0 -6
- package/dist/apps/web/vite.config.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/index.d.ts +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/index.js +0 -71
- package/dist/tests/framework-init-test/framework-mcp/src/index.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js +0 -111
- package/dist/tests/framework-init-test/framework-mcp/src/tools/definitions.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js +0 -19
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/patch_file.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js +0 -8
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/read_file.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js +0 -32
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/replace_text.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js +0 -10
- package/dist/tests/framework-init-test/framework-mcp/src/tools/file_system/write_file.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js +0 -6
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/get_status.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js +0 -6
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/orchestrate.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js +0 -6
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_contract_hash.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js +0 -9
- package/dist/tests/framework-init-test/framework-mcp/src/tools/framework/update_memory.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.d.ts +0 -5
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js +0 -26
- package/dist/tests/framework-init-test/framework-mcp/src/tools/index.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js +0 -23
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/log_action.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.d.ts +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js +0 -24
- package/dist/tests/framework-init-test/framework-mcp/src/tools/messaging/send_message.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.d.ts +0 -47
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js +0 -2
- package/dist/tests/framework-init-test/framework-mcp/src/tools/types.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.d.ts +0 -5
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js +0 -21
- package/dist/tests/framework-init-test/framework-mcp/src/utils/cli.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.d.ts +0 -12
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js +0 -54
- package/dist/tests/framework-init-test/framework-mcp/src/utils/security.js.map +0 -1
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.d.ts +0 -1
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js +0 -69
- package/dist/tests/framework-init-test/framework-mcp/tests/tools/file_system/replace_text.test.js.map +0 -1
- package/dist/tests/framework-init-test/panda.config.d.ts +0 -4
- package/dist/tests/framework-init-test/panda.config.js +0 -95
- package/dist/tests/framework-init-test/panda.config.js.map +0 -1
- package/dist/tests/framework-init-test/vitest.config.d.ts +0 -2
- package/dist/tests/framework-init-test/vitest.config.js +0 -19
- package/dist/tests/framework-init-test/vitest.config.js.map +0 -1
package/agent.md
CHANGED
|
@@ -2,24 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
This is the primary entry point when using Agent Enderun within the Antigravity (IDE & CLI) ecosystem.
|
|
4
4
|
|
|
5
|
-
The framework operates under a unified governance structure located in the .
|
|
5
|
+
The framework operates under a unified governance structure located in the .agent/ directory.
|
|
6
6
|
|
|
7
7
|
### Primary Constitution
|
|
8
8
|
All governance rules, agent checklists, and project memory live here:
|
|
9
9
|
|
|
10
|
-
👉 **[.
|
|
10
|
+
👉 **[.agent/ENDERUN.md](.agent/ENDERUN.md)**
|
|
11
11
|
|
|
12
12
|
### 🤖 Agent Directive
|
|
13
13
|
You are operating under the Agent Enderun governance framework.
|
|
14
14
|
|
|
15
15
|
At the **start of every session**, before any work:
|
|
16
|
-
1. **Restore Memory:** Read `.
|
|
17
|
-
2. **Load Identity:** Read the relevant agent definition under `.
|
|
18
|
-
3. **Internalize Knowledge:** Reference the `.
|
|
16
|
+
1. **Restore Memory:** Read `.agent/PROJECT_MEMORY.md` to restore state, active Trace ID, and history.
|
|
17
|
+
2. **Load Identity:** Read the relevant agent definition under `.agent/skills/{agent}.json` (default to `@manager`).
|
|
18
|
+
3. **Internalize Knowledge:** Reference the `.agent/rules/` base for architectural and coding standards.
|
|
19
19
|
|
|
20
20
|
### 🛡️ Core Mandates
|
|
21
21
|
- **Surgical Edits:** Use `replace_text` or `patch_file` via MCP for precise changes.
|
|
22
22
|
- **Traceability:** Every action must inherit the active Trace ID from memory.
|
|
23
23
|
- **Contract First:** No implementation without verified types.
|
|
24
24
|
|
|
25
|
-
All paths and references inside the project must comply with the Supreme Constitution located at `.
|
|
25
|
+
All paths and references inside the project must comply with the Supreme Constitution located at `.agent/ENDERUN.md`.
|
package/bin/cli.js
CHANGED
|
@@ -6,11 +6,10 @@ import { dirname, join } from "node:path";
|
|
|
6
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = dirname(__filename);
|
|
8
8
|
|
|
9
|
-
const cliPath = join(__dirname, "../src/cli/index.
|
|
9
|
+
const cliPath = join(__dirname, "../dist/src/cli/index.js");
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const child = spawn(cmd, ["tsx", cliPath, ...process.argv.slice(2)], {
|
|
11
|
+
const cmd = "node";
|
|
12
|
+
const child = spawn(cmd, [cliPath, ...process.argv.slice(2)], {
|
|
14
13
|
stdio: "inherit",
|
|
15
14
|
shell: false
|
|
16
15
|
});
|
package/bin/compile.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
const configJson = JSON.parse(fs.readFileSync('tsconfig.json', 'utf8'));
|
|
6
|
+
const parsedConfig = ts.parseJsonConfigFileContent(configJson, ts.sys, '.');
|
|
7
|
+
const program = ts.createProgram(parsedConfig.fileNames, parsedConfig.options);
|
|
8
|
+
const emitResult = program.emit();
|
|
9
|
+
|
|
10
|
+
const allDiagnostics = ts
|
|
11
|
+
.getPreEmitDiagnostics(program)
|
|
12
|
+
.concat(emitResult.diagnostics);
|
|
13
|
+
|
|
14
|
+
allDiagnostics.forEach(diagnostic => {
|
|
15
|
+
if (diagnostic.file) {
|
|
16
|
+
let { line, character } = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start);
|
|
17
|
+
let message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
|
18
|
+
console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
|
|
19
|
+
} else {
|
|
20
|
+
console.log(ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'));
|
|
21
|
+
}
|
|
22
|
+
});
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { initCommand } from '../dist/src/cli/commands/init.js';
|
|
4
|
+
|
|
5
|
+
const adapters = [
|
|
6
|
+
{ id: "gemini", dir: ".enderun", shim: "GEMINI.md" },
|
|
7
|
+
{ id: "claude", dir: ".enderun", shim: "CLAUDE.md" },
|
|
8
|
+
{ id: "cursor", dir: ".enderun", shim: ".cursor/rules/global.mdc" },
|
|
9
|
+
{ id: "codex", dir: ".enderun", shim: ".github/copilot-instructions.md" },
|
|
10
|
+
{ id: "grok", dir: ".enderun", shim: "GROK.md" },
|
|
11
|
+
{ id: "antigravity", dir: ".enderun", shim: "agent.md" },
|
|
12
|
+
{ id: "antigravity-cli", dir: ".enderun", shim: "agent.md" }
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const projectRoot = process.cwd();
|
|
16
|
+
const testBase = path.join(projectRoot, "dist", "init-adapters");
|
|
17
|
+
|
|
18
|
+
// Redirect HOME to a mock directory inside the permitted workspace
|
|
19
|
+
const mockHome = path.join(testBase, "mock-home");
|
|
20
|
+
process.env.HOME = mockHome;
|
|
21
|
+
process.env.USERPROFILE = mockHome;
|
|
22
|
+
|
|
23
|
+
// Pre-create the directory structure and file for Claude Desktop config so the post-init step successfully runs
|
|
24
|
+
const claudeConfigDir = path.join(mockHome, "Library", "Application Support", "Claude");
|
|
25
|
+
fs.mkdirSync(claudeConfigDir, { recursive: true });
|
|
26
|
+
fs.writeFileSync(path.join(claudeConfigDir, "claude_desktop_config.json"), JSON.stringify({ mcpServers: {} }));
|
|
27
|
+
|
|
28
|
+
console.log("🚀 Starting Realistic Programmatic Validation of Adapter Init Commands...");
|
|
29
|
+
|
|
30
|
+
let failed = 0;
|
|
31
|
+
|
|
32
|
+
for (const adapter of adapters) {
|
|
33
|
+
console.log(`\n--------------------------------------------`);
|
|
34
|
+
console.log(`🧪 Testing Adapter: ${adapter.id}`);
|
|
35
|
+
|
|
36
|
+
const targetDir = path.join(testBase, adapter.id);
|
|
37
|
+
if (!fs.existsSync(targetDir)) {
|
|
38
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
// Write a mock package.json to act as project root
|
|
41
|
+
const mockPkgPath = path.join(targetDir, "package.json");
|
|
42
|
+
if (!fs.existsSync(mockPkgPath)) {
|
|
43
|
+
fs.writeFileSync(mockPkgPath, JSON.stringify({
|
|
44
|
+
name: `mock-project-${adapter.id}`,
|
|
45
|
+
version: "1.0.0",
|
|
46
|
+
type: "module"
|
|
47
|
+
}, null, 2));
|
|
48
|
+
}
|
|
49
|
+
// Pre-create .git directory to prevent initCommand from invoking 'git init' (which is blocked by the sandbox)
|
|
50
|
+
const mockGitDir = path.join(targetDir, ".git");
|
|
51
|
+
if (!fs.existsSync(mockGitDir)) {
|
|
52
|
+
fs.mkdirSync(mockGitDir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
// Change process CWD to target directory to simulate running init there
|
|
57
|
+
process.chdir(targetDir);
|
|
58
|
+
|
|
59
|
+
// Temporarily bypass the CLI check and validations in init.ts (which would try to run validate-agent-army)
|
|
60
|
+
process.env.ENDERUN_SKIP_INSTALL = "1";
|
|
61
|
+
|
|
62
|
+
// Execute the initCommand programmatically
|
|
63
|
+
await initCommand(adapter.id, false);
|
|
64
|
+
|
|
65
|
+
// Restore CWD
|
|
66
|
+
process.chdir(projectRoot);
|
|
67
|
+
|
|
68
|
+
// 1. Check framework directory
|
|
69
|
+
const frameworkPath = path.join(targetDir, adapter.dir);
|
|
70
|
+
if (fs.existsSync(frameworkPath)) {
|
|
71
|
+
console.log(`✅ Framework directory created: ${adapter.dir}`);
|
|
72
|
+
} else {
|
|
73
|
+
console.log(`❌ Framework directory MISSING: ${adapter.dir}`);
|
|
74
|
+
failed++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 2. Check shim file
|
|
79
|
+
const shimPath = path.join(targetDir, adapter.shim);
|
|
80
|
+
if (fs.existsSync(shimPath)) {
|
|
81
|
+
console.log(`✅ Shim file created: ${adapter.shim}`);
|
|
82
|
+
} else {
|
|
83
|
+
console.log(`❌ Shim file MISSING: ${adapter.shim}`);
|
|
84
|
+
failed++;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 3. Check memory initialization
|
|
89
|
+
const memoryPath = fs.existsSync(path.join(frameworkPath, "memory/PROJECT_MEMORY.md"))
|
|
90
|
+
? path.join(frameworkPath, "memory/PROJECT_MEMORY.md")
|
|
91
|
+
: path.join(frameworkPath, "PROJECT_MEMORY.md");
|
|
92
|
+
|
|
93
|
+
if (fs.existsSync(memoryPath)) {
|
|
94
|
+
console.log(`✅ PROJECT_MEMORY.md created successfully.`);
|
|
95
|
+
} else {
|
|
96
|
+
console.log(`❌ PROJECT_MEMORY.md is MISSING!`);
|
|
97
|
+
failed++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 4. Check agents folder
|
|
102
|
+
let agentFolder = "agents";
|
|
103
|
+
if (adapter.id === "antigravity") {
|
|
104
|
+
agentFolder = "skills";
|
|
105
|
+
} else if (adapter.id === "grok") {
|
|
106
|
+
agentFolder = "plugins";
|
|
107
|
+
}
|
|
108
|
+
const agentsPath = path.join(frameworkPath, agentFolder);
|
|
109
|
+
if (fs.existsSync(agentsPath)) {
|
|
110
|
+
const files = fs.readdirSync(agentsPath);
|
|
111
|
+
const agentCount = files.filter(f => f.endsWith(".json")).length;
|
|
112
|
+
console.log(`✅ Agent configurations created: ${agentsPath} (${agentCount} agents found)`);
|
|
113
|
+
if (agentCount === 0) {
|
|
114
|
+
console.log(`❌ No agent configuration files found in folder!`);
|
|
115
|
+
failed++;
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
console.log(`❌ Agents directory MISSING: ${agentsPath}`);
|
|
119
|
+
failed++;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
} catch (error) {
|
|
123
|
+
// Ensure CWD is restored in case of error
|
|
124
|
+
process.chdir(projectRoot);
|
|
125
|
+
console.error(`❌ Init failed with error:`, error.message);
|
|
126
|
+
failed++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
console.log(`\n--------------------------------------------`);
|
|
131
|
+
if (failed > 0) {
|
|
132
|
+
console.error(`❌ Validation FAILED. ${failed} checks failed.`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
} else {
|
|
135
|
+
console.log(`🎉 SUCCESS! All ${adapters.length} adapters initialized programmatically and passed checks.`);
|
|
136
|
+
}
|
|
@@ -5,7 +5,7 @@ import { TOOLS, toolHandlers } from "./tools/index.js";
|
|
|
5
5
|
// ─── Server Setup ─────────────────────────────────────────────────
|
|
6
6
|
const server = new Server({
|
|
7
7
|
name: "@agent-enderun/mcp",
|
|
8
|
-
version: "1.
|
|
8
|
+
version: "1.1.2",
|
|
9
9
|
}, {
|
|
10
10
|
capabilities: {
|
|
11
11
|
tools: {},
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export const TOOLS = [
|
|
2
2
|
{
|
|
3
3
|
name: "read_file",
|
|
4
|
-
description: "Read the content of a file within the project.",
|
|
4
|
+
description: "Read the content of a file within the project. Supports optional line range reading to prevent stream overload.",
|
|
5
5
|
inputSchema: {
|
|
6
6
|
type: "object",
|
|
7
7
|
properties: {
|
|
8
8
|
path: { type: "string", description: "Path to the file relative to project root" },
|
|
9
|
+
startLine: { type: "number", description: "Optional starting line number (1-indexed)" },
|
|
10
|
+
endLine: { type: "number", description: "Optional ending line number (inclusive)" },
|
|
9
11
|
},
|
|
10
12
|
required: ["path"],
|
|
11
13
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/definitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAqB;IACnC;QACI,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../../framework-mcp/src/tools/definitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAqB;IACnC;QACI,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,iHAAiH;QAC9H,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBAClF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBACvF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;aACtF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACrB;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBAClF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;aAC3E;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;SAChC;KACJ;IACD;QACI,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;gBAClE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;aAC1E;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;SAC3C;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBACzD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBAC9E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBAC1E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;aACzE;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC;SAC3D;KACJ;IACD;QACI,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAClD;IACD;QACI,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE;gBACtF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;aAChF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACnC;KACJ;IACD;QACI,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAClD;IACD;QACI,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,kDAAkD;QAC/D,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uEAAuE,EAAE;gBAC9G,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;gBACzE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;gBAC7E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;gBAC3D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;aAC9D;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC;SACrD;KACJ;IACD;QACI,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBACnF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAC9D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;gBAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACjG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;gBACjF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;aAC5F;YACD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;SAChE;KACJ;IACD;QACI,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAClD;CACJ,CAAC"}
|
|
@@ -2,7 +2,27 @@ import fs from "fs";
|
|
|
2
2
|
import { safePath } from "../../utils/security.js";
|
|
3
3
|
export function handleReadFile(projectRoot, args) {
|
|
4
4
|
const filePath = safePath(projectRoot, args.path);
|
|
5
|
+
const startLine = args.startLine !== undefined ? Number(args.startLine) : undefined;
|
|
6
|
+
const endLine = args.endLine !== undefined ? Number(args.endLine) : undefined;
|
|
5
7
|
const content = fs.readFileSync(filePath, "utf8");
|
|
8
|
+
const lines = content.split(/\r?\n/);
|
|
9
|
+
if (startLine !== undefined || endLine !== undefined) {
|
|
10
|
+
const start = startLine !== undefined ? Math.max(1, startLine) - 1 : 0;
|
|
11
|
+
const end = endLine !== undefined ? Math.min(lines.length, endLine) : lines.length;
|
|
12
|
+
const sliced = lines.slice(start, end).join("\n");
|
|
13
|
+
return { content: [{ type: "text", text: sliced }] };
|
|
14
|
+
}
|
|
15
|
+
// Default protection limit: 1000 lines
|
|
16
|
+
const DEFAULT_MAX_LINES = 1000;
|
|
17
|
+
if (lines.length > DEFAULT_MAX_LINES) {
|
|
18
|
+
const sliced = lines.slice(0, DEFAULT_MAX_LINES).join("\n");
|
|
19
|
+
return {
|
|
20
|
+
content: [{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: `${sliced}\n\n... [TRUNCATED - File is too long (${lines.length} lines). Only the first ${DEFAULT_MAX_LINES} lines are shown. Use startLine and endLine parameters to read other parts of the file.]`
|
|
23
|
+
}]
|
|
24
|
+
};
|
|
25
|
+
}
|
|
6
26
|
return { content: [{ type: "text", text: content }] };
|
|
7
27
|
}
|
|
8
28
|
//# sourceMappingURL=read_file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../../../../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
|
+
{"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../../../../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,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QACnF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,MAAM,0CAA0C,KAAK,CAAC,MAAM,2BAA2B,iBAAiB,0FAA0F;iBAC9M,CAAC;SACL,CAAC;IACN,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -3,22 +3,45 @@ import path from "path";
|
|
|
3
3
|
import { resolveFrameworkDir } from "../../utils/security.js";
|
|
4
4
|
export function handleSendAgentMessage(projectRoot, args) {
|
|
5
5
|
const { to, category, content, traceId } = args;
|
|
6
|
-
// `from` is optional — falls back to "@mcp" for backward compatibility
|
|
7
6
|
const from = args.from || "@mcp";
|
|
8
7
|
const frameworkDir = resolveFrameworkDir(projectRoot);
|
|
8
|
+
const messagesDir = path.join(projectRoot, frameworkDir, "messages");
|
|
9
9
|
const agentName = to.replace("@", "");
|
|
10
|
-
const messagePath = path.join(
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
const messagePath = path.join(messagesDir, `${agentName}.json`);
|
|
11
|
+
const lockPath = path.join(messagesDir, ".lock");
|
|
12
|
+
// Hermes Lock Protocol: Retry 3 times with 500ms delay
|
|
13
|
+
let retries = 3;
|
|
14
|
+
while (retries > 0 && fs.existsSync(lockPath)) {
|
|
15
|
+
const stats = fs.statSync(lockPath);
|
|
16
|
+
if (Date.now() - stats.mtimeMs > 5000) {
|
|
17
|
+
fs.unlinkSync(lockPath);
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
retries--;
|
|
21
|
+
if (retries > 0) {
|
|
22
|
+
const start = Date.now();
|
|
23
|
+
while (Date.now() - start < 500)
|
|
24
|
+
; // Simple busy wait for MCP environment
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
fs.mkdirSync(messagesDir, { recursive: true });
|
|
29
|
+
fs.writeFileSync(lockPath, `Locked by ${from} at ${new Date().toISOString()}`);
|
|
30
|
+
const message = {
|
|
31
|
+
timestamp: new Date().toISOString(),
|
|
32
|
+
from,
|
|
33
|
+
to,
|
|
34
|
+
category,
|
|
35
|
+
traceId,
|
|
36
|
+
content,
|
|
37
|
+
status: "PENDING"
|
|
38
|
+
};
|
|
39
|
+
fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
|
|
40
|
+
return { content: [{ type: "text", text: `✅ Message sent to ${to} (from: ${from})` }] };
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
if (fs.existsSync(lockPath))
|
|
44
|
+
fs.unlinkSync(lockPath);
|
|
45
|
+
}
|
|
23
46
|
}
|
|
24
47
|
//# sourceMappingURL=send_message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../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,
|
|
1
|
+
{"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../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,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,MAAM,CAAC;IAE7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEjD,uDAAuD;IACvD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;YACpC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxB,MAAM;QACV,CAAC;QACD,OAAO,EAAE,CAAC;QACV,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG;gBAAC,CAAC,CAAC,uCAAuC;QAC7E,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE/E,MAAM,OAAO,GAAG;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI;YACJ,EAAE;YACF,QAAQ;YACR,OAAO;YACP,OAAO;YACP,MAAM,EAAE,SAAS;SACpB,CAAC;QAEF,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;YAAS,CAAC;QACP,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;AACL,CAAC"}
|
|
@@ -24,7 +24,9 @@ export declare function remapFrameworkContent(content: string, frameworkDir: str
|
|
|
24
24
|
export declare function buildMcpServerEntry(projectRoot: string): {
|
|
25
25
|
command: string;
|
|
26
26
|
args: string[];
|
|
27
|
-
env: {
|
|
27
|
+
env: {
|
|
28
|
+
ENDERUN_PROJECT_ROOT: string;
|
|
29
|
+
};
|
|
28
30
|
};
|
|
29
31
|
/**
|
|
30
32
|
* Adapter-specific MCP and IDE hooks after scaffold.
|
package/dist/src/cli/adapters.js
CHANGED
|
@@ -6,14 +6,14 @@ export const ADAPTER_IDS = ["gemini", "claude", "grok", "cursor", "codex", "anti
|
|
|
6
6
|
export const ADAPTERS = {
|
|
7
7
|
gemini: {
|
|
8
8
|
id: "gemini",
|
|
9
|
-
frameworkDir: ".
|
|
10
|
-
shimFile: "
|
|
9
|
+
frameworkDir: ".enderun",
|
|
10
|
+
shimFile: "GEMINI.md",
|
|
11
11
|
templateDir: ".enderun",
|
|
12
12
|
nestedDirs: ["agents", "skills", "knowledge"],
|
|
13
13
|
},
|
|
14
14
|
claude: {
|
|
15
15
|
id: "claude",
|
|
16
|
-
frameworkDir: ".
|
|
16
|
+
frameworkDir: ".enderun",
|
|
17
17
|
shimFile: "CLAUDE.md",
|
|
18
18
|
templateDir: ".enderun",
|
|
19
19
|
nestedDirs: ["agents", "skills", "knowledge"],
|
|
@@ -34,24 +34,24 @@ export const ADAPTERS = {
|
|
|
34
34
|
},
|
|
35
35
|
grok: {
|
|
36
36
|
id: "grok",
|
|
37
|
-
frameworkDir: ".
|
|
38
|
-
shimFile: "
|
|
37
|
+
frameworkDir: ".enderun",
|
|
38
|
+
shimFile: "GROK.md",
|
|
39
39
|
templateDir: ".enderun",
|
|
40
|
-
nestedDirs: ["
|
|
40
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
41
41
|
},
|
|
42
42
|
antigravity: {
|
|
43
43
|
id: "antigravity",
|
|
44
|
-
frameworkDir: ".
|
|
44
|
+
frameworkDir: ".enderun",
|
|
45
45
|
shimFile: "agent.md",
|
|
46
46
|
templateDir: ".enderun",
|
|
47
|
-
nestedDirs: ["
|
|
47
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
48
48
|
},
|
|
49
49
|
"antigravity-cli": {
|
|
50
50
|
id: "antigravity-cli",
|
|
51
|
-
frameworkDir: ".
|
|
51
|
+
frameworkDir: ".enderun",
|
|
52
52
|
shimFile: "agent.md",
|
|
53
53
|
templateDir: ".enderun",
|
|
54
|
-
nestedDirs: ["agents", "skills"],
|
|
54
|
+
nestedDirs: ["agents", "skills", "knowledge"],
|
|
55
55
|
},
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
@@ -181,7 +181,9 @@ export function buildMcpServerEntry(projectRoot) {
|
|
|
181
181
|
return {
|
|
182
182
|
command: "node",
|
|
183
183
|
args: [path.join(projectRoot, "framework-mcp/dist/index.js")],
|
|
184
|
-
env: {
|
|
184
|
+
env: {
|
|
185
|
+
ENDERUN_PROJECT_ROOT: projectRoot,
|
|
186
|
+
},
|
|
185
187
|
};
|
|
186
188
|
}
|
|
187
189
|
function writeAntigravityScaffold(frameworkDirPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/cli/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,CAAU,CAAC;AAetH,MAAM,CAAC,MAAM,QAAQ,GAAqC;IACtD,MAAM,EAAE;QACJ,EAAE,EAAE,QAAQ;QACZ,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/cli/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,6 @@ export function checkCommand() {
|
|
|
33
33
|
{ name: "MCP Config (mcp.json)", path: "mcp.json" },
|
|
34
34
|
{ name: "ESLint Config (eslint.config.js)", path: "eslint.config.js" },
|
|
35
35
|
{ name: "ESLint Standards", path: path.join(frameworkDir, `${knowledgeDir}/eslint-standards.md`) },
|
|
36
|
-
{ name: "Backend Contract", path: path.join(pathsMap.backend, "contract.version.json") },
|
|
37
36
|
{ name: "MCP Server", path: "framework-mcp/package.json" },
|
|
38
37
|
{ name: "Panda CSS Config", path: "panda.config.ts" },
|
|
39
38
|
{ name: "Brain Dashboard", path: path.join(frameworkDir, "BRAIN_DASHBOARD.md") },
|
|
@@ -43,6 +42,10 @@ export function checkCommand() {
|
|
|
43
42
|
{ name: "Professional Error Handling Pattern", path: path.join(pathsMap.docs, "backend/error-handling.md") },
|
|
44
43
|
{ name: "Atomic Component Standards", path: path.join(pathsMap.docs, "frontend/component-patterns.md") },
|
|
45
44
|
];
|
|
45
|
+
// Optional app-level checks (only when apps/ has content)
|
|
46
|
+
const optionalChecks = [
|
|
47
|
+
{ name: "Backend Contract", path: path.join(pathsMap.backend, "contract.version.json") },
|
|
48
|
+
];
|
|
46
49
|
for (const check of checks) {
|
|
47
50
|
if (fs.existsSync(path.join(process.cwd(), check.path))) {
|
|
48
51
|
console.warn(`✅ ${check.name} found.`);
|
|
@@ -52,6 +55,14 @@ export function checkCommand() {
|
|
|
52
55
|
issues++;
|
|
53
56
|
}
|
|
54
57
|
}
|
|
58
|
+
for (const check of optionalChecks) {
|
|
59
|
+
if (fs.existsSync(path.join(process.cwd(), check.path))) {
|
|
60
|
+
console.warn(`✅ ${check.name} found.`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.warn(`ℹ️ ${check.name} not found (${check.path}) — created with 'create-app'.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
55
66
|
// Dependency Check
|
|
56
67
|
const mcpNodeModules = path.join(process.cwd(), "framework-mcp/node_modules");
|
|
57
68
|
const rootNodeModules = path.join(process.cwd(), "node_modules");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC,CAAC,2EAA2E;AAElJ,MAAM,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,YAAY;IACxB,OAAO,CAAC,IAAI,CAAC,sCAAsC,iBAAiB,MAAM,CAAC,CAAC;IAC5E,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,OAAO,CAAC,IAAI,CAAC,2BAA2B,YAAY,2BAA2B,CAAC,CAAC;IAEjF,iFAAiF;IACjF,IAAI,YAAY,GAAG,WAAW,CAAC;IAC/B,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC1D,YAAY,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,gBAAgB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAC1E,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG;QACX,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAC7D,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE;QACtF,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAE;QAC/F,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE;QACxF,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;QAChF,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,EAAE;QACnD,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,kBAAkB,EAAE;QACtE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,YAAY,sBAAsB,CAAC,EAAE;QAClG,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,13 @@ import path from "path";
|
|
|
3
3
|
import { fileURLToPath } from "url";
|
|
4
4
|
import { execSync } from "child_process";
|
|
5
5
|
import { resolveAdapter, isAdapterShimFile, remapFrameworkContent, runAdapterPostInit, } from "../adapters.js";
|
|
6
|
-
import { mergePackageJson, deepCleanProtocols, sanitizeJson, getPackageVersion, getValidatorPath } from "../utils/pkg.js";
|
|
6
|
+
import { mergePackageJson, deepCleanProtocols, sanitizeJson, getPackageVersion, getValidatorPath, getPackageRoot } from "../utils/pkg.js";
|
|
7
7
|
import { updateGitIgnore, ensureDir, writeJsonFile, copyDir, writeTextFile } from "../utils/fs.js";
|
|
8
8
|
import { initializeMemory } from "../utils/memory.js";
|
|
9
9
|
import { checkCommand } from "./check.js";
|
|
10
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
11
|
const __dirname = path.dirname(__filename);
|
|
12
|
-
const sourceDir =
|
|
13
|
-
const targetDir = process.cwd();
|
|
12
|
+
const sourceDir = getPackageRoot();
|
|
14
13
|
const FRAMEWORK_VERSION = getPackageVersion();
|
|
15
14
|
const CORE_FILES = [
|
|
16
15
|
".enderun",
|
|
@@ -117,7 +116,7 @@ const allAgents = [
|
|
|
117
116
|
instructions: "You are the analyst agent. Independently verify compliance with contracts and specifications between frontend, backend, and the constitution.\n\n🛑 NON-NEGOTIABLE CORE RULES:\n- Independent Stance: Act as an objective verification gate.\n- Contract-First Law: Ensure contract.version.json perfectly matches types.\n- Escalation Priority: Report all contract drift to manager immediately.\n- Surgical Edits: Use replace_text for all document updates."
|
|
118
117
|
}
|
|
119
118
|
];
|
|
120
|
-
function scaffoldCoreAgents(agentsBaseDir, dryRun) {
|
|
119
|
+
function scaffoldCoreAgents(targetDir, agentsBaseDir, dryRun) {
|
|
121
120
|
ensureDir(agentsBaseDir, dryRun);
|
|
122
121
|
const agentSchemaDir = path.join(agentsBaseDir, "schema");
|
|
123
122
|
ensureDir(agentSchemaDir, dryRun);
|
|
@@ -213,8 +212,11 @@ function buildDirsToCreate(adapter) {
|
|
|
213
212
|
const dirs = [
|
|
214
213
|
adapter.frameworkDir,
|
|
215
214
|
...FRAMEWORK_SUBDIRS.map((d) => `${adapter.frameworkDir}/${d}`),
|
|
216
|
-
"
|
|
215
|
+
"docs", "framework-mcp",
|
|
217
216
|
];
|
|
217
|
+
if (process.env.ENDERUN_SKIP_INSTALL !== "1") {
|
|
218
|
+
dirs.push("tests");
|
|
219
|
+
}
|
|
218
220
|
if (adapter.nestedDirs) {
|
|
219
221
|
for (const nested of adapter.nestedDirs)
|
|
220
222
|
dirs.push(`${adapter.frameworkDir}/${nested}`);
|
|
@@ -224,6 +226,7 @@ function buildDirsToCreate(adapter) {
|
|
|
224
226
|
return [...new Set(dirs)];
|
|
225
227
|
}
|
|
226
228
|
export async function initCommand(adapterInput, dryRun = false) {
|
|
229
|
+
const targetDir = process.cwd();
|
|
227
230
|
const adapter = resolveAdapter(adapterInput);
|
|
228
231
|
const { frameworkDir, shimFile, templateDir } = adapter;
|
|
229
232
|
const targetFrameworkDir = path.join(targetDir, frameworkDir);
|
|
@@ -234,11 +237,9 @@ export async function initCommand(adapterInput, dryRun = false) {
|
|
|
234
237
|
for (const dir of buildDirsToCreate(adapter))
|
|
235
238
|
ensureDir(path.join(targetDir, dir), dryRun);
|
|
236
239
|
const filesToProcess = [...CORE_FILES, shimFile].filter(f => CORE_FILES.includes(f) || f === shimFile || fs.existsSync(path.join(sourceDir, f)));
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
writeJsonFile(initContractPath, { contract_hash: "initial_hash_placeholder", last_updated: new Date().toISOString() }, dryRun);
|
|
241
|
-
}
|
|
240
|
+
// apps/ directory is intentionally left empty during init.
|
|
241
|
+
// Users create apps via `agent-enderun create-app` command.
|
|
242
|
+
// Contract file is created during app scaffolding, not init.
|
|
242
243
|
let targetPkg = {};
|
|
243
244
|
try {
|
|
244
245
|
const targetPkgPath = path.join(targetDir, "package.json");
|
|
@@ -314,7 +315,16 @@ export async function initCommand(adapterInput, dryRun = false) {
|
|
|
314
315
|
if (!dryRun)
|
|
315
316
|
deepCleanProtocols(targetDir, targetScope);
|
|
316
317
|
// Scaffold core agents under the central framework directory
|
|
317
|
-
|
|
318
|
+
let agentFolder = "agents";
|
|
319
|
+
if (frameworkDir !== ".enderun") {
|
|
320
|
+
if (adapter.id === "antigravity") {
|
|
321
|
+
agentFolder = "skills";
|
|
322
|
+
}
|
|
323
|
+
else if (adapter.id === "grok") {
|
|
324
|
+
agentFolder = "plugins";
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
scaffoldCoreAgents(targetDir, path.join(targetFrameworkDir, agentFolder), dryRun);
|
|
318
328
|
if (!fs.existsSync(path.join(targetDir, ".git")) && !dryRun) {
|
|
319
329
|
try {
|
|
320
330
|
execSync("git init", { cwd: targetDir, stdio: "ignore" });
|