agentic-flow 2.0.1-alpha.2 → 2.0.1-alpha.20
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/CHANGELOG.md +352 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentdb/controllers/EmbeddingService.d.ts +37 -0
- package/dist/agentdb/controllers/EmbeddingService.d.ts.map +1 -0
- package/dist/agentdb/controllers/EmbeddingService.js +1 -0
- package/dist/agentdb/controllers/EmbeddingService.js.map +1 -0
- package/dist/billing/mcp/tools.d.ts.map +1 -1
- package/dist/billing/mcp/tools.js +2 -0
- package/dist/billing/mcp/tools.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts +18 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +755 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli-proxy.d.ts +1 -1
- package/dist/cli-proxy.d.ts.map +1 -1
- package/dist/cli-proxy.js +28 -1
- package/dist/cli-proxy.js.map +1 -1
- package/dist/core/agentdb-fast.js +3 -3
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.js +32 -17
- package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
- package/dist/core/attention-native.d.ts +1 -0
- package/dist/core/attention-native.d.ts.map +1 -1
- package/dist/core/attention-native.js +6 -1
- package/dist/core/attention-native.js.map +1 -1
- package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
- package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
- package/dist/intelligence/EmbeddingCache.d.ts +112 -0
- package/dist/intelligence/EmbeddingCache.d.ts.map +1 -0
- package/dist/intelligence/EmbeddingCache.js +624 -0
- package/dist/intelligence/EmbeddingCache.js.map +1 -0
- package/dist/intelligence/EmbeddingService.d.ts +380 -0
- package/dist/intelligence/EmbeddingService.d.ts.map +1 -0
- package/dist/intelligence/EmbeddingService.js +1484 -0
- package/dist/intelligence/EmbeddingService.js.map +1 -0
- package/dist/intelligence/IntelligenceStore.d.ts +168 -0
- package/dist/intelligence/IntelligenceStore.d.ts.map +1 -0
- package/dist/intelligence/IntelligenceStore.js +364 -0
- package/dist/intelligence/IntelligenceStore.js.map +1 -0
- package/dist/intelligence/RuVectorIntelligence.d.ts +362 -0
- package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -0
- package/dist/intelligence/RuVectorIntelligence.js +853 -0
- package/dist/intelligence/RuVectorIntelligence.js.map +1 -0
- package/dist/intelligence/embedding-benchmark.d.ts +7 -0
- package/dist/intelligence/embedding-benchmark.d.ts.map +1 -0
- package/dist/intelligence/embedding-benchmark.js +155 -0
- package/dist/intelligence/embedding-benchmark.js.map +1 -0
- package/dist/intelligence/index.d.ts +14 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +14 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/llm/RuvLLMOrchestrator.d.ts +184 -0
- package/dist/llm/RuvLLMOrchestrator.d.ts.map +1 -0
- package/dist/llm/RuvLLMOrchestrator.js +442 -0
- package/dist/llm/RuvLLMOrchestrator.js.map +1 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +8 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +86 -21
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/servers/hooks-server.d.ts +15 -0
- package/dist/mcp/fastmcp/servers/hooks-server.d.ts.map +1 -0
- package/dist/mcp/fastmcp/servers/hooks-server.js +63 -0
- package/dist/mcp/fastmcp/servers/hooks-server.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.d.ts +20 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.js +110 -0
- package/dist/mcp/fastmcp/tools/hooks/benchmark.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.js +276 -0
- package/dist/mcp/fastmcp/tools/hooks/build-agents.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.d.ts +6 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.js +164 -0
- package/dist/mcp/fastmcp/tools/hooks/explain.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/index.d.ts +28 -0
- package/dist/mcp/fastmcp/tools/hooks/index.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/index.js +59 -0
- package/dist/mcp/fastmcp/tools/hooks/index.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts +307 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +714 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.d.ts +58 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.js +425 -0
- package/dist/mcp/fastmcp/tools/hooks/intelligence-tools.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.d.ts +6 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.js +137 -0
- package/dist/mcp/fastmcp/tools/hooks/metrics.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.js +91 -0
- package/dist/mcp/fastmcp/tools/hooks/post-command.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.d.ts +12 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.js +146 -0
- package/dist/mcp/fastmcp/tools/hooks/post-edit.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.js +70 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-command.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.d.ts +14 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.js +121 -0
- package/dist/mcp/fastmcp/tools/hooks/pre-edit.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js +171 -0
- package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/route.d.ts +12 -0
- package/dist/mcp/fastmcp/tools/hooks/route.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/route.js +267 -0
- package/dist/mcp/fastmcp/tools/hooks/route.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.d.ts +46 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.js +159 -0
- package/dist/mcp/fastmcp/tools/hooks/shared.js.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.d.ts +7 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.d.ts.map +1 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.js +151 -0
- package/dist/mcp/fastmcp/tools/hooks/transfer.js.map +1 -0
- package/dist/mcp/tools/agent-booster-tools.d.ts +10 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
- package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
- package/dist/mcp/tools/sona-tools.js +15 -3
- package/dist/mcp/tools/sona-tools.js.map +1 -1
- package/dist/memory/SharedMemoryPool.d.ts +16 -3
- package/dist/memory/SharedMemoryPool.d.ts.map +1 -1
- package/dist/memory/SharedMemoryPool.js +33 -1
- package/dist/memory/SharedMemoryPool.js.map +1 -1
- package/dist/middleware/auth.middleware.d.ts +114 -0
- package/dist/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/middleware/auth.middleware.js +222 -0
- package/dist/middleware/auth.middleware.js.map +1 -0
- package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
- package/dist/optimizations/agent-booster-migration.js.map +1 -1
- package/dist/proxy/anthropic-to-gemini.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-gemini.js.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
- package/dist/proxy/anthropic-to-requesty.d.ts.map +1 -1
- package/dist/proxy/anthropic-to-requesty.js.map +1 -1
- package/dist/proxy/quic-proxy.d.ts +0 -1
- package/dist/proxy/quic-proxy.d.ts.map +1 -1
- package/dist/proxy/quic-proxy.js +2 -1
- package/dist/proxy/quic-proxy.js.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.d.ts.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.js +12 -1
- package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
- package/dist/reasoningbank/HybridBackend.d.ts +9 -0
- package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
- package/dist/reasoningbank/HybridBackend.js +48 -4
- package/dist/reasoningbank/HybridBackend.js.map +1 -1
- package/dist/reasoningbank/backend-selector.d.ts +1 -1
- package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
- package/dist/reasoningbank/backend-selector.js.map +1 -1
- package/dist/reasoningbank/index-new.d.ts +0 -6
- package/dist/reasoningbank/index-new.d.ts.map +1 -1
- package/dist/reasoningbank/index-new.js +9 -7
- package/dist/reasoningbank/index-new.js.map +1 -1
- package/dist/reasoningbank/index.d.ts +1 -6
- package/dist/reasoningbank/index.d.ts.map +1 -1
- package/dist/reasoningbank/index.js +10 -7
- package/dist/reasoningbank/index.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +3 -1
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/routing/CircuitBreakerRouter.d.ts +187 -0
- package/dist/routing/CircuitBreakerRouter.d.ts.map +1 -0
- package/dist/routing/CircuitBreakerRouter.js +460 -0
- package/dist/routing/CircuitBreakerRouter.js.map +1 -0
- package/dist/routing/SemanticRouter.d.ts +164 -0
- package/dist/routing/SemanticRouter.d.ts.map +1 -0
- package/dist/routing/SemanticRouter.js +291 -0
- package/dist/routing/SemanticRouter.js.map +1 -0
- package/dist/routing/index.d.ts +12 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +10 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/services/embedding-service.d.ts.map +1 -1
- package/dist/services/embedding-service.js +5 -2
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/sona-agent-training.js +1 -1
- package/dist/services/sona-agent-training.js.map +1 -1
- package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
- package/dist/services/sona-agentdb-integration.js +10 -5
- package/dist/services/sona-agentdb-integration.js.map +1 -1
- package/dist/services/sona-service.d.ts +6 -6
- package/dist/services/sona-service.d.ts.map +1 -1
- package/dist/services/sona-service.js +3 -1
- package/dist/services/sona-service.js.map +1 -1
- package/dist/utils/agentdb-runtime-patch.d.ts +1 -0
- package/dist/utils/agentdb-runtime-patch.d.ts.map +1 -1
- package/dist/utils/agentdb-runtime-patch.js +97 -2
- package/dist/utils/agentdb-runtime-patch.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +115 -0
- package/dist/utils/audit-logger.d.ts.map +1 -0
- package/dist/utils/audit-logger.js +228 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/cli.d.ts +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +5 -0
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/input-validator.d.ts +116 -0
- package/dist/utils/input-validator.d.ts.map +1 -0
- package/dist/utils/input-validator.js +299 -0
- package/dist/utils/input-validator.js.map +1 -0
- package/dist/utils/rate-limiter.js +2 -2
- package/dist/utils/rate-limiter.js.map +1 -1
- package/package.json +14 -3
- package/scripts/postinstall.js +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-command.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pre-command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAErB,wCAAwC;AACxC,MAAM,iBAAiB,GAA2B;IAChD,QAAQ,EAAE,uCAAuC;IACjD,SAAS,EAAE,6CAA6C;IACxD,WAAW,EAAE,2CAA2C;IACxD,WAAW,EAAE,6CAA6C;IAC1D,WAAW,EAAE,6CAA6C;CAC3D,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,sEAAsE;IACnF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAClD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAEjC,uBAAuB;QACvB,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE7C,sCAAsC;QACtC,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9D,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAClD,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC;QACjC,MAAM,oBAAoB,GAAG,SAAS,IAAI,GAAG,IAAI,SAAS,GAAG,GAAG,CAAC;QACjE,MAAM,OAAO,GAAG,SAAS,IAAI,GAAG,CAAC;QAEjC,qBAAqB;QACrB,IAAI,YAA0D,CAAC;QAC/D,IAAI,SAAS,GAAG,GAAG;YAAE,YAAY,GAAG,MAAM,CAAC;aACtC,IAAI,SAAS,GAAG,GAAG;YAAE,YAAY,GAAG,SAAS,CAAC;aAC9C,IAAI,SAAS,GAAG,GAAG;YAAE,YAAY,GAAG,WAAW,CAAC;;YAChD,YAAY,GAAG,SAAS,CAAC;QAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS;YACT,YAAY;YACZ,QAAQ;YACR,oBAAoB;YACpB,OAAO;YACP,WAAW;YACX,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9B,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["/**\n * Pre-Command Hook - Command risk assessment\n * Assesses command safety and suggests alternatives\n */\n\nimport { z } from 'zod';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n assessCommandRisk,\n dangerousPatterns\n} from './shared.js';\n\n// Safer alternatives for risky commands\nconst saferAlternatives: Record<string, string> = {\n 'rm -rf': 'rm -ri (interactive) or move to trash',\n 'sudo rm': 'Consider using specific permissions instead',\n 'chmod 777': 'chmod 755 or more restrictive permissions',\n 'curl | sh': 'Download script first, review, then execute',\n 'wget | sh': 'Download script first, review, then execute'\n};\n\nexport const hookPreCommandTool: ToolDefinition = {\n name: 'hook_pre_command',\n description: 'Pre-command intelligence: assess risk level and suggest alternatives',\n parameters: z.object({\n command: z.string().describe('Command to assess')\n }),\n execute: async ({ command }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n\n // 1. Assess risk level\n const riskLevel = assessCommandRisk(command);\n\n // 2. Find matching safer alternatives\n const suggestions: string[] = [];\n for (const [risky, safe] of Object.entries(saferAlternatives)) {\n if (command.includes(risky)) {\n suggestions.push(safe);\n }\n }\n\n // 3. Check if command matches known error patterns\n const warnings: string[] = [];\n const cmdBase = command.split(' ')[0];\n\n for (const ep of intel.errorPatterns) {\n if (ep.context.includes(cmdBase) && ep.resolution) {\n warnings.push(`Previous issue: ${ep.resolution}`);\n }\n }\n\n // 4. Determine approval status\n const approved = riskLevel < 0.7;\n const requiresConfirmation = riskLevel >= 0.5 && riskLevel < 0.9;\n const blocked = riskLevel >= 0.9;\n\n // 5. Categorize risk\n let riskCategory: 'safe' | 'caution' | 'dangerous' | 'blocked';\n if (riskLevel < 0.3) riskCategory = 'safe';\n else if (riskLevel < 0.6) riskCategory = 'caution';\n else if (riskLevel < 0.9) riskCategory = 'dangerous';\n else riskCategory = 'blocked';\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n riskLevel,\n riskCategory,\n approved,\n requiresConfirmation,\n blocked,\n suggestions,\n warnings: warnings.slice(0, 2),\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-Edit Hook - Context retrieval and agent routing before file edit
|
|
3
|
+
* Latency target: <20ms
|
|
4
|
+
*
|
|
5
|
+
* NOW WITH RUVECTOR INTELLIGENCE:
|
|
6
|
+
* - Trajectory tracking for learning from edit sequences
|
|
7
|
+
* - HNSW-powered similar file retrieval
|
|
8
|
+
* - SONA pattern matching for agent selection
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolDefinition } from '../../types/index.js';
|
|
11
|
+
declare const activeEditTrajectories: Map<string, number>;
|
|
12
|
+
export { activeEditTrajectories };
|
|
13
|
+
export declare const hookPreEditTool: ToolDefinition;
|
|
14
|
+
//# sourceMappingURL=pre-edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-edit.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pre-edit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D,QAAA,MAAM,sBAAsB,qBAA4B,CAAC;AAGzD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,eAAO,MAAM,eAAe,EAAE,cAuH7B,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-Edit Hook - Context retrieval and agent routing before file edit
|
|
3
|
+
* Latency target: <20ms
|
|
4
|
+
*
|
|
5
|
+
* NOW WITH RUVECTOR INTELLIGENCE:
|
|
6
|
+
* - Trajectory tracking for learning from edit sequences
|
|
7
|
+
* - HNSW-powered similar file retrieval
|
|
8
|
+
* - SONA pattern matching for agent selection
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { loadIntelligence, getAgentForFile, simpleEmbed, cosineSimilarity } from './shared.js';
|
|
13
|
+
import { beginTaskTrajectory, findSimilarPatterns } from './intelligence-bridge.js';
|
|
14
|
+
// Store active trajectory IDs for continuation in post-edit
|
|
15
|
+
const activeEditTrajectories = new Map();
|
|
16
|
+
// Export for post-edit to access
|
|
17
|
+
export { activeEditTrajectories };
|
|
18
|
+
export const hookPreEditTool = {
|
|
19
|
+
name: 'hook_pre_edit',
|
|
20
|
+
description: 'Pre-edit intelligence: retrieve context, suggest agent, find related files',
|
|
21
|
+
parameters: z.object({
|
|
22
|
+
filePath: z.string().describe('Path to file being edited'),
|
|
23
|
+
task: z.string().optional().describe('Optional task description')
|
|
24
|
+
}),
|
|
25
|
+
execute: async ({ filePath, task }, { onProgress }) => {
|
|
26
|
+
const startTime = Date.now();
|
|
27
|
+
const intel = loadIntelligence();
|
|
28
|
+
const ext = path.extname(filePath);
|
|
29
|
+
const dir = path.dirname(filePath);
|
|
30
|
+
// START TRAJECTORY TRACKING (RuVector Intelligence)
|
|
31
|
+
let trajectoryId = null;
|
|
32
|
+
let intelligenceEnabled = false;
|
|
33
|
+
let similarPatterns = [];
|
|
34
|
+
try {
|
|
35
|
+
// Begin trajectory for this edit
|
|
36
|
+
const taskDesc = task || `Edit ${path.basename(filePath)}`;
|
|
37
|
+
const trajectoryResult = await beginTaskTrajectory(taskDesc, getAgentForFile(filePath));
|
|
38
|
+
if (trajectoryResult.success && trajectoryResult.trajectoryId >= 0) {
|
|
39
|
+
trajectoryId = trajectoryResult.trajectoryId;
|
|
40
|
+
activeEditTrajectories.set(filePath, trajectoryId);
|
|
41
|
+
intelligenceEnabled = true;
|
|
42
|
+
}
|
|
43
|
+
// Find similar past edits using HNSW (150x faster)
|
|
44
|
+
similarPatterns = await findSimilarPatterns(taskDesc, 3);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
// Continue without trajectory if intelligence not available
|
|
48
|
+
console.debug('[PreEdit] Intelligence not available:', error);
|
|
49
|
+
}
|
|
50
|
+
// 1. Determine suggested agent from patterns
|
|
51
|
+
const state = `edit:${ext}`;
|
|
52
|
+
let suggestedAgent = getAgentForFile(filePath);
|
|
53
|
+
let confidence = 0.5;
|
|
54
|
+
// Check learned patterns
|
|
55
|
+
if (intel.patterns[state]) {
|
|
56
|
+
const agents = intel.patterns[state];
|
|
57
|
+
let bestAgent = suggestedAgent;
|
|
58
|
+
let bestScore = 0;
|
|
59
|
+
for (const [agent, score] of Object.entries(agents)) {
|
|
60
|
+
if (score > bestScore) {
|
|
61
|
+
bestScore = score;
|
|
62
|
+
bestAgent = agent;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (bestScore > 0) {
|
|
66
|
+
suggestedAgent = bestAgent;
|
|
67
|
+
confidence = Math.min(0.9, 0.5 + bestScore / 10);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Check directory patterns
|
|
71
|
+
if (intel.dirPatterns[dir]) {
|
|
72
|
+
suggestedAgent = intel.dirPatterns[dir];
|
|
73
|
+
confidence = Math.max(confidence, 0.6);
|
|
74
|
+
}
|
|
75
|
+
// 2. Find related files from co-edit sequences
|
|
76
|
+
const relatedFiles = [];
|
|
77
|
+
if (intel.sequences[filePath]) {
|
|
78
|
+
relatedFiles.push(...intel.sequences[filePath]
|
|
79
|
+
.sort((a, b) => b.score - a.score)
|
|
80
|
+
.slice(0, 5));
|
|
81
|
+
}
|
|
82
|
+
// 3. Retrieve relevant memories
|
|
83
|
+
const memories = [];
|
|
84
|
+
if (task && intel.memories.length > 0) {
|
|
85
|
+
const taskEmbed = simpleEmbed(task);
|
|
86
|
+
for (const mem of intel.memories) {
|
|
87
|
+
if (mem.embedding) {
|
|
88
|
+
const score = cosineSimilarity(taskEmbed, mem.embedding);
|
|
89
|
+
if (score > 0.3) {
|
|
90
|
+
memories.push({ content: mem.content.slice(0, 200), score });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
memories.sort((a, b) => b.score - a.score);
|
|
95
|
+
memories.splice(3); // Keep top 3
|
|
96
|
+
}
|
|
97
|
+
// 4. Check for relevant error patterns
|
|
98
|
+
const errorHints = [];
|
|
99
|
+
for (const ep of intel.errorPatterns) {
|
|
100
|
+
if (ep.context.includes(ext) || ep.context.includes(path.basename(filePath))) {
|
|
101
|
+
errorHints.push(ep.resolution);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const latency = Date.now() - startTime;
|
|
105
|
+
return {
|
|
106
|
+
success: true,
|
|
107
|
+
suggestedAgent,
|
|
108
|
+
confidence,
|
|
109
|
+
relatedFiles,
|
|
110
|
+
memories,
|
|
111
|
+
errorHints: errorHints.slice(0, 2),
|
|
112
|
+
// RuVector Intelligence additions
|
|
113
|
+
trajectoryId,
|
|
114
|
+
intelligenceEnabled,
|
|
115
|
+
similarPatterns: similarPatterns.slice(0, 3),
|
|
116
|
+
latencyMs: latency,
|
|
117
|
+
timestamp: new Date().toISOString()
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=pre-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-edit.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pre-edit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pre-Edit Hook - Context retrieval and agent routing before file edit\n * Latency target: <20ms\n *\n * NOW WITH RUVECTOR INTELLIGENCE:\n * - Trajectory tracking for learning from edit sequences\n * - HNSW-powered similar file retrieval\n * - SONA pattern matching for agent selection\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n getAgentForFile,\n simpleEmbed,\n cosineSimilarity\n} from './shared.js';\nimport {\n beginTaskTrajectory,\n findSimilarPatterns,\n getIntelligenceStats\n} from './intelligence-bridge.js';\n\n// Store active trajectory IDs for continuation in post-edit\nconst activeEditTrajectories = new Map<string, number>();\n\n// Export for post-edit to access\nexport { activeEditTrajectories };\n\nexport const hookPreEditTool: ToolDefinition = {\n name: 'hook_pre_edit',\n description: 'Pre-edit intelligence: retrieve context, suggest agent, find related files',\n parameters: z.object({\n filePath: z.string().describe('Path to file being edited'),\n task: z.string().optional().describe('Optional task description')\n }),\n execute: async ({ filePath, task }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const ext = path.extname(filePath);\n const dir = path.dirname(filePath);\n\n // START TRAJECTORY TRACKING (RuVector Intelligence)\n let trajectoryId: number | null = null;\n let intelligenceEnabled = false;\n let similarPatterns: Array<{ task: string; resolution: string; similarity: number }> = [];\n\n try {\n // Begin trajectory for this edit\n const taskDesc = task || `Edit ${path.basename(filePath)}`;\n const trajectoryResult = await beginTaskTrajectory(taskDesc, getAgentForFile(filePath));\n\n if (trajectoryResult.success && trajectoryResult.trajectoryId >= 0) {\n trajectoryId = trajectoryResult.trajectoryId;\n activeEditTrajectories.set(filePath, trajectoryId);\n intelligenceEnabled = true;\n }\n\n // Find similar past edits using HNSW (150x faster)\n similarPatterns = await findSimilarPatterns(taskDesc, 3);\n } catch (error) {\n // Continue without trajectory if intelligence not available\n console.debug('[PreEdit] Intelligence not available:', error);\n }\n\n // 1. Determine suggested agent from patterns\n const state = `edit:${ext}`;\n let suggestedAgent = getAgentForFile(filePath);\n let confidence = 0.5;\n\n // Check learned patterns\n if (intel.patterns[state]) {\n const agents = intel.patterns[state];\n let bestAgent = suggestedAgent;\n let bestScore = 0;\n\n for (const [agent, score] of Object.entries(agents)) {\n if (score > bestScore) {\n bestScore = score;\n bestAgent = agent;\n }\n }\n\n if (bestScore > 0) {\n suggestedAgent = bestAgent;\n confidence = Math.min(0.9, 0.5 + bestScore / 10);\n }\n }\n\n // Check directory patterns\n if (intel.dirPatterns[dir]) {\n suggestedAgent = intel.dirPatterns[dir];\n confidence = Math.max(confidence, 0.6);\n }\n\n // 2. Find related files from co-edit sequences\n const relatedFiles: Array<{ file: string; score: number }> = [];\n if (intel.sequences[filePath]) {\n relatedFiles.push(\n ...intel.sequences[filePath]\n .sort((a, b) => b.score - a.score)\n .slice(0, 5)\n );\n }\n\n // 3. Retrieve relevant memories\n const memories: Array<{ content: string; score: number }> = [];\n if (task && intel.memories.length > 0) {\n const taskEmbed = simpleEmbed(task);\n\n for (const mem of intel.memories) {\n if (mem.embedding) {\n const score = cosineSimilarity(taskEmbed, mem.embedding);\n if (score > 0.3) {\n memories.push({ content: mem.content.slice(0, 200), score });\n }\n }\n }\n\n memories.sort((a, b) => b.score - a.score);\n memories.splice(3); // Keep top 3\n }\n\n // 4. Check for relevant error patterns\n const errorHints: string[] = [];\n for (const ep of intel.errorPatterns) {\n if (ep.context.includes(ext) || ep.context.includes(path.basename(filePath))) {\n errorHints.push(ep.resolution);\n }\n }\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n suggestedAgent,\n confidence,\n relatedFiles,\n memories,\n errorHints: errorHints.slice(0, 2),\n // RuVector Intelligence additions\n trajectoryId,\n intelligenceEnabled,\n similarPatterns: similarPatterns.slice(0, 3),\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretrain Hook - Analyze repository and bootstrap intelligence
|
|
3
|
+
* Swarm-distributed when available, falls back to sequential
|
|
4
|
+
*/
|
|
5
|
+
import type { ToolDefinition } from '../../types/index.js';
|
|
6
|
+
export declare const hookPretrainTool: ToolDefinition;
|
|
7
|
+
//# sourceMappingURL=pretrain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretrain.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS3D,eAAO,MAAM,gBAAgB,EAAE,cAyL9B,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretrain Hook - Analyze repository and bootstrap intelligence
|
|
3
|
+
* Swarm-distributed when available, falls back to sequential
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import { execSync } from 'child_process';
|
|
9
|
+
import { loadIntelligence, saveIntelligence, getAgentForFile, simpleEmbed } from './shared.js';
|
|
10
|
+
export const hookPretrainTool = {
|
|
11
|
+
name: 'hook_pretrain',
|
|
12
|
+
description: 'Analyze repository with swarm for intelligent patterns',
|
|
13
|
+
parameters: z.object({
|
|
14
|
+
depth: z.number().optional().default(100).describe('Git history depth'),
|
|
15
|
+
incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),
|
|
16
|
+
skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),
|
|
17
|
+
skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),
|
|
18
|
+
verbose: z.boolean().optional().default(false).describe('Show detailed progress')
|
|
19
|
+
}),
|
|
20
|
+
execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
const intel = loadIntelligence();
|
|
23
|
+
const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };
|
|
24
|
+
onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });
|
|
25
|
+
// Phase 1: Analyze file structure
|
|
26
|
+
if (!skipFiles) {
|
|
27
|
+
onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });
|
|
28
|
+
try {
|
|
29
|
+
const filesOutput = execSync('git ls-files 2>/dev/null || find . -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./target/*" 2>/dev/null', { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
|
|
30
|
+
const files = filesOutput.trim().split('\n').filter(f => f);
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
stats.files++;
|
|
33
|
+
const ext = path.extname(file);
|
|
34
|
+
const agent = getAgentForFile(file);
|
|
35
|
+
// Create Q-learning pattern
|
|
36
|
+
const state = `edit:${ext || 'unknown'}`;
|
|
37
|
+
if (!intel.patterns[state]) {
|
|
38
|
+
intel.patterns[state] = {};
|
|
39
|
+
}
|
|
40
|
+
intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;
|
|
41
|
+
stats.patterns++;
|
|
42
|
+
// Track directory patterns
|
|
43
|
+
const dir = path.dirname(file);
|
|
44
|
+
const dirParts = dir.split('/');
|
|
45
|
+
if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {
|
|
46
|
+
intel.dirPatterns[dirParts[0]] = agent;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (verbose) {
|
|
50
|
+
console.log(`[Pretrain] Analyzed ${stats.files} files`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
// Continue without file analysis
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Phase 2: Analyze git history for co-edit patterns
|
|
58
|
+
if (!skipGit) {
|
|
59
|
+
onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });
|
|
60
|
+
try {
|
|
61
|
+
const gitLog = execSync(`git log --name-only --pretty=format:"COMMIT:%H" -n ${depth} 2>/dev/null`, { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 });
|
|
62
|
+
const commits = gitLog.split('COMMIT:').filter(c => c.trim());
|
|
63
|
+
const coEditMap = {};
|
|
64
|
+
for (const commit of commits) {
|
|
65
|
+
const lines = commit.trim().split('\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));
|
|
66
|
+
const files = lines.filter(f => f.trim());
|
|
67
|
+
// Track co-edits
|
|
68
|
+
for (let i = 0; i < files.length; i++) {
|
|
69
|
+
for (let j = i + 1; j < files.length; j++) {
|
|
70
|
+
const key = [files[i], files[j]].sort().join('|');
|
|
71
|
+
coEditMap[key] = (coEditMap[key] || 0) + 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Store strong co-edit patterns
|
|
76
|
+
const strongPatterns = Object.entries(coEditMap)
|
|
77
|
+
.filter(([, count]) => count >= 3)
|
|
78
|
+
.sort((a, b) => b[1] - a[1]);
|
|
79
|
+
for (const [key, count] of strongPatterns.slice(0, 100)) {
|
|
80
|
+
const [file1, file2] = key.split('|');
|
|
81
|
+
if (!intel.sequences[file1]) {
|
|
82
|
+
intel.sequences[file1] = [];
|
|
83
|
+
}
|
|
84
|
+
const existing = intel.sequences[file1].find(s => s.file === file2);
|
|
85
|
+
if (existing) {
|
|
86
|
+
existing.score += count;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
intel.sequences[file1].push({ file: file2, score: count });
|
|
90
|
+
}
|
|
91
|
+
stats.coedits++;
|
|
92
|
+
}
|
|
93
|
+
if (verbose) {
|
|
94
|
+
console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
// Continue without git analysis
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Phase 3: Create memories from important files
|
|
102
|
+
onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });
|
|
103
|
+
const importantFiles = [
|
|
104
|
+
'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',
|
|
105
|
+
'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'
|
|
106
|
+
];
|
|
107
|
+
for (const filename of importantFiles) {
|
|
108
|
+
const filePath = path.join(process.cwd(), filename);
|
|
109
|
+
if (fs.existsSync(filePath)) {
|
|
110
|
+
try {
|
|
111
|
+
const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);
|
|
112
|
+
intel.memories.push({
|
|
113
|
+
content: `[${filename}] ${content.replace(/\n/g, ' ').slice(0, 500)}`,
|
|
114
|
+
type: 'project',
|
|
115
|
+
created: new Date().toISOString(),
|
|
116
|
+
embedding: simpleEmbed(content)
|
|
117
|
+
});
|
|
118
|
+
stats.memories++;
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
// Skip unreadable files
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Phase 4: Build directory-agent mappings
|
|
126
|
+
onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });
|
|
127
|
+
try {
|
|
128
|
+
const dirs = execSync('find . -type d -maxdepth 2 -not -path "./.git*" -not -path "./node_modules*" 2>/dev/null || echo "."', { encoding: 'utf-8' }).trim().split('\n');
|
|
129
|
+
for (const dir of dirs) {
|
|
130
|
+
const name = path.basename(dir);
|
|
131
|
+
if (['src', 'lib', 'core'].includes(name))
|
|
132
|
+
intel.dirPatterns[dir] = 'coder';
|
|
133
|
+
else if (['test', 'tests', '__tests__', 'spec'].includes(name))
|
|
134
|
+
intel.dirPatterns[dir] = 'test-engineer';
|
|
135
|
+
else if (['docs', 'documentation'].includes(name))
|
|
136
|
+
intel.dirPatterns[dir] = 'documentation-specialist';
|
|
137
|
+
else if (['scripts', 'bin'].includes(name))
|
|
138
|
+
intel.dirPatterns[dir] = 'devops-engineer';
|
|
139
|
+
else if (['components', 'views', 'pages'].includes(name))
|
|
140
|
+
intel.dirPatterns[dir] = 'frontend-developer';
|
|
141
|
+
else if (['api', 'routes', 'handlers'].includes(name))
|
|
142
|
+
intel.dirPatterns[dir] = 'backend-developer';
|
|
143
|
+
else if (['models', 'entities', 'schemas'].includes(name))
|
|
144
|
+
intel.dirPatterns[dir] = 'database-specialist';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
// Continue without directory analysis
|
|
149
|
+
}
|
|
150
|
+
// Save pretrain metadata
|
|
151
|
+
intel.pretrained = {
|
|
152
|
+
date: new Date().toISOString(),
|
|
153
|
+
stats
|
|
154
|
+
};
|
|
155
|
+
// Save intelligence
|
|
156
|
+
saveIntelligence(intel);
|
|
157
|
+
onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });
|
|
158
|
+
const latency = Date.now() - startTime;
|
|
159
|
+
return {
|
|
160
|
+
success: true,
|
|
161
|
+
filesAnalyzed: stats.files,
|
|
162
|
+
patternsCreated: stats.patterns,
|
|
163
|
+
memoriesStored: stats.memories,
|
|
164
|
+
coEditsFound: stats.coedits,
|
|
165
|
+
directoryMappings: Object.keys(intel.dirPatterns).length,
|
|
166
|
+
latencyMs: latency,
|
|
167
|
+
timestamp: new Date().toISOString()
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=pretrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretrain.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEZ,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,wDAAwD;IACrE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACvE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACvG,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACpF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACzF,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAClF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACrF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAEjE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;QAExE,kCAAkC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAExE,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,QAAQ,CAC1B,oIAAoI,EACpI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACnD,CAAC;gBAEF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAE5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;oBAEpC,4BAA4B;oBAC5B,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;oBACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC7B,CAAC;oBACD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;oBACzE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAEjB,2BAA2B;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnD,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBACzC,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,iCAAiC;YACnC,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAErE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CACrB,sDAAsD,KAAK,cAAc,EACzE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACnD,CAAC;gBAEF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAA2B,EAAE,CAAC;gBAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACrF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAE1C,iBAAiB;oBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC1C,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAClD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,gCAAgC;gBAChC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;qBAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;qBACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;oBACxD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5B,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC9B,CAAC;oBAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;oBACpE,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;oBAC1B,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,CAAC,MAAM,mBAAmB,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAC;QAEhF,MAAM,cAAc,GAAG;YACrB,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY;YACtD,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,eAAe;SACrE,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAClE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAClB,OAAO,EAAE,IAAI,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;wBACrE,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACjC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;qBAChC,CAAC,CAAC;oBACH,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,wBAAwB;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CACnB,sGAAsG,EACtG,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;qBACvE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;qBACpG,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC;qBAClG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;qBAClF,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;qBACnG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;qBAC/F,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;YAC5G,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sCAAsC;QACxC,CAAC;QAED,yBAAyB;QACzB,KAAK,CAAC,UAAU,GAAG;YACjB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,KAAK;SACN,CAAC;QAEF,oBAAoB;QACpB,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAExB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK,CAAC,KAAK;YAC1B,eAAe,EAAE,KAAK,CAAC,QAAQ;YAC/B,cAAc,EAAE,KAAK,CAAC,QAAQ;YAC9B,YAAY,EAAE,KAAK,CAAC,OAAO;YAC3B,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM;YACxD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["/**\n * Pretrain Hook - Analyze repository and bootstrap intelligence\n * Swarm-distributed when available, falls back to sequential\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { execSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n saveIntelligence,\n getAgentForFile,\n simpleEmbed,\n agentMapping\n} from './shared.js';\n\nexport const hookPretrainTool: ToolDefinition = {\n name: 'hook_pretrain',\n description: 'Analyze repository with swarm for intelligent patterns',\n parameters: z.object({\n depth: z.number().optional().default(100).describe('Git history depth'),\n incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),\n skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),\n skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),\n verbose: z.boolean().optional().default(false).describe('Show detailed progress')\n }),\n execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };\n\n onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });\n\n // Phase 1: Analyze file structure\n if (!skipFiles) {\n onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });\n\n try {\n const filesOutput = execSync(\n 'git ls-files 2>/dev/null || find . -type f -not -path \"./.git/*\" -not -path \"./node_modules/*\" -not -path \"./target/*\" 2>/dev/null',\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const files = filesOutput.trim().split('\\n').filter(f => f);\n\n for (const file of files) {\n stats.files++;\n const ext = path.extname(file);\n const agent = getAgentForFile(file);\n\n // Create Q-learning pattern\n const state = `edit:${ext || 'unknown'}`;\n if (!intel.patterns[state]) {\n intel.patterns[state] = {};\n }\n intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;\n stats.patterns++;\n\n // Track directory patterns\n const dir = path.dirname(file);\n const dirParts = dir.split('/');\n if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {\n intel.dirPatterns[dirParts[0]] = agent;\n }\n }\n\n if (verbose) {\n console.log(`[Pretrain] Analyzed ${stats.files} files`);\n }\n } catch (e) {\n // Continue without file analysis\n }\n }\n\n // Phase 2: Analyze git history for co-edit patterns\n if (!skipGit) {\n onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });\n\n try {\n const gitLog = execSync(\n `git log --name-only --pretty=format:\"COMMIT:%H\" -n ${depth} 2>/dev/null`,\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const commits = gitLog.split('COMMIT:').filter(c => c.trim());\n const coEditMap: Record<string, number> = {};\n\n for (const commit of commits) {\n const lines = commit.trim().split('\\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));\n const files = lines.filter(f => f.trim());\n\n // Track co-edits\n for (let i = 0; i < files.length; i++) {\n for (let j = i + 1; j < files.length; j++) {\n const key = [files[i], files[j]].sort().join('|');\n coEditMap[key] = (coEditMap[key] || 0) + 1;\n }\n }\n }\n\n // Store strong co-edit patterns\n const strongPatterns = Object.entries(coEditMap)\n .filter(([, count]) => count >= 3)\n .sort((a, b) => b[1] - a[1]);\n\n for (const [key, count] of strongPatterns.slice(0, 100)) {\n const [file1, file2] = key.split('|');\n if (!intel.sequences[file1]) {\n intel.sequences[file1] = [];\n }\n\n const existing = intel.sequences[file1].find(s => s.file === file2);\n if (existing) {\n existing.score += count;\n } else {\n intel.sequences[file1].push({ file: file2, score: count });\n }\n stats.coedits++;\n }\n\n if (verbose) {\n console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);\n }\n } catch (e) {\n // Continue without git analysis\n }\n }\n\n // Phase 3: Create memories from important files\n onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });\n\n const importantFiles = [\n 'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',\n 'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'\n ];\n\n for (const filename of importantFiles) {\n const filePath = path.join(process.cwd(), filename);\n if (fs.existsSync(filePath)) {\n try {\n const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);\n intel.memories.push({\n content: `[${filename}] ${content.replace(/\\n/g, ' ').slice(0, 500)}`,\n type: 'project',\n created: new Date().toISOString(),\n embedding: simpleEmbed(content)\n });\n stats.memories++;\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n\n // Phase 4: Build directory-agent mappings\n onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });\n\n try {\n const dirs = execSync(\n 'find . -type d -maxdepth 2 -not -path \"./.git*\" -not -path \"./node_modules*\" 2>/dev/null || echo \".\"',\n { encoding: 'utf-8' }\n ).trim().split('\\n');\n\n for (const dir of dirs) {\n const name = path.basename(dir);\n if (['src', 'lib', 'core'].includes(name)) intel.dirPatterns[dir] = 'coder';\n else if (['test', 'tests', '__tests__', 'spec'].includes(name)) intel.dirPatterns[dir] = 'test-engineer';\n else if (['docs', 'documentation'].includes(name)) intel.dirPatterns[dir] = 'documentation-specialist';\n else if (['scripts', 'bin'].includes(name)) intel.dirPatterns[dir] = 'devops-engineer';\n else if (['components', 'views', 'pages'].includes(name)) intel.dirPatterns[dir] = 'frontend-developer';\n else if (['api', 'routes', 'handlers'].includes(name)) intel.dirPatterns[dir] = 'backend-developer';\n else if (['models', 'entities', 'schemas'].includes(name)) intel.dirPatterns[dir] = 'database-specialist';\n }\n } catch (e) {\n // Continue without directory analysis\n }\n\n // Save pretrain metadata\n intel.pretrained = {\n date: new Date().toISOString(),\n stats\n };\n\n // Save intelligence\n saveIntelligence(intel);\n\n onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n filesAnalyzed: stats.files,\n patternsCreated: stats.patterns,\n memoriesStored: stats.memories,\n coEditsFound: stats.coedits,\n directoryMappings: Object.keys(intel.dirPatterns).length,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Hook - Intelligent agent selection with SONA-style routing
|
|
3
|
+
* Uses learned patterns, context, and exploration/exploitation balance
|
|
4
|
+
*
|
|
5
|
+
* NOW WITH FULL RUVECTOR INTELLIGENCE:
|
|
6
|
+
* - @ruvector/sona: Micro-LoRA (~0.05ms), trajectories
|
|
7
|
+
* - @ruvector/attention: MoE attention-based ranking
|
|
8
|
+
* - ruvector: HNSW indexing (150x faster search)
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolDefinition } from '../../types/index.js';
|
|
11
|
+
export declare const hookRouteTool: ToolDefinition;
|
|
12
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0C3D,eAAO,MAAM,aAAa,EAAE,cA4P3B,CAAC"}
|