atabey 0.0.6 β 0.0.8
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/ATABEY.md +4 -4
- package/README.md +35 -33
- package/bin/cli.js +2 -2
- package/bin/validate-agent-army.js +6 -6
- package/dist/framework-mcp/src/constants.js +1 -1
- package/dist/framework-mcp/src/constants.js.map +1 -1
- package/dist/framework-mcp/src/index.js +29 -5
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/resources/index.d.ts +10 -0
- package/dist/framework-mcp/src/resources/index.js +59 -0
- package/dist/framework-mcp/src/resources/index.js.map +1 -0
- package/dist/framework-mcp/src/tools/control_plane/locking.js +3 -3
- package/dist/framework-mcp/src/tools/control_plane/locking.js.map +1 -1
- package/dist/framework-mcp/src/tools/control_plane/registry.js +3 -2
- package/dist/framework-mcp/src/tools/control_plane/registry.js.map +1 -1
- package/dist/framework-mcp/src/tools/definitions.js +33 -1
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.d.ts +1 -1
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +8 -3
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/patch_file.d.ts +1 -1
- package/dist/framework-mcp/src/tools/file_system/patch_file.js +8 -3
- 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 +3 -3
- package/dist/framework-mcp/src/tools/file_system/read_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/replace_text.d.ts +1 -1
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +8 -3
- package/dist/framework-mcp/src/tools/file_system/replace_text.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/write_file.d.ts +1 -1
- package/dist/framework-mcp/src/tools/file_system/write_file.js +10 -5
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/audit_deps.js +2 -2
- package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/run_tests.js +2 -2
- package/dist/framework-mcp/src/tools/framework/run_tests.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/submit_plan.d.ts +10 -0
- package/dist/framework-mcp/src/tools/framework/submit_plan.js +14 -0
- package/dist/framework-mcp/src/tools/framework/submit_plan.js.map +1 -0
- package/dist/framework-mcp/src/tools/framework/update_memory.js +1 -1
- package/dist/framework-mcp/src/tools/framework/update_memory.js.map +1 -1
- package/dist/framework-mcp/src/tools/index.js +2 -0
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/memory/get_insights.js +1 -1
- package/dist/framework-mcp/src/tools/memory/get_insights.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/log_action.js +1 -1
- package/dist/framework-mcp/src/tools/messaging/log_action.js.map +1 -1
- package/dist/framework-mcp/src/tools/messaging/send_message.js +5 -5
- package/dist/framework-mcp/src/tools/messaging/send_message.js.map +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.js +1 -1
- package/dist/framework-mcp/src/tools/observability/check_ports.js.map +1 -1
- package/dist/framework-mcp/src/tools/quality/check_lint.js +2 -2
- package/dist/framework-mcp/src/tools/quality/check_lint.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/get_gaps.js +1 -1
- package/dist/framework-mcp/src/tools/search/get_gaps.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/grep_search.js +3 -3
- package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
- package/dist/framework-mcp/src/tools/types.d.ts +1 -0
- package/dist/framework-mcp/src/utils/compliance.d.ts +6 -0
- package/dist/framework-mcp/src/utils/compliance.js +158 -5
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
- package/dist/framework-mcp/src/utils/permissions.d.ts +12 -0
- package/dist/framework-mcp/src/utils/permissions.js +72 -0
- package/dist/framework-mcp/src/utils/permissions.js.map +1 -0
- package/dist/framework-mcp/tests/tools/file_system/compliance-risk.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/file_system/compliance-risk.test.js +84 -0
- package/dist/framework-mcp/tests/tools/file_system/compliance-risk.test.js.map +1 -0
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +31 -31
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/file_system/permissions.test.d.ts +1 -0
- package/dist/framework-mcp/tests/tools/file_system/permissions.test.js +92 -0
- package/dist/framework-mcp/tests/tools/file_system/permissions.test.js.map +1 -0
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +5 -5
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/src/cli/adapters/core.js +13 -20
- package/dist/src/cli/adapters/core.js.map +1 -1
- package/dist/src/cli/adapters/scaffold.js +2 -2
- package/dist/src/cli/adapters/scaffold.js.map +1 -1
- package/dist/src/cli/commands/check.js +5 -3
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/compliance.js +2 -2
- package/dist/src/cli/commands/compliance.js.map +1 -1
- package/dist/src/cli/commands/contract.js +2 -2
- package/dist/src/cli/commands/contract.js.map +1 -1
- package/dist/src/cli/commands/dashboard.d.ts +5 -0
- package/dist/src/cli/commands/dashboard.js +124 -0
- package/dist/src/cli/commands/dashboard.js.map +1 -0
- package/dist/src/cli/commands/explorer.js +3 -3
- package/dist/src/cli/commands/explorer.js.map +1 -1
- package/dist/src/cli/commands/git.js +3 -3
- package/dist/src/cli/commands/git.js.map +1 -1
- package/dist/src/cli/commands/init/create-agent.d.ts +4 -0
- package/dist/src/cli/commands/init/create-agent.js +59 -0
- package/dist/src/cli/commands/init/create-agent.js.map +1 -0
- package/dist/src/cli/commands/init/scaffold-core.d.ts +1 -0
- package/dist/src/cli/commands/init/scaffold-core.js +11 -7
- package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-docs.d.ts +1 -0
- package/dist/src/cli/commands/init/scaffold-docs.js +4 -6
- package/dist/src/cli/commands/init/scaffold-docs.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-ops.js +4 -4
- package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-standards.js +10 -8
- package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
- package/dist/src/cli/commands/init.js +26 -10
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/knowledge.js +3 -3
- package/dist/src/cli/commands/knowledge.js.map +1 -1
- package/dist/src/cli/commands/lint.js +2 -2
- package/dist/src/cli/commands/lint.js.map +1 -1
- package/dist/src/cli/commands/log.js +6 -28
- package/dist/src/cli/commands/log.js.map +1 -1
- package/dist/src/cli/commands/orchestrate.d.ts +10 -17
- package/dist/src/cli/commands/orchestrate.js +92 -341
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/plan.d.ts +5 -0
- package/dist/src/cli/commands/plan.js +80 -59
- package/dist/src/cli/commands/plan.js.map +1 -1
- package/dist/src/cli/commands/script.js +3 -3
- package/dist/src/cli/commands/script.js.map +1 -1
- package/dist/src/cli/commands/security.js +2 -2
- package/dist/src/cli/commands/security.js.map +1 -1
- package/dist/src/cli/commands/status.js +65 -8
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/commands/trace.d.ts +4 -0
- package/dist/src/cli/commands/trace.js +83 -2
- package/dist/src/cli/commands/trace.js.map +1 -1
- package/dist/src/cli/index.js +68 -18
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/shims.js +14 -14
- package/dist/src/cli/utils/claude.js +1 -1
- package/dist/src/cli/utils/claude.js.map +1 -1
- package/dist/src/cli/utils/compliance.js +7 -1
- package/dist/src/cli/utils/compliance.js.map +1 -1
- package/dist/src/cli/utils/fs.js +1 -1
- package/dist/src/cli/utils/fs.js.map +1 -1
- package/dist/src/cli/utils/i18n.d.ts +1 -0
- package/dist/src/cli/utils/i18n.js +2 -0
- package/dist/src/cli/utils/i18n.js.map +1 -1
- package/dist/src/cli/utils/memory.d.ts +12 -3
- package/dist/src/cli/utils/memory.js +39 -31
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/cli/utils/pkg.js +2 -2
- package/dist/src/cli/utils/pkg.js.map +1 -1
- package/dist/src/cli/utils/schemas.d.ts +8 -8
- package/dist/src/cli/utils/ui.js +4 -4
- package/dist/src/cli/utils/ui.js.map +1 -1
- package/dist/src/contracts/tasks.d.ts +2 -2
- package/dist/src/dashboard/vite.config.d.ts +2 -0
- package/dist/src/dashboard/vite.config.js +16 -0
- package/dist/src/dashboard/vite.config.js.map +1 -0
- package/dist/src/modules/adapters/definitions.js +10 -10
- package/dist/src/modules/adapters/definitions.js.map +1 -1
- package/dist/src/modules/adapters/shared.js +4 -4
- package/dist/src/modules/adapters/shared.js.map +1 -1
- package/dist/src/modules/agents/definitions.d.ts +19 -0
- package/dist/src/modules/agents/definitions.js +74 -21
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/modules/agents/registry/backend.js +8 -0
- package/dist/src/modules/agents/registry/backend.js.map +1 -1
- package/dist/src/modules/agents/registry/database.js +7 -0
- package/dist/src/modules/agents/registry/database.js.map +1 -1
- package/dist/src/modules/agents/registry/devops.js +6 -0
- package/dist/src/modules/agents/registry/devops.js.map +1 -1
- package/dist/src/modules/agents/registry/frontend.js +8 -0
- package/dist/src/modules/agents/registry/frontend.js.map +1 -1
- package/dist/src/modules/agents/registry/security.js +6 -0
- package/dist/src/modules/agents/registry/security.js.map +1 -1
- package/dist/src/modules/agents/types.d.ts +2 -0
- package/dist/src/modules/engines/evaluation-engine.d.ts +11 -0
- package/dist/src/modules/engines/evaluation-engine.js +103 -0
- package/dist/src/modules/engines/evaluation-engine.js.map +1 -0
- package/dist/src/modules/engines/health-engine.d.ts +16 -0
- package/dist/src/modules/engines/health-engine.js +50 -0
- package/dist/src/modules/engines/health-engine.js.map +1 -0
- package/dist/src/modules/engines/planning-engine.d.ts +25 -0
- package/dist/src/modules/engines/planning-engine.js +79 -0
- package/dist/src/modules/engines/planning-engine.js.map +1 -0
- package/dist/src/modules/engines/risk-engine.d.ts +18 -0
- package/dist/src/modules/engines/risk-engine.js +106 -0
- package/dist/src/modules/engines/risk-engine.js.map +1 -0
- package/dist/src/modules/engines/routing-engine.d.ts +11 -0
- package/dist/src/modules/engines/routing-engine.js +74 -0
- package/dist/src/modules/engines/routing-engine.js.map +1 -0
- package/dist/src/modules/engines/types.d.ts +47 -0
- package/dist/src/modules/engines/types.js +2 -0
- package/dist/src/modules/engines/types.js.map +1 -0
- package/dist/src/shared/constants.d.ts +6 -2
- package/dist/src/shared/constants.js +5 -1
- package/dist/src/shared/constants.js.map +1 -1
- package/dist/src/shared/fs.d.ts +1 -0
- package/dist/src/shared/fs.js +4 -0
- package/dist/src/shared/fs.js.map +1 -1
- package/dist/src/shared/storage.d.ts +60 -0
- package/dist/src/shared/storage.js +208 -0
- package/dist/src/shared/storage.js.map +1 -0
- package/dist/tests/adapter.test.js +3 -2
- package/dist/tests/adapter.test.js.map +1 -1
- package/dist/tests/agent-memory-v2.test.d.ts +1 -0
- package/dist/tests/agent-memory-v2.test.js +68 -0
- package/dist/tests/agent-memory-v2.test.js.map +1 -0
- package/dist/tests/agents-definitions.test.js +42 -0
- package/dist/tests/agents-definitions.test.js.map +1 -1
- package/dist/tests/integration/hermes_locking.test.js +7 -10
- package/dist/tests/integration/hermes_locking.test.js.map +1 -1
- package/dist/tests/orchestrate.test.js +5 -1
- package/dist/tests/orchestrate.test.js.map +1 -1
- package/dist/tests/orchestrator-dependencies.test.d.ts +1 -0
- package/dist/tests/orchestrator-dependencies.test.js +52 -0
- package/dist/tests/orchestrator-dependencies.test.js.map +1 -0
- package/dist/tests/plan.test.d.ts +1 -0
- package/dist/tests/plan.test.js +63 -0
- package/dist/tests/plan.test.js.map +1 -0
- package/dist/tests/planning-engine.test.d.ts +1 -0
- package/dist/tests/planning-engine.test.js +50 -0
- package/dist/tests/planning-engine.test.js.map +1 -0
- package/dist/tests/status-cost.test.d.ts +1 -0
- package/dist/tests/status-cost.test.js +54 -0
- package/dist/tests/status-cost.test.js.map +1 -0
- package/dist/tests/status.test.js +8 -7
- package/dist/tests/status.test.js.map +1 -1
- package/dist/tests/trace-replay.test.d.ts +1 -0
- package/dist/tests/trace-replay.test.js +65 -0
- package/dist/tests/trace-replay.test.js.map +1 -0
- package/dist/tests/trace.test.js +14 -7
- package/dist/tests/trace.test.js.map +1 -1
- package/dist/ui/assets/index-Bkt7APzu.css +1 -0
- package/dist/ui/assets/index-CeX-06mI.js +49 -0
- package/dist/ui/index.html +14 -0
- package/framework-mcp/dist/constants.js +1 -1
- package/framework-mcp/{src/constants.ts β dist/framework-mcp/src/constants.js} +4 -18
- package/framework-mcp/{src/index.ts β dist/framework-mcp/src/index.js} +52 -53
- package/framework-mcp/dist/framework-mcp/src/resources/index.js +58 -0
- package/framework-mcp/{src/tools/control_plane/locking.ts β dist/framework-mcp/src/tools/control_plane/locking.js} +14 -21
- package/framework-mcp/{src/tools/control_plane/registry.ts β dist/framework-mcp/src/tools/control_plane/registry.js} +8 -11
- package/framework-mcp/{src/tools/definitions.ts β dist/framework-mcp/src/tools/definitions.js} +35 -5
- package/framework-mcp/{src/tools/file_system/batch_surgical_edit.ts β dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js} +16 -31
- package/framework-mcp/{src/tools/file_system/patch_file.ts β dist/framework-mcp/src/tools/file_system/patch_file.js} +9 -14
- package/framework-mcp/{src/tools/file_system/read_file.ts β dist/framework-mcp/src/tools/file_system/read_file.js} +9 -16
- package/framework-mcp/{src/tools/file_system/replace_text.ts β dist/framework-mcp/src/tools/file_system/replace_text.js} +13 -17
- package/framework-mcp/{src/tools/file_system/write_file.ts β dist/framework-mcp/src/tools/file_system/write_file.js} +14 -16
- package/framework-mcp/{src/tools/framework/audit_deps.ts β dist/framework-mcp/src/tools/framework/audit_deps.js} +9 -17
- package/framework-mcp/{src/tools/framework/get_status.ts β dist/framework-mcp/src/tools/framework/get_status.js} +1 -3
- package/framework-mcp/{src/tools/framework/orchestrate.ts β dist/framework-mcp/src/tools/framework/orchestrate.js} +1 -3
- package/framework-mcp/{src/tools/framework/run_tests.ts β dist/framework-mcp/src/tools/framework/run_tests.js} +9 -12
- package/framework-mcp/dist/framework-mcp/src/tools/framework/submit_plan.js +13 -0
- package/framework-mcp/{src/tools/framework/update_contract_hash.ts β dist/framework-mcp/src/tools/framework/update_contract_hash.js} +1 -3
- package/framework-mcp/{src/tools/framework/update_memory.ts β dist/framework-mcp/src/tools/framework/update_memory.js} +2 -4
- package/framework-mcp/{src/tools/index.ts β dist/framework-mcp/src/tools/index.js} +5 -7
- package/framework-mcp/{src/tools/memory/get_insights.ts β dist/framework-mcp/src/tools/memory/get_insights.js} +4 -11
- package/framework-mcp/{src/tools/memory/read_memory.ts β dist/framework-mcp/src/tools/memory/read_memory.js} +3 -6
- package/framework-mcp/{src/tools/messaging/log_action.ts β dist/framework-mcp/src/tools/messaging/log_action.js} +2 -8
- package/framework-mcp/{src/tools/messaging/send_message.ts β dist/framework-mcp/src/tools/messaging/send_message.js} +19 -22
- package/framework-mcp/{src/tools/observability/check_ports.ts β dist/framework-mcp/src/tools/observability/check_ports.js} +6 -10
- package/framework-mcp/{src/tools/observability/get_health.ts β dist/framework-mcp/src/tools/observability/get_health.js} +1 -6
- package/framework-mcp/{src/tools/quality/check_lint.ts β dist/framework-mcp/src/tools/quality/check_lint.js} +3 -9
- package/framework-mcp/{src/tools/search/get_gaps.ts β dist/framework-mcp/src/tools/search/get_gaps.js} +12 -18
- package/framework-mcp/{src/tools/search/get_map.ts β dist/framework-mcp/src/tools/search/get_map.js} +14 -19
- package/framework-mcp/{src/tools/search/grep_search.ts β dist/framework-mcp/src/tools/search/grep_search.js} +26 -26
- package/framework-mcp/{src/tools/search/list_dir.ts β dist/framework-mcp/src/tools/search/list_dir.js} +4 -10
- package/framework-mcp/{src/tools/shell/run_command.ts β dist/framework-mcp/src/tools/shell/run_command.js} +1 -11
- package/framework-mcp/dist/framework-mcp/src/tools/types.js +1 -0
- package/framework-mcp/{src/utils/cli.ts β dist/framework-mcp/src/utils/cli.js} +25 -19
- package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +231 -0
- package/framework-mcp/{src/utils/fs.ts β dist/framework-mcp/src/utils/fs.js} +9 -10
- package/framework-mcp/{src/utils/metrics.ts β dist/framework-mcp/src/utils/metrics.js} +11 -28
- package/framework-mcp/dist/framework-mcp/src/utils/permissions.js +71 -0
- package/framework-mcp/{src/utils/security.ts β dist/framework-mcp/src/utils/security.js} +9 -15
- package/framework-mcp/dist/index.js +29 -5
- package/framework-mcp/dist/resources/index.js +58 -0
- package/{src/cli/adapters/core.ts β framework-mcp/dist/src/cli/adapters/core.js} +21 -41
- package/{src/cli/adapters/index.ts β framework-mcp/dist/src/cli/adapters/index.js} +1 -1
- package/{src/cli/adapters/paths.ts β framework-mcp/dist/src/cli/adapters/paths.js} +19 -53
- package/{src/cli/adapters/scaffold.ts β framework-mcp/dist/src/cli/adapters/scaffold.js} +18 -42
- package/{src/cli/adapters/utils.ts β framework-mcp/dist/src/cli/adapters/utils.js} +19 -31
- package/{src/cli/commands/approve.ts β framework-mcp/dist/src/cli/commands/approve.js} +15 -25
- package/{src/cli/commands/check.ts β framework-mcp/dist/src/cli/commands/check.js} +36 -43
- package/{src/cli/commands/compliance.ts β framework-mcp/dist/src/cli/commands/compliance.js} +10 -15
- package/{src/cli/commands/contract.ts β framework-mcp/dist/src/cli/commands/contract.js} +13 -31
- package/framework-mcp/dist/src/cli/commands/dashboard.js +123 -0
- package/{src/cli/commands/explorer.ts β framework-mcp/dist/src/cli/commands/explorer.js} +14 -17
- package/{src/cli/commands/git.ts β framework-mcp/dist/src/cli/commands/git.js} +15 -14
- package/framework-mcp/dist/src/cli/commands/init/create-agent.js +58 -0
- package/{src/cli/commands/init/scaffold-core.ts β framework-mcp/dist/src/cli/commands/init/scaffold-core.js} +35 -59
- package/framework-mcp/dist/src/cli/commands/init/scaffold-docs.js +34 -0
- package/{src/cli/commands/init/scaffold-ops.ts β framework-mcp/dist/src/cli/commands/init/scaffold-ops.js} +19 -22
- package/{src/cli/commands/init/scaffold-standards.ts β framework-mcp/dist/src/cli/commands/init/scaffold-standards.js} +20 -20
- package/{src/cli/commands/init.ts β framework-mcp/dist/src/cli/commands/init.js} +51 -77
- package/{src/cli/commands/knowledge.ts β framework-mcp/dist/src/cli/commands/knowledge.js} +9 -11
- package/{src/cli/commands/lint.ts β framework-mcp/dist/src/cli/commands/lint.js} +5 -6
- package/framework-mcp/dist/src/cli/commands/log.js +10 -0
- package/{src/cli/commands/memory.ts β framework-mcp/dist/src/cli/commands/memory.js} +1 -3
- package/framework-mcp/dist/src/cli/commands/orchestrate.js +159 -0
- package/framework-mcp/dist/src/cli/commands/plan.js +117 -0
- package/{src/cli/commands/script.ts β framework-mcp/dist/src/cli/commands/script.js} +6 -7
- package/{src/cli/commands/security.ts β framework-mcp/dist/src/cli/commands/security.js} +6 -8
- package/framework-mcp/dist/src/cli/commands/status.js +97 -0
- package/framework-mcp/dist/src/cli/commands/trace.js +109 -0
- package/{src/cli/index.ts β framework-mcp/dist/src/cli/index.js} +80 -64
- package/{src/cli/shims.ts β framework-mcp/dist/src/cli/shims.js} +15 -15
- package/{src/cli/utils/claude.ts β framework-mcp/dist/src/cli/utils/claude.js} +8 -15
- package/{src/cli/utils/compliance.ts β framework-mcp/dist/src/cli/utils/compliance.js} +18 -36
- package/{src/cli/utils/config-schema.ts β framework-mcp/dist/src/cli/utils/config-schema.js} +0 -6
- package/{src/cli/utils/fs.ts β framework-mcp/dist/src/cli/utils/fs.js} +34 -67
- package/{src/cli/utils/i18n.ts β framework-mcp/dist/src/cli/utils/i18n.js} +3 -17
- package/{src/cli/utils/memory.ts β framework-mcp/dist/src/cli/utils/memory.js} +87 -114
- package/{src/cli/utils/pkg.ts β framework-mcp/dist/src/cli/utils/pkg.js} +120 -155
- package/{src/cli/utils/schemas.ts β framework-mcp/dist/src/cli/utils/schemas.js} +0 -3
- package/{src/cli/utils/string.ts β framework-mcp/dist/src/cli/utils/string.js} +18 -24
- package/{src/cli/utils/time.ts β framework-mcp/dist/src/cli/utils/time.js} +4 -4
- package/{src/cli/utils/ui.ts β framework-mcp/dist/src/cli/utils/ui.js} +9 -17
- package/{src/contracts/tasks.ts β framework-mcp/dist/src/contracts/tasks.js} +0 -6
- package/framework-mcp/dist/src/dashboard/vite.config.js +15 -0
- package/framework-mcp/dist/src/modules/adapters/definitions.js +140 -0
- package/framework-mcp/dist/src/modules/adapters/registry.js +18 -0
- package/{src/modules/adapters/shared.ts β framework-mcp/dist/src/modules/adapters/shared.js} +9 -25
- package/framework-mcp/dist/src/modules/adapters/types.js +1 -0
- package/{src/modules/agents/definitions.ts β framework-mcp/dist/src/modules/agents/definitions.js} +158 -161
- package/{src/modules/agents/registry/analyst.ts β framework-mcp/dist/src/modules/agents/registry/analyst.js} +9 -14
- package/{src/modules/agents/registry/architect.ts β framework-mcp/dist/src/modules/agents/registry/architect.js} +9 -14
- package/{src/modules/agents/registry/backend.ts β framework-mcp/dist/src/modules/agents/registry/backend.js} +16 -13
- package/{src/modules/agents/registry/database.ts β framework-mcp/dist/src/modules/agents/registry/database.js} +16 -14
- package/{src/modules/agents/registry/devops.ts β framework-mcp/dist/src/modules/agents/registry/devops.js} +15 -14
- package/{src/modules/agents/registry/explorer.ts β framework-mcp/dist/src/modules/agents/registry/explorer.js} +9 -14
- package/{src/modules/agents/registry/frontend.ts β framework-mcp/dist/src/modules/agents/registry/frontend.js} +17 -14
- package/{src/modules/agents/registry/git.ts β framework-mcp/dist/src/modules/agents/registry/git.js} +9 -14
- package/{src/modules/agents/registry/manager.ts β framework-mcp/dist/src/modules/agents/registry/manager.js} +10 -15
- package/{src/modules/agents/registry/mobile.ts β framework-mcp/dist/src/modules/agents/registry/mobile.js} +9 -14
- package/{src/modules/agents/registry/native.ts β framework-mcp/dist/src/modules/agents/registry/native.js} +9 -14
- package/{src/modules/agents/registry/quality.ts β framework-mcp/dist/src/modules/agents/registry/quality.js} +9 -14
- package/{src/modules/agents/registry/security.ts β framework-mcp/dist/src/modules/agents/registry/security.js} +15 -14
- package/framework-mcp/dist/src/modules/agents/types.js +1 -0
- package/framework-mcp/dist/src/modules/engines/evaluation-engine.js +102 -0
- package/framework-mcp/dist/src/modules/engines/health-engine.js +49 -0
- package/framework-mcp/dist/src/modules/engines/planning-engine.js +78 -0
- package/framework-mcp/dist/src/modules/engines/risk-engine.js +105 -0
- package/framework-mcp/dist/src/modules/engines/routing-engine.js +73 -0
- package/framework-mcp/dist/src/modules/engines/types.js +1 -0
- package/{src/modules/skills/definitions.ts β framework-mcp/dist/src/modules/skills/definitions.js} +0 -1
- package/{src/shared/constants.ts β framework-mcp/dist/src/shared/constants.js} +40 -71
- package/{src/shared/errors.ts β framework-mcp/dist/src/shared/errors.js} +10 -17
- package/{src/shared/fs.ts β framework-mcp/dist/src/shared/fs.js} +14 -13
- package/{src/shared/logger.ts β framework-mcp/dist/src/shared/logger.js} +28 -51
- package/framework-mcp/dist/src/shared/storage.js +207 -0
- package/framework-mcp/dist/src/shared/types.js +12 -0
- package/framework-mcp/dist/tools/control_plane/locking.js +3 -3
- package/framework-mcp/dist/tools/control_plane/registry.js +3 -2
- package/framework-mcp/dist/tools/definitions.js +33 -1
- package/framework-mcp/dist/tools/file_system/batch_surgical_edit.js +8 -3
- package/framework-mcp/dist/tools/file_system/patch_file.js +8 -3
- package/framework-mcp/dist/tools/file_system/read_file.js +3 -3
- package/framework-mcp/dist/tools/file_system/replace_text.js +8 -3
- package/framework-mcp/dist/tools/file_system/write_file.js +10 -5
- package/framework-mcp/dist/tools/framework/audit_deps.js +2 -2
- package/framework-mcp/dist/tools/framework/run_tests.js +2 -2
- package/framework-mcp/dist/tools/framework/submit_plan.js +13 -0
- package/framework-mcp/dist/tools/framework/update_memory.js +1 -1
- package/framework-mcp/dist/tools/index.js +2 -0
- package/framework-mcp/dist/tools/memory/get_insights.js +1 -1
- package/framework-mcp/dist/tools/messaging/log_action.js +1 -1
- package/framework-mcp/dist/tools/messaging/send_message.js +5 -5
- package/framework-mcp/dist/tools/observability/check_ports.js +1 -1
- package/framework-mcp/dist/tools/quality/check_lint.js +2 -2
- package/framework-mcp/dist/tools/search/get_gaps.js +1 -1
- package/framework-mcp/dist/tools/search/grep_search.js +3 -3
- package/framework-mcp/dist/utils/compliance.js +158 -5
- package/framework-mcp/dist/utils/permissions.js +71 -0
- package/framework-mcp/package.json +7 -1
- package/mcp.json +1 -1
- package/package.json +10 -6
- package/templates/prompts/contract-design-recipe.md +1 -1
- package/templates/prompts/db-management-recipe.md +3 -3
- package/templates/prompts/deployment-recipe.md +3 -3
- package/templates/prompts/performance-optimization-recipe.md +3 -3
- package/templates/prompts/pull-request-template.md +2 -2
- package/templates/prompts/security-audit-recipe.md +3 -3
- package/templates/standards/crud-governance.md +1 -1
- package/templates/standards/deployment-standards.md +1 -1
- package/templates/standards/governance-standards.md +1 -1
- package/templates/standards/llm-governance.md +1 -1
- package/templates/standards/nextjs-standards.md +13 -0
- package/templates/standards/observability-standards.md +1 -1
- package/templates/standards/security-audit-standards.md +1 -1
- package/templates/standards/security-standards.md +1 -1
- package/templates/standards/testing-standards.md +1 -1
- package/templates/standards/vite-standards.md +13 -0
- package/framework-mcp/package-lock.json +0 -1191
- package/framework-mcp/src/declarations.d.ts +0 -17
- package/framework-mcp/src/tools/types.ts +0 -89
- package/framework-mcp/src/utils/compliance.ts +0 -95
- package/framework-mcp/tests/tools/file_system/file_system_tools.test.ts +0 -212
- package/framework-mcp/tests/tools/messaging/send_message.test.ts +0 -136
- package/framework-mcp/tests/tools/quality/check_lint.test.ts +0 -46
- package/framework-mcp/tests/tools/shell/run_command.test.ts +0 -55
- package/framework-mcp/tsconfig.json +0 -14
- package/src/cli/commands/init/scaffold-docs.ts +0 -44
- package/src/cli/commands/log.ts +0 -37
- package/src/cli/commands/orchestrate.ts +0 -450
- package/src/cli/commands/plan.ts +0 -113
- package/src/cli/commands/status.ts +0 -44
- package/src/cli/commands/trace.ts +0 -31
- package/src/modules/adapters/definitions.ts +0 -171
- package/src/modules/adapters/registry.ts +0 -27
- package/src/modules/adapters/types.ts +0 -16
- package/src/modules/agents/types.ts +0 -37
- package/src/schema/agent-lifecycle-schema.json +0 -59
- package/src/shared/types.ts +0 -20
- /package/{src/contracts/index.ts β framework-mcp/dist/src/contracts/index.js} +0 -0
package/{src/cli/commands/knowledge.ts β framework-mcp/dist/src/cli/commands/knowledge.js}
RENAMED
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
-
|
|
4
3
|
import { getFrameworkDir } from "../utils/memory.js";
|
|
5
|
-
|
|
6
4
|
import { writeTextFile } from "../utils/fs.js";
|
|
7
|
-
|
|
8
|
-
export async function updateKnowledgeBaseCommand(topic: string, content: string) {
|
|
5
|
+
export async function updateKnowledgeBaseCommand(topic, content) {
|
|
9
6
|
if (!topic || !content) {
|
|
10
|
-
console.error("
|
|
7
|
+
console.error("[ERROR] Usage: atabey update_knowledge_base <topic> <content>");
|
|
11
8
|
return;
|
|
12
9
|
}
|
|
13
10
|
const frameworkDir = getFrameworkDir();
|
|
14
11
|
const kbDir = path.join(frameworkDir, "knowledge");
|
|
15
|
-
if (!fs.existsSync(kbDir))
|
|
12
|
+
if (!fs.existsSync(kbDir))
|
|
13
|
+
fs.mkdirSync(kbDir, { recursive: true });
|
|
16
14
|
const fileName = topic.replace(/[^a-z0-9]/gi, "_").toLowerCase() + ".md";
|
|
17
15
|
writeTextFile(path.join(kbDir, fileName), content);
|
|
18
|
-
console.warn(
|
|
16
|
+
console.warn(`[OK] Knowledge base updated: ${topic}`);
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
export async function searchKnowledgeBaseCommand(query: string) {
|
|
18
|
+
export async function searchKnowledgeBaseCommand(query) {
|
|
22
19
|
if (!query) {
|
|
23
|
-
console.error("
|
|
20
|
+
console.error("[ERROR] Usage: atabey search_knowledge_base <query>");
|
|
24
21
|
return;
|
|
25
22
|
}
|
|
26
23
|
const frameworkDir = getFrameworkDir();
|
|
@@ -40,5 +37,6 @@ ${content.slice(0, 300)}...`);
|
|
|
40
37
|
found = true;
|
|
41
38
|
}
|
|
42
39
|
}
|
|
43
|
-
if (!found)
|
|
40
|
+
if (!found)
|
|
41
|
+
console.warn("βΉοΈ No matching entries found.");
|
|
44
42
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
|
-
|
|
3
2
|
import { getPackageVersion } from "../utils/pkg.js";
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* Run ESLint for the project (same as npm run lint).
|
|
7
5
|
*/
|
|
8
|
-
export async function lintCommand()
|
|
6
|
+
export async function lintCommand() {
|
|
9
7
|
console.warn(`π Running ESLint (v${getPackageVersion()})...`);
|
|
10
8
|
const projectRoot = process.cwd();
|
|
11
9
|
try {
|
|
@@ -14,9 +12,10 @@ export async function lintCommand(): Promise<void> {
|
|
|
14
12
|
stdio: "inherit",
|
|
15
13
|
env: process.env,
|
|
16
14
|
});
|
|
17
|
-
console.warn("\n
|
|
18
|
-
}
|
|
19
|
-
|
|
15
|
+
console.warn("\n[OK] ESLint passed with no errors.");
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
console.warn("\n[ERROR] ESLint reported errors. Fix violations before committing.");
|
|
20
19
|
console.warn(" Tip: npm run lint -- --fix");
|
|
21
20
|
process.exit(1);
|
|
22
21
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { normalizeAgentName } from "../utils/string.js";
|
|
2
|
+
import { Storage } from "../../shared/storage.js";
|
|
3
|
+
export async function logAgentActionCommand(data) {
|
|
4
|
+
const agent = normalizeAgentName(data.agent);
|
|
5
|
+
const db = Storage.getDB();
|
|
6
|
+
db.prepare(`
|
|
7
|
+
INSERT INTO logs (agent, action, trace_id, status, summary, findings)
|
|
8
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
9
|
+
`).run(agent, data.action, data.traceId || null, data.status || "SUCCESS", data.summary || "", data.details ? JSON.stringify(data.details) : null);
|
|
10
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { UI } from "../utils/ui.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { logger } from "../../shared/logger.js";
|
|
4
|
+
import { sleep } from "../utils/time.js";
|
|
5
|
+
import { Storage } from "../../shared/storage.js";
|
|
6
|
+
import { asTraceID } from "../../shared/types.js";
|
|
7
|
+
export const HermesMessageSchema = z.object({
|
|
8
|
+
timestamp: z.string(),
|
|
9
|
+
from: z.string(),
|
|
10
|
+
to: z.string(),
|
|
11
|
+
category: z.enum(["ACTION", "DELEGATION", "SUBTASK", "REPLY", "ALERT"]),
|
|
12
|
+
content: z.string(), // This is the payload to be validated
|
|
13
|
+
traceId: z.string(),
|
|
14
|
+
parentId: z.string().optional(),
|
|
15
|
+
status: z.enum(["PENDING", "PROCESSED", "WAITING", "APPROVED"]),
|
|
16
|
+
priority: z.enum(["HIGH", "NORMAL", "LOW"]).optional(),
|
|
17
|
+
action: z.string().optional(),
|
|
18
|
+
requiresApproval: z.boolean().optional(),
|
|
19
|
+
dependencies: z.array(z.string()).optional(),
|
|
20
|
+
});
|
|
21
|
+
let isLooping = false;
|
|
22
|
+
export async function orchestrateCommand(options) {
|
|
23
|
+
UI.intent("Hermes Message Broker", "Starting the live agent orchestration loop...");
|
|
24
|
+
const maxIterations = options?.maxIterations;
|
|
25
|
+
let iterationCount = 0;
|
|
26
|
+
isLooping = true;
|
|
27
|
+
while (isLooping) {
|
|
28
|
+
try {
|
|
29
|
+
// 1. Check for agent timeouts using SQLite
|
|
30
|
+
const agents = Storage.getAllAgents();
|
|
31
|
+
for (const agent of agents) {
|
|
32
|
+
if (agent.state === "EXECUTING" && agent.last_updated) {
|
|
33
|
+
const lastUpdatedTime = Date.parse(agent.last_updated);
|
|
34
|
+
if (!isNaN(lastUpdatedTime) && Date.now() - lastUpdatedTime > 30 * 60 * 1000) {
|
|
35
|
+
const displayAgent = `@${agent.name}`;
|
|
36
|
+
UI.error(`[WARN] Agent ${displayAgent} has TIMED OUT. Triggering Self-Healing...`);
|
|
37
|
+
Storage.updateAgentStatus(agent.name, "READY", "Idle (Recovered from Timeout)");
|
|
38
|
+
UI.success(`[OK] Hermes Self-Healing: ${displayAgent} reset to READY state.`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// 2. Fetch actionable messages from SQLite
|
|
43
|
+
const pendingMessages = Storage.getPendingMessages() || [];
|
|
44
|
+
if (pendingMessages.length > 0) {
|
|
45
|
+
UI.intent("Multi-Agent Orchestration", `${pendingMessages.length} pending tasks found in database.`);
|
|
46
|
+
for (const msg of pendingMessages) {
|
|
47
|
+
// Dependency Check
|
|
48
|
+
if (msg.parentId) {
|
|
49
|
+
const tasks = Storage.getTasks(asTraceID(msg.traceId));
|
|
50
|
+
const task = tasks.find(t => t.id === msg.parentId);
|
|
51
|
+
if (task && task.dependencies.length > 0) {
|
|
52
|
+
const incompleteDeps = tasks.filter(t => task.dependencies.includes(t.id) && t.status !== "COMPLETED");
|
|
53
|
+
if (incompleteDeps.length > 0) {
|
|
54
|
+
logger.debug(`Skipping task ${msg.parentId} for ${msg.to} - waiting for dependencies: ${incompleteDeps.map(d => d.id).join(", ")}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Risk and Approval Logic
|
|
60
|
+
let riskFlag = false;
|
|
61
|
+
try {
|
|
62
|
+
const { RiskEngine } = await import("../../modules/engines/risk-engine.js");
|
|
63
|
+
const assessment = RiskEngine.assessTaskRisk(msg.content);
|
|
64
|
+
if (assessment.requiresApproval) {
|
|
65
|
+
riskFlag = true;
|
|
66
|
+
UI.warning(`[SECURITY] Risk Engine auto-flagged Trace ${msg.traceId} as HIGH RISK`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch { /* engine not ready */ }
|
|
70
|
+
if ((msg.category === "ACTION" || msg.category === "ALERT" || riskFlag) && (msg.requiresApproval || riskFlag) && msg.status !== "APPROVED") {
|
|
71
|
+
UI.warning(`\n[WARN] [APPROVAL REQUEST] Trace ${msg.traceId} requires approval:`);
|
|
72
|
+
UI.warning(` Description: ${msg.content}`);
|
|
73
|
+
const approved = await askUserApproval(msg.traceId, msg.content);
|
|
74
|
+
if (approved && msg.id !== undefined) {
|
|
75
|
+
Storage.updateMessageStatus(msg.id, "APPROVED");
|
|
76
|
+
UI.success(`Approved trace: ${msg.traceId}`);
|
|
77
|
+
}
|
|
78
|
+
else if (msg.id !== undefined) {
|
|
79
|
+
Storage.updateMessageStatus(msg.id, "PROCESSED"); // Mark as ignored/rejected
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Process message
|
|
84
|
+
UI.agentBox(msg.to, msg.content, `Trace: ${msg.traceId} | From: ${msg.from} | Category: ${msg.category}`);
|
|
85
|
+
let targetState = "EXECUTING";
|
|
86
|
+
if (msg.category === "DELEGATION" || msg.category === "SUBTASK")
|
|
87
|
+
targetState = "BRIEFED";
|
|
88
|
+
let taskDescription = msg.content;
|
|
89
|
+
try {
|
|
90
|
+
const payload = JSON.parse(msg.content);
|
|
91
|
+
taskDescription = payload.task || msg.content;
|
|
92
|
+
}
|
|
93
|
+
catch { /* ... */ }
|
|
94
|
+
Storage.updateAgentStatus(msg.to, targetState, taskDescription);
|
|
95
|
+
if (targetState === "BRIEFED") {
|
|
96
|
+
Storage.updateAgentStatus(msg.to, "EXECUTING", taskDescription);
|
|
97
|
+
}
|
|
98
|
+
if (msg.id !== undefined) {
|
|
99
|
+
Storage.updateMessageStatus(msg.id, "PROCESSED");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Sync to Markdown for human readability
|
|
103
|
+
const { syncMarkdownMemory } = await import("../utils/memory.js");
|
|
104
|
+
syncMarkdownMemory();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (globalLoopErr) {
|
|
108
|
+
UI.error(`[WARN] Critical error in Hermes orchestration loop: ${globalLoopErr.message}`);
|
|
109
|
+
}
|
|
110
|
+
iterationCount++;
|
|
111
|
+
if (maxIterations !== undefined && iterationCount >= maxIterations) {
|
|
112
|
+
isLooping = false;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
await sleep(2000);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Standard tool for agents to delegate tasks to other agents.
|
|
120
|
+
*/
|
|
121
|
+
export async function sendMessage(args) {
|
|
122
|
+
try {
|
|
123
|
+
const message = {
|
|
124
|
+
timestamp: new Date().toISOString(),
|
|
125
|
+
from: args.from,
|
|
126
|
+
to: args.to,
|
|
127
|
+
category: args.category,
|
|
128
|
+
content: args.content,
|
|
129
|
+
traceId: asTraceID(args.traceId),
|
|
130
|
+
parentId: args.parentId,
|
|
131
|
+
status: "PENDING",
|
|
132
|
+
priority: args.priority || "NORMAL",
|
|
133
|
+
requiresApproval: args.requiresApproval || false
|
|
134
|
+
};
|
|
135
|
+
Storage.saveMessage(message);
|
|
136
|
+
return message;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
UI.error(`Message could not be delivered: ${args.from} -> ${args.to}`);
|
|
140
|
+
logger.debug("Hermes sendMessage failed", err);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function askUserApproval(_traceId, _content) {
|
|
144
|
+
if (process.env.ATABEY_TEST_DIR || !process.stdin.isTTY) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const readline = await import("readline");
|
|
148
|
+
const rl = readline.createInterface({
|
|
149
|
+
input: process.stdin,
|
|
150
|
+
output: process.stdout
|
|
151
|
+
});
|
|
152
|
+
return new Promise((resolve) => {
|
|
153
|
+
rl.question("[INFO] Approve this operation? (y/N): ", (answer) => {
|
|
154
|
+
rl.close();
|
|
155
|
+
const cleanAnswer = answer.trim().toLowerCase();
|
|
156
|
+
resolve(cleanAnswer === "y" || cleanAnswer === "yes");
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { generateULID } from "../utils/time.js";
|
|
4
|
+
import { UI } from "../utils/ui.js";
|
|
5
|
+
import { RoutingEngine } from "../../modules/engines/routing-engine.js";
|
|
6
|
+
import { PlanningEngine } from "../../modules/engines/planning-engine.js";
|
|
7
|
+
import { sendMessage } from "./orchestrate.js";
|
|
8
|
+
import { Storage } from "../../shared/storage.js";
|
|
9
|
+
import { asTraceID } from "../../shared/types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Submits a structured plan (DAG) to the framework.
|
|
12
|
+
*/
|
|
13
|
+
export async function submitPlanCommand(tasks) {
|
|
14
|
+
const traceId = asTraceID(generateULID());
|
|
15
|
+
const plan = PlanningEngine.createPlan(tasks);
|
|
16
|
+
const validation = PlanningEngine.validatePlan(plan);
|
|
17
|
+
if (!validation.valid) {
|
|
18
|
+
UI.error("Invalid Plan Submission:");
|
|
19
|
+
validation.errors.forEach((e) => UI.error(` - ${e}`));
|
|
20
|
+
process.exit(64);
|
|
21
|
+
}
|
|
22
|
+
UI.intent("Dynamic Task Planner", `Processing plan with ${plan.tasks.length} tasks (Plan Trace: ${traceId})`);
|
|
23
|
+
// Save plan metadata to SQLite
|
|
24
|
+
Storage.setMetadata(`plan_${traceId}`, JSON.stringify(plan));
|
|
25
|
+
for (const task of plan.tasks) {
|
|
26
|
+
const taskData = {
|
|
27
|
+
id: task.id,
|
|
28
|
+
traceId,
|
|
29
|
+
description: task.task,
|
|
30
|
+
agent: task.agent,
|
|
31
|
+
priority: "NORMAL",
|
|
32
|
+
status: "PENDING",
|
|
33
|
+
dependencies: task.dependencies || []
|
|
34
|
+
};
|
|
35
|
+
Storage.saveTask(taskData);
|
|
36
|
+
// Queue as a delegated message in SQLite
|
|
37
|
+
await sendMessage({
|
|
38
|
+
from: "@manager",
|
|
39
|
+
to: task.agent,
|
|
40
|
+
category: "DELEGATION",
|
|
41
|
+
content: JSON.stringify({ task: task.task, traceId }),
|
|
42
|
+
traceId,
|
|
43
|
+
parentId: task.id,
|
|
44
|
+
priority: "NORMAL",
|
|
45
|
+
dependencies: task.dependencies || []
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
UI.success(`[OK] Dynamic plan submitted and queued: ${plan.tasks.length} tasks.`);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Reads ALL markdown files from the docs/ directory and creates
|
|
52
|
+
* planning tasks from them. Agents will use this to understand
|
|
53
|
+
* project requirements and generate code accordingly.
|
|
54
|
+
*/
|
|
55
|
+
export async function planCommand() {
|
|
56
|
+
const projectRoot = process.cwd();
|
|
57
|
+
const docsDir = path.join(projectRoot, "docs");
|
|
58
|
+
if (!fs.existsSync(docsDir)) {
|
|
59
|
+
UI.error("Docs directory not found at docs/");
|
|
60
|
+
console.warn("[TIP] Create a docs/ folder with your project requirements in .md files.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const entries = fs.readdirSync(docsDir, { withFileTypes: true });
|
|
64
|
+
const mdFiles = entries.filter(e => e.isFile() && e.name.endsWith(".md"));
|
|
65
|
+
if (mdFiles.length === 0) {
|
|
66
|
+
UI.warning("No markdown files found in docs/ directory.");
|
|
67
|
+
console.warn("[TIP] Add .md files to docs/ with your project requirements.");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
UI.intent("Planning Engine", `Reading ${mdFiles.length} document(s) from docs/...`);
|
|
71
|
+
let totalTasks = 0;
|
|
72
|
+
for (const file of mdFiles) {
|
|
73
|
+
const filePath = path.join(docsDir, file.name);
|
|
74
|
+
const content = fs.readFileSync(filePath, "utf8");
|
|
75
|
+
const traceId = asTraceID(generateULID());
|
|
76
|
+
UI.success(`π docs/${file.name} (Trace: ${traceId})`);
|
|
77
|
+
// Extract checklist items and create sequential task chain
|
|
78
|
+
const taskRegex = /- \[ \]\s+(.+)/g;
|
|
79
|
+
let taskMatch;
|
|
80
|
+
let taskCount = 0;
|
|
81
|
+
let lastTaskId = null;
|
|
82
|
+
while ((taskMatch = taskRegex.exec(content)) !== null) {
|
|
83
|
+
const taskText = taskMatch[1].trim();
|
|
84
|
+
if (taskText.length >= 3) {
|
|
85
|
+
taskCount++;
|
|
86
|
+
totalTasks++;
|
|
87
|
+
// Capability routing via RoutingEngine
|
|
88
|
+
const targetAgent = RoutingEngine.resolveAgent(taskText);
|
|
89
|
+
const subTaskId = generateULID();
|
|
90
|
+
const taskData = {
|
|
91
|
+
id: subTaskId,
|
|
92
|
+
traceId,
|
|
93
|
+
description: taskText,
|
|
94
|
+
agent: targetAgent,
|
|
95
|
+
priority: "NORMAL",
|
|
96
|
+
status: "PENDING",
|
|
97
|
+
dependencies: lastTaskId ? [lastTaskId] : []
|
|
98
|
+
};
|
|
99
|
+
Storage.saveTask(taskData);
|
|
100
|
+
// Queue as a delegated message
|
|
101
|
+
await sendMessage({
|
|
102
|
+
from: "@manager",
|
|
103
|
+
to: targetAgent,
|
|
104
|
+
category: "DELEGATION",
|
|
105
|
+
content: JSON.stringify({ task: taskText, traceId }),
|
|
106
|
+
traceId,
|
|
107
|
+
parentId: subTaskId,
|
|
108
|
+
priority: "NORMAL",
|
|
109
|
+
dependencies: lastTaskId ? [lastTaskId] : []
|
|
110
|
+
});
|
|
111
|
+
lastTaskId = subTaskId;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
console.warn(` π Actionable tasks detected: ${taskCount}`);
|
|
115
|
+
}
|
|
116
|
+
UI.success(`\n[OK] Planning complete: ${totalTasks} tasks identified.`);
|
|
117
|
+
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import cp from "child_process";
|
|
4
|
-
|
|
5
4
|
const targetDir = process.cwd(); // Assuming targetDir is process.cwd() in the CLI context
|
|
6
|
-
|
|
7
|
-
export async function runScriptCommand(script: string, projectPath: string) {
|
|
5
|
+
export async function runScriptCommand(script, projectPath) {
|
|
8
6
|
const fullPath = path.join(targetDir, projectPath);
|
|
9
7
|
if (!fs.existsSync(fullPath)) {
|
|
10
|
-
console.warn(
|
|
8
|
+
console.warn(`[ERROR] Project path not found: ${projectPath}`);
|
|
11
9
|
return;
|
|
12
10
|
}
|
|
13
|
-
console.warn(
|
|
11
|
+
console.warn(`[START] Running 'npm run ${script}' in ${projectPath}...`);
|
|
14
12
|
try {
|
|
15
13
|
cp.spawnSync("npm", ["run", script], { cwd: fullPath, stdio: "inherit", shell: true });
|
|
16
|
-
}
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
17
16
|
const message = e instanceof Error ? e.message : "Unknown error";
|
|
18
|
-
console.warn(
|
|
17
|
+
console.warn(`[ERROR] Failed to run script: ${message}`);
|
|
19
18
|
}
|
|
20
19
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
-
|
|
4
3
|
import { collectFiles } from "../utils/fs.js";
|
|
5
|
-
|
|
6
4
|
const targetDir = process.cwd();
|
|
7
|
-
|
|
8
|
-
export async function securityAuditCommand(targetPath: string) {
|
|
5
|
+
export async function securityAuditCommand(targetPath) {
|
|
9
6
|
console.warn(`π Running Advanced Security Audit on: ${targetPath}...`);
|
|
10
7
|
const scanRules = [
|
|
11
8
|
{ pattern: /sql`/, message: "Potential Raw SQL usage detected", severity: "HIGH" },
|
|
@@ -17,7 +14,7 @@ export async function securityAuditCommand(targetPath: string) {
|
|
|
17
14
|
{ pattern: /:\s*any(?!\w)/, message: "Usage of 'any' type detected", severity: "MEDIUM" },
|
|
18
15
|
{ pattern: /\.innerHTML\s*=/, message: "Unsafe innerHTML assignment detected", severity: "MEDIUM" },
|
|
19
16
|
];
|
|
20
|
-
const issues
|
|
17
|
+
const issues = [];
|
|
21
18
|
const files = collectFiles(path.join(targetDir, targetPath), [".ts", ".tsx", ".js", ".jsx"]);
|
|
22
19
|
files.forEach((f) => {
|
|
23
20
|
const content = fs.readFileSync(f, "utf8");
|
|
@@ -31,8 +28,9 @@ export async function securityAuditCommand(targetPath: string) {
|
|
|
31
28
|
});
|
|
32
29
|
});
|
|
33
30
|
if (issues.length === 0) {
|
|
34
|
-
console.warn("
|
|
35
|
-
}
|
|
36
|
-
|
|
31
|
+
console.warn("[OK] No security issues detected.");
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
issues.forEach((issue) => console.warn(`[WARN] ${issue}`));
|
|
37
35
|
}
|
|
38
36
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { getFrameworkDir, listTasks, readState, readStatus } from "../utils/memory.js";
|
|
5
|
+
/**
|
|
6
|
+
* Print the current framework status.
|
|
7
|
+
*/
|
|
8
|
+
export async function statusCommand() {
|
|
9
|
+
const state = readState();
|
|
10
|
+
const tasks = listTasks();
|
|
11
|
+
const agentStatuses = readStatus();
|
|
12
|
+
const frameworkDir = getFrameworkDir();
|
|
13
|
+
if (!state) {
|
|
14
|
+
console.error("[ERROR] Error: Memory state not found. Please run 'init' first.");
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.warn("\n[DATA] --- PROJECT STATUS ---");
|
|
18
|
+
console.warn(`πΉ Phase: ${state.phase}`);
|
|
19
|
+
console.warn(`π Trace ID: ${state.traceId}`);
|
|
20
|
+
console.warn(`[AI] Manager: ${state.managerState}`);
|
|
21
|
+
// --- Health Engine Integration ---
|
|
22
|
+
try {
|
|
23
|
+
const { HealthEngine } = await import("../../modules/engines/health-engine.js");
|
|
24
|
+
const health = HealthEngine.getHealth();
|
|
25
|
+
if (health) {
|
|
26
|
+
let healthColor = chalk.green;
|
|
27
|
+
if (health.score < 50)
|
|
28
|
+
healthColor = chalk.red;
|
|
29
|
+
else if (health.score < 80)
|
|
30
|
+
healthColor = chalk.yellow;
|
|
31
|
+
console.warn(`β€οΈ Project Health: ${healthColor(health.score + "%")} (Quality: ${health.codeQuality} | Security: ${health.security})`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Health engine not initialized or compiled yet
|
|
36
|
+
}
|
|
37
|
+
// Read Agent Status from Storage
|
|
38
|
+
console.warn("\n[ATABEY] Atabey Army Status (Agent States & Performance):");
|
|
39
|
+
const { Storage } = await import("../../shared/storage.js");
|
|
40
|
+
for (const [agentName, info] of Object.entries(agentStatuses)) {
|
|
41
|
+
const { state, task } = info;
|
|
42
|
+
let coloredState = state;
|
|
43
|
+
if (state === "READY")
|
|
44
|
+
coloredState = chalk.green(state);
|
|
45
|
+
else if (state === "EXECUTING")
|
|
46
|
+
coloredState = chalk.yellow(state);
|
|
47
|
+
else if (state === "BLOCKED" || state === "TIMEOUT")
|
|
48
|
+
coloredState = chalk.red(state);
|
|
49
|
+
else if (state === "WAITING")
|
|
50
|
+
coloredState = chalk.cyan(state);
|
|
51
|
+
// Calculate Success Rate from SQLite logs
|
|
52
|
+
let successRateStr = "";
|
|
53
|
+
const logs = Storage.getLogs(agentName);
|
|
54
|
+
const total = logs.length;
|
|
55
|
+
if (total > 0) {
|
|
56
|
+
const successCount = logs.filter(l => l.status === "SUCCESS").length;
|
|
57
|
+
const rate = (successCount / total) * 100;
|
|
58
|
+
successRateStr = ` | Success Rate: ${rate.toFixed(1)}% (${successCount}/${total})`;
|
|
59
|
+
}
|
|
60
|
+
console.warn(` ${chalk.bold(agentName.padEnd(12))} : [${coloredState}] - ${task}${successRateStr}`);
|
|
61
|
+
}
|
|
62
|
+
if (tasks.length > 0) {
|
|
63
|
+
console.warn("\nπ Active Tasks:");
|
|
64
|
+
tasks.forEach((t) => {
|
|
65
|
+
const agent = t.agent.startsWith("@") ? t.agent : `@${t.agent}`;
|
|
66
|
+
console.warn(` - [${t.priority}] ${t.status}: ${t.description} (${agent})`);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const metricsPath = path.join(frameworkDir, "observability", "metrics.json");
|
|
70
|
+
if (fs.existsSync(metricsPath)) {
|
|
71
|
+
try {
|
|
72
|
+
const rawMetrics = fs.readFileSync(metricsPath, "utf8");
|
|
73
|
+
const metrics = JSON.parse(rawMetrics);
|
|
74
|
+
let totalTokens = 0;
|
|
75
|
+
const agentTokens = {};
|
|
76
|
+
metrics.forEach(m => {
|
|
77
|
+
totalTokens += m.estimatedTokens;
|
|
78
|
+
const name = m.agent.startsWith("@") ? m.agent : `@${m.agent}`;
|
|
79
|
+
agentTokens[name] = (agentTokens[name] || 0) + m.estimatedTokens;
|
|
80
|
+
});
|
|
81
|
+
// Assume $5.00 per 1M tokens average pricing
|
|
82
|
+
const estimatedCost = (totalTokens / 1_000_000) * 5.00;
|
|
83
|
+
console.warn("\nπΈ --- OBSERVABILITY & COST DASHBOARD ---");
|
|
84
|
+
console.warn(`π³ Total Estimated Tokens: ${totalTokens.toLocaleString()}`);
|
|
85
|
+
console.warn(`π² Total Estimated LLM Cost: $${estimatedCost.toFixed(4)}`);
|
|
86
|
+
if (Object.keys(agentTokens).length > 0) {
|
|
87
|
+
console.warn("\n[COST] Cost Distribution per Agent:");
|
|
88
|
+
Object.entries(agentTokens).forEach(([agent, tokens]) => {
|
|
89
|
+
const agentCost = (tokens / 1_000_000) * 5.00;
|
|
90
|
+
console.warn(` ${chalk.bold(agent.padEnd(12))} : ${tokens.toLocaleString()} tokens ($${agentCost.toFixed(4)})`);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch { /* ignore metrics read errors */ }
|
|
95
|
+
}
|
|
96
|
+
console.warn("\n-----------------------\n");
|
|
97
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { updateDocumentStore, generateULID, getFrameworkDir } from "../utils/memory.js";
|
|
2
|
+
import { sanitizeInput, normalizeAgentName, normalizePriority } from "../utils/string.js";
|
|
3
|
+
/**
|
|
4
|
+
* Generate a new Trace ID and add it to project memory.
|
|
5
|
+
*/
|
|
6
|
+
export async function traceNewCommand(description, agent = "manager", priority = "P2") {
|
|
7
|
+
const traceId = generateULID();
|
|
8
|
+
const safeDescription = sanitizeInput(description);
|
|
9
|
+
const safeAgent = normalizeAgentName(agent);
|
|
10
|
+
const safePriority = normalizePriority(priority);
|
|
11
|
+
const frameworkDir = getFrameworkDir();
|
|
12
|
+
// ...
|
|
13
|
+
// --- Document Store Write ---
|
|
14
|
+
updateDocumentStore("task", {
|
|
15
|
+
traceId,
|
|
16
|
+
description: safeDescription,
|
|
17
|
+
agent: safeAgent,
|
|
18
|
+
priority: safePriority,
|
|
19
|
+
status: "IN_PROGRESS",
|
|
20
|
+
createdAt: new Date().toISOString()
|
|
21
|
+
}, traceId, frameworkDir);
|
|
22
|
+
// ----------------------------
|
|
23
|
+
console.warn(`[OK] New Trace ID created: ${traceId}`);
|
|
24
|
+
console.warn(`π Added to task list: ${description}
|
|
25
|
+
`);
|
|
26
|
+
return traceId;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Replay the chronological message exchanges of a specific Trace ID.
|
|
30
|
+
*/
|
|
31
|
+
export async function traceReplayCommand(traceId) {
|
|
32
|
+
const fs = await import("fs");
|
|
33
|
+
const path = await import("path");
|
|
34
|
+
const { UI } = await import("../utils/ui.js");
|
|
35
|
+
const frameworkDir = getFrameworkDir();
|
|
36
|
+
const archiveDir = path.join(frameworkDir, "messages", "archive");
|
|
37
|
+
UI.intent("Trace Replay Engine", `Searching archive logs for Trace ID: ${traceId}...`);
|
|
38
|
+
const events = [];
|
|
39
|
+
// Scan messages/ folder for active/pending messages
|
|
40
|
+
const messagesDir = path.join(frameworkDir, "messages");
|
|
41
|
+
if (fs.existsSync(messagesDir)) {
|
|
42
|
+
const files = fs.readdirSync(messagesDir).filter(f => f.endsWith(".json"));
|
|
43
|
+
files.forEach(file => {
|
|
44
|
+
try {
|
|
45
|
+
const filePath = path.join(messagesDir, file);
|
|
46
|
+
const content = fs.readFileSync(filePath, "utf8").trim();
|
|
47
|
+
if (!content)
|
|
48
|
+
return;
|
|
49
|
+
content.split("\n").forEach(line => {
|
|
50
|
+
if (!line.trim())
|
|
51
|
+
return;
|
|
52
|
+
const msg = JSON.parse(line);
|
|
53
|
+
if (msg.traceId === traceId) {
|
|
54
|
+
events.push(msg);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch { /* ignore */ }
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Scan messages/archive/ folder for processed messages
|
|
62
|
+
if (fs.existsSync(archiveDir)) {
|
|
63
|
+
const files = fs.readdirSync(archiveDir).filter(f => f.endsWith(".json"));
|
|
64
|
+
files.forEach(file => {
|
|
65
|
+
try {
|
|
66
|
+
const filePath = path.join(archiveDir, file);
|
|
67
|
+
const content = fs.readFileSync(filePath, "utf8").trim();
|
|
68
|
+
if (!content)
|
|
69
|
+
return;
|
|
70
|
+
content.split("\n").forEach(line => {
|
|
71
|
+
if (!line.trim())
|
|
72
|
+
return;
|
|
73
|
+
const msg = JSON.parse(line);
|
|
74
|
+
if (msg.traceId === traceId) {
|
|
75
|
+
events.push(msg);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch { /* ignore */ }
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (events.length === 0) {
|
|
83
|
+
UI.warning(`No message exchanges found for Trace ID: ${traceId}`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Sort chronologically by timestamp
|
|
87
|
+
events.sort((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp));
|
|
88
|
+
console.warn("\n================================================================================");
|
|
89
|
+
console.warn(`πΊοΈ TRACE TIMELINE REPLAY: ${traceId}`);
|
|
90
|
+
console.warn("================================================================================");
|
|
91
|
+
events.forEach(evt => {
|
|
92
|
+
const timeStr = new Date(evt.timestamp).toLocaleTimeString();
|
|
93
|
+
console.warn(`\n[${timeStr}] ${evt.from} β ${evt.to} [${evt.category}]`);
|
|
94
|
+
try {
|
|
95
|
+
const parsed = JSON.parse(evt.content);
|
|
96
|
+
if (parsed.task) {
|
|
97
|
+
console.warn(` π¬ Task: ${parsed.task}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.warn(` π¬ Content: ${evt.content}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
console.warn(` π¬ Content: ${evt.content}`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
console.warn("\n================================================================================");
|
|
108
|
+
UI.success("Trace replay completed.");
|
|
109
|
+
}
|