agent-enderun 1.1.3 → 1.1.5
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/.github/workflows/ci.yml +40 -0
- package/ENDERUN.md +36 -38
- package/README.md +16 -8
- package/bin/validate-agent-army.js +27 -12
- package/dist/framework-mcp/src/index.js +7 -1
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/definitions.js +1 -0
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/patch_file.js +3 -0
- package/dist/framework-mcp/src/tools/file_system/patch_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/read_file.js +7 -0
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +3 -0
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.js +41 -11
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/framework-mcp/src/tools/types.d.ts +1 -0
- package/{framework-mcp/dist → dist/framework-mcp}/tests/tools/file_system/file_system_tools.test.js +40 -0
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +115 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -0
- package/dist/init-adapters/antigravity-cli/.agents/config.json +1 -1
- package/dist/init-adapters/antigravity-cli/.agents/knowledge/agents-manifest.md +79 -0
- package/dist/init-adapters/antigravity-cli/.agents/knowledge/approval-flows.md +61 -0
- package/dist/init-adapters/antigravity-cli/.agents/knowledge/enterprise-architecture.md +69 -0
- package/dist/init-adapters/antigravity-cli/.agents/knowledge/eslint-standards.md +10 -0
- package/dist/init-adapters/antigravity-cli/.agents/memory/DECISIONS.md +10 -0
- package/dist/init-adapters/antigravity-cli/.agents/memory/PROJECT_MEMORY.md +1 -1
- package/dist/init-adapters/antigravity-cli/.agents/observability/audit_log.md +5 -0
- package/dist/init-adapters/antigravity-cli/.agents/observability/telemetry.md +6 -0
- package/dist/init-adapters/antigravity-cli/.agents/registry/agent_registry.md +18 -0
- package/dist/init-adapters/antigravity-cli/.agents/router/routing_rules.md +8 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/analyst.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/architect.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/backend.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/database.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/devops.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/explorer.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/frontend.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/git.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/manager.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/mobile.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/native.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/quality.md +16 -0
- package/dist/init-adapters/antigravity-cli/.agents/rules/security.md +16 -0
- package/dist/init-adapters/antigravity-cli/AGENTS.md +7 -0
- package/dist/init-adapters/antigravity-cli/ENDERUN.md +36 -38
- package/dist/init-adapters/antigravity-cli/docs/README.md +6 -0
- package/dist/init-adapters/antigravity-cli/docs/getting-started.md +4 -0
- package/dist/init-adapters/claude/.claude/agents/analyst.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/architect.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/backend.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/database.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/devops.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/explorer.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/frontend.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/git.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/manager.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/mobile.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/native.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/quality.md +4 -2
- package/dist/init-adapters/claude/.claude/agents/security.md +4 -2
- package/dist/init-adapters/claude/.claude/config.json +1 -1
- package/dist/init-adapters/claude/.claude/knowledge/agents-manifest.md +79 -0
- package/dist/init-adapters/claude/.claude/knowledge/approval-flows.md +61 -0
- package/dist/init-adapters/claude/.claude/knowledge/component-patterns.md +91 -0
- package/dist/init-adapters/claude/.claude/knowledge/data-fetching-patterns.md +13 -0
- package/dist/init-adapters/claude/.claude/knowledge/design-system.md +31 -0
- package/dist/init-adapters/claude/.claude/knowledge/enterprise-architecture.md +69 -0
- package/dist/init-adapters/claude/.claude/knowledge/error-handling.md +74 -0
- package/dist/init-adapters/claude/.claude/knowledge/eslint-standards.md +10 -0
- package/dist/init-adapters/claude/.claude/knowledge/logging.md +7 -0
- package/dist/init-adapters/claude/.claude/knowledge/tech-stack.md +9 -0
- package/dist/init-adapters/claude/.claude/memory/DECISIONS.md +10 -0
- package/dist/init-adapters/claude/.claude/memory/PROJECT_MEMORY.md +1 -1
- package/dist/init-adapters/claude/.claude/observability/audit_log.md +5 -0
- package/dist/init-adapters/claude/.claude/observability/telemetry.md +6 -0
- package/dist/init-adapters/claude/.claude/registry/agent_registry.md +18 -0
- package/dist/init-adapters/claude/.claude/router/routing_rules.md +8 -0
- package/dist/init-adapters/claude/.claude/rules/analyst.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/architect.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/backend.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/database.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/devops.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/explorer.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/frontend.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/git.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/manager.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/mobile.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/native.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/quality.md +16 -0
- package/dist/init-adapters/claude/.claude/rules/security.md +16 -0
- package/dist/init-adapters/claude/CLAUDE.md +7 -0
- package/dist/init-adapters/claude/ENDERUN.md +36 -38
- package/dist/init-adapters/claude/docs/README.md +6 -0
- package/dist/init-adapters/claude/docs/getting-started.md +4 -0
- package/dist/init-adapters/codex/.github/agents/analyst.md +4 -2
- package/dist/init-adapters/codex/.github/agents/architect.md +4 -2
- package/dist/init-adapters/codex/.github/agents/backend.md +4 -2
- package/dist/init-adapters/codex/.github/agents/database.md +4 -2
- package/dist/init-adapters/codex/.github/agents/devops.md +4 -2
- package/dist/init-adapters/codex/.github/agents/explorer.md +4 -2
- package/dist/init-adapters/codex/.github/agents/frontend.md +4 -2
- package/dist/init-adapters/codex/.github/agents/git.md +4 -2
- package/dist/init-adapters/codex/.github/agents/manager.md +4 -2
- package/dist/init-adapters/codex/.github/agents/mobile.md +4 -2
- package/dist/init-adapters/codex/.github/agents/native.md +4 -2
- package/dist/init-adapters/codex/.github/agents/quality.md +4 -2
- package/dist/init-adapters/codex/.github/agents/security.md +4 -2
- package/dist/init-adapters/codex/.github/config.json +1 -1
- package/dist/init-adapters/codex/.github/instructions/agents-manifest.md +79 -0
- package/dist/init-adapters/codex/.github/instructions/analyst.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/approval-flows.md +61 -0
- package/dist/init-adapters/codex/.github/instructions/architect.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/backend.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/component-patterns.md +91 -0
- package/dist/init-adapters/codex/.github/instructions/data-fetching-patterns.md +13 -0
- package/dist/init-adapters/codex/.github/instructions/database.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/design-system.md +31 -0
- package/dist/init-adapters/codex/.github/instructions/devops.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/enterprise-architecture.md +69 -0
- package/dist/init-adapters/codex/.github/instructions/error-handling.md +74 -0
- package/dist/init-adapters/codex/.github/instructions/eslint-standards.md +10 -0
- package/dist/init-adapters/codex/.github/instructions/explorer.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/frontend.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/git.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/logging.md +7 -0
- package/dist/init-adapters/codex/.github/instructions/manager.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/mobile.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/native.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/quality.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/security.md +16 -0
- package/dist/init-adapters/codex/.github/instructions/tech-stack.md +9 -0
- package/dist/init-adapters/codex/.github/memory/DECISIONS.md +10 -0
- package/dist/init-adapters/codex/.github/memory/PROJECT_MEMORY.md +1 -1
- package/dist/init-adapters/codex/.github/observability/audit_log.md +5 -0
- package/dist/init-adapters/codex/.github/observability/telemetry.md +6 -0
- package/dist/init-adapters/codex/.github/registry/agent_registry.md +18 -0
- package/dist/init-adapters/codex/.github/router/routing_rules.md +8 -0
- package/dist/init-adapters/codex/ENDERUN.md +36 -38
- package/dist/init-adapters/codex/copilot-instructions.md +7 -1
- package/dist/init-adapters/codex/docs/README.md +6 -0
- package/dist/init-adapters/codex/docs/getting-started.md +4 -0
- package/dist/init-adapters/cursor/.cursor/agents/analyst.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/architect.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/backend.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/database.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/devops.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/explorer.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/frontend.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/git.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/manager.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/mobile.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/native.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/quality.md +4 -2
- package/dist/init-adapters/cursor/.cursor/agents/security.md +4 -2
- package/dist/init-adapters/cursor/.cursor/config.json +1 -1
- package/dist/init-adapters/cursor/.cursor/knowledge/agents-manifest.md +79 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/approval-flows.md +61 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/component-patterns.md +91 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/data-fetching-patterns.md +13 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/design-system.md +31 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/enterprise-architecture.md +69 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/error-handling.md +74 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/eslint-standards.md +10 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/logging.md +7 -0
- package/dist/init-adapters/cursor/.cursor/knowledge/tech-stack.md +9 -0
- package/dist/init-adapters/cursor/.cursor/memory/DECISIONS.md +10 -0
- package/dist/init-adapters/cursor/.cursor/memory/PROJECT_MEMORY.md +1 -1
- package/dist/init-adapters/cursor/.cursor/observability/audit_log.md +5 -0
- package/dist/init-adapters/cursor/.cursor/observability/telemetry.md +6 -0
- package/dist/init-adapters/cursor/.cursor/registry/agent_registry.md +18 -0
- package/dist/init-adapters/cursor/.cursor/router/routing_rules.md +8 -0
- package/dist/init-adapters/cursor/.cursor/rules/analyst.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/architect.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/backend.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/database.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/devops.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/explorer.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/frontend.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/git.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/manager.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/mobile.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/native.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/quality.mdc +22 -0
- package/dist/init-adapters/cursor/.cursor/rules/security.mdc +22 -0
- package/dist/init-adapters/cursor/CURSOR.md +6 -0
- package/dist/init-adapters/cursor/ENDERUN.md +36 -38
- package/dist/init-adapters/cursor/docs/README.md +6 -0
- package/dist/init-adapters/cursor/docs/getting-started.md +4 -0
- package/dist/init-adapters/gemini/.gemini/agents/analyst.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/architect.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/backend.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/database.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/devops.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/explorer.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/frontend.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/git.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/manager.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/mobile.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/native.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/quality.md +4 -2
- package/dist/init-adapters/gemini/.gemini/agents/security.md +4 -2
- package/dist/init-adapters/gemini/.gemini/config.json +1 -1
- package/dist/init-adapters/gemini/.gemini/knowledge/agents-manifest.md +79 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/approval-flows.md +61 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/component-patterns.md +91 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/data-fetching-patterns.md +13 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/design-system.md +31 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/enterprise-architecture.md +69 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/error-handling.md +74 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/eslint-standards.md +10 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/logging.md +7 -0
- package/dist/init-adapters/gemini/.gemini/knowledge/tech-stack.md +9 -0
- package/dist/init-adapters/gemini/.gemini/memory/DECISIONS.md +10 -0
- package/dist/init-adapters/gemini/.gemini/memory/PROJECT_MEMORY.md +1 -1
- package/dist/init-adapters/gemini/.gemini/observability/audit_log.md +5 -0
- package/dist/init-adapters/gemini/.gemini/observability/telemetry.md +6 -0
- package/dist/init-adapters/gemini/.gemini/registry/agent_registry.md +18 -0
- package/dist/init-adapters/gemini/.gemini/router/routing_rules.md +8 -0
- package/dist/init-adapters/gemini/.gemini/rules/analyst.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/architect.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/backend.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/database.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/devops.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/explorer.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/frontend.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/git.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/manager.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/mobile.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/native.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/quality.md +16 -0
- package/dist/init-adapters/gemini/.gemini/rules/security.md +16 -0
- package/dist/init-adapters/gemini/ENDERUN.md +15 -17
- package/dist/init-adapters/gemini/GEMINI.md +7 -0
- package/dist/init-adapters/gemini/docs/README.md +6 -0
- package/dist/init-adapters/gemini/docs/getting-started.md +4 -0
- package/dist/init-adapters/grok/.grok/agents/analyst.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/architect.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/backend.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/database.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/devops.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/explorer.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/frontend.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/git.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/manager.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/mobile.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/native.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/quality.md +4 -2
- package/dist/init-adapters/grok/.grok/agents/security.md +4 -2
- package/dist/init-adapters/grok/.grok/config.json +1 -1
- package/dist/init-adapters/grok/.grok/knowledge/agents-manifest.md +79 -0
- package/dist/init-adapters/grok/.grok/knowledge/approval-flows.md +61 -0
- package/dist/init-adapters/grok/.grok/knowledge/component-patterns.md +91 -0
- package/dist/init-adapters/grok/.grok/knowledge/data-fetching-patterns.md +13 -0
- package/dist/init-adapters/grok/.grok/knowledge/design-system.md +31 -0
- package/dist/init-adapters/grok/.grok/knowledge/enterprise-architecture.md +69 -0
- package/dist/init-adapters/grok/.grok/knowledge/error-handling.md +74 -0
- package/dist/init-adapters/grok/.grok/knowledge/eslint-standards.md +10 -0
- package/dist/init-adapters/grok/.grok/knowledge/logging.md +7 -0
- package/dist/init-adapters/grok/.grok/knowledge/tech-stack.md +9 -0
- package/dist/init-adapters/grok/.grok/memory/DECISIONS.md +10 -0
- package/dist/init-adapters/grok/.grok/memory/PROJECT_MEMORY.md +1 -1
- package/dist/init-adapters/grok/.grok/observability/audit_log.md +5 -0
- package/dist/init-adapters/grok/.grok/observability/telemetry.md +6 -0
- package/dist/init-adapters/grok/.grok/registry/agent_registry.md +18 -0
- package/dist/init-adapters/grok/.grok/router/routing_rules.md +8 -0
- package/dist/init-adapters/grok/.grok/rules/analyst.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/architect.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/backend.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/database.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/devops.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/explorer.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/frontend.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/git.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/manager.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/mobile.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/native.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/quality.md +16 -0
- package/dist/init-adapters/grok/.grok/rules/security.md +16 -0
- package/dist/init-adapters/grok/ENDERUN.md +36 -38
- package/dist/init-adapters/grok/GROK.md +6 -0
- package/dist/init-adapters/grok/docs/README.md +6 -0
- package/dist/init-adapters/grok/docs/getting-started.md +4 -0
- package/dist/src/cli/adapters.js +11 -10
- package/dist/src/cli/adapters.js.map +1 -1
- package/dist/src/cli/commands/approve.d.ts +1 -0
- package/dist/src/cli/commands/approve.js +64 -0
- package/dist/src/cli/commands/approve.js.map +1 -0
- package/dist/src/cli/commands/check.js +87 -5
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/contract.js +3 -25
- package/dist/src/cli/commands/contract.js.map +1 -1
- package/dist/src/cli/commands/init.js +167 -10
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/knowledge.js +2 -3
- package/dist/src/cli/commands/knowledge.js.map +1 -1
- package/dist/src/cli/commands/log.js +1 -2
- package/dist/src/cli/commands/log.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +43 -9
- package/dist/src/cli/commands/orchestrate.js +161 -16
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/status.js +35 -0
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/index.js +18 -4
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/shims.d.ts +1 -0
- package/dist/src/cli/shims.js +54 -0
- package/dist/src/cli/shims.js.map +1 -0
- package/dist/src/cli/utils/app.js +118 -33
- package/dist/src/cli/utils/app.js.map +1 -1
- package/dist/src/cli/utils/fs.d.ts +1 -0
- package/dist/src/cli/utils/fs.js +15 -0
- package/dist/src/cli/utils/fs.js.map +1 -1
- package/dist/src/cli/utils/memory.js +11 -1
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/modules/agents/definitions.js +12 -12
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/modules/skills/definitions.d.ts +19 -2
- package/dist/src/modules/skills/definitions.js +53 -14
- package/dist/src/modules/skills/definitions.js.map +1 -1
- package/dist/src/shared/config.d.ts +41 -0
- package/dist/src/shared/config.js +61 -0
- package/dist/src/shared/config.js.map +1 -0
- package/dist/src/shared/container.d.ts +25 -0
- package/dist/src/shared/container.js +56 -0
- package/dist/src/shared/container.js.map +1 -0
- package/dist/src/shared/errors.d.ts +44 -0
- package/dist/src/shared/errors.js +66 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/logger.d.ts +28 -0
- package/dist/src/shared/logger.js +117 -0
- package/dist/src/shared/logger.js.map +1 -0
- package/dist/tests/mock-project/apps/web/panda.config.d.ts +4 -0
- package/dist/tests/mock-project/apps/web/panda.config.js +3 -0
- package/dist/tests/mock-project/apps/web/panda.config.js.map +1 -0
- package/dist/tests/shared.test.d.ts +1 -0
- package/dist/tests/shared.test.js +80 -0
- package/dist/tests/shared.test.js.map +1 -0
- package/eslint.config.js +2 -1
- package/framework-mcp/dist/{src/index.js → index.js} +7 -1
- package/framework-mcp/dist/{src/tools → tools}/definitions.js +1 -0
- package/framework-mcp/dist/{src/tools → tools}/file_system/patch_file.js +3 -0
- package/framework-mcp/dist/{src/tools → tools}/file_system/read_file.js +7 -0
- package/framework-mcp/dist/{src/tools → tools}/file_system/replace_text.js +3 -0
- package/framework-mcp/dist/tools/messaging/send_message.js +74 -0
- package/framework-mcp/dist/tools/types.js +1 -0
- package/framework-mcp/package.json +1 -1
- package/framework-mcp/src/index.ts +8 -1
- package/framework-mcp/src/tools/definitions.ts +1 -0
- package/framework-mcp/src/tools/file_system/patch_file.ts +6 -0
- package/framework-mcp/src/tools/file_system/read_file.ts +7 -1
- package/framework-mcp/src/tools/file_system/replace_text.ts +6 -0
- package/framework-mcp/src/tools/messaging/send_message.ts +39 -12
- package/framework-mcp/src/tools/types.ts +1 -0
- package/framework-mcp/tests/tools/file_system/file_system_tools.test.ts +42 -0
- package/framework-mcp/tests/tools/messaging/send_message.test.ts +136 -0
- package/framework-mcp/tsconfig.json +2 -1
- package/package.json +9 -6
- package/src/cli/adapters.ts +13 -11
- package/src/cli/commands/approve.ts +65 -0
- package/src/cli/commands/check.ts +98 -5
- package/src/cli/commands/contract.ts +3 -29
- package/src/cli/commands/init.ts +187 -10
- package/src/cli/commands/knowledge.ts +2 -4
- package/src/cli/commands/log.ts +1 -3
- package/src/cli/commands/orchestrate.ts +164 -29
- package/src/cli/commands/status.ts +33 -0
- package/src/cli/index.ts +180 -163
- package/src/cli/shims.ts +53 -0
- package/src/cli/utils/app.ts +124 -33
- package/src/cli/utils/fs.ts +17 -0
- package/src/cli/utils/memory.ts +11 -1
- package/src/modules/agents/definitions.ts +12 -12
- package/src/modules/skills/definitions.ts +53 -14
- package/src/schema/agent-lifecycle-schema.json +59 -0
- package/src/shared/config.ts +73 -0
- package/src/shared/container.ts +67 -0
- package/src/shared/errors.ts +72 -0
- package/src/shared/logger.ts +139 -0
- package/templates/architecture/agents-manifest.md +79 -0
- package/templates/architecture/enterprise-architecture.md +69 -0
- package/templates/architecture/standards/crud-governance.md +46 -0
- package/templates/architecture/standards/data-fetching-patterns.md +13 -0
- package/templates/architecture/standards/design-system.md +31 -0
- package/templates/architecture/standards/documentation-ownership.md +21 -0
- package/templates/architecture/standards/logging.md +7 -0
- package/templates/architecture/standards/mobile-standards.md +48 -0
- package/templates/architecture/standards/tech-stack.md +9 -0
- package/templates/backend/error-handling.md +74 -0
- package/templates/frontend/component-patterns.md +91 -0
- package/tsconfig.json +1 -0
- package/docs/getting-started.md +0 -22
- package/framework-mcp/dist/src/tools/messaging/send_message.js +0 -44
- /package/{framework-mcp/dist/src/tools/types.js → dist/framework-mcp/tests/tools/file_system/file_system_tools.test.d.ts} +0 -0
- /package/{docs/frontend → dist/init-adapters/antigravity-cli/.agents/knowledge}/component-patterns.md +0 -0
- /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/data-fetching-patterns.md +0 -0
- /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/design-system.md +0 -0
- /package/{docs/backend → dist/init-adapters/antigravity-cli/.agents/knowledge}/error-handling.md +0 -0
- /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/logging.md +0 -0
- /package/{docs/architecture/standards → dist/init-adapters/antigravity-cli/.agents/knowledge}/tech-stack.md +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/control_plane/locking.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/control_plane/registry.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/file_system/write_file.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/framework/get_status.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/framework/orchestrate.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/framework/update_contract_hash.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/framework/update_memory.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/index.js +0 -0
- /package/framework-mcp/dist/{src/tools → tools}/messaging/log_action.js +0 -0
- /package/framework-mcp/dist/{src/utils → utils}/cli.js +0 -0
- /package/framework-mcp/dist/{src/utils → utils}/metrics.js +0 -0
- /package/framework-mcp/dist/{src/utils → utils}/security.js +0 -0
- /package/{docs → templates}/architecture/approval-flows.md +0 -0
|
@@ -11,20 +11,43 @@ export async function handleSendAgentMessage(projectRoot, args) {
|
|
|
11
11
|
const lockPath = path.join(messagesDir, ".lock");
|
|
12
12
|
// Hermes Lock Protocol: Retry 3 times with 500ms delay
|
|
13
13
|
let retries = 3;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
fs.
|
|
14
|
+
let acquired = false;
|
|
15
|
+
while (retries > 0) {
|
|
16
|
+
try {
|
|
17
|
+
if (fs.existsSync(lockPath)) {
|
|
18
|
+
try {
|
|
19
|
+
const stats = fs.statSync(lockPath);
|
|
20
|
+
if (Date.now() - stats.mtimeMs > 5000) {
|
|
21
|
+
fs.unlinkSync(lockPath);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// ignore if concurrently unlinked
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
fs.mkdirSync(messagesDir, { recursive: true });
|
|
29
|
+
fs.writeFileSync(lockPath, `Locked by ${from} at ${new Date().toISOString()}`, { flag: "wx" });
|
|
30
|
+
acquired = true;
|
|
18
31
|
break;
|
|
19
32
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
catch (err) {
|
|
34
|
+
const error = err;
|
|
35
|
+
if (error.code === "EEXIST") {
|
|
36
|
+
retries--;
|
|
37
|
+
if (retries > 0) {
|
|
38
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return { content: [{ type: "text", text: `❌ Unexpected lock acquisition error: ${error.message || String(err)}` }], isError: true };
|
|
43
|
+
}
|
|
23
44
|
}
|
|
24
45
|
}
|
|
46
|
+
if (!acquired) {
|
|
47
|
+
return { content: [{ type: "text", text: `❌ Could not send message to ${to}: Hermes lock is busy.` }], isError: true };
|
|
48
|
+
}
|
|
25
49
|
try {
|
|
26
|
-
|
|
27
|
-
fs.writeFileSync(lockPath, `Locked by ${from} at ${new Date().toISOString()}`);
|
|
50
|
+
const defaultPriority = (category === "ALERT" || category === "ACTION") ? "HIGH" : "NORMAL";
|
|
28
51
|
const message = {
|
|
29
52
|
timestamp: new Date().toISOString(),
|
|
30
53
|
from,
|
|
@@ -32,14 +55,21 @@ export async function handleSendAgentMessage(projectRoot, args) {
|
|
|
32
55
|
category,
|
|
33
56
|
traceId,
|
|
34
57
|
content,
|
|
58
|
+
priority: args.priority || defaultPriority,
|
|
35
59
|
status: "PENDING"
|
|
36
60
|
};
|
|
37
61
|
fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
|
|
38
62
|
return { content: [{ type: "text", text: `✅ Message sent to ${to} (from: ${from})` }] };
|
|
39
63
|
}
|
|
40
64
|
finally {
|
|
41
|
-
if (fs.existsSync(lockPath))
|
|
42
|
-
|
|
65
|
+
if (acquired && fs.existsSync(lockPath)) {
|
|
66
|
+
try {
|
|
67
|
+
fs.unlinkSync(lockPath);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// ignore
|
|
71
|
+
}
|
|
72
|
+
}
|
|
43
73
|
}
|
|
44
74
|
}
|
|
45
75
|
//# 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,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB,EAAE,IAAc;IAC5E,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;
|
|
1
|
+
{"version":3,"file":"send_message.js","sourceRoot":"","sources":["../../../../../framework-mcp/src/tools/messaging/send_message.ts"],"names":[],"mappings":"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"}
|
package/{framework-mcp/dist → dist/framework-mcp}/tests/tools/file_system/file_system_tools.test.js
RENAMED
|
@@ -59,6 +59,19 @@ describe("File System Tools", () => {
|
|
|
59
59
|
expect(result.content[0].text).toContain("✅ Surgical edit successful");
|
|
60
60
|
expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello there there");
|
|
61
61
|
});
|
|
62
|
+
it("should log usage to metrics.json upon replace", () => {
|
|
63
|
+
fs.writeFileSync(TEST_FILE, "hello world", "utf8");
|
|
64
|
+
const args = {
|
|
65
|
+
path: TEST_FILE,
|
|
66
|
+
oldText: "world",
|
|
67
|
+
newText: "there",
|
|
68
|
+
};
|
|
69
|
+
handleReplaceText(TEST_DIR, args);
|
|
70
|
+
const metricsPath = path.join(TEST_DIR, ".gemini/observability/metrics.json");
|
|
71
|
+
expect(fs.existsSync(metricsPath)).toBe(true);
|
|
72
|
+
const metrics = JSON.parse(fs.readFileSync(metricsPath, "utf8"));
|
|
73
|
+
expect(metrics[0].action).toContain("replace_text");
|
|
74
|
+
});
|
|
62
75
|
});
|
|
63
76
|
describe("handlePatchFile", () => {
|
|
64
77
|
it("should replace lines in specified range", () => {
|
|
@@ -93,6 +106,20 @@ describe("File System Tools", () => {
|
|
|
93
106
|
};
|
|
94
107
|
expect(() => handlePatchFile(TEST_DIR, args)).toThrowError("Invalid end line");
|
|
95
108
|
});
|
|
109
|
+
it("should log usage to metrics.json upon patch", () => {
|
|
110
|
+
fs.writeFileSync(TEST_FILE, "line1\nline2\nline3\nline4", "utf8");
|
|
111
|
+
const args = {
|
|
112
|
+
path: TEST_FILE,
|
|
113
|
+
startLine: 2,
|
|
114
|
+
endLine: 3,
|
|
115
|
+
newContent: "patched2\npatched3",
|
|
116
|
+
};
|
|
117
|
+
handlePatchFile(TEST_DIR, args);
|
|
118
|
+
const metricsPath = path.join(TEST_DIR, ".gemini/observability/metrics.json");
|
|
119
|
+
expect(fs.existsSync(metricsPath)).toBe(true);
|
|
120
|
+
const metrics = JSON.parse(fs.readFileSync(metricsPath, "utf8"));
|
|
121
|
+
expect(metrics[0].action).toContain("patch_file");
|
|
122
|
+
});
|
|
96
123
|
});
|
|
97
124
|
describe("handleReadFile", () => {
|
|
98
125
|
it("should read full file content", () => {
|
|
@@ -131,6 +158,18 @@ describe("File System Tools", () => {
|
|
|
131
158
|
expect(result.content[0].text).toContain("✅ File written");
|
|
132
159
|
expect(fs.readFileSync(TEST_FILE, "utf8")).toBe("hello world");
|
|
133
160
|
});
|
|
161
|
+
it("should write new file and log usage to metrics.json", () => {
|
|
162
|
+
const args = {
|
|
163
|
+
path: TEST_FILE,
|
|
164
|
+
content: "hello world"
|
|
165
|
+
};
|
|
166
|
+
handleWriteFile(TEST_DIR, args);
|
|
167
|
+
const metricsPath = path.join(TEST_DIR, ".gemini/observability/metrics.json");
|
|
168
|
+
expect(fs.existsSync(metricsPath)).toBe(true);
|
|
169
|
+
const metrics = JSON.parse(fs.readFileSync(metricsPath, "utf8"));
|
|
170
|
+
expect(metrics[0].action).toContain("write_file");
|
|
171
|
+
expect(metrics[0].estimatedTokens).toBeGreaterThan(0);
|
|
172
|
+
});
|
|
134
173
|
it("should append update to PROJECT_MEMORY.md if it exists", () => {
|
|
135
174
|
fs.mkdirSync(MEMORY_DIR, { recursive: true });
|
|
136
175
|
fs.writeFileSync(MEMORY_FILE, "## CURRENT STATUS\n", "utf8");
|
|
@@ -145,3 +184,4 @@ describe("File System Tools", () => {
|
|
|
145
184
|
});
|
|
146
185
|
});
|
|
147
186
|
});
|
|
187
|
+
//# sourceMappingURL=file_system_tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_system_tools.test.js","sourceRoot":"","sources":["../../../../../framework-mcp/tests/tools/file_system/file_system_tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { handleSendAgentMessage } from "../../../src/tools/messaging/send_message.js";
|
|
5
|
+
const TEST_DIR = path.resolve(__dirname, "../../_temp_messaging_tests");
|
|
6
|
+
const MESSAGES_DIR = path.join(TEST_DIR, ".gemini/messages");
|
|
7
|
+
const LOCK_FILE = path.join(MESSAGES_DIR, ".lock");
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
fs.mkdirSync(TEST_DIR, { recursive: true });
|
|
10
|
+
// Write a dummy package.json to test directory to lock frameworkDir as .gemini
|
|
11
|
+
const dummyPkg = {
|
|
12
|
+
name: "test-pkg",
|
|
13
|
+
enderun: {
|
|
14
|
+
frameworkDir: ".gemini"
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
fs.writeFileSync(path.join(TEST_DIR, "package.json"), JSON.stringify(dummyPkg, null, 2), "utf8");
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
fs.rmSync(TEST_DIR, { recursive: true, force: true });
|
|
21
|
+
});
|
|
22
|
+
describe("Hermes Lock Protocol & Message sending", () => {
|
|
23
|
+
it("should successfully send message when lock is not present", async () => {
|
|
24
|
+
const args = {
|
|
25
|
+
to: "@backend",
|
|
26
|
+
from: "@manager",
|
|
27
|
+
category: "ACTION",
|
|
28
|
+
content: "Build database models",
|
|
29
|
+
traceId: "T-123",
|
|
30
|
+
priority: "HIGH"
|
|
31
|
+
};
|
|
32
|
+
const result = await handleSendAgentMessage(TEST_DIR, args);
|
|
33
|
+
expect(result.content[0].text).toContain("✅ Message sent to @backend");
|
|
34
|
+
// Verify the message file contains the sent message
|
|
35
|
+
const messageFilePath = path.join(MESSAGES_DIR, "backend.json");
|
|
36
|
+
expect(fs.existsSync(messageFilePath)).toBe(true);
|
|
37
|
+
const content = fs.readFileSync(messageFilePath, "utf8");
|
|
38
|
+
const msg = JSON.parse(content.trim());
|
|
39
|
+
expect(msg.from).toBe("@manager");
|
|
40
|
+
expect(msg.to).toBe("@backend");
|
|
41
|
+
expect(msg.category).toBe("ACTION");
|
|
42
|
+
expect(msg.content).toBe("Build database models");
|
|
43
|
+
expect(msg.traceId).toBe("T-123");
|
|
44
|
+
expect(msg.priority).toBe("HIGH");
|
|
45
|
+
expect(msg.status).toBe("PENDING");
|
|
46
|
+
});
|
|
47
|
+
it("should retry and fail to send message if lock is kept busy", async () => {
|
|
48
|
+
// Prepare a busy lock file
|
|
49
|
+
fs.mkdirSync(MESSAGES_DIR, { recursive: true });
|
|
50
|
+
fs.writeFileSync(LOCK_FILE, "Locked by @test at " + new Date().toISOString(), "utf8");
|
|
51
|
+
const args = {
|
|
52
|
+
to: "@backend",
|
|
53
|
+
from: "@manager",
|
|
54
|
+
category: "ACTION",
|
|
55
|
+
content: "Build database models",
|
|
56
|
+
traceId: "T-123"
|
|
57
|
+
};
|
|
58
|
+
const startTime = Date.now();
|
|
59
|
+
const result = await handleSendAgentMessage(TEST_DIR, args);
|
|
60
|
+
const duration = Date.now() - startTime;
|
|
61
|
+
expect(result.isError).toBe(true);
|
|
62
|
+
expect(result.content[0].text).toContain("❌ Could not send message to @backend: Hermes lock is busy.");
|
|
63
|
+
// Retries takes 3 attempts with 500ms delay -> duration should be at least ~1000ms
|
|
64
|
+
expect(duration).toBeGreaterThanOrEqual(1000);
|
|
65
|
+
});
|
|
66
|
+
it("should bypass and acquire lock if existing lock is stale (older than 5s)", async () => {
|
|
67
|
+
fs.mkdirSync(MESSAGES_DIR, { recursive: true });
|
|
68
|
+
// Set lock file mtime to 10 seconds ago
|
|
69
|
+
fs.writeFileSync(LOCK_FILE, "Locked by @test at " + new Date().toISOString(), "utf8");
|
|
70
|
+
const tenSecondsAgo = new Date(Date.now() - 10000);
|
|
71
|
+
fs.utimesSync(LOCK_FILE, tenSecondsAgo, tenSecondsAgo);
|
|
72
|
+
const args = {
|
|
73
|
+
to: "@backend",
|
|
74
|
+
from: "@manager",
|
|
75
|
+
category: "ACTION",
|
|
76
|
+
content: "Build database models",
|
|
77
|
+
traceId: "T-123"
|
|
78
|
+
};
|
|
79
|
+
const result = await handleSendAgentMessage(TEST_DIR, args);
|
|
80
|
+
expect(result.content[0].text).toContain("✅ Message sent to @backend");
|
|
81
|
+
expect(fs.existsSync(LOCK_FILE)).toBe(false); // Lock should have been unlinked in finally
|
|
82
|
+
});
|
|
83
|
+
it("should safely resolve concurrent messages and execute them in sequence", async () => {
|
|
84
|
+
const send1Promise = handleSendAgentMessage(TEST_DIR, {
|
|
85
|
+
to: "@backend",
|
|
86
|
+
from: "@manager",
|
|
87
|
+
category: "ACTION",
|
|
88
|
+
content: "Job 1",
|
|
89
|
+
traceId: "T-123"
|
|
90
|
+
});
|
|
91
|
+
// Delay starting the second call slightly to make sure lock is acquired by Job 1 first
|
|
92
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
93
|
+
const send2Promise = handleSendAgentMessage(TEST_DIR, {
|
|
94
|
+
to: "@backend",
|
|
95
|
+
from: "@frontend",
|
|
96
|
+
category: "INFO",
|
|
97
|
+
content: "Job 2",
|
|
98
|
+
traceId: "T-123"
|
|
99
|
+
});
|
|
100
|
+
const [res1, res2] = await Promise.all([send1Promise, send2Promise]);
|
|
101
|
+
expect(res1.isError).toBeFalsy();
|
|
102
|
+
expect(res2.isError).toBeFalsy();
|
|
103
|
+
expect(res1.content[0].text).toContain("✅ Message sent to @backend");
|
|
104
|
+
expect(res2.content[0].text).toContain("✅ Message sent to @backend");
|
|
105
|
+
// Verify both messages exist in order in the message log file
|
|
106
|
+
const messageFilePath = path.join(MESSAGES_DIR, "backend.json");
|
|
107
|
+
const lines = fs.readFileSync(messageFilePath, "utf8").trim().split("\n");
|
|
108
|
+
expect(lines.length).toBe(2);
|
|
109
|
+
const msg1 = JSON.parse(lines[0]);
|
|
110
|
+
const msg2 = JSON.parse(lines[1]);
|
|
111
|
+
expect(msg1.content).toBe("Job 1");
|
|
112
|
+
expect(msg2.content).toBe("Job 2");
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=send_message.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send_message.test.js","sourceRoot":"","sources":["../../../../../framework-mcp/tests/tools/messaging/send_message.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# 🎖️ Agent Enderun — Agent Army Manifest
|
|
2
|
+
|
|
3
|
+
This document serves as the complete manifest of the 13 specialist agents forming the **Enderun Army**. Each agent is mapped to a specific capability index, toolset, and specialized directive under the Enderun Discipline (Osmanlı Nizami).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🏛️ Agent Army Overview
|
|
8
|
+
|
|
9
|
+
| Agent Name | Role | Capability | Primary Tools | Tags |
|
|
10
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
11
|
+
| **`@manager`** | Orchestration | 10/10 | `orchestrate_loop`, `send_agent_message` | `core`, `orchestration` |
|
|
12
|
+
| **`@architect`** | System Design | 9/10 | `write_file`, `replace_text` | `core`, `design` |
|
|
13
|
+
| **`@backend`** | Backend Logic | 9/10 | `replace_text`, `run_shell_command` | `core`, `logic` |
|
|
14
|
+
| **`@frontend`** | User Interface | 9/10 | `replace_text`, `view_file` | `core`, `ui` |
|
|
15
|
+
| **`@quality`** | Quality Audit | 9/10 | `run_shell_command`, `view_file` | `core`, `audit` |
|
|
16
|
+
| **`@database`** | Data Management | 9/10 | `replace_text`, `run_shell_command` | `core`, `data` |
|
|
17
|
+
| **`@devops`** | Infrastructure | 9/10 | `run_shell_command`, `view_file` | `core`, `infra` |
|
|
18
|
+
| **`@explorer`** | Reconnaissance | 8/10 | `grep_search`, `list_dir`, `glob` | `core`, `recon` |
|
|
19
|
+
| **`@git`** | Version Control | 9/10 | `run_shell_command`, `view_file` | `core`, `logistics` |
|
|
20
|
+
| **`@mobile`** | Mobile Apps | 9/10 | `replace_text`, `view_file` | `core`, `mobile` |
|
|
21
|
+
| **`@native`** | System-Level | 9/10 | `run_shell_command`, `replace_text` | `core`, `native` |
|
|
22
|
+
| **`@security`** | Security Audit | 10/10 | `grep_search`, `run_shell_command` | `core`, `security` |
|
|
23
|
+
| **`@analyst`** | Requirements | 9/10 | `grep_search`, `list_dir` | `core`, `strategy` |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 🤖 Specialist Directives
|
|
28
|
+
|
|
29
|
+
### 1. `@manager` (Orchestrator)
|
|
30
|
+
- **Directive:** Strategic commander of the army. Coordinates executions, schedules traces, and delegates tasks to specialists.
|
|
31
|
+
- **Mandate:** Enforces Enderun discipline, inherits and passes Trace IDs, and handles final compliance approvals.
|
|
32
|
+
|
|
33
|
+
### 2. `@architect` (Lead Architect)
|
|
34
|
+
- **Directive:** Outlines initial codebase design, defines schema contracts, and manages the architectural blueprint.
|
|
35
|
+
- **Mandate:** Enforces strict modular boundaries and verifies structural sanity.
|
|
36
|
+
|
|
37
|
+
### 3. `@backend` (Backend Specialist)
|
|
38
|
+
- **Directive:** Builds REST/GraphQL API systems, develops server components, and manages server business rules.
|
|
39
|
+
- **Mandate:** Ensures robust error handling, schema boundaries, and server logic.
|
|
40
|
+
|
|
41
|
+
### 4. `@frontend` (Frontend Specialist)
|
|
42
|
+
- **Directive:** Builds user interfaces, manages layouts and states using modern styling (Panda CSS, CSS variables).
|
|
43
|
+
- **Mandate:** Enforces design systems, accessibility, and high performance rendering.
|
|
44
|
+
|
|
45
|
+
### 5. `@quality` (Quality Specialist)
|
|
46
|
+
- **Directive:** Validates unit coverage, performs static analyses, and ensures code rules compliance.
|
|
47
|
+
- **Mandate:** Runs ESLint rules, checks console logs, and audits project safety.
|
|
48
|
+
|
|
49
|
+
### 6. `@database` (Database Specialist)
|
|
50
|
+
- **Directive:** Designs relational/NoSQL schemas, writes migrations, and optimizes SQL query metrics.
|
|
51
|
+
- **Mandate:** Guarantees data transaction integrity and index configurations.
|
|
52
|
+
|
|
53
|
+
### 7. `@devops` (Infrastructure Specialist)
|
|
54
|
+
- **Directive:** Establishes CI/CD pipelines, configures Docker environments, and tracks cloud deployments.
|
|
55
|
+
- **Mandate:** Ensures high availability, automation scripts, and safe release cycles.
|
|
56
|
+
|
|
57
|
+
### 8. `@explorer` (Intel Explorer)
|
|
58
|
+
- **Directive:** Gathers codebase intelligence, discovers file dependencies, and maps codebase symbols.
|
|
59
|
+
- **Mandate:** Guides planning agents by providing context graphs and code dependencies.
|
|
60
|
+
|
|
61
|
+
### 9. `@git` (Logistics Master)
|
|
62
|
+
- **Directive:** Handles atomic commit flows, merges code, resolves conflicts, and manages release tags.
|
|
63
|
+
- **Mandate:** Enforces descriptive commit tags mapped to active Trace IDs.
|
|
64
|
+
|
|
65
|
+
### 10. `@mobile` (Mobile Specialist)
|
|
66
|
+
- **Directive:** Implements mobile interfaces using cross-platform layouts (React Native / Expo).
|
|
67
|
+
- **Mandate:** Optimizes mobile assets, native performance, and state stores.
|
|
68
|
+
|
|
69
|
+
### 11. `@native` (Native Division)
|
|
70
|
+
- **Directive:** Interfaces with native operating system hooks, constructs desktop platforms, and manages hardware bridges.
|
|
71
|
+
- **Mandate:** Exercises deep security protocols during system interactions.
|
|
72
|
+
|
|
73
|
+
### 12. `@security` (Security Specialist)
|
|
74
|
+
- **Directive:** Audits repositories for credentials/secrets, evaluates package dependencies, and verifies authentication flows.
|
|
75
|
+
- **Mandate:** Rejects insecure actions, validates cryptographic keys, and enforces access control checks.
|
|
76
|
+
|
|
77
|
+
### 13. `@analyst` (Business Analyst)
|
|
78
|
+
- **Directive:** Maps requirements to codebase implementations, writes business specification rules, and audits contracts.
|
|
79
|
+
- **Mandate:** Validates feature alignment against system specifications.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Enterprise Approval Flows & Governance Protocol (v0.8.5)
|
|
2
|
+
|
|
3
|
+
This protocol defines the strict governance model for high-risk operations and cross-agent approval flows within the Agent Enderun framework. It ensures that no critical mutations or sensitive actions are executed by AI specialists without formal orchestration and explicit authorization.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🔒 1. High-Risk Action Catalog
|
|
8
|
+
|
|
9
|
+
Specialist agents (@backend, @frontend, @devops, etc.) are strictly prohibited from performing any of the following administrative operations autonomously. If requested, they must halt work, shift to `WAITING` status, and escalate to `@manager` via the **Hermes Protocol**.
|
|
10
|
+
|
|
11
|
+
| Category | High-Risk Operations | Designated Controller |
|
|
12
|
+
| :--- | :--- | :--- |
|
|
13
|
+
| **Data Management** | Bulk delete/purge, data migration, PII export, schema modifications. | `@manager` |
|
|
14
|
+
| **System Security** | Security credentials modification, CSP rule changes, private keys rotation. | `@security` & `@manager` |
|
|
15
|
+
| **Infrastructure** | Production deployment triggers, container orchestration changes, ENV vars rotation. | `@devops` & `@manager` |
|
|
16
|
+
| **Contract Stability**| Breaking API modifications, major type updates inside `src/types/`. | `@backend` & `@manager` |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 💬 2. Hermes approval Flow (`managerApproval`)
|
|
21
|
+
|
|
22
|
+
When a specialist agent encounters a high-risk operation, it must execute the following message queue protocol.
|
|
23
|
+
|
|
24
|
+
### Step 1: Lock the Hermes Inbox
|
|
25
|
+
To prevent race conditions, the agent must check for `.agents/messages/.lock`. If the lock is active, the agent retries (up to 3 times, waiting 500ms between attempts). If no lock exists, it creates `.lock` to claim the channel.
|
|
26
|
+
|
|
27
|
+
### Step 2: Write Approval Request File
|
|
28
|
+
The requesting agent writes a structured JSON file inside `.agents/queue/pending/` or `.agents/messages/` with the unique `Trace ID` (ULID) and a `managerApproval` request flag:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"traceId": "01JM5S8A0F2B4C6D8E0G2H4J6K",
|
|
33
|
+
"from": "@backend",
|
|
34
|
+
"to": "@manager",
|
|
35
|
+
"category": "ALERT",
|
|
36
|
+
"priority": "HIGH",
|
|
37
|
+
"action": "RUN_DATABASE_MIGRATION",
|
|
38
|
+
"payload": {
|
|
39
|
+
"migrationFile": "20260527_add_tenant_rls_policy.sql",
|
|
40
|
+
"rationale": "Enables multi-tenant Row Level Security (RLS) on PostgreSQL."
|
|
41
|
+
},
|
|
42
|
+
"timestamp": "2026-05-27T20:45:00Z"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Step 3: Shift Agent State
|
|
47
|
+
The requesting agent updates its state inside `.agents/STATUS.md` to `WAITING` and appends `BLOCKED_BY_APPROVAL` to its action log.
|
|
48
|
+
|
|
49
|
+
### Step 4: Human-in-the-Loop Signing
|
|
50
|
+
In production workspaces, the `@manager` compiles the war-room report and requests the human architect (CTO) to sign off on the transaction. The human developer signs the transaction by executing:
|
|
51
|
+
```bash
|
|
52
|
+
npx agent-enderun approve 01JM5S8A0F2B4C6D8E0G2H4J6K
|
|
53
|
+
```
|
|
54
|
+
Or by writing a signed token to the message queue.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 🚦 3. Conflict Resolution & Rollback
|
|
59
|
+
|
|
60
|
+
1. **Approval Rejection:** If the transaction is rejected, `@manager` issues a `REJECTED` signal. The specialist agent rolls back any staged changes and returns to `IDLE` state.
|
|
61
|
+
2. **Stale Lock Recovery:** If a Hermes inbox `.lock` remains for more than 1.5 seconds, the active agent assumes a **stale lock** (LLM timeout), deletes the lock, and logs the incident to `@manager`.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# 🎖️ Agent Enderun — Enterprise Architecture & Standards
|
|
2
|
+
|
|
3
|
+
This document establishes the architecture patterns, design guidelines, and code structures of the **Enderun Core Framework** for enterprise deployments.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🏛️ Project Directory Structure
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
agent-enderun/
|
|
11
|
+
├── bin/ # Executable CLI entrypoints
|
|
12
|
+
├── docs/ # Technical documentation & design guides
|
|
13
|
+
├── framework-mcp/ # Modular MCP server implementation (workspace)
|
|
14
|
+
│ ├── src/ # MCP server source files
|
|
15
|
+
│ └── tests/ # Unit tests for MCP server tools
|
|
16
|
+
├── src/ # CLI & Core framework logic
|
|
17
|
+
│ ├── cli/ # Command line interface commands & adapters
|
|
18
|
+
│ │ ├── adapters/ # Target-specific IDE adapters (VS Code, Cursor, etc.)
|
|
19
|
+
│ │ ├── commands/ # Subcommand handlers (init, status, check)
|
|
20
|
+
│ │ └── utils/ # CLI-specific utilities
|
|
21
|
+
│ ├── modules/ # Core framework modules
|
|
22
|
+
│ │ ├── adapters/ # Target environment adapter profiles
|
|
23
|
+
│ │ ├── agents/ # Orchestrator & Specialist Agent definitions
|
|
24
|
+
│ │ └── skills/ # Capability templates for specialist actions
|
|
25
|
+
│ └── shared/ # Core shared business components
|
|
26
|
+
│ ├── config.ts # Zod environment configuration
|
|
27
|
+
│ ├── container.ts # Dependency injection container
|
|
28
|
+
│ ├── errors.ts # Standard typed domain errors
|
|
29
|
+
│ ├── fs.ts # File system helper wrappers
|
|
30
|
+
│ └── logger.ts # Enterprise logging subsystem
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## ⚙️ Core Design Principles
|
|
36
|
+
|
|
37
|
+
### 1. Unified Domain Errors
|
|
38
|
+
All errors thrown by modules must inherit from `EnderunBaseError` in [src/shared/errors.ts](file:///Users/ybekar/Desktop/Projeler/agent-enderun/src/shared/errors.ts).
|
|
39
|
+
This ensures:
|
|
40
|
+
- Unique error codes (`CONFIGURATION_ERROR`, `VALIDATION_ERROR`, etc.)
|
|
41
|
+
- Metadata enrichment via the `details` field
|
|
42
|
+
- Structured JSON serialization in production environments
|
|
43
|
+
|
|
44
|
+
### 2. Zod-Validated Environments
|
|
45
|
+
Configuration options must never be read directly from raw environment variables (`process.env`). Instead, they are parsed and frozen inside [src/shared/config.ts](file:///Users/ybekar/Desktop/Projeler/agent-enderun/src/shared/config.ts) at initialization. If a required value is missing, the application crashes immediately with a clean explanation.
|
|
46
|
+
|
|
47
|
+
### 3. Service Container (Dependency Injection)
|
|
48
|
+
To write testable and decoupled code, singletons and factories are registered and resolved using the `ServiceContainer` defined in [src/shared/container.ts](file:///Users/ybekar/Desktop/Projeler/agent-enderun/src/shared/container.ts).
|
|
49
|
+
```typescript
|
|
50
|
+
import { container } from "./shared/container.js";
|
|
51
|
+
|
|
52
|
+
// Register
|
|
53
|
+
container.register("Logger", logger);
|
|
54
|
+
|
|
55
|
+
// Resolve
|
|
56
|
+
const logger = container.resolve<EnterpriseLogger>("Logger");
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 4. Structured Observability
|
|
60
|
+
Use `EnterpriseLogger` in [src/shared/logger.ts](file:///Users/ybekar/Desktop/Projeler/agent-enderun/src/shared/logger.ts) for logging:
|
|
61
|
+
- In **development**, logs are colorized and formatted for human readability.
|
|
62
|
+
- In **production**, logs are structured as JSON for log aggregators (e.g. Datadog, ELK).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 🛡️ Code & Type Guidelines
|
|
67
|
+
- **Strict Typing:** Always keep `"strict": true` in `tsconfig.json`. Explicit return types are required on all exports.
|
|
68
|
+
- **Asynchronous Flow:** Use async/await over raw promise chains. Handle failures with localized try/catch blocks and wrap in domain errors.
|
|
69
|
+
- **Atomic Operations:** Always use transactional or surgical replacements when editing configuration/code files.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 🎖️ Agent Enderun — ESLint Standards
|
|
2
|
+
|
|
3
|
+
This document outlines the strict ESLint coding standards for Agent Enderun projects.
|
|
4
|
+
|
|
5
|
+
## 📏 Core Rules
|
|
6
|
+
- **Indentation:** 4 spaces (strict).
|
|
7
|
+
- **Quotes:** Double quotes (`"`) for strings.
|
|
8
|
+
- **Semicolons:** Always terminate statements with a semicolon (`;`).
|
|
9
|
+
- **No Explicit Any:** Avoid using `any`. Use strongly typed interfaces, generics, or `unknown` with type assertions.
|
|
10
|
+
- **Unused Variables:** Warning on unused variables unless prefixed with an underscore (`_`).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 🏛️ Architectural Decisions Log (ADR)
|
|
2
|
+
|
|
3
|
+
This file contains the fixed architectural choices and constraints for this project.
|
|
4
|
+
|
|
5
|
+
## Decided Constraints
|
|
6
|
+
- **Framework Integration:** Agent Enderun is the primary governance and orchestration layer.
|
|
7
|
+
- **Language & Runtime:** TypeScript on Node.js.
|
|
8
|
+
- **Package Manager:** npm.
|
|
9
|
+
- **Monorepo Structure:** Monorepo using npm workspaces.
|
|
10
|
+
- **Styling:** Panda CSS.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 📊 Agent Enderun — Telemetry & Memory Observability
|
|
2
|
+
|
|
3
|
+
## 🧠 Context & Token Observability
|
|
4
|
+
- **Memory File:** `.agents/memory/PROJECT_MEMORY.md` (SSOT)
|
|
5
|
+
- **Pruning Trigger:** Active history entries are pruned and archived under `.agents/memory-graph/archive/` once the log exceeds 10 records.
|
|
6
|
+
- **Audit Logs:** Agent interactions are saved locally inside `observability/audit_log.md` to keep API usage transparent and track performance bottlenecks.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 🎖️ Agent Enderun — Army Registry
|
|
2
|
+
|
|
3
|
+
List of active agents, their roles, capacities, and matching directory patterns.
|
|
4
|
+
|
|
5
|
+
| Agent Name | Role | Scope / Globs | Action Compliance |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| `@manager` | Orchestrator & Controller | `*` | Rules Verification |
|
|
8
|
+
| `@quality` | Quality & Test Enforcer | `*` | AST Security Scans |
|
|
9
|
+
| `@database` | Database Optimizer | `apps/backend/src/database/**/*` | Schema & Migrations |
|
|
10
|
+
| `@backend` | Core Domain Developer | `apps/backend/**/*` | Branded Types & APIs |
|
|
11
|
+
| `@frontend` | UI/UX Developer | `apps/web/**/*` | Panda CSS, Fluid UI |
|
|
12
|
+
| `@mobile` | Mobile App Specialist | `apps/mobile/**/*` | Expo/React Native |
|
|
13
|
+
| `@native` | Desktop / Native Integrator | `apps/native/**/*` | Electron/Tauri |
|
|
14
|
+
| `@devops` | Deployment & CI/CD | CI/CD YAML & Deployment files | Native Rollbacks |
|
|
15
|
+
| `@explorer` | Codebase Discovery | All source directories | Onboarding & Audit |
|
|
16
|
+
| `@git` | Version Control System | `.git/` & Commit traces | Trace ID commits |
|
|
17
|
+
| `@security` | Security Officer | All source directories | RLS & Secrets Scan |
|
|
18
|
+
| `@analyst` | Contract Validator | Contract and API schema definitions | SHA-256 validation |
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# 📡 Agent Enderun — Natural Language & Event Router
|
|
2
|
+
|
|
3
|
+
This configuration governs how user inputs and event messages are routed across the 12 expert agents.
|
|
4
|
+
|
|
5
|
+
## 🧭 Routing Engine Protocols
|
|
6
|
+
- **User Input Routing:** By default, all un-targeted natural language prompts are routed to the `@manager` agent for analysis and decomposition into a Directed Acyclic Graph (DAG) task list.
|
|
7
|
+
- **Targeted Input Routing:** Prompts beginning with `@<agent_name>` (e.g., `@backend`) bypass the general manager routing and are directly appended to the target agent's Hermes mailbox.
|
|
8
|
+
- **Hermes Event Loops:** Agents publish status changes and handoffs which the message broker routes dynamically according to active dependencies.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 🎖️ Agent Enderun — @analyst (Business Analyst)
|
|
2
|
+
|
|
3
|
+
You are the **Business Analyst** of the Agent Enderun Army.
|
|
4
|
+
|
|
5
|
+
## 🏛️ Hierarchy of Authority
|
|
6
|
+
1. **Supreme Law:** [`.agents/ENDERUN.md`](`.agents/ENDERUN.md`)
|
|
7
|
+
2. **Global Rules:** [`.agents/knowledge/ARCHITECTURE.md`](`.agents/knowledge/ARCHITECTURE.md`), [`.agents/knowledge/SECURITY.md`](`.agents/knowledge/SECURITY.md`)
|
|
8
|
+
3. **Project Memory:** [`.agents/memory/PROJECT_MEMORY.md`](`.agents/memory/PROJECT_MEMORY.md`)
|
|
9
|
+
|
|
10
|
+
## 🤖 Specialist Directive (Role: @analyst)
|
|
11
|
+
Audit of truth and contracts within the Army.
|
|
12
|
+
|
|
13
|
+
## 🛡️ Core Mandates
|
|
14
|
+
- **Surgical Precision:** Enforce replace_text / replace_file_content for all code modifications.
|
|
15
|
+
- **Traceability:** Inherit and pass the active Trace ID across all delegations.
|
|
16
|
+
- **Approval Signature:** High-risk actions require manager approval signature.
|