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
package/src/cli/commands/init.ts
CHANGED
|
@@ -11,7 +11,8 @@ import {
|
|
|
11
11
|
} from "../adapters.js";
|
|
12
12
|
import { getPackageRoot, getPackageVersion } from "../utils/pkg.js";
|
|
13
13
|
import { ensureDir, writeJsonFile } from "../utils/fs.js";
|
|
14
|
-
import { initializeMemory } from "../utils/memory.js";
|
|
14
|
+
import { initializeMemory, getConfiguredPaths } from "../utils/memory.js";
|
|
15
|
+
import { SHIM_TEMPLATES } from "../shims.js";
|
|
15
16
|
|
|
16
17
|
// Import Modular Definitions
|
|
17
18
|
import { ALL_AGENTS, buildAgentJson } from "../../modules/agents/definitions.js";
|
|
@@ -22,7 +23,6 @@ const FRAMEWORK_NAME = "Enderun Core";
|
|
|
22
23
|
const FRAMEWORK_VERSION = getPackageVersion();
|
|
23
24
|
|
|
24
25
|
const FRAMEWORK_SUBDIRS = [
|
|
25
|
-
"apps",
|
|
26
26
|
"agents",
|
|
27
27
|
"skills",
|
|
28
28
|
"knowledge",
|
|
@@ -33,6 +33,7 @@ const FRAMEWORK_SUBDIRS = [
|
|
|
33
33
|
"rules",
|
|
34
34
|
];
|
|
35
35
|
|
|
36
|
+
|
|
36
37
|
const COLOR_PALETTES = {
|
|
37
38
|
"Modern Blue": { primary: "#0ea5e9", secondary: "#64748b", accent: "#f43f5e" },
|
|
38
39
|
"Enterprise Slate": { primary: "#334155", secondary: "#94a3b8", accent: "#10b981" },
|
|
@@ -68,16 +69,19 @@ async function runInteractiveInit(): Promise<{ selectedDirs: string[], selectedA
|
|
|
68
69
|
function scaffoldConstitution(targetDir: string, frameworkDir: string, adapterId: AdapterId, dryRun: boolean) {
|
|
69
70
|
if (dryRun) return;
|
|
70
71
|
let content = `# 🎖️ ${FRAMEWORK_NAME} — Constitution (v${FRAMEWORK_VERSION})\n\nDiscipline and Order.`;
|
|
72
|
+
let readSuccess = false;
|
|
71
73
|
try {
|
|
72
74
|
const templatePath = path.join(getPackageRoot(), "ENDERUN.md");
|
|
73
75
|
if (fs.existsSync(templatePath)) {
|
|
74
76
|
content = fs.readFileSync(templatePath, "utf8");
|
|
77
|
+
readSuccess = true;
|
|
75
78
|
}
|
|
76
|
-
} catch {
|
|
77
|
-
|
|
79
|
+
} catch (e) {
|
|
80
|
+
console.warn(`⚠️ Failed to read global constitution template: ${e}`);
|
|
78
81
|
}
|
|
79
82
|
content = remapFrameworkContent(content, frameworkDir, adapterId);
|
|
80
83
|
fs.writeFileSync(path.join(targetDir, "ENDERUN.md"), content);
|
|
84
|
+
console.warn(`✅ Constitution file created: ENDERUN.md${readSuccess ? "" : " (default template)"}`);
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
function scaffoldCoreAgents(agentsToScaffold: string[], agentsBaseDir: string, adapterId: string, dryRun: boolean) {
|
|
@@ -104,10 +108,12 @@ function scaffoldCoreAgents(agentsToScaffold: string[], agentsBaseDir: string, a
|
|
|
104
108
|
const mdContent = `---
|
|
105
109
|
name: "${ag.name}"
|
|
106
110
|
description: "${ag.description}"
|
|
107
|
-
capability: ${ag.capability}
|
|
108
|
-
tags: [${ag.tags.map(t => `"${t}"`).join(", ")}]
|
|
109
111
|
---
|
|
110
112
|
|
|
113
|
+
<!-- capability: ${ag.capability} -->
|
|
114
|
+
<!-- tags: [${ag.tags.map(t => `"${t}"`).join(", ")}] -->
|
|
115
|
+
|
|
116
|
+
|
|
111
117
|
# 🎖️ ${FRAMEWORK_NAME} — @${ag.name} (${ag.displayName})
|
|
112
118
|
|
|
113
119
|
## 🤖 Talimatlar (Instructions)
|
|
@@ -128,7 +134,16 @@ function scaffoldSkills(skillsBaseDir: string, dryRun: boolean) {
|
|
|
128
134
|
if (dryRun) return;
|
|
129
135
|
ensureDir(skillsBaseDir, dryRun);
|
|
130
136
|
for (const [key, skill] of Object.entries(CORE_SKILLS)) {
|
|
131
|
-
const mdContent = `# 🛠️ ${FRAMEWORK_NAME} Skill — ${skill.name}
|
|
137
|
+
const mdContent = `# 🛠️ ${FRAMEWORK_NAME} Skill — ${skill.name}
|
|
138
|
+
|
|
139
|
+
${skill.description}
|
|
140
|
+
|
|
141
|
+
## 🔌 Associated Tools
|
|
142
|
+
${skill.tools.map(t => `- \`${t}\``).join("\n")}
|
|
143
|
+
|
|
144
|
+
## 🛡️ Core Mandates
|
|
145
|
+
${skill.mandates.join("\n")}
|
|
146
|
+
`;
|
|
132
147
|
fs.writeFileSync(path.join(skillsBaseDir, `${key.toLowerCase()}.md`), mdContent);
|
|
133
148
|
}
|
|
134
149
|
}
|
|
@@ -147,7 +162,29 @@ function scaffoldFrameworkConfigs(targetDir: string, fDir: string, adapter: Adap
|
|
|
147
162
|
}
|
|
148
163
|
};
|
|
149
164
|
writeJsonFile(path.join(frameworkDir, "config.json"), config, dryRun);
|
|
150
|
-
|
|
165
|
+
let statusContent = "# 🎖️ Status\n\n| Agent | State | Active Task | Last Updated | Notes | Extra | Backup |\n|---|---|---|---|---|---|---|\n";
|
|
166
|
+
for (const ag of ALL_AGENTS) {
|
|
167
|
+
statusContent += "| @" + ag.name + " | READY | Idle | - | - | - | - |\n";
|
|
168
|
+
}
|
|
169
|
+
fs.writeFileSync(path.join(frameworkDir, "STATUS.md"), statusContent);
|
|
170
|
+
|
|
171
|
+
// Scaffold eslint-standards.md
|
|
172
|
+
let knowledgeDir = "knowledge";
|
|
173
|
+
if (fDir === ".github") knowledgeDir = "instructions";
|
|
174
|
+
const eslintStandardsContent = `# 🎖️ Agent Enderun — ESLint Standards
|
|
175
|
+
|
|
176
|
+
This document outlines the strict ESLint coding standards for Agent Enderun projects.
|
|
177
|
+
|
|
178
|
+
## 📏 Core Rules
|
|
179
|
+
- **Indentation:** 4 spaces (strict).
|
|
180
|
+
- **Quotes:** Double quotes (\`"\`) for strings.
|
|
181
|
+
- **Semicolons:** Always terminate statements with a semicolon (\`;\`).
|
|
182
|
+
- **No Explicit Any:** Avoid using \`any\`. Use strongly typed interfaces, generics, or \`unknown\` with type assertions.
|
|
183
|
+
- **Unused Variables:** Warning on unused variables unless prefixed with an underscore (\`_\`).
|
|
184
|
+
`;
|
|
185
|
+
const knowledgePath = path.join(frameworkDir, knowledgeDir);
|
|
186
|
+
if (!fs.existsSync(knowledgePath)) fs.mkdirSync(knowledgePath, { recursive: true });
|
|
187
|
+
fs.writeFileSync(path.join(knowledgePath, "eslint-standards.md"), eslintStandardsContent);
|
|
151
188
|
|
|
152
189
|
// Scaffold cli-commands.json
|
|
153
190
|
const cliCommands = {
|
|
@@ -166,9 +203,125 @@ function scaffoldFrameworkConfigs(targetDir: string, fDir: string, adapter: Adap
|
|
|
166
203
|
// Scaffold BRAIN_DASHBOARD.md
|
|
167
204
|
fs.writeFileSync(path.join(frameworkDir, "BRAIN_DASHBOARD.md"), "# 🧠 Brain Dashboard\n\nActive Trace: T-000\nActive Phase: PHASE_0 (Genesis)\n\n## Ajan Durumları (Agent Statuses)\n- @manager: READY\n- @architect: READY\n- @backend: READY\n- @frontend: READY\n- @quality: READY\n");
|
|
168
205
|
|
|
206
|
+
// Scaffold router/routing_rules.md
|
|
207
|
+
const routerDir = path.join(frameworkDir, "router");
|
|
208
|
+
if (!fs.existsSync(routerDir)) fs.mkdirSync(routerDir, { recursive: true });
|
|
209
|
+
fs.writeFileSync(
|
|
210
|
+
path.join(routerDir, "routing_rules.md"),
|
|
211
|
+
`# 📡 Agent Enderun — Natural Language & Event Router
|
|
212
|
+
|
|
213
|
+
This configuration governs how user inputs and event messages are routed across the 12 expert agents.
|
|
214
|
+
|
|
215
|
+
## 🧭 Routing Engine Protocols
|
|
216
|
+
- **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.
|
|
217
|
+
- **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.
|
|
218
|
+
- **Hermes Event Loops:** Agents publish status changes and handoffs which the message broker routes dynamically according to active dependencies.
|
|
219
|
+
`
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// Scaffold registry/agent_registry.md
|
|
223
|
+
const registryDir = path.join(frameworkDir, "registry");
|
|
224
|
+
if (!fs.existsSync(registryDir)) fs.mkdirSync(registryDir, { recursive: true });
|
|
225
|
+
fs.writeFileSync(
|
|
226
|
+
path.join(registryDir, "agent_registry.md"),
|
|
227
|
+
`# 🎖️ Agent Enderun — Army Registry
|
|
228
|
+
|
|
229
|
+
List of active agents, their roles, capacities, and matching directory patterns.
|
|
230
|
+
|
|
231
|
+
| Agent Name | Role | Scope / Globs | Action Compliance |
|
|
232
|
+
|---|---|---|---|
|
|
233
|
+
| \`@manager\` | Orchestrator & Controller | \`*\` | Rules Verification |
|
|
234
|
+
| \`@quality\` | Quality & Test Enforcer | \`*\` | AST Security Scans |
|
|
235
|
+
| \`@database\` | Database Optimizer | \`apps/backend/src/database/**/*\` | Schema & Migrations |
|
|
236
|
+
| \`@backend\` | Core Domain Developer | \`apps/backend/**/*\` | Branded Types & APIs |
|
|
237
|
+
| \`@frontend\` | UI/UX Developer | \`apps/web/**/*\` | Panda CSS, Fluid UI |
|
|
238
|
+
| \`@mobile\` | Mobile App Specialist | \`apps/mobile/**/*\` | Expo/React Native |
|
|
239
|
+
| \`@native\` | Desktop / Native Integrator | \`apps/native/**/*\` | Electron/Tauri |
|
|
240
|
+
| \`@devops\` | Deployment & CI/CD | CI/CD YAML & Deployment files | Native Rollbacks |
|
|
241
|
+
| \`@explorer\` | Codebase Discovery | All source directories | Onboarding & Audit |
|
|
242
|
+
| \`@git\` | Version Control System | \`.git/\` & Commit traces | Trace ID commits |
|
|
243
|
+
| \`@security\` | Security Officer | All source directories | RLS & Secrets Scan |
|
|
244
|
+
| \`@analyst\` | Contract Validator | Contract and API schema definitions | SHA-256 validation |
|
|
245
|
+
`
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
// Scaffold observability files
|
|
249
|
+
const obsDir = path.join(frameworkDir, "observability");
|
|
250
|
+
if (!fs.existsSync(obsDir)) fs.mkdirSync(obsDir, { recursive: true });
|
|
251
|
+
fs.writeFileSync(
|
|
252
|
+
path.join(obsDir, "audit_log.md"),
|
|
253
|
+
`# 🕵️ Agent Enderun — Audit Log
|
|
254
|
+
|
|
255
|
+
This log tracks all asynchronous agent communication and state transitions handled by the Hermes Message Broker.
|
|
256
|
+
|
|
257
|
+
## Hermes Event Log
|
|
258
|
+
`
|
|
259
|
+
);
|
|
260
|
+
fs.writeFileSync(
|
|
261
|
+
path.join(obsDir, "telemetry.md"),
|
|
262
|
+
`# 📊 Agent Enderun — Telemetry & Memory Observability
|
|
263
|
+
|
|
264
|
+
## 🧠 Context & Token Observability
|
|
265
|
+
- **Memory File:** \`${fDir}/memory/PROJECT_MEMORY.md\` (SSOT)
|
|
266
|
+
- **Pruning Trigger:** Active history entries are pruned and archived under \`${fDir}/memory-graph/archive/\` once the log exceeds 10 records.
|
|
267
|
+
- **Audit Logs:** Agent interactions are saved locally inside \`observability/audit_log.md\` to keep API usage transparent and track performance bottlenecks.
|
|
268
|
+
`
|
|
269
|
+
);
|
|
270
|
+
|
|
169
271
|
if (fDir === adapter.frameworkDir) {
|
|
170
272
|
const entryFileName = adapter.shimFile || `${adapter.id.toUpperCase()}.md`;
|
|
171
|
-
|
|
273
|
+
const destShimPath = path.join(targetDir, entryFileName);
|
|
274
|
+
|
|
275
|
+
let shimContent = SHIM_TEMPLATES[adapter.id] || `# 🎖️ ${FRAMEWORK_NAME} — ${adapter.id.toUpperCase()} Strategy\n`;
|
|
276
|
+
shimContent = remapFrameworkContent(shimContent, fDir, adapter.id);
|
|
277
|
+
|
|
278
|
+
fs.writeFileSync(destShimPath, shimContent);
|
|
279
|
+
console.warn(`✅ Strategy shim created: ${entryFileName}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function scaffoldKnowledgeDocs(targetDir: string, fDir: string, dryRun: boolean) {
|
|
284
|
+
if (dryRun) return;
|
|
285
|
+
const pkgRoot = getPackageRoot();
|
|
286
|
+
const sourceDocsDir = path.join(pkgRoot, "templates");
|
|
287
|
+
const frameworkDir = path.join(targetDir, fDir);
|
|
288
|
+
|
|
289
|
+
let knowledgeDirName = "knowledge";
|
|
290
|
+
if (fDir === ".github") knowledgeDirName = "instructions";
|
|
291
|
+
const destKnowledgeDir = path.join(frameworkDir, knowledgeDirName);
|
|
292
|
+
|
|
293
|
+
if (!fs.existsSync(destKnowledgeDir)) {
|
|
294
|
+
fs.mkdirSync(destKnowledgeDir, { recursive: true });
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const filesToCopy = [
|
|
298
|
+
{ src: "architecture/standards/data-fetching-patterns.md", dest: "data-fetching-patterns.md" },
|
|
299
|
+
{ src: "architecture/standards/design-system.md", dest: "design-system.md" },
|
|
300
|
+
{ src: "architecture/standards/logging.md", dest: "logging.md" },
|
|
301
|
+
{ src: "architecture/standards/tech-stack.md", dest: "tech-stack.md" },
|
|
302
|
+
{ src: "architecture/standards/documentation-ownership.md", dest: "documentation_ownership.md" },
|
|
303
|
+
{ src: "architecture/standards/mobile-standards.md", dest: "mobile_standards.md" },
|
|
304
|
+
{ src: "architecture/standards/crud-governance.md", dest: "crud-governance.md" },
|
|
305
|
+
{ src: "backend/error-handling.md", dest: "error-handling.md" },
|
|
306
|
+
{ src: "frontend/component-patterns.md", dest: "component-patterns.md" },
|
|
307
|
+
{ src: "architecture/enterprise-architecture.md", dest: "enterprise-architecture.md" },
|
|
308
|
+
{ src: "architecture/approval-flows.md", dest: "approval-flows.md" },
|
|
309
|
+
{ src: "architecture/agents-manifest.md", dest: "agents-manifest.md" }
|
|
310
|
+
];
|
|
311
|
+
|
|
312
|
+
for (const item of filesToCopy) {
|
|
313
|
+
const srcPath = path.join(sourceDocsDir, item.src);
|
|
314
|
+
const destPath = path.join(destKnowledgeDir, item.dest);
|
|
315
|
+
try {
|
|
316
|
+
if (fs.existsSync(srcPath)) {
|
|
317
|
+
let content = fs.readFileSync(srcPath, "utf8");
|
|
318
|
+
content = remapFrameworkContent(content, fDir, fDir === ".github" ? "codex" : "gemini");
|
|
319
|
+
fs.writeFileSync(destPath, content);
|
|
320
|
+
console.warn(`✅ Copied document: ${item.dest} to ${fDir}/${knowledgeDirName}/`);
|
|
321
|
+
}
|
|
322
|
+
} catch (e) {
|
|
323
|
+
console.warn(`⚠️ Failed to copy ${item.src} to ${destPath}: ${e}`);
|
|
324
|
+
}
|
|
172
325
|
}
|
|
173
326
|
}
|
|
174
327
|
|
|
@@ -187,6 +340,7 @@ export async function initCommand(adapterInput?: string, dryRun = false, isInter
|
|
|
187
340
|
scaffoldCoreAgents(selections.selectedAgents, path.join(base, "agents"), adapter.id, dryRun);
|
|
188
341
|
scaffoldSkills(path.join(base, "skills"), dryRun);
|
|
189
342
|
scaffoldFrameworkConfigs(targetDir, fdir, adapter, dryRun, selections.selectedPalette);
|
|
343
|
+
scaffoldKnowledgeDocs(targetDir, fdir, dryRun);
|
|
190
344
|
|
|
191
345
|
// NATIVE TOOL CONFIGURATION (MCP REGISTRATION)
|
|
192
346
|
if (!dryRun) {
|
|
@@ -196,10 +350,33 @@ export async function initCommand(adapterInput?: string, dryRun = false, isInter
|
|
|
196
350
|
|
|
197
351
|
scaffoldConstitution(targetDir, adapter.frameworkDir, adapter.id, dryRun);
|
|
198
352
|
ensureDir(path.join(targetDir, "apps"), dryRun);
|
|
353
|
+
|
|
354
|
+
// Scaffold target project docs/ folder
|
|
355
|
+
const targetDocsDir = path.join(targetDir, "docs");
|
|
356
|
+
ensureDir(targetDocsDir, dryRun);
|
|
357
|
+
if (!dryRun) {
|
|
358
|
+
const readmePath = path.join(targetDocsDir, "README.md");
|
|
359
|
+
if (!fs.existsSync(readmePath)) {
|
|
360
|
+
fs.writeFileSync(readmePath, "# 📝 Project Documentation\n\nWelcome to your new project scaffolded with Agent Enderun.\n\n## Project Overview\nWrite your project description, goals, and target audience here. The AI agents will read this file to understand the scope.\n");
|
|
361
|
+
}
|
|
362
|
+
const gettingStartedPath = path.join(targetDocsDir, "getting-started.md");
|
|
363
|
+
if (!fs.existsSync(gettingStartedPath)) {
|
|
364
|
+
fs.writeFileSync(gettingStartedPath, "# 🚀 Getting Started\n\n## Project Requirements\nWrite the core requirements and features of your application here.\n");
|
|
365
|
+
}
|
|
366
|
+
console.warn("✅ Project docs folder initialized with placeholders.");
|
|
367
|
+
}
|
|
368
|
+
|
|
199
369
|
initializeMemory(path.join(targetDir, adapter.frameworkDir, "memory/PROJECT_MEMORY.md"), adapter.frameworkDir, dryRun);
|
|
200
370
|
const mcpConfig = { mcpServers: { "agent-enderun": { command: "node", args: [path.join(getPackageRoot(), "framework-mcp/dist/index.js")], env: { ENDERUN_PROJECT_ROOT: targetDir } } } };
|
|
201
371
|
fs.writeFileSync(path.join(targetDir, "mcp.json"), JSON.stringify(mcpConfig, null, 2));
|
|
372
|
+
|
|
373
|
+
const paths = getConfiguredPaths();
|
|
374
|
+
const frontendDir = path.join(targetDir, paths.frontend);
|
|
375
|
+
ensureDir(frontendDir, dryRun);
|
|
376
|
+
|
|
202
377
|
const pandaTemplate = `import { defineConfig } from "@pandacss/dev";\nexport default defineConfig({ theme: { extend: { tokens: { colors: { primary: { value: "${COLOR_PALETTES[selections.selectedPalette as keyof typeof COLOR_PALETTES]?.primary || "#0ea5e9"}" } } } } } });`;
|
|
203
|
-
|
|
378
|
+
if (!dryRun) {
|
|
379
|
+
fs.writeFileSync(path.join(frontendDir, "panda.config.ts"), pandaTemplate);
|
|
380
|
+
}
|
|
204
381
|
console.warn(`\n✨ ${FRAMEWORK_NAME} scaffolded! (v${FRAMEWORK_VERSION})`);
|
|
205
382
|
}
|
|
@@ -3,15 +3,13 @@ import path from "path";
|
|
|
3
3
|
|
|
4
4
|
import { getFrameworkDir } from "../utils/memory.js";
|
|
5
5
|
|
|
6
|
-
const targetDir = process.cwd(); // Assuming targetDir is process.cwd() in the CLI context
|
|
7
|
-
|
|
8
6
|
export function updateKnowledgeBaseCommand(topic: string, content: string) {
|
|
9
7
|
if (!topic || !content) {
|
|
10
8
|
console.error("❌ Usage: agent-enderun update_knowledge_base <topic> <content>");
|
|
11
9
|
return;
|
|
12
10
|
}
|
|
13
11
|
const frameworkDir = getFrameworkDir();
|
|
14
|
-
const kbDir = path.join(
|
|
12
|
+
const kbDir = path.join(frameworkDir, "knowledge");
|
|
15
13
|
if (!fs.existsSync(kbDir)) fs.mkdirSync(kbDir, { recursive: true });
|
|
16
14
|
const fileName = topic.replace(/[^a-z0-9]/gi, "_").toLowerCase() + ".md";
|
|
17
15
|
fs.writeFileSync(path.join(kbDir, fileName), content);
|
|
@@ -24,7 +22,7 @@ export function searchKnowledgeBaseCommand(query: string) {
|
|
|
24
22
|
return;
|
|
25
23
|
}
|
|
26
24
|
const frameworkDir = getFrameworkDir();
|
|
27
|
-
const kbDir = path.join(
|
|
25
|
+
const kbDir = path.join(frameworkDir, "knowledge");
|
|
28
26
|
if (!fs.existsSync(kbDir)) {
|
|
29
27
|
console.warn("ℹ️ Knowledge base is empty.");
|
|
30
28
|
return;
|
package/src/cli/commands/log.ts
CHANGED
|
@@ -4,11 +4,9 @@ import path from "path";
|
|
|
4
4
|
import { getFrameworkDir } from "../utils/memory.js";
|
|
5
5
|
import { normalizeAgentName } from "../utils/string.js";
|
|
6
6
|
|
|
7
|
-
const targetDir = process.cwd(); // Assuming targetDir is process.cwd() in the CLI context
|
|
8
|
-
|
|
9
7
|
export function logAgentActionCommand(data: { agent?: unknown; action?: string; requestId?: string; traceId?: string; status?: string; summary?: string; files?: string[]; details?: Record<string, unknown> }) {
|
|
10
8
|
const frameworkDir = getFrameworkDir();
|
|
11
|
-
const logsDir = path.join(
|
|
9
|
+
const logsDir = path.join(frameworkDir, "logs");
|
|
12
10
|
if (!fs.existsSync(logsDir)) {
|
|
13
11
|
fs.mkdirSync(logsDir, { recursive: true });
|
|
14
12
|
}
|
|
@@ -3,24 +3,69 @@ import path from "path";
|
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { getFrameworkDir } from "../utils/memory.js";
|
|
5
5
|
import { UI } from "../utils/ui.js";
|
|
6
|
+
import { z } from "zod";
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
export const HermesMessageSchema = z.object({
|
|
9
|
+
timestamp: z.string(),
|
|
10
|
+
from: z.string(),
|
|
11
|
+
to: z.string(),
|
|
12
|
+
category: z.enum(["ACTION", "DELEGATION", "SUBTASK", "REPLY", "ALERT"]),
|
|
13
|
+
content: z.string(),
|
|
14
|
+
traceId: z.string(),
|
|
15
|
+
parentId: z.string().optional(),
|
|
16
|
+
status: z.enum(["PENDING", "PROCESSED", "WAITING", "APPROVED"]),
|
|
17
|
+
priority: z.enum(["HIGH", "NORMAL", "LOW"]).optional(),
|
|
18
|
+
action: z.string().optional()
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export type HermesMessage = z.infer<typeof HermesMessageSchema>;
|
|
20
22
|
|
|
21
23
|
export async function orchestrateCommand() {
|
|
22
24
|
const frameworkDir = getFrameworkDir();
|
|
23
|
-
const messagesDir = path.join(
|
|
25
|
+
const messagesDir = path.join(frameworkDir, "messages");
|
|
26
|
+
|
|
27
|
+
// Check for agent timeouts (e.g. 30 minutes in EXECUTING state)
|
|
28
|
+
const statusPath = path.join(frameworkDir, "STATUS.md");
|
|
29
|
+
if (fs.existsSync(statusPath)) {
|
|
30
|
+
try {
|
|
31
|
+
const content = fs.readFileSync(statusPath, "utf8");
|
|
32
|
+
const lines = content.split("\n");
|
|
33
|
+
let updatedStatus = false;
|
|
34
|
+
const newLines = lines.map(line => {
|
|
35
|
+
if (line.includes("| @") && line.includes("| EXECUTING |")) {
|
|
36
|
+
const parts = line.split("|");
|
|
37
|
+
if (parts.length >= 7) {
|
|
38
|
+
const lastUpdatedStr = parts[4].trim();
|
|
39
|
+
if (lastUpdatedStr && lastUpdatedStr !== "-") {
|
|
40
|
+
const lastUpdatedTime = Date.parse(lastUpdatedStr);
|
|
41
|
+
if (!isNaN(lastUpdatedTime) && Date.now() - lastUpdatedTime > 30 * 60 * 1000) {
|
|
42
|
+
const agentName = parts[1].trim();
|
|
43
|
+
UI.error(`⚠️ Agent ${agentName} has TIMED OUT (in EXECUTING state for >30m). Transitioning to BLOCKED.`);
|
|
44
|
+
parts[2] = " BLOCKED ";
|
|
45
|
+
parts[3] = " Timeout occurred ";
|
|
46
|
+
parts[4] = ` ${new Date().toISOString()} `;
|
|
47
|
+
updatedStatus = true;
|
|
48
|
+
|
|
49
|
+
// Log to audit log
|
|
50
|
+
const auditPath = path.join(frameworkDir, "observability/audit_log.md");
|
|
51
|
+
if (fs.existsSync(auditPath)) {
|
|
52
|
+
const logEntry = `\n- **[${new Date().toISOString()}]** ${agentName} status auto-escalated to BLOCKED due to 30m execution timeout.`;
|
|
53
|
+
fs.appendFileSync(auditPath, logEntry);
|
|
54
|
+
}
|
|
55
|
+
return parts.join("|");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return line;
|
|
61
|
+
});
|
|
62
|
+
if (updatedStatus) {
|
|
63
|
+
fs.writeFileSync(statusPath, newLines.join("\n"));
|
|
64
|
+
}
|
|
65
|
+
} catch {
|
|
66
|
+
UI.error("Ajan zaman aşımı kontrolü sırasında hata oluştu.");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
24
69
|
|
|
25
70
|
if (!fs.existsSync(messagesDir)) {
|
|
26
71
|
UI.success("Henüz işlenecek bir mesaj yok.");
|
|
@@ -40,11 +85,16 @@ export async function orchestrateCommand() {
|
|
|
40
85
|
const allMsgs: HermesMessage[] = [];
|
|
41
86
|
lines.forEach((line) => {
|
|
42
87
|
if (!line.trim()) return;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
88
|
+
try {
|
|
89
|
+
const parsed = JSON.parse(line);
|
|
90
|
+
const msg = HermesMessageSchema.parse(parsed);
|
|
91
|
+
if (msg.status === "PENDING") {
|
|
92
|
+
pendingMessages.push(msg);
|
|
93
|
+
}
|
|
94
|
+
allMsgs.push(msg);
|
|
95
|
+
} catch (e) {
|
|
96
|
+
UI.error(`Geçersiz Hermes mesaj formatı atlandı: ${(e as Error).message}`);
|
|
46
97
|
}
|
|
47
|
-
allMsgs.push(msg);
|
|
48
98
|
});
|
|
49
99
|
fileMessagesMap[file] = allMsgs;
|
|
50
100
|
} catch {
|
|
@@ -57,6 +107,15 @@ export async function orchestrateCommand() {
|
|
|
57
107
|
return;
|
|
58
108
|
}
|
|
59
109
|
|
|
110
|
+
// Sort by priority: HIGH -> NORMAL -> LOW
|
|
111
|
+
const priorityOrder = { HIGH: 1, NORMAL: 2, LOW: 3 };
|
|
112
|
+
pendingMessages.sort((a, b) => {
|
|
113
|
+
const pA = priorityOrder[a.priority || "NORMAL"] || 2;
|
|
114
|
+
const pB = priorityOrder[b.priority || "NORMAL"] || 2;
|
|
115
|
+
if (pA !== pB) return pA - pB;
|
|
116
|
+
return Date.parse(a.timestamp) - Date.parse(b.timestamp);
|
|
117
|
+
});
|
|
118
|
+
|
|
60
119
|
UI.intent("Multi-Agent Orkestrasyonu", `${pendingMessages.length} adet bekleyen görev ve işbirliği mesajı bulundu.`);
|
|
61
120
|
|
|
62
121
|
for (const msg of pendingMessages) {
|
|
@@ -89,15 +148,41 @@ export async function orchestrateCommand() {
|
|
|
89
148
|
msg.status = "PROCESSED";
|
|
90
149
|
}
|
|
91
150
|
|
|
92
|
-
// Write back updated message statuses to files
|
|
151
|
+
// Write back updated message statuses to files and archive processed messages
|
|
152
|
+
const archiveDir = path.join(messagesDir, "archive");
|
|
153
|
+
|
|
93
154
|
for (const file of Object.keys(fileMessagesMap)) {
|
|
94
155
|
const filePath = path.join(messagesDir, file);
|
|
95
156
|
const msgs = fileMessagesMap[file];
|
|
157
|
+
|
|
158
|
+
const activeMsgs = msgs.filter(m => m.status !== "PROCESSED");
|
|
159
|
+
const processedMsgs = msgs.filter(m => m.status === "PROCESSED");
|
|
160
|
+
|
|
96
161
|
try {
|
|
97
|
-
|
|
98
|
-
|
|
162
|
+
// Write remaining active messages
|
|
163
|
+
if (activeMsgs.length > 0) {
|
|
164
|
+
const updatedContent = activeMsgs.map(m => JSON.stringify(m)).join("\n") + "\n";
|
|
165
|
+
fs.writeFileSync(filePath, updatedContent, "utf8");
|
|
166
|
+
} else {
|
|
167
|
+
// Empty the file if no active messages
|
|
168
|
+
if (fs.existsSync(filePath)) {
|
|
169
|
+
fs.writeFileSync(filePath, "", "utf8");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Archive processed messages
|
|
174
|
+
if (processedMsgs.length > 0) {
|
|
175
|
+
if (!fs.existsSync(archiveDir)) {
|
|
176
|
+
fs.mkdirSync(archiveDir, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
const agentName = file.replace(".json", "");
|
|
179
|
+
const archivePath = path.join(archiveDir, `${agentName}_archive.json`);
|
|
180
|
+
const archiveContent = processedMsgs.map(m => JSON.stringify(m)).join("\n") + "\n";
|
|
181
|
+
fs.appendFileSync(archivePath, archiveContent, "utf8");
|
|
182
|
+
UI.success(`Archived ${processedMsgs.length} messages for @${agentName}`);
|
|
183
|
+
}
|
|
99
184
|
} catch {
|
|
100
|
-
UI.error(`${file} mesaj dosyası güncellenirken hata oluştu.`);
|
|
185
|
+
UI.error(`${file} mesaj dosyası güncellenirken ve arşivlenirken hata oluştu.`);
|
|
101
186
|
}
|
|
102
187
|
}
|
|
103
188
|
}
|
|
@@ -105,24 +190,65 @@ export async function orchestrateCommand() {
|
|
|
105
190
|
/**
|
|
106
191
|
* Standard tool for agents to delegate tasks to other agents.
|
|
107
192
|
*/
|
|
108
|
-
export function sendMessage(args: {
|
|
193
|
+
export async function sendMessage(args: {
|
|
109
194
|
from: string;
|
|
110
195
|
to: string;
|
|
111
196
|
category: "ACTION" | "DELEGATION" | "SUBTASK" | "REPLY" | "ALERT";
|
|
112
197
|
content: string;
|
|
113
198
|
traceId: string;
|
|
114
199
|
parentId?: string;
|
|
200
|
+
priority?: "HIGH" | "NORMAL" | "LOW";
|
|
115
201
|
}) {
|
|
116
202
|
const frameworkDir = getFrameworkDir();
|
|
117
|
-
const messagesDir = path.join(
|
|
203
|
+
const messagesDir = path.join(frameworkDir, "messages");
|
|
118
204
|
const agentName = args.to.replace("@", "");
|
|
119
205
|
const messagePath = path.join(messagesDir, `${agentName}.json`);
|
|
206
|
+
const lockPath = path.join(messagesDir, ".lock");
|
|
207
|
+
|
|
208
|
+
let retries = 3;
|
|
209
|
+
let acquired = false;
|
|
210
|
+
while (retries > 0) {
|
|
211
|
+
try {
|
|
212
|
+
if (fs.existsSync(lockPath)) {
|
|
213
|
+
try {
|
|
214
|
+
const stats = fs.statSync(lockPath);
|
|
215
|
+
if (Date.now() - stats.mtimeMs > 5000) {
|
|
216
|
+
fs.unlinkSync(lockPath);
|
|
217
|
+
}
|
|
218
|
+
} catch {
|
|
219
|
+
// ignore if concurrently unlinked
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (!fs.existsSync(messagesDir)) {
|
|
223
|
+
fs.mkdirSync(messagesDir, { recursive: true });
|
|
224
|
+
}
|
|
225
|
+
fs.writeFileSync(lockPath, `Locked by ${args.from} at ${new Date().toISOString()}`, { flag: "wx" });
|
|
226
|
+
acquired = true;
|
|
227
|
+
break;
|
|
228
|
+
} catch (err: unknown) {
|
|
229
|
+
const error = err as { code?: string; message?: string };
|
|
230
|
+
if (error.code === "EEXIST") {
|
|
231
|
+
retries--;
|
|
232
|
+
if (retries > 0) {
|
|
233
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
234
|
+
}
|
|
235
|
+
} else {
|
|
236
|
+
UI.error(`Kilit alınırken beklenmedik hata oluştu: ${error.message || String(err)}`);
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (!acquired) {
|
|
243
|
+
UI.error(`Mesaj iletilemedi: Hermes kilidi meşgul. (${args.from} -> ${args.to})`);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
120
246
|
|
|
121
247
|
try {
|
|
122
|
-
|
|
123
|
-
|
|
248
|
+
const defaultPriority = (args.category === "ALERT" || args.category === "ACTION") ? "HIGH" : "NORMAL";
|
|
124
249
|
const message: HermesMessage = {
|
|
125
250
|
timestamp: new Date().toISOString(),
|
|
251
|
+
priority: args.priority || defaultPriority,
|
|
126
252
|
...args,
|
|
127
253
|
status: "PENDING"
|
|
128
254
|
};
|
|
@@ -130,21 +256,29 @@ export function sendMessage(args: {
|
|
|
130
256
|
fs.appendFileSync(messagePath, JSON.stringify(message) + "\n");
|
|
131
257
|
|
|
132
258
|
// Log collaboration to audit log
|
|
133
|
-
const auditPath = path.join(
|
|
259
|
+
const auditPath = path.join(frameworkDir, "observability/audit_log.md");
|
|
134
260
|
if (fs.existsSync(auditPath)) {
|
|
135
|
-
const logEntry = `\n- **[${message.timestamp}]** ${args.from} -> ${args.to} | ${args.category} | Trace: ${args.traceId}`;
|
|
261
|
+
const logEntry = `\n- **[${message.timestamp}]** ${args.from} -> ${args.to} | ${args.category} | Priority: ${message.priority} | Trace: ${args.traceId}`;
|
|
136
262
|
fs.appendFileSync(auditPath, logEntry);
|
|
137
263
|
}
|
|
138
264
|
|
|
139
265
|
return message;
|
|
140
266
|
} catch {
|
|
141
267
|
UI.error(`Mesaj iletilemedi: ${args.from} -> ${args.to}`);
|
|
268
|
+
} finally {
|
|
269
|
+
if (acquired && fs.existsSync(lockPath)) {
|
|
270
|
+
try {
|
|
271
|
+
fs.unlinkSync(lockPath);
|
|
272
|
+
} catch {
|
|
273
|
+
// Ignore delete errors if concurrently unlinked
|
|
274
|
+
}
|
|
275
|
+
}
|
|
142
276
|
}
|
|
143
277
|
}
|
|
144
278
|
|
|
145
279
|
function transitionAgentState(agent: string, state: string, task: string) {
|
|
146
280
|
const frameworkDir = getFrameworkDir();
|
|
147
|
-
const statusPath = path.join(
|
|
281
|
+
const statusPath = path.join(frameworkDir, "STATUS.md");
|
|
148
282
|
if (!fs.existsSync(statusPath)) return;
|
|
149
283
|
try {
|
|
150
284
|
const content = fs.readFileSync(statusPath, "utf8");
|
|
@@ -156,6 +290,7 @@ function transitionAgentState(agent: string, state: string, task: string) {
|
|
|
156
290
|
if (parts.length >= 7) {
|
|
157
291
|
parts[2] = ` ${state} `;
|
|
158
292
|
parts[3] = ` ${task.slice(0, 25)}... `;
|
|
293
|
+
parts[4] = ` ${new Date().toISOString()} `;
|
|
159
294
|
return parts.join("|");
|
|
160
295
|
}
|
|
161
296
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
2
4
|
|
|
3
5
|
import { getMemoryPath, getFrameworkDir } from "../utils/memory.js";
|
|
4
6
|
|
|
@@ -49,6 +51,37 @@ export function statusCommand() {
|
|
|
49
51
|
console.warn("⚠️ Status data could not be parsed in standard formats.");
|
|
50
52
|
}
|
|
51
53
|
|
|
54
|
+
// Army status check
|
|
55
|
+
const statusPath = path.join(frameworkDir, "STATUS.md");
|
|
56
|
+
if (fs.existsSync(statusPath)) {
|
|
57
|
+
try {
|
|
58
|
+
const statusContent = fs.readFileSync(statusPath, "utf8");
|
|
59
|
+
const lines = statusContent.split("\n");
|
|
60
|
+
const agentRows = lines.filter(line => line.includes("| @") && line.includes("|"));
|
|
61
|
+
if (agentRows.length > 0) {
|
|
62
|
+
console.warn("\n🎖️ Enderun Army Status (Agent States):");
|
|
63
|
+
agentRows.forEach(row => {
|
|
64
|
+
const parts = row.split("|");
|
|
65
|
+
if (parts.length >= 4) {
|
|
66
|
+
const agentName = parts[1].trim();
|
|
67
|
+
const state = parts[2].trim();
|
|
68
|
+
const activeTask = parts[3].trim();
|
|
69
|
+
|
|
70
|
+
let coloredState = state;
|
|
71
|
+
if (state === "READY") coloredState = chalk.green(state);
|
|
72
|
+
else if (state === "EXECUTING") coloredState = chalk.yellow(state);
|
|
73
|
+
else if (state === "BLOCKED" || state === "TIMEOUT") coloredState = chalk.red(state);
|
|
74
|
+
else if (state === "WAITING") coloredState = chalk.cyan(state);
|
|
75
|
+
|
|
76
|
+
console.warn(` ${chalk.bold(agentName.padEnd(12))} : [${coloredState}] - ${activeTask}`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
} catch {
|
|
81
|
+
// Ignore status read errors
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
52
85
|
const tasksSection = content.match(/## ACTIVE TASKS\n\n([\s\S]*?)(?=\n##|$)/);
|
|
53
86
|
if (tasksSection) {
|
|
54
87
|
console.warn("\n📋 Active Tasks:");
|