atabey 0.0.11 → 0.0.13
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 +52 -249
- package/PRIVACY.md +161 -0
- package/README.md +355 -140
- package/bin/completion.sh +30 -0
- package/bin/{validate-agent-army.js → validate-al-registry.js} +6 -6
- package/dist/framework-mcp/src/index.js +14 -2
- package/dist/framework-mcp/src/index.js.map +1 -1
- package/dist/framework-mcp/src/resources/index.js +5 -5
- package/dist/framework-mcp/src/resources/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/control_plane/locking.d.ts +1 -1
- package/dist/framework-mcp/src/tools/control_plane/locking.js +11 -9
- package/dist/framework-mcp/src/tools/control_plane/locking.js.map +1 -1
- package/dist/framework-mcp/src/tools/definitions.d.ts +5 -0
- package/dist/framework-mcp/src/tools/definitions.js +116 -241
- package/dist/framework-mcp/src/tools/definitions.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +4 -4
- package/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js.map +1 -1
- package/dist/framework-mcp/src/tools/file_system/read_file.js +1 -1
- package/dist/framework-mcp/src/tools/file_system/replace_text.js +3 -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 +4 -4
- package/dist/framework-mcp/src/tools/file_system/write_file.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/audit_deps.js +1 -1
- package/dist/framework-mcp/src/tools/framework/audit_deps.js.map +1 -1
- package/dist/framework-mcp/src/tools/framework/submit_plan.d.ts +4 -3
- package/dist/framework-mcp/src/tools/framework/submit_plan.js.map +1 -1
- package/dist/framework-mcp/src/tools/gateway/llm_gateway_query.d.ts +19 -0
- package/dist/framework-mcp/src/tools/gateway/llm_gateway_query.js +138 -0
- package/dist/framework-mcp/src/tools/gateway/llm_gateway_query.js.map +1 -0
- package/dist/framework-mcp/src/tools/gateway/llm_gateway_status.d.ts +8 -0
- package/dist/framework-mcp/src/tools/gateway/llm_gateway_status.js +91 -0
- package/dist/framework-mcp/src/tools/gateway/llm_gateway_status.js.map +1 -0
- package/dist/framework-mcp/src/tools/index.d.ts +2 -0
- package/dist/framework-mcp/src/tools/index.js +81 -17
- package/dist/framework-mcp/src/tools/index.js.map +1 -1
- package/dist/framework-mcp/src/tools/memory/delete_knowledge.d.ts +8 -0
- package/dist/framework-mcp/src/tools/memory/delete_knowledge.js +29 -0
- package/dist/framework-mcp/src/tools/memory/delete_knowledge.js.map +1 -0
- package/dist/framework-mcp/src/tools/memory/read_memory.js +1 -1
- package/dist/framework-mcp/src/tools/memory/read_memory.js.map +1 -1
- package/dist/framework-mcp/src/tools/memory/search_knowledge.d.ts +8 -0
- package/dist/framework-mcp/src/tools/memory/search_knowledge.js +49 -0
- package/dist/framework-mcp/src/tools/memory/search_knowledge.js.map +1 -0
- package/dist/framework-mcp/src/tools/memory/store_knowledge.d.ts +10 -0
- package/dist/framework-mcp/src/tools/memory/store_knowledge.js +31 -0
- package/dist/framework-mcp/src/tools/memory/store_knowledge.js.map +1 -0
- package/dist/framework-mcp/src/tools/messaging/ask_human.d.ts +6 -0
- package/dist/framework-mcp/src/tools/messaging/ask_human.js +31 -0
- package/dist/framework-mcp/src/tools/messaging/ask_human.js.map +1 -0
- 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/observability/get_health.js +1 -1
- package/dist/framework-mcp/src/tools/quality/analyze_code_quality.d.ts +11 -0
- package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +166 -0
- package/dist/framework-mcp/src/tools/quality/analyze_code_quality.js.map +1 -0
- package/dist/framework-mcp/src/tools/quality/check_architecture_compliance.d.ts +11 -0
- package/dist/framework-mcp/src/tools/quality/check_architecture_compliance.js +135 -0
- package/dist/framework-mcp/src/tools/quality/check_architecture_compliance.js.map +1 -0
- package/dist/framework-mcp/src/tools/schemas.d.ts +439 -0
- package/dist/framework-mcp/src/tools/schemas.js +183 -0
- package/dist/framework-mcp/src/tools/schemas.js.map +1 -0
- package/dist/framework-mcp/src/tools/search/get_map.js +2 -2
- package/dist/framework-mcp/src/tools/search/get_map.js.map +1 -1
- package/dist/framework-mcp/src/tools/search/grep_search.js +10 -7
- package/dist/framework-mcp/src/tools/search/grep_search.js.map +1 -1
- package/dist/framework-mcp/src/tools/shell/run_command.js +72 -7
- package/dist/framework-mcp/src/tools/shell/run_command.js.map +1 -1
- package/dist/framework-mcp/src/tools/types.d.ts +10 -9
- package/dist/framework-mcp/src/utils/compliance.d.ts +10 -0
- package/dist/framework-mcp/src/utils/compliance.js +102 -41
- package/dist/framework-mcp/src/utils/compliance.js.map +1 -1
- package/dist/framework-mcp/src/utils/fs.d.ts +10 -7
- package/dist/framework-mcp/src/utils/fs.js +10 -7
- package/dist/framework-mcp/src/utils/fs.js.map +1 -1
- package/dist/framework-mcp/src/utils/types.d.ts +8 -0
- package/dist/framework-mcp/src/utils/types.js +4 -0
- package/dist/framework-mcp/src/utils/types.js.map +1 -1
- package/dist/framework-mcp/src/utils/zod-to-mcp.d.ts +10 -0
- package/dist/framework-mcp/src/utils/zod-to-mcp.js +80 -0
- package/dist/framework-mcp/src/utils/zod-to-mcp.js.map +1 -0
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js +4 -4
- package/dist/framework-mcp/tests/tools/file_system/file_system_tools.test.js.map +1 -1
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js +17 -16
- package/dist/framework-mcp/tests/tools/messaging/send_message.test.js.map +1 -1
- package/dist/src/cli/adapters/core.js +2 -1
- package/dist/src/cli/adapters/core.js.map +1 -1
- package/dist/src/cli/adapters/scaffold.js +2 -1
- package/dist/src/cli/adapters/scaffold.js.map +1 -1
- package/dist/src/cli/commands/check.js +17 -17
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/compliance.d.ts +5 -1
- package/dist/src/cli/commands/compliance.js +34 -42
- package/dist/src/cli/commands/compliance.js.map +1 -1
- package/dist/src/cli/commands/contract.js +6 -5
- package/dist/src/cli/commands/contract.js.map +1 -1
- package/dist/src/cli/commands/coverage.d.ts +1 -0
- package/dist/src/cli/commands/coverage.js +121 -0
- package/dist/src/cli/commands/coverage.js.map +1 -0
- package/dist/src/cli/commands/dashboard.d.ts +1 -1
- package/dist/src/cli/commands/dashboard.js +479 -39
- package/dist/src/cli/commands/dashboard.js.map +1 -1
- package/dist/src/cli/commands/explorer.js +8 -7
- package/dist/src/cli/commands/explorer.js.map +1 -1
- package/dist/src/cli/commands/gateway.d.ts +1 -0
- package/dist/src/cli/commands/gateway.js +172 -0
- package/dist/src/cli/commands/gateway.js.map +1 -0
- package/dist/src/cli/commands/git.js +8 -9
- package/dist/src/cli/commands/git.js.map +1 -1
- package/dist/src/cli/commands/index-codebase.d.ts +4 -0
- package/dist/src/cli/commands/index-codebase.js +52 -0
- package/dist/src/cli/commands/index-codebase.js.map +1 -0
- package/dist/src/cli/commands/init/create-agent.js +3 -3
- package/dist/src/cli/commands/init/create-agent.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-core.d.ts +1 -1
- package/dist/src/cli/commands/init/scaffold-core.js +7 -6
- package/dist/src/cli/commands/init/scaffold-core.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-docs.js +4 -3
- package/dist/src/cli/commands/init/scaffold-docs.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-ops.js +3 -3
- package/dist/src/cli/commands/init/scaffold-ops.js.map +1 -1
- package/dist/src/cli/commands/init/scaffold-standards.js +11 -7
- package/dist/src/cli/commands/init/scaffold-standards.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts +2 -0
- package/dist/src/cli/commands/init.js +127 -45
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/knowledge.js +5 -32
- package/dist/src/cli/commands/knowledge.js.map +1 -1
- package/dist/src/cli/commands/lint.js +5 -4
- package/dist/src/cli/commands/lint.js.map +1 -1
- package/dist/src/cli/commands/mcp.d.ts +11 -0
- package/dist/src/cli/commands/mcp.js +130 -0
- package/dist/src/cli/commands/mcp.js.map +1 -0
- package/dist/src/cli/commands/orchestrate.d.ts +10 -9
- package/dist/src/cli/commands/orchestrate.js +132 -66
- package/dist/src/cli/commands/orchestrate.js.map +1 -1
- package/dist/src/cli/commands/plan.js +16 -14
- package/dist/src/cli/commands/plan.js.map +1 -1
- package/dist/src/cli/commands/quickstart.d.ts +9 -0
- package/dist/src/cli/commands/quickstart.js +72 -0
- package/dist/src/cli/commands/quickstart.js.map +1 -0
- package/dist/src/cli/commands/script.js +6 -5
- package/dist/src/cli/commands/script.js.map +1 -1
- package/dist/src/cli/commands/security.js +5 -8
- package/dist/src/cli/commands/security.js.map +1 -1
- package/dist/src/cli/commands/status.js +23 -19
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/commands/trace.d.ts +2 -0
- package/dist/src/cli/commands/trace.js +59 -61
- package/dist/src/cli/commands/trace.js.map +1 -1
- package/dist/src/cli/index.js +236 -294
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/platforms/core.d.ts +12 -0
- package/dist/src/cli/platforms/core.js +73 -0
- package/dist/src/cli/platforms/core.js.map +1 -0
- package/dist/src/cli/platforms/index.d.ts +5 -0
- package/dist/src/cli/platforms/index.js +6 -0
- package/dist/src/cli/platforms/index.js.map +1 -0
- package/dist/src/cli/platforms/paths.d.ts +15 -0
- package/dist/src/cli/platforms/paths.js +102 -0
- package/dist/src/cli/platforms/paths.js.map +1 -0
- package/dist/src/cli/platforms/scaffold.d.ts +2 -0
- package/dist/src/cli/platforms/scaffold.js +73 -0
- package/dist/src/cli/platforms/scaffold.js.map +1 -0
- package/dist/src/cli/platforms/utils.d.ts +4 -0
- package/dist/src/cli/platforms/utils.js +76 -0
- package/dist/src/cli/platforms/utils.js.map +1 -0
- package/dist/src/cli/shims.js +5 -5
- package/dist/src/cli/utils/claude.js +2 -1
- package/dist/src/cli/utils/claude.js.map +1 -1
- package/dist/src/cli/utils/compliance.d.ts +10 -9
- package/dist/src/cli/utils/compliance.js +10 -171
- package/dist/src/cli/utils/compliance.js.map +1 -1
- package/dist/src/cli/utils/fs.d.ts +3 -3
- package/dist/src/cli/utils/fs.js +8 -7
- package/dist/src/cli/utils/fs.js.map +1 -1
- package/dist/src/cli/utils/i18n.d.ts +5 -0
- package/dist/src/cli/utils/i18n.js +5 -0
- package/dist/src/cli/utils/i18n.js.map +1 -1
- package/dist/src/cli/utils/memory.js +9 -6
- package/dist/src/cli/utils/memory.js.map +1 -1
- package/dist/src/cli/utils/pkg.js +8 -7
- package/dist/src/cli/utils/pkg.js.map +1 -1
- package/dist/src/cli/utils/schemas.d.ts +4 -4
- package/dist/src/cli/utils/ui.d.ts +23 -0
- package/dist/src/cli/utils/ui.js +42 -0
- package/dist/src/cli/utils/ui.js.map +1 -1
- package/dist/src/contracts/tasks.d.ts +4 -4
- package/dist/src/dashboard/src/hooks/useApi.d.ts +18 -0
- package/dist/src/dashboard/src/hooks/useApi.js +47 -0
- package/dist/src/dashboard/src/hooks/useApi.js.map +1 -0
- package/dist/src/dashboard/src/hooks/useSSE.d.ts +12 -0
- package/dist/src/dashboard/src/hooks/useSSE.js +60 -0
- package/dist/src/dashboard/src/hooks/useSSE.js.map +1 -0
- package/dist/src/modules/adapters/shared.js +3 -3
- package/dist/src/modules/adapters/shared.js.map +1 -1
- package/dist/src/modules/agents/definitions.d.ts +5 -13
- package/dist/src/modules/agents/definitions.js +179 -78
- package/dist/src/modules/agents/definitions.js.map +1 -1
- package/dist/src/modules/agents/registry/analyst.js +2 -1
- package/dist/src/modules/agents/registry/analyst.js.map +1 -1
- package/dist/src/modules/agents/registry/architect.js +1 -0
- package/dist/src/modules/agents/registry/architect.js.map +1 -1
- package/dist/src/modules/agents/registry/backend.js +8 -6
- package/dist/src/modules/agents/registry/backend.js.map +1 -1
- package/dist/src/modules/agents/registry/database.js.map +1 -1
- package/dist/src/modules/agents/registry/devops.js.map +1 -1
- package/dist/src/modules/agents/registry/explorer.js +2 -0
- package/dist/src/modules/agents/registry/explorer.js.map +1 -1
- package/dist/src/modules/agents/registry/frontend.js +8 -6
- package/dist/src/modules/agents/registry/frontend.js.map +1 -1
- package/dist/src/modules/agents/registry/git.js.map +1 -1
- package/dist/src/modules/agents/registry/manager.js +11 -4
- package/dist/src/modules/agents/registry/manager.js.map +1 -1
- package/dist/src/modules/agents/registry/mobile.js +7 -5
- package/dist/src/modules/agents/registry/mobile.js.map +1 -1
- package/dist/src/modules/agents/registry/native.js +7 -5
- package/dist/src/modules/agents/registry/native.js.map +1 -1
- package/dist/src/modules/agents/registry/quality.js +11 -8
- package/dist/src/modules/agents/registry/quality.js.map +1 -1
- package/dist/src/modules/agents/registry/security.js.map +1 -1
- package/dist/src/modules/contracts/api.d.ts +178 -0
- package/dist/src/modules/contracts/api.js +56 -0
- package/dist/src/modules/contracts/api.js.map +1 -0
- package/dist/src/modules/contracts/index.d.ts +5 -0
- package/dist/src/modules/contracts/index.js +6 -0
- package/dist/src/modules/contracts/index.js.map +1 -0
- package/dist/src/modules/engines/agent-executor.d.ts +50 -0
- package/dist/src/modules/engines/agent-executor.js +188 -0
- package/dist/src/modules/engines/agent-executor.js.map +1 -0
- package/dist/src/modules/engines/health-engine.d.ts +7 -1
- package/dist/src/modules/engines/health-engine.js +85 -8
- package/dist/src/modules/engines/health-engine.js.map +1 -1
- package/dist/src/modules/engines/planning-engine.d.ts +1 -1
- package/dist/src/modules/engines/planning-engine.js +5 -4
- package/dist/src/modules/engines/planning-engine.js.map +1 -1
- package/dist/src/modules/engines/quality-gate.d.ts +23 -0
- package/dist/src/modules/engines/quality-gate.js +85 -0
- package/dist/src/modules/engines/quality-gate.js.map +1 -0
- package/dist/src/modules/engines/risk-engine.js +6 -6
- package/dist/src/modules/engines/risk-engine.js.map +1 -1
- package/dist/src/modules/engines/routing-engine.d.ts +59 -1
- package/dist/src/modules/engines/routing-engine.js +353 -25
- package/dist/src/modules/engines/routing-engine.js.map +1 -1
- package/dist/src/modules/engines/types.d.ts +7 -3
- package/dist/src/modules/gateway/circuit-breaker.d.ts +40 -0
- package/dist/src/modules/gateway/circuit-breaker.js +163 -0
- package/dist/src/modules/gateway/circuit-breaker.js.map +1 -0
- package/dist/src/modules/gateway/cost-tracker.d.ts +55 -0
- package/dist/src/modules/gateway/cost-tracker.js +127 -0
- package/dist/src/modules/gateway/cost-tracker.js.map +1 -0
- package/dist/src/modules/gateway/gateway.d.ts +68 -0
- package/dist/src/modules/gateway/gateway.js +235 -0
- package/dist/src/modules/gateway/gateway.js.map +1 -0
- package/dist/src/modules/gateway/index.d.ts +19 -0
- package/dist/src/modules/gateway/index.js +19 -0
- package/dist/src/modules/gateway/index.js.map +1 -0
- package/dist/src/modules/gateway/load-balancer.d.ts +86 -0
- package/dist/src/modules/gateway/load-balancer.js +230 -0
- package/dist/src/modules/gateway/load-balancer.js.map +1 -0
- package/dist/src/modules/gateway/providers/anthropic.d.ts +14 -0
- package/dist/src/modules/gateway/providers/anthropic.js +169 -0
- package/dist/src/modules/gateway/providers/anthropic.js.map +1 -0
- package/dist/src/modules/gateway/providers/base.d.ts +38 -0
- package/dist/src/modules/gateway/providers/base.js +42 -0
- package/dist/src/modules/gateway/providers/base.js.map +1 -0
- package/dist/src/modules/gateway/providers/google.d.ts +18 -0
- package/dist/src/modules/gateway/providers/google.js +176 -0
- package/dist/src/modules/gateway/providers/google.js.map +1 -0
- package/dist/src/modules/gateway/providers/grok.d.ts +14 -0
- package/dist/src/modules/gateway/providers/grok.js +166 -0
- package/dist/src/modules/gateway/providers/grok.js.map +1 -0
- package/dist/src/modules/gateway/providers/index.d.ts +21 -0
- package/dist/src/modules/gateway/providers/index.js +38 -0
- package/dist/src/modules/gateway/providers/index.js.map +1 -0
- package/dist/src/modules/gateway/providers/ollama.d.ts +23 -0
- package/dist/src/modules/gateway/providers/ollama.js +187 -0
- package/dist/src/modules/gateway/providers/ollama.js.map +1 -0
- package/dist/src/modules/gateway/providers/openai.d.ts +14 -0
- package/dist/src/modules/gateway/providers/openai.js +170 -0
- package/dist/src/modules/gateway/providers/openai.js.map +1 -0
- package/dist/src/modules/gateway/rate-limiter.d.ts +41 -0
- package/dist/src/modules/gateway/rate-limiter.js +119 -0
- package/dist/src/modules/gateway/rate-limiter.js.map +1 -0
- package/dist/src/modules/gateway/types.d.ts +114 -0
- package/dist/src/modules/gateway/types.js +8 -0
- package/dist/src/modules/gateway/types.js.map +1 -0
- package/dist/src/modules/memory/core.d.ts +42 -0
- package/dist/src/modules/memory/core.js +100 -0
- package/dist/src/modules/memory/core.js.map +1 -0
- package/dist/src/modules/memory/embedding.d.ts +28 -0
- package/dist/src/modules/memory/embedding.js +131 -0
- package/dist/src/modules/memory/embedding.js.map +1 -0
- package/dist/src/modules/memory/types.d.ts +18 -0
- package/dist/src/modules/memory/types.js +2 -0
- package/dist/src/modules/memory/types.js.map +1 -0
- package/dist/src/modules/memory/vector-store.d.ts +13 -0
- package/dist/src/modules/memory/vector-store.js +75 -0
- package/dist/src/modules/memory/vector-store.js.map +1 -0
- package/dist/src/modules/providers/definitions.d.ts +9 -0
- package/dist/src/modules/providers/definitions.js +141 -0
- package/dist/src/modules/providers/definitions.js.map +1 -0
- package/dist/src/modules/providers/registry.d.ts +12 -0
- package/dist/src/modules/providers/registry.js +19 -0
- package/dist/src/modules/providers/registry.js.map +1 -0
- package/dist/src/modules/providers/shared.d.ts +1 -0
- package/dist/src/modules/providers/shared.js +105 -0
- package/dist/src/modules/providers/shared.js.map +1 -0
- package/dist/src/modules/providers/types.d.ts +14 -0
- package/dist/src/modules/providers/types.js +2 -0
- package/dist/src/modules/providers/types.js.map +1 -0
- package/dist/src/modules/skills/adapter-skills.d.ts +68 -0
- package/dist/src/modules/skills/adapter-skills.js +450 -0
- package/dist/src/modules/skills/adapter-skills.js.map +1 -0
- package/dist/src/shared/audit.d.ts +105 -0
- package/dist/src/shared/audit.js +220 -0
- package/dist/src/shared/audit.js.map +1 -0
- package/dist/src/shared/constants.d.ts +11 -11
- package/dist/src/shared/constants.js +3 -3
- package/dist/src/shared/constants.js.map +1 -1
- package/dist/src/shared/fs.js +4 -2
- package/dist/src/shared/fs.js.map +1 -1
- package/dist/src/shared/lock.d.ts +82 -0
- package/dist/src/shared/lock.js +160 -0
- package/dist/src/shared/lock.js.map +1 -0
- package/dist/src/shared/logger.d.ts +2 -0
- package/dist/src/shared/logger.js +15 -5
- package/dist/src/shared/logger.js.map +1 -1
- package/dist/src/shared/pii.d.ts +37 -0
- package/dist/src/shared/pii.js +122 -0
- package/dist/src/shared/pii.js.map +1 -0
- package/dist/src/shared/retention.d.ts +63 -0
- package/dist/src/shared/retention.js +171 -0
- package/dist/src/shared/retention.js.map +1 -0
- package/dist/src/shared/storage.d.ts +13 -11
- package/dist/src/shared/storage.js +18 -14
- package/dist/src/shared/storage.js.map +1 -1
- package/dist/src/shared/string.d.ts +1 -0
- package/dist/src/shared/string.js +30 -0
- package/dist/src/shared/string.js.map +1 -0
- package/dist/src/shared/types.d.ts +8 -0
- package/dist/src/shared/types.js +4 -0
- package/dist/src/shared/types.js.map +1 -1
- package/dist/tests/adapter.test.js +3 -2
- package/dist/tests/adapter.test.js.map +1 -1
- package/dist/tests/adapters/paths.test.js +4 -4
- package/dist/tests/adapters/paths.test.js.map +1 -1
- package/dist/tests/cli/commands/check.test.d.ts +1 -0
- package/dist/tests/cli/commands/check.test.js +9 -0
- package/dist/tests/cli/commands/check.test.js.map +1 -0
- package/dist/tests/cli/commands/coverage.test.d.ts +1 -0
- package/dist/tests/cli/commands/coverage.test.js +9 -0
- package/dist/tests/cli/commands/coverage.test.js.map +1 -0
- package/dist/tests/cli/commands/dashboard-coverage.test.d.ts +1 -0
- package/dist/tests/cli/commands/dashboard-coverage.test.js +88 -0
- package/dist/tests/cli/commands/dashboard-coverage.test.js.map +1 -0
- package/dist/tests/cli/commands/exports.test.d.ts +1 -0
- package/dist/tests/cli/commands/exports.test.js +61 -0
- package/dist/tests/cli/commands/exports.test.js.map +1 -0
- package/dist/tests/cli/commands/lint.test.d.ts +1 -0
- package/dist/tests/cli/commands/lint.test.js +9 -0
- package/dist/tests/cli/commands/lint.test.js.map +1 -0
- package/dist/tests/cli/init/adapter_init.test.js +4 -5
- package/dist/tests/cli/init/adapter_init.test.js.map +1 -1
- package/dist/tests/cli/init/unified_init.test.js +5 -7
- package/dist/tests/cli/init/unified_init.test.js.map +1 -1
- package/dist/tests/core-memory.test.d.ts +1 -0
- package/dist/tests/core-memory.test.js +78 -0
- package/dist/tests/core-memory.test.js.map +1 -0
- package/dist/tests/dashboard.test.d.ts +1 -0
- package/dist/tests/dashboard.test.js +116 -0
- package/dist/tests/dashboard.test.js.map +1 -0
- package/dist/tests/fs-utils.test.js +5 -5
- package/dist/tests/fs-utils.test.js.map +1 -1
- package/dist/tests/integration/agent_flow.test.js +24 -10
- package/dist/tests/integration/agent_flow.test.js.map +1 -1
- package/dist/tests/modules/adapters/adapters.test.js +2 -2
- package/dist/tests/modules/adapters/adapters.test.js.map +1 -1
- package/dist/tests/modules/contracts/contracts.test.d.ts +1 -0
- package/dist/tests/modules/contracts/contracts.test.js +73 -0
- package/dist/tests/modules/contracts/contracts.test.js.map +1 -0
- package/dist/tests/modules/engines/agent-executor.test.d.ts +1 -0
- package/dist/tests/modules/engines/agent-executor.test.js +61 -0
- package/dist/tests/modules/engines/agent-executor.test.js.map +1 -0
- package/dist/tests/modules/engines/evaluation-engine.test.d.ts +1 -0
- package/dist/tests/modules/engines/evaluation-engine.test.js +45 -0
- package/dist/tests/modules/engines/evaluation-engine.test.js.map +1 -0
- package/dist/tests/modules/engines/health-engine.test.d.ts +1 -0
- package/dist/tests/modules/engines/health-engine.test.js +56 -0
- package/dist/tests/modules/engines/health-engine.test.js.map +1 -0
- package/dist/tests/modules/engines/planning-engine.test.d.ts +1 -0
- package/dist/tests/modules/engines/planning-engine.test.js +75 -0
- package/dist/tests/modules/engines/planning-engine.test.js.map +1 -0
- package/dist/tests/modules/engines/risk-engine.test.d.ts +1 -0
- package/dist/tests/modules/engines/risk-engine.test.js +61 -0
- package/dist/tests/modules/engines/risk-engine.test.js.map +1 -0
- package/dist/tests/modules/engines/routing-engine.test.d.ts +1 -0
- package/dist/tests/modules/engines/routing-engine.test.js +56 -0
- package/dist/tests/modules/engines/routing-engine.test.js.map +1 -0
- package/dist/tests/modules/gateway/circuit-breaker.test.d.ts +1 -0
- package/dist/tests/modules/gateway/circuit-breaker.test.js +124 -0
- package/dist/tests/modules/gateway/circuit-breaker.test.js.map +1 -0
- package/dist/tests/modules/gateway/cost-tracker.test.d.ts +1 -0
- package/dist/tests/modules/gateway/cost-tracker.test.js +74 -0
- package/dist/tests/modules/gateway/cost-tracker.test.js.map +1 -0
- package/dist/tests/modules/gateway/load-balancer.test.d.ts +1 -0
- package/dist/tests/modules/gateway/load-balancer.test.js +70 -0
- package/dist/tests/modules/gateway/load-balancer.test.js.map +1 -0
- package/dist/tests/modules/gateway/rate-limiter.test.d.ts +1 -0
- package/dist/tests/modules/gateway/rate-limiter.test.js +62 -0
- package/dist/tests/modules/gateway/rate-limiter.test.js.map +1 -0
- package/dist/tests/modules/memory/vector-store.test.d.ts +1 -0
- package/dist/tests/modules/memory/vector-store.test.js +109 -0
- package/dist/tests/modules/memory/vector-store.test.js.map +1 -0
- package/dist/tests/orchestrator-dependencies.test.js +40 -22
- package/dist/tests/orchestrator-dependencies.test.js.map +1 -1
- package/dist/tests/planning-engine.test.js +9 -8
- package/dist/tests/planning-engine.test.js.map +1 -1
- package/dist/tests/risk-engine.test.d.ts +1 -0
- package/dist/tests/risk-engine.test.js +44 -0
- package/dist/tests/risk-engine.test.js.map +1 -0
- package/dist/tests/shared/audit.test.d.ts +1 -0
- package/dist/tests/shared/audit.test.js +53 -0
- package/dist/tests/shared/audit.test.js.map +1 -0
- package/dist/tests/status-cost.test.js +15 -24
- package/dist/tests/status-cost.test.js.map +1 -1
- package/dist/tests/status.test.js +16 -17
- package/dist/tests/status.test.js.map +1 -1
- package/dist/tests/storage-operations.test.d.ts +1 -0
- package/dist/tests/storage-operations.test.js +116 -0
- package/dist/tests/storage-operations.test.js.map +1 -0
- package/dist/tests/trace-replay.test.js +34 -40
- package/dist/tests/trace-replay.test.js.map +1 -1
- package/dist/ui/assets/index-B-d2ejS8.js +519 -0
- package/dist/ui/assets/index-CyXywq5G.css +1 -0
- package/dist/ui/index.html +2 -2
- package/dist/vitest.config.js +5 -5
- package/dist/vitest.config.js.map +1 -1
- package/framework-mcp/README.md +339 -25
- package/framework-mcp/dist/dashboard/assets/index-BAPGLiWE.js +267 -0
- package/framework-mcp/dist/dashboard/index.html +15 -0
- package/framework-mcp/dist/framework-mcp/src/constants.js +64 -0
- package/framework-mcp/dist/framework-mcp/src/index.js +156 -0
- package/framework-mcp/dist/framework-mcp/src/resources/index.js +58 -0
- package/framework-mcp/dist/framework-mcp/src/tools/control_plane/locking.js +84 -0
- package/framework-mcp/dist/framework-mcp/src/tools/control_plane/registry.js +35 -0
- package/framework-mcp/dist/framework-mcp/src/tools/definitions.js +197 -0
- package/framework-mcp/dist/framework-mcp/src/tools/file_system/batch_surgical_edit.js +64 -0
- package/framework-mcp/dist/framework-mcp/src/tools/file_system/patch_file.js +34 -0
- package/framework-mcp/dist/framework-mcp/src/tools/file_system/read_file.js +51 -0
- package/framework-mcp/dist/framework-mcp/src/tools/file_system/replace_text.js +50 -0
- package/framework-mcp/dist/framework-mcp/src/tools/file_system/write_file.js +55 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/audit_deps.js +41 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/get_status.js +5 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/orchestrate.js +5 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/run_tests.js +27 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/submit_plan.js +13 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/update_contract_hash.js +5 -0
- package/framework-mcp/dist/framework-mcp/src/tools/framework/update_memory.js +8 -0
- package/framework-mcp/dist/framework-mcp/src/tools/gateway/llm_gateway_query.js +137 -0
- package/framework-mcp/dist/framework-mcp/src/tools/gateway/llm_gateway_status.js +90 -0
- package/framework-mcp/dist/framework-mcp/src/tools/index.js +126 -0
- package/framework-mcp/dist/framework-mcp/src/tools/memory/delete_knowledge.js +28 -0
- package/framework-mcp/dist/framework-mcp/src/tools/memory/get_insights.js +22 -0
- package/framework-mcp/dist/framework-mcp/src/tools/memory/read_memory.js +28 -0
- package/framework-mcp/dist/framework-mcp/src/tools/memory/search_knowledge.js +48 -0
- package/framework-mcp/dist/framework-mcp/src/tools/memory/store_knowledge.js +30 -0
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/ask_human.js +30 -0
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/log_action.js +22 -0
- package/framework-mcp/dist/framework-mcp/src/tools/messaging/send_message.js +94 -0
- package/framework-mcp/dist/framework-mcp/src/tools/observability/check_ports.js +26 -0
- package/framework-mcp/dist/framework-mcp/src/tools/observability/get_health.js +19 -0
- package/framework-mcp/dist/framework-mcp/src/tools/quality/analyze_code_quality.js +165 -0
- package/framework-mcp/dist/framework-mcp/src/tools/quality/check_architecture_compliance.js +134 -0
- package/framework-mcp/dist/framework-mcp/src/tools/quality/check_lint.js +30 -0
- package/framework-mcp/dist/framework-mcp/src/tools/schemas.js +182 -0
- package/framework-mcp/dist/framework-mcp/src/tools/search/get_gaps.js +48 -0
- package/framework-mcp/dist/framework-mcp/src/tools/search/get_map.js +43 -0
- package/framework-mcp/dist/framework-mcp/src/tools/search/grep_search.js +78 -0
- package/framework-mcp/dist/framework-mcp/src/tools/search/list_dir.js +28 -0
- package/framework-mcp/dist/framework-mcp/src/tools/shell/run_command.js +121 -0
- package/framework-mcp/dist/framework-mcp/src/tools/types.js +1 -0
- package/framework-mcp/dist/framework-mcp/src/utils/cli.js +59 -0
- package/framework-mcp/dist/framework-mcp/src/utils/compliance.js +292 -0
- package/framework-mcp/dist/framework-mcp/src/utils/errors.js +68 -0
- package/framework-mcp/dist/framework-mcp/src/utils/fs.js +47 -0
- package/framework-mcp/dist/framework-mcp/src/utils/memory.js +74 -0
- package/framework-mcp/dist/framework-mcp/src/utils/metrics.js +56 -0
- package/framework-mcp/dist/framework-mcp/src/utils/permissions.js +71 -0
- package/framework-mcp/dist/framework-mcp/src/utils/security.js +60 -0
- package/framework-mcp/dist/framework-mcp/src/utils/storage.js +207 -0
- package/framework-mcp/dist/framework-mcp/src/utils/types.js +16 -0
- package/framework-mcp/dist/framework-mcp/src/utils/zod-to-mcp.js +79 -0
- package/framework-mcp/dist/index.js +14 -2
- package/framework-mcp/dist/src/cli/utils/memory.js +279 -0
- package/framework-mcp/dist/src/cli/utils/time.js +27 -0
- package/framework-mcp/dist/src/cli/utils/ui.js +100 -0
- package/framework-mcp/dist/src/modules/memory/core.js +99 -0
- package/framework-mcp/dist/src/modules/memory/embedding.js +130 -0
- package/framework-mcp/dist/src/modules/memory/types.js +1 -0
- package/framework-mcp/dist/src/modules/memory/vector-store.js +74 -0
- package/framework-mcp/dist/src/shared/constants.js +187 -0
- package/framework-mcp/dist/src/shared/fs.js +53 -0
- package/framework-mcp/dist/src/shared/logger.js +126 -0
- package/framework-mcp/dist/src/shared/pii.js +121 -0
- package/framework-mcp/dist/src/shared/storage.js +211 -0
- package/framework-mcp/dist/src/shared/types.js +16 -0
- package/framework-mcp/dist/tools/definitions.js +79 -247
- package/framework-mcp/dist/tools/index.js +37 -0
- package/framework-mcp/dist/tools/schemas.js +133 -0
- package/framework-mcp/dist/utils/types.js +4 -0
- package/framework-mcp/dist/utils/zod-to-mcp.js +77 -0
- package/framework-mcp/package.json +2 -2
- package/mcp.json +5 -4
- package/package.json +19 -17
- package/templates/full/ATABEY_FULL.md +515 -0
- package/templates/standards/crud-governance.md +1 -1
- package/templates/standards/logging-and-secrets.md +1 -1
- package/templates/standards/performance-standards.md +2 -2
- package/templates/standards/quality-standards.md +1 -1
- package/dist/ui/assets/index-Bkt7APzu.css +0 -1
- package/dist/ui/assets/index-CeX-06mI.js +0 -49
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import { getFrameworkDir } from "./memory.js";
|
|
5
|
+
/**
|
|
6
|
+
* [DB] Atabey Storage Engine
|
|
7
|
+
* Central SQLite database for enterprise-scale agent state management.
|
|
8
|
+
*/
|
|
9
|
+
export class Storage {
|
|
10
|
+
static db = null;
|
|
11
|
+
static getDB() {
|
|
12
|
+
if (!this.db) {
|
|
13
|
+
const frameworkDir = getFrameworkDir();
|
|
14
|
+
if (!fs.existsSync(frameworkDir)) {
|
|
15
|
+
fs.mkdirSync(frameworkDir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
const dbPath = path.join(frameworkDir, "atabey.db");
|
|
18
|
+
this.db = new Database(dbPath);
|
|
19
|
+
this.initializeSchema();
|
|
20
|
+
}
|
|
21
|
+
return this.db;
|
|
22
|
+
}
|
|
23
|
+
static initializeSchema() {
|
|
24
|
+
const db = this.db;
|
|
25
|
+
// Agents Table
|
|
26
|
+
db.exec(`
|
|
27
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
28
|
+
name TEXT PRIMARY KEY,
|
|
29
|
+
state TEXT DEFAULT 'READY',
|
|
30
|
+
task TEXT DEFAULT 'Idle',
|
|
31
|
+
last_updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
32
|
+
)
|
|
33
|
+
`);
|
|
34
|
+
// Messages (Hermes) Table
|
|
35
|
+
db.exec(`
|
|
36
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
39
|
+
sender TEXT,
|
|
40
|
+
receiver TEXT,
|
|
41
|
+
category TEXT,
|
|
42
|
+
content TEXT,
|
|
43
|
+
trace_id TEXT,
|
|
44
|
+
parent_id TEXT,
|
|
45
|
+
status TEXT DEFAULT 'PENDING',
|
|
46
|
+
priority TEXT DEFAULT 'NORMAL',
|
|
47
|
+
requires_approval BOOLEAN DEFAULT 0
|
|
48
|
+
)
|
|
49
|
+
`);
|
|
50
|
+
// Tasks Table
|
|
51
|
+
db.exec(`
|
|
52
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
53
|
+
id TEXT PRIMARY KEY,
|
|
54
|
+
trace_id TEXT,
|
|
55
|
+
description TEXT,
|
|
56
|
+
agent TEXT,
|
|
57
|
+
status TEXT DEFAULT 'PENDING',
|
|
58
|
+
priority TEXT DEFAULT 'NORMAL',
|
|
59
|
+
dependencies TEXT, -- JSON Array
|
|
60
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
61
|
+
)
|
|
62
|
+
`);
|
|
63
|
+
// Logs Table
|
|
64
|
+
db.exec(`
|
|
65
|
+
CREATE TABLE IF NOT EXISTS logs (
|
|
66
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
67
|
+
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
68
|
+
agent TEXT,
|
|
69
|
+
action TEXT,
|
|
70
|
+
trace_id TEXT,
|
|
71
|
+
status TEXT,
|
|
72
|
+
summary TEXT,
|
|
73
|
+
findings TEXT
|
|
74
|
+
)
|
|
75
|
+
`);
|
|
76
|
+
// Metadata (State) Table
|
|
77
|
+
db.exec(`
|
|
78
|
+
CREATE TABLE IF NOT EXISTS metadata (
|
|
79
|
+
key TEXT PRIMARY KEY,
|
|
80
|
+
value TEXT
|
|
81
|
+
)
|
|
82
|
+
`);
|
|
83
|
+
}
|
|
84
|
+
// --- Agent Operations ---
|
|
85
|
+
static updateAgentStatus(name, state, task, lastUpdated) {
|
|
86
|
+
const db = this.getDB();
|
|
87
|
+
const cleanName = name.replace("@", "");
|
|
88
|
+
const timestamp = lastUpdated || new Date().toISOString();
|
|
89
|
+
db.prepare(`
|
|
90
|
+
INSERT INTO agents (name, state, task, last_updated)
|
|
91
|
+
VALUES (?, ?, ?, ?)
|
|
92
|
+
ON CONFLICT(name) DO UPDATE SET
|
|
93
|
+
state = excluded.state,
|
|
94
|
+
task = excluded.task,
|
|
95
|
+
last_updated = excluded.last_updated
|
|
96
|
+
`).run(cleanName, state, task, timestamp);
|
|
97
|
+
}
|
|
98
|
+
static getAllAgents() {
|
|
99
|
+
return this.getDB().prepare("SELECT * FROM agents").all();
|
|
100
|
+
}
|
|
101
|
+
// --- Message Operations ---
|
|
102
|
+
static saveMessage(msg) {
|
|
103
|
+
const db = this.getDB();
|
|
104
|
+
db.prepare(`
|
|
105
|
+
INSERT INTO messages (sender, receiver, category, content, trace_id, parent_id, status, priority, requires_approval)
|
|
106
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
107
|
+
`).run(msg.from, msg.to, msg.category, msg.content, msg.traceId, msg.parentId || null, msg.status || "PENDING", msg.priority || "NORMAL", msg.requiresApproval ? 1 : 0);
|
|
108
|
+
}
|
|
109
|
+
static getPendingMessages() {
|
|
110
|
+
const rows = this.getDB().prepare("SELECT * FROM messages WHERE status IN ('PENDING', 'APPROVED') ORDER BY priority DESC, timestamp ASC").all();
|
|
111
|
+
return rows.map(r => ({
|
|
112
|
+
id: r.id,
|
|
113
|
+
timestamp: r.timestamp,
|
|
114
|
+
from: r.sender,
|
|
115
|
+
to: r.receiver,
|
|
116
|
+
category: r.category,
|
|
117
|
+
content: r.content,
|
|
118
|
+
traceId: r.trace_id,
|
|
119
|
+
parentId: r.parent_id || undefined,
|
|
120
|
+
status: r.status,
|
|
121
|
+
priority: r.priority,
|
|
122
|
+
requiresApproval: r.requires_approval === 1
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
static updateMessageStatus(id, status) {
|
|
126
|
+
this.getDB().prepare("UPDATE messages SET status = ? WHERE id = ?").run(status, id);
|
|
127
|
+
}
|
|
128
|
+
// --- Task Operations ---
|
|
129
|
+
static saveTask(task) {
|
|
130
|
+
const db = this.getDB();
|
|
131
|
+
db.prepare(`
|
|
132
|
+
INSERT INTO tasks (id, trace_id, description, agent, status, priority, dependencies)
|
|
133
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
134
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
135
|
+
status = excluded.status,
|
|
136
|
+
description = excluded.description
|
|
137
|
+
`).run(task.id, task.traceId, task.description, task.agent, task.status, task.priority, JSON.stringify(task.dependencies || []));
|
|
138
|
+
}
|
|
139
|
+
static getTasks(traceId) {
|
|
140
|
+
const db = this.getDB();
|
|
141
|
+
let rows;
|
|
142
|
+
if (traceId) {
|
|
143
|
+
rows = db.prepare("SELECT * FROM tasks WHERE trace_id = ?").all(traceId);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
rows = db.prepare("SELECT * FROM tasks").all();
|
|
147
|
+
}
|
|
148
|
+
return rows.map(r => {
|
|
149
|
+
let deps = [];
|
|
150
|
+
try {
|
|
151
|
+
const parsed = JSON.parse(r.dependencies || "[]");
|
|
152
|
+
// Handle cases where dependencies might be double-stringified or are raw JSON strings
|
|
153
|
+
deps = Array.isArray(parsed) ? parsed : JSON.parse(parsed);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Keep empty array
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
id: r.id,
|
|
160
|
+
traceId: r.trace_id,
|
|
161
|
+
description: r.description,
|
|
162
|
+
agent: r.agent,
|
|
163
|
+
status: r.status,
|
|
164
|
+
priority: r.priority,
|
|
165
|
+
dependencies: deps
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
static getLogs(agentName) {
|
|
170
|
+
const db = this.getDB();
|
|
171
|
+
let rows;
|
|
172
|
+
const cleanName = agentName ? agentName.replace("@", "") : undefined;
|
|
173
|
+
if (cleanName) {
|
|
174
|
+
rows = db.prepare("SELECT * FROM logs WHERE agent = ? ORDER BY timestamp DESC").all(cleanName);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
rows = db.prepare("SELECT * FROM logs ORDER BY timestamp DESC").all();
|
|
178
|
+
}
|
|
179
|
+
return rows.map(r => ({
|
|
180
|
+
id: r.id,
|
|
181
|
+
timestamp: r.timestamp,
|
|
182
|
+
agent: r.agent,
|
|
183
|
+
action: r.action,
|
|
184
|
+
trace_id: r.trace_id || undefined,
|
|
185
|
+
status: r.status,
|
|
186
|
+
summary: r.summary,
|
|
187
|
+
findings: r.findings || undefined
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
// --- Metadata Operations ---
|
|
191
|
+
static setMetadata(key, value) {
|
|
192
|
+
this.getDB().prepare(`
|
|
193
|
+
INSERT INTO metadata (key, value) VALUES (?, ?)
|
|
194
|
+
ON CONFLICT(key) DO UPDATE SET value = excluded.value
|
|
195
|
+
`).run(key, value);
|
|
196
|
+
}
|
|
197
|
+
static getMetadata(key) {
|
|
198
|
+
const row = this.getDB().prepare("SELECT value FROM metadata WHERE key = ?").get(key);
|
|
199
|
+
return row ? row.value : null;
|
|
200
|
+
}
|
|
201
|
+
static reset() {
|
|
202
|
+
if (this.db) {
|
|
203
|
+
this.db.close();
|
|
204
|
+
this.db = null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Atabey Framework — Internal Branded Types
|
|
3
|
+
* Used to enforce absolute type safety within the core orchestration logic.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Casts a raw string to a Branded Type.
|
|
7
|
+
* Use this only at the boundaries of the system.
|
|
8
|
+
*/
|
|
9
|
+
export function asTraceID(val) { return val; }
|
|
10
|
+
export function asAgentID(val) { return val; }
|
|
11
|
+
export function asPhaseID(val) { return val; }
|
|
12
|
+
export function asProjectPath(val) { return val; }
|
|
13
|
+
export function asMessageID(val) { return val; }
|
|
14
|
+
export function asTaskID(val) { return val; }
|
|
15
|
+
export function asLogID(val) { return val; }
|
|
16
|
+
export function asPlanID(val) { return val; }
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* A surgical converter to transform Zod schemas into MCP-compliant JSON schemas.
|
|
4
|
+
* This ensures "Single Source of Truth" and eliminates Type Drift.
|
|
5
|
+
*/
|
|
6
|
+
export function zodToMcpSchema(schema) {
|
|
7
|
+
const jsonSchema = {
|
|
8
|
+
type: "object",
|
|
9
|
+
properties: {}
|
|
10
|
+
};
|
|
11
|
+
const requiredKeys = [];
|
|
12
|
+
const shape = schema.shape;
|
|
13
|
+
for (const key in shape) {
|
|
14
|
+
const field = shape[key];
|
|
15
|
+
const { type, properties, required } = parseZodField(field);
|
|
16
|
+
jsonSchema.properties[key] = {
|
|
17
|
+
type,
|
|
18
|
+
...(properties || {})
|
|
19
|
+
};
|
|
20
|
+
if (required) {
|
|
21
|
+
requiredKeys.push(key);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (requiredKeys.length > 0) {
|
|
25
|
+
jsonSchema.required = requiredKeys;
|
|
26
|
+
}
|
|
27
|
+
return jsonSchema;
|
|
28
|
+
}
|
|
29
|
+
function parseZodField(field) {
|
|
30
|
+
let type = "string";
|
|
31
|
+
const properties = {};
|
|
32
|
+
const isRequired = !field.isOptional() && !field.isNullable();
|
|
33
|
+
let unwrapped = field;
|
|
34
|
+
// Handle Optional/Nullable
|
|
35
|
+
while (unwrapped instanceof z.ZodOptional || unwrapped instanceof z.ZodNullable || unwrapped instanceof z.ZodDefault) {
|
|
36
|
+
if (unwrapped instanceof z.ZodDefault) {
|
|
37
|
+
properties.default = unwrapped._def.defaultValue();
|
|
38
|
+
}
|
|
39
|
+
unwrapped = unwrapped._def.innerType;
|
|
40
|
+
}
|
|
41
|
+
// Handle Branded Types
|
|
42
|
+
if (unwrapped instanceof z.ZodBranded) {
|
|
43
|
+
unwrapped = unwrapped._def.type;
|
|
44
|
+
}
|
|
45
|
+
if (unwrapped instanceof z.ZodString) {
|
|
46
|
+
type = "string";
|
|
47
|
+
const checks = unwrapped._def.checks;
|
|
48
|
+
for (const check of checks) {
|
|
49
|
+
if (check.kind === "regex")
|
|
50
|
+
properties.pattern = check.regex.source;
|
|
51
|
+
if (check.kind === "min")
|
|
52
|
+
properties.minLength = check.value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (unwrapped instanceof z.ZodNumber) {
|
|
56
|
+
type = "number";
|
|
57
|
+
}
|
|
58
|
+
else if (unwrapped instanceof z.ZodBoolean) {
|
|
59
|
+
type = "boolean";
|
|
60
|
+
}
|
|
61
|
+
else if (unwrapped instanceof z.ZodEnum) {
|
|
62
|
+
type = "string";
|
|
63
|
+
properties.enum = unwrapped._def.values;
|
|
64
|
+
}
|
|
65
|
+
else if (unwrapped instanceof z.ZodArray) {
|
|
66
|
+
type = "array";
|
|
67
|
+
const itemType = parseZodField(unwrapped._def.type);
|
|
68
|
+
properties.items = { type: itemType.type, ...(itemType.properties || {}) };
|
|
69
|
+
}
|
|
70
|
+
else if (unwrapped instanceof z.ZodObject) {
|
|
71
|
+
type = "object";
|
|
72
|
+
const nested = zodToMcpSchema(unwrapped);
|
|
73
|
+
properties.properties = nested.properties;
|
|
74
|
+
if (nested.required) {
|
|
75
|
+
properties.required = nested.required;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { type, properties, required: isRequired };
|
|
79
|
+
}
|
|
@@ -5,7 +5,7 @@ import { fileURLToPath } from "url";
|
|
|
5
5
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
6
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
7
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
-
import { TOOLS, toolHandlers } from "./tools/index.js";
|
|
8
|
+
import { TOOLS, toolHandlers, toolSchemas } from "./tools/index.js";
|
|
9
9
|
import { RESOURCES, handleReadResource } from "./resources/index.js";
|
|
10
10
|
// ─── Server Setup ─────────────────────────────────────────────────
|
|
11
11
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -32,8 +32,20 @@ const server = new Server({
|
|
|
32
32
|
resources: {},
|
|
33
33
|
},
|
|
34
34
|
});
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Validates tool arguments using Zod schemas for "Zero Type Hole" compliance.
|
|
37
|
+
* Falls back to basic presence check if no Zod schema is defined for the tool.
|
|
38
|
+
*/
|
|
36
39
|
function validateArgs(toolName, args) {
|
|
40
|
+
const schema = toolSchemas[toolName];
|
|
41
|
+
if (schema) {
|
|
42
|
+
const result = schema.safeParse(args);
|
|
43
|
+
if (!result.success) {
|
|
44
|
+
return result.error.errors.map(e => `${e.path.join(".")}: ${e.message}`).join(", ");
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
// Fallback for tools without Zod schemas yet
|
|
37
49
|
const definition = TOOLS.find(t => t.name === toolName);
|
|
38
50
|
if (!definition)
|
|
39
51
|
return `Unknown tool: ${toolName}`;
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import os from "os";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { VectorStore } from "../../modules/memory/vector-store.js";
|
|
5
|
+
import { FRAMEWORK, FRAMEWORK_DIR_CANDIDATES, MCP, } from "../../shared/constants.js";
|
|
6
|
+
import { ensureDir, writeJsonFile, writeTextFile } from "../../shared/fs.js";
|
|
7
|
+
import { logger } from "../../shared/logger.js";
|
|
8
|
+
import { Storage } from "../../shared/storage.js";
|
|
9
|
+
export { generateULID } from "./time.js";
|
|
10
|
+
const CWD = process.cwd();
|
|
11
|
+
const HOME = os.homedir();
|
|
12
|
+
function findFrameworkDir(basePath) {
|
|
13
|
+
try {
|
|
14
|
+
const pkgPath = path.join(basePath, "package.json");
|
|
15
|
+
if (fs.existsSync(pkgPath)) {
|
|
16
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
17
|
+
if (pkg.atabey && typeof pkg.atabey.frameworkDir === "string") {
|
|
18
|
+
const customDir = path.join(basePath, pkg.atabey.frameworkDir);
|
|
19
|
+
if (fs.existsSync(customDir))
|
|
20
|
+
return customDir;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
logger.debug("Failed to read package.json in findFrameworkDir", err);
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
export function isFrameworkDevelopmentRepo() {
|
|
30
|
+
try {
|
|
31
|
+
const pkgPath = path.join(CWD, "package.json");
|
|
32
|
+
if (fs.existsSync(pkgPath)) {
|
|
33
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
34
|
+
if (pkg.name === "atabey") {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.debug("Failed to read package.json in isFrameworkDevelopmentRepo", err);
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
export function getLocalFrameworkDir() {
|
|
45
|
+
const localDir = findFrameworkDir(CWD);
|
|
46
|
+
return localDir || path.join(CWD, FRAMEWORK.CORE_DIR);
|
|
47
|
+
}
|
|
48
|
+
export function getConfigDir() {
|
|
49
|
+
const localDir = findFrameworkDir(CWD);
|
|
50
|
+
if (localDir)
|
|
51
|
+
return localDir;
|
|
52
|
+
// Check for standard local directories if package.json doesn't specify
|
|
53
|
+
const localCandidates = [...FRAMEWORK_DIR_CANDIDATES, ".agent"];
|
|
54
|
+
for (const cand of localCandidates) {
|
|
55
|
+
const p = path.join(CWD, cand);
|
|
56
|
+
if (fs.existsSync(p))
|
|
57
|
+
return p;
|
|
58
|
+
}
|
|
59
|
+
// In dev repo, don't fall back to global dir. Point to local default.
|
|
60
|
+
if (isFrameworkDevelopmentRepo()) {
|
|
61
|
+
return path.join(CWD, FRAMEWORK.CORE_DIR);
|
|
62
|
+
}
|
|
63
|
+
return path.join(HOME, FRAMEWORK.CORE_DIR);
|
|
64
|
+
}
|
|
65
|
+
export function getFrameworkDir() {
|
|
66
|
+
const testDir = process.env[MCP.TEST_DIR_ENV];
|
|
67
|
+
if (testDir)
|
|
68
|
+
return testDir;
|
|
69
|
+
return getConfigDir();
|
|
70
|
+
}
|
|
71
|
+
export function getDocumentStorePath() {
|
|
72
|
+
const frameworkDir = getFrameworkDir();
|
|
73
|
+
return path.join(frameworkDir, "memory");
|
|
74
|
+
}
|
|
75
|
+
export function initDocumentStore(frameworkDir) {
|
|
76
|
+
const storePath = frameworkDir ? path.join(frameworkDir, "memory") : getDocumentStorePath();
|
|
77
|
+
ensureDir(storePath);
|
|
78
|
+
ensureDir(path.join(storePath, "tasks"));
|
|
79
|
+
ensureDir(path.join(storePath, "history"));
|
|
80
|
+
const stateFile = path.join(storePath, "state.json");
|
|
81
|
+
if (!fs.existsSync(stateFile)) {
|
|
82
|
+
writeJsonFile(stateFile, { phase: "PHASE_0", traceId: "T-000", managerState: "ACTIVE" });
|
|
83
|
+
}
|
|
84
|
+
const statusFile = path.join(storePath, "status.json");
|
|
85
|
+
if (!fs.existsSync(statusFile)) {
|
|
86
|
+
writeJsonFile(statusFile, {});
|
|
87
|
+
}
|
|
88
|
+
// Initialize SQLite
|
|
89
|
+
Storage.setMetadata("phase", "PHASE_0");
|
|
90
|
+
Storage.setMetadata("traceId", "T-000");
|
|
91
|
+
Storage.setMetadata("managerState", "ACTIVE");
|
|
92
|
+
// Initialize Vector Memory for semantic search
|
|
93
|
+
VectorStore.initialize();
|
|
94
|
+
// Ensure the initial Markdown view is created
|
|
95
|
+
syncMarkdownMemory(frameworkDir);
|
|
96
|
+
}
|
|
97
|
+
export function readState() {
|
|
98
|
+
const phase = Storage.getMetadata("phase") || "PHASE_0";
|
|
99
|
+
const traceId = Storage.getMetadata("traceId") || "T-000";
|
|
100
|
+
const managerState = Storage.getMetadata("managerState") || "ACTIVE";
|
|
101
|
+
return { phase, traceId, managerState };
|
|
102
|
+
}
|
|
103
|
+
export function readStatus() {
|
|
104
|
+
const agents = Storage.getAllAgents();
|
|
105
|
+
const status = {};
|
|
106
|
+
agents.forEach((a) => {
|
|
107
|
+
const name = a.name.startsWith("@") ? a.name : `@${a.name}`;
|
|
108
|
+
status[name] = { state: a.state, task: a.task, lastUpdated: a.last_updated };
|
|
109
|
+
});
|
|
110
|
+
return status;
|
|
111
|
+
}
|
|
112
|
+
export function listTasks() {
|
|
113
|
+
return Storage.getTasks();
|
|
114
|
+
}
|
|
115
|
+
export function getMemoryPath() {
|
|
116
|
+
return path.join(getDocumentStorePath(), "state.json");
|
|
117
|
+
}
|
|
118
|
+
export function readActiveTraceId(memoryContent) {
|
|
119
|
+
try {
|
|
120
|
+
const state = JSON.parse(memoryContent);
|
|
121
|
+
return state.traceId || null;
|
|
122
|
+
}
|
|
123
|
+
catch (_e) { /* ignore */
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export function updateProjectMemory(section, content) {
|
|
128
|
+
if (section === "HISTORY") {
|
|
129
|
+
updateDocumentStore("history", { content }, new Date().toISOString().replace(/[:.]/g, "-"));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const state = readState() || {};
|
|
133
|
+
state[section] = content;
|
|
134
|
+
updateDocumentStore("state", state);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function initializeMemory(memoryPathOrBase, targetBaseOrDryRun) {
|
|
138
|
+
const targetBase = typeof targetBaseOrDryRun === "string" ? targetBaseOrDryRun : memoryPathOrBase;
|
|
139
|
+
initDocumentStore(targetBase);
|
|
140
|
+
logger.info("[OK] Document store initialized.");
|
|
141
|
+
}
|
|
142
|
+
export function getConfiguredPaths() {
|
|
143
|
+
const defaultPaths = { backend: "apps/backend", frontend: "apps/web", mobile: "apps/mobile", docs: "docs", tests: "tests" };
|
|
144
|
+
try {
|
|
145
|
+
const frameworkDir = getConfigDir();
|
|
146
|
+
const configPath = path.join(frameworkDir, "config.json");
|
|
147
|
+
if (fs.existsSync(configPath)) {
|
|
148
|
+
const rawConfig = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
149
|
+
return rawConfig.paths || defaultPaths;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
logger.debug("Critical config read failure", err);
|
|
154
|
+
}
|
|
155
|
+
return defaultPaths;
|
|
156
|
+
}
|
|
157
|
+
export function updateDocumentStore(type, data, id, frameworkDir) {
|
|
158
|
+
const storePath = frameworkDir ? path.join(frameworkDir, "memory") : getDocumentStorePath();
|
|
159
|
+
ensureDir(storePath);
|
|
160
|
+
switch (type) {
|
|
161
|
+
case "state":
|
|
162
|
+
writeJsonFile(path.join(storePath, "state.json"), data);
|
|
163
|
+
break;
|
|
164
|
+
case "status": {
|
|
165
|
+
const status = data;
|
|
166
|
+
for (const [agent, info] of Object.entries(status)) {
|
|
167
|
+
Storage.updateAgentStatus(agent, info.state, info.task, info.lastUpdated);
|
|
168
|
+
}
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case "task": {
|
|
172
|
+
Storage.saveTask(data);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
case "history": {
|
|
176
|
+
const db = Storage.getDB();
|
|
177
|
+
db.prepare(`
|
|
178
|
+
INSERT INTO logs (agent, action, summary)
|
|
179
|
+
VALUES (?, ?, ?)
|
|
180
|
+
`).run("@manager", "HISTORY_UPDATE", data.content);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Auto-sync Markdown view after any change
|
|
185
|
+
syncMarkdownMemory(frameworkDir);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Single Source of Truth Bridge: JSON -> Markdown
|
|
189
|
+
* Regenerates PROJECT_MEMORY.md from structured state.
|
|
190
|
+
*/
|
|
191
|
+
export function syncMarkdownMemory(fDir) {
|
|
192
|
+
const frameworkDir = fDir || getFrameworkDir();
|
|
193
|
+
const storePath = path.join(frameworkDir, "memory");
|
|
194
|
+
const mdPath = path.join(storePath, "PROJECT_MEMORY.md");
|
|
195
|
+
try {
|
|
196
|
+
const state = readState();
|
|
197
|
+
const status = readStatus();
|
|
198
|
+
const tasks = Storage.getTasks();
|
|
199
|
+
if (!state)
|
|
200
|
+
return;
|
|
201
|
+
const lines = [
|
|
202
|
+
"# [MEMORY] Agent Atabey — Project Memory",
|
|
203
|
+
"",
|
|
204
|
+
"## [STATE] Current State",
|
|
205
|
+
`- **Phase:** ${state.phase || "PHASE_0"}`,
|
|
206
|
+
`- **Trace ID:** ${state.traceId || "N/A"}`,
|
|
207
|
+
`- **@manager state:** ${state.managerState || "ACTIVE"}`,
|
|
208
|
+
];
|
|
209
|
+
// Add custom sections from state
|
|
210
|
+
const internalFields = ["phase", "traceId", "managerState"];
|
|
211
|
+
Object.entries(state).forEach(([key, value]) => {
|
|
212
|
+
if (!internalFields.includes(key) && value) {
|
|
213
|
+
lines.push("", `## [INFO] ${key}`, String(value));
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
lines.push("", "## [TASKS] Active Tasks", "| Trace ID | Task | Agent | Priority | Status |", "| :--- | :--- | :--- | :--- | :--- |");
|
|
217
|
+
tasks.forEach(t => {
|
|
218
|
+
if (t.status !== "COMPLETED") {
|
|
219
|
+
lines.push(`| ${t.traceId} | ${t.description} | ${t.agent} | ${t.priority} | ${t.status} |`);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
lines.push("", "## [AI] Agent Statuses");
|
|
223
|
+
lines.push("| Agent | State | Active Task | Last Updated |");
|
|
224
|
+
lines.push("| :--- | :--- | :--- | :--- |");
|
|
225
|
+
for (const [agent, info] of Object.entries(status)) {
|
|
226
|
+
const data = info;
|
|
227
|
+
const displayAgent = agent.startsWith("@") ? agent : `@${agent}`;
|
|
228
|
+
lines.push(`| ${displayAgent} | ${data.state} | ${data.task} | ${data.lastUpdated || "-"} |`);
|
|
229
|
+
}
|
|
230
|
+
lines.push("", "## [HISTORY]");
|
|
231
|
+
// Add last 5 history items
|
|
232
|
+
const historyDir = path.join(storePath, "history");
|
|
233
|
+
if (fs.existsSync(historyDir)) {
|
|
234
|
+
const histFiles = fs.readdirSync(historyDir)
|
|
235
|
+
.filter(f => f.endsWith(".json"))
|
|
236
|
+
.sort()
|
|
237
|
+
.reverse()
|
|
238
|
+
.slice(0, 10);
|
|
239
|
+
histFiles.forEach(f => {
|
|
240
|
+
const hist = JSON.parse(fs.readFileSync(path.join(historyDir, f), "utf8"));
|
|
241
|
+
lines.push(`### ${f.replace(".json", "")}`);
|
|
242
|
+
lines.push(hist.content);
|
|
243
|
+
lines.push("");
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
writeTextFile(mdPath, lines.join("\n"));
|
|
247
|
+
logger.debug("Markdown memory synchronized.");
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
logger.debug("Markdown memory sync failed", err);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
export function acquireMemoryLock(lockPath) {
|
|
254
|
+
try {
|
|
255
|
+
fs.writeFileSync(lockPath, String(Date.now()), { flag: "wx" });
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
const error = err;
|
|
260
|
+
if (error.code === "EEXIST") {
|
|
261
|
+
try {
|
|
262
|
+
const stat = fs.statSync(lockPath);
|
|
263
|
+
if (Date.now() - stat.mtimeMs > 10000) {
|
|
264
|
+
fs.unlinkSync(lockPath);
|
|
265
|
+
fs.writeFileSync(lockPath, String(Date.now()), { flag: "wx" });
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (_e) { /* ignore */
|
|
270
|
+
// Ignore
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
export function releaseMemoryLock(lockPath) {
|
|
277
|
+
if (fs.existsSync(lockPath))
|
|
278
|
+
fs.unlinkSync(lockPath);
|
|
279
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function generateULID(seedTime = Date.now(), seed) {
|
|
2
|
+
const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
3
|
+
const ENCODING_LEN = ENCODING.length;
|
|
4
|
+
let time = seedTime;
|
|
5
|
+
const timeChars = new Array(10);
|
|
6
|
+
for (let i = 9; i >= 0; i--) {
|
|
7
|
+
timeChars[i] = ENCODING.charAt(time % ENCODING_LEN);
|
|
8
|
+
time = Math.floor(time / ENCODING_LEN);
|
|
9
|
+
}
|
|
10
|
+
const randomChars = new Array(16);
|
|
11
|
+
if (seed) {
|
|
12
|
+
let pseudoRandom = seed;
|
|
13
|
+
for (let i = 0; i < 16; i++) {
|
|
14
|
+
pseudoRandom = (pseudoRandom * 16807) % 2147483647;
|
|
15
|
+
randomChars[i] = ENCODING.charAt(pseudoRandom % ENCODING_LEN);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
for (let i = 0; i < 16; i++) {
|
|
20
|
+
randomChars[i] = ENCODING.charAt(Math.floor(Math.random() * ENCODING_LEN));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return timeChars.join("") + randomChars.join("");
|
|
24
|
+
}
|
|
25
|
+
export function sleep(ms) {
|
|
26
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
27
|
+
}
|