0xray 2.0.0
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/.opencode/agents/api-design.yml +31 -0
- package/.opencode/agents/architect.yml +15 -0
- package/.opencode/agents/architecture-patterns.yml +14 -0
- package/.opencode/agents/auto-format.yml +14 -0
- package/.opencode/agents/backend-engineer.yml +12 -0
- package/.opencode/agents/boot-orchestrator.yml +14 -0
- package/.opencode/agents/bug-triage-specialist.yml +15 -0
- package/.opencode/agents/code-analyzer.yml +12 -0
- package/.opencode/agents/code-reviewer.yml +14 -0
- package/.opencode/agents/content-creator.yml +12 -0
- package/.opencode/agents/database-engineer.yml +12 -0
- package/.opencode/agents/devops-engineer.yml +12 -0
- package/.opencode/agents/framework-compliance-audit.yml +14 -0
- package/.opencode/agents/frontend-engineer.yml +12 -0
- package/.opencode/agents/frontend-ui-ux-engineer.yml +12 -0
- package/.opencode/agents/git-workflow.yml +15 -0
- package/.opencode/agents/growth-strategist.yml +12 -0
- package/.opencode/agents/hermes-agent.yml +12 -0
- package/.opencode/agents/inference-improve.yml +12 -0
- package/.opencode/agents/lint.yml +14 -0
- package/.opencode/agents/log-monitor.yml +12 -0
- package/.opencode/agents/mobile-developer.yml +12 -0
- package/.opencode/agents/model-health-check.yml +12 -0
- package/.opencode/agents/multimodal-looker.yml +12 -0
- package/.opencode/agents/performance-analysis.yml +12 -0
- package/.opencode/agents/performance-engineer.yml +12 -0
- package/.opencode/agents/performance-optimization.yml +12 -0
- package/.opencode/agents/processor-pipeline.yml +14 -0
- package/.opencode/agents/project-analysis.yml +12 -0
- package/.opencode/agents/refactorer.yml +12 -0
- package/.opencode/agents/researcher.yml +12 -0
- package/.opencode/agents/security-auditor.yml +12 -0
- package/.opencode/agents/security-scan.yml +12 -0
- package/.opencode/agents/seo-consultant.yml +12 -0
- package/.opencode/agents/session-management.yml +12 -0
- package/.opencode/agents/state-manager.yml +12 -0
- package/.opencode/agents/storyteller.yml +12 -0
- package/.opencode/agents/strategist.yml +12 -0
- package/.opencode/agents/tech-writer.yml +12 -0
- package/.opencode/agents/testing-best-practices.yml +12 -0
- package/.opencode/agents/testing-lead.yml +12 -0
- package/.opencode/agents/ui-ux-design.yml +12 -0
- package/.opencode/codex.codex +8 -0
- package/.opencode/commands/auto-format.md +99 -0
- package/.opencode/commands/auto-summary-capture.md +90 -0
- package/.opencode/commands/dependency-audit.md +184 -0
- package/.opencode/commands/enforcer-daily-scan.md +137 -0
- package/.opencode/commands/framework-compliance-audit.md +205 -0
- package/.opencode/commands/interactive-validator.md +75 -0
- package/.opencode/commands/job-summary-logger.md +68 -0
- package/.opencode/commands/lint.md +11 -0
- package/.opencode/commands/mode-switch.md +95 -0
- package/.opencode/commands/model-health-check.md +186 -0
- package/.opencode/commands/performance-analysis.md +144 -0
- package/.opencode/commands/pre-commit-introspection.md +185 -0
- package/.opencode/commands/pre-commit-introspection.sh +133 -0
- package/.opencode/commands/security-scan.md +157 -0
- package/.opencode/commands/sisyphus-validation.md +128 -0
- package/.opencode/commands/summary-logger.md +83 -0
- package/.opencode/enforcer-config.json +285 -0
- package/.opencode/hooks/hook-metrics.json +380 -0
- package/.opencode/hooks/post-commit +114 -0
- package/.opencode/hooks/post-push +34 -0
- package/.opencode/init.sh +151 -0
- package/.opencode/skills/api-design/SKILL.md +37 -0
- package/.opencode/skills/architect-tools/SKILL.md +37 -0
- package/.opencode/skills/architecture-patterns/SKILL.md +37 -0
- package/.opencode/skills/auto-format/SKILL.md +37 -0
- package/.opencode/skills/backend-engineer/SKILL.md +49 -0
- package/.opencode/skills/boot-orchestrator/SKILL.md +37 -0
- package/.opencode/skills/bug-triage/SKILL.md +43 -0
- package/.opencode/skills/code-analyzer/SKILL.md +45 -0
- package/.opencode/skills/code-review/SKILL.md +52 -0
- package/.opencode/skills/content-creator/SKILL.md +38 -0
- package/.opencode/skills/database-engineer/SKILL.md +46 -0
- package/.opencode/skills/devops-engineer/SKILL.md +49 -0
- package/.opencode/skills/enforcer/SKILL.md +37 -0
- package/.opencode/skills/framework-compliance-audit/SKILL.md +37 -0
- package/.opencode/skills/frontend-engineer/SKILL.md +49 -0
- package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
- package/.opencode/skills/git-workflow/SKILL.md +37 -0
- package/.opencode/skills/growth-strategist/SKILL.md +48 -0
- package/.opencode/skills/hermes-agent/SKILL.md +212 -0
- package/.opencode/skills/inference-improve/SKILL.md +97 -0
- package/.opencode/skills/lint/SKILL.md +37 -0
- package/.opencode/skills/log-monitor/SKILL.md +44 -0
- package/.opencode/skills/mobile-developer/SKILL.md +42 -0
- package/.opencode/skills/model-health-check/SKILL.md +37 -0
- package/.opencode/skills/multimodal-looker/SKILL.md +45 -0
- package/.opencode/skills/orchestrator/SKILL.md +37 -0
- package/.opencode/skills/performance-analysis/SKILL.md +37 -0
- package/.opencode/skills/performance-engineer/SKILL.md +41 -0
- package/.opencode/skills/performance-optimization/SKILL.md +37 -0
- package/.opencode/skills/processor-pipeline/SKILL.md +37 -0
- package/.opencode/skills/project-analysis/SKILL.md +42 -0
- package/.opencode/skills/refactoring-strategies/SKILL.md +37 -0
- package/.opencode/skills/registry.json +66 -0
- package/.opencode/skills/researcher/SKILL.md +37 -0
- package/.opencode/skills/security-audit/SKILL.md +47 -0
- package/.opencode/skills/security-scan/SKILL.md +37 -0
- package/.opencode/skills/seo-consultant/SKILL.md +43 -0
- package/.opencode/skills/session-management/SKILL.md +36 -0
- package/.opencode/skills/state-manager/SKILL.md +37 -0
- package/.opencode/skills/storyteller/SKILL.md +130 -0
- package/.opencode/skills/strategist/SKILL.md +32 -0
- package/.opencode/skills/tech-writer/SKILL.md +37 -0
- package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
- package/.opencode/skills/testing-strategy/SKILL.md +43 -0
- package/.opencode/skills/ui-ux-design/SKILL.md +603 -0
- package/.opencode/workflows/post-deployment-audit.yml +123 -0
- package/AGENTS.md +110 -0
- package/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/AGENTS.md +110 -0
- package/dist/CHANGELOG.md +2182 -0
- package/dist/LICENSE +21 -0
- package/dist/README.md +131 -0
- package/dist/agents/architect.js +56 -0
- package/dist/agents/backend-engineer.js +81 -0
- package/dist/agents/bug-triage-specialist.js +74 -0
- package/dist/agents/code-analyzer.js +150 -0
- package/dist/agents/code-reviewer.js +69 -0
- package/dist/agents/content-creator.js +72 -0
- package/dist/agents/database-engineer.js +76 -0
- package/dist/agents/devops-engineer.js +84 -0
- package/dist/agents/frontend-engineer.js +78 -0
- package/dist/agents/frontend-ui-ux-engineer.js +64 -0
- package/dist/agents/growth-strategist.js +111 -0
- package/dist/agents/index.js +45 -0
- package/dist/agents/librarian-agents-updater.js +333 -0
- package/dist/agents/log-monitor.js +109 -0
- package/dist/agents/mobile-developer.js +102 -0
- package/dist/agents/multimodal-looker.js +93 -0
- package/dist/agents/performance-engineer.js +86 -0
- package/dist/agents/refactorer.js +80 -0
- package/dist/agents/registry.js +340 -0
- package/dist/agents/researcher.js +83 -0
- package/dist/agents/security-auditor.js +158 -0
- package/dist/agents/seo-consultant.js +53 -0
- package/dist/agents/strategist.js +47 -0
- package/dist/agents/tech-writer.js +84 -0
- package/dist/agents/testing-lead.js +95 -0
- package/dist/agents/types.js +1 -0
- package/dist/analytics/consent-manager.js +258 -0
- package/dist/analytics/emerging-pattern-detector.js +260 -0
- package/dist/analytics/pattern-learning-engine.js +278 -0
- package/dist/analytics/pattern-performance-tracker.js +336 -0
- package/dist/analytics/predictive-analytics.js +248 -0
- package/dist/analytics/prompt-pattern-analyzer.js +371 -0
- package/dist/analytics/routing-performance-analyzer.js +356 -0
- package/dist/analytics/routing-refiner.js +380 -0
- package/dist/analytics/simple-pattern-analyzer.js +297 -0
- package/dist/architect/architect-tools.js +437 -0
- package/dist/architect/architectural-integrity.js +78 -0
- package/dist/benchmark/performance-benchmark.js +372 -0
- package/dist/cli/commands/analytics-disable.js +72 -0
- package/dist/cli/commands/analytics-enable-action.js +82 -0
- package/dist/cli/commands/analytics-preview.js +106 -0
- package/dist/cli/commands/analytics-status.js +68 -0
- package/dist/cli/commands/antigravity-status.js +106 -0
- package/dist/cli/commands/archive-logs.js +161 -0
- package/dist/cli/commands/credible-init.js +82 -0
- package/dist/cli/commands/grok-install.js +16 -0
- package/dist/cli/commands/hermes-install.js +66 -0
- package/dist/cli/commands/mcp-install.js +253 -0
- package/dist/cli/commands/openclaw-install.js +44 -0
- package/dist/cli/commands/opencode-install.js +99 -0
- package/dist/cli/commands/plugin-commands.js +246 -0
- package/dist/cli/commands/publish-agent.js +184 -0
- package/dist/cli/commands/security-audit.js +219 -0
- package/dist/cli/commands/skill-install.js +481 -0
- package/dist/cli/commands/status.js +196 -0
- package/dist/cli/commands/storyteller.js +230 -0
- package/dist/cli/index.js +986 -0
- package/dist/cli/server.js +147 -0
- package/dist/config/default-agents.js +16 -0
- package/dist/core/activity-logger.js +260 -0
- package/dist/core/adaptive-kernel.js +192 -0
- package/dist/core/agent-spawn-gate.js +120 -0
- package/dist/core/boot-orchestrator.js +812 -0
- package/dist/core/bridge.mjs +945 -0
- package/dist/core/codex-formatter.js +220 -0
- package/dist/core/codex-injector.js +424 -0
- package/dist/core/config-loader.js +148 -0
- package/dist/core/config-paths.js +162 -0
- package/dist/core/context-loader.js +269 -0
- package/dist/core/context-validator.js +212 -0
- package/dist/core/features-config.js +457 -0
- package/dist/core/framework-logger.js +275 -0
- package/dist/core/index.js +6 -0
- package/dist/core/kernel-patterns.js +302 -0
- package/dist/core/logging-config.js +43 -0
- package/dist/core/model-router.js +175 -0
- package/dist/core/orchestrator.js +408 -0
- package/dist/core/system-prompt-generator.js +265 -0
- package/dist/core/trace-context.js +33 -0
- package/dist/core/xray-activation.js +134 -0
- package/dist/delegation/agent-delegator.js +769 -0
- package/dist/delegation/agent-expertise.js +156 -0
- package/dist/delegation/analytics/index.js +12 -0
- package/dist/delegation/analytics/learning-engine.js +277 -0
- package/dist/delegation/analytics/outcome-tracker.js +279 -0
- package/dist/delegation/analytics/routing-analytics.js +193 -0
- package/dist/delegation/ast-code-parser.js +878 -0
- package/dist/delegation/codebase-context-analyzer.js +1040 -0
- package/dist/delegation/complexity-analyzer.js +282 -0
- package/dist/delegation/complexity-core.js +219 -0
- package/dist/delegation/config/types.js +6 -0
- package/dist/delegation/dependency-graph-builder.js +409 -0
- package/dist/delegation/index.js +20 -0
- package/dist/delegation/metrics-aggregator.js +335 -0
- package/dist/delegation/session-coordinator.js +352 -0
- package/dist/delegation/strategy-selector.js +108 -0
- package/dist/delegation/voting-coordinator.js +375 -0
- package/dist/delegation/voting-types.js +10 -0
- package/dist/delegation/weighted-voting-aggregator.js +194 -0
- package/dist/enforcement/core/index.js +19 -0
- package/dist/enforcement/core/rule-executor.js +365 -0
- package/dist/enforcement/core/rule-hierarchy.js +259 -0
- package/dist/enforcement/core/rule-registry.js +240 -0
- package/dist/enforcement/core/violation-fixer.js +651 -0
- package/dist/enforcement/enforcer-tools.js +909 -0
- package/dist/enforcement/index.js +41 -0
- package/dist/enforcement/loaders/agent-triage-loader.js +222 -0
- package/dist/enforcement/loaders/agents-md-validation-loader.js +252 -0
- package/dist/enforcement/loaders/base-loader.js +86 -0
- package/dist/enforcement/loaders/codex-loader.js +396 -0
- package/dist/enforcement/loaders/index.js +40 -0
- package/dist/enforcement/loaders/loader-orchestrator.js +168 -0
- package/dist/enforcement/loaders/processor-loader.js +113 -0
- package/dist/enforcement/rule-enforcer.js +298 -0
- package/dist/enforcement/test-auto-healing.js +325 -0
- package/dist/enforcement/types.js +30 -0
- package/dist/enforcement/validators/architecture-validators.js +600 -0
- package/dist/enforcement/validators/base-validator.js +108 -0
- package/dist/enforcement/validators/code-quality-validators.js +336 -0
- package/dist/enforcement/validators/index.js +21 -0
- package/dist/enforcement/validators/security-validators.js +220 -0
- package/dist/enforcement/validators/testing-validators.js +253 -0
- package/dist/enforcement/validators/validator-registry.js +150 -0
- package/dist/execution/opencode-cli-invoker.js +173 -0
- package/dist/execution/proposal-applier.js +254 -0
- package/dist/governance/codex-policy.service.js +167 -0
- package/dist/governance/governance-core.js +152 -0
- package/dist/governance/governance-service.js +274 -0
- package/dist/governance/governance-types.js +6 -0
- package/dist/index.js +24 -0
- package/dist/inference/deploy-verifier.js +161 -0
- package/dist/inference/index.js +5 -0
- package/dist/inference/inference-accumulator.js +126 -0
- package/dist/inference/inference-cycle.js +1168 -0
- package/dist/inference/semantic-patterns.js +310 -0
- package/dist/inference/session-capture.js +308 -0
- package/dist/integrations/base/ExampleIntegration.js +181 -0
- package/dist/integrations/base/Integration.js +395 -0
- package/dist/integrations/base/README.md +446 -0
- package/dist/integrations/base/index.js +16 -0
- package/dist/integrations/base/registry.js +606 -0
- package/dist/integrations/base/types.js +118 -0
- package/dist/integrations/governance/governance-client.js +316 -0
- package/dist/integrations/governance/index.js +373 -0
- package/dist/integrations/governance/types.js +97 -0
- package/dist/integrations/grok/grok-cli.js +83 -0
- package/dist/integrations/grok/hooks/pre-tool-use.js +134 -0
- package/dist/integrations/grok/plugin/0xray/.mcp.json +15 -0
- package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
- package/dist/integrations/hermes-agent/__init__.py +718 -0
- package/dist/integrations/hermes-agent/after-install.md +71 -0
- package/dist/integrations/hermes-agent/bridge.mjs +861 -0
- package/dist/integrations/hermes-agent/conftest.py +14 -0
- package/dist/integrations/hermes-agent/plugin.yaml +12 -0
- package/dist/integrations/hermes-agent/schemas.py +100 -0
- package/dist/integrations/hermes-agent/test_plugin.py +1100 -0
- package/dist/integrations/hermes-agent/tools.py +253 -0
- package/dist/integrations/openclaw/README.md +134 -0
- package/dist/integrations/openclaw/api-server.js +389 -0
- package/dist/integrations/openclaw/client.js +492 -0
- package/dist/integrations/openclaw/config.js +374 -0
- package/dist/integrations/openclaw/hooks/strray-hooks.js +280 -0
- package/dist/integrations/openclaw/index.js +351 -0
- package/dist/integrations/openclaw/types.js +153 -0
- package/dist/integrations/plugins/index.js +10 -0
- package/dist/integrations/plugins/plugin-integration.js +606 -0
- package/dist/integrations/plugins/plugin-registry.js +580 -0
- package/dist/mcps/agent-resolver.js +106 -0
- package/dist/mcps/architect-tools.server.js +277 -0
- package/dist/mcps/auto-format.server.js +413 -0
- package/dist/mcps/boot-orchestrator.server.js +853 -0
- package/dist/mcps/config/config-loader.js +103 -0
- package/dist/mcps/config/config-validator.js +101 -0
- package/dist/mcps/config/index.js +30 -0
- package/dist/mcps/config/plugin-server-registry.js +223 -0
- package/dist/mcps/config/server-config-registry.js +348 -0
- package/dist/mcps/connection/connection-manager.js +79 -0
- package/dist/mcps/connection/connection-pool.js +164 -0
- package/dist/mcps/connection/mcp-connection.js +233 -0
- package/dist/mcps/connection/process-spawner.js +34 -0
- package/dist/mcps/enforcer-tools.server.js +778 -0
- package/dist/mcps/estimation.server.js +192 -0
- package/dist/mcps/framework-compliance-audit.server.js +500 -0
- package/dist/mcps/framework-help.server.js +400 -0
- package/dist/mcps/governance.server.js +464 -0
- package/dist/mcps/in-process-skill-registry.js +48 -0
- package/dist/mcps/knowledge-skills/api-design.server.js +123 -0
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +113 -0
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +474 -0
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +605 -0
- package/dist/mcps/knowledge-skills/code-review.server.js +847 -0
- package/dist/mcps/knowledge-skills/content-creator.server.js +256 -0
- package/dist/mcps/knowledge-skills/database-design.server.js +822 -0
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +1180 -0
- package/dist/mcps/knowledge-skills/git-workflow.server.js +115 -0
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +361 -0
- package/dist/mcps/knowledge-skills/log-monitor.server.js +451 -0
- package/dist/mcps/knowledge-skills/mobile-development.server.js +525 -0
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1063 -0
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +1587 -0
- package/dist/mcps/knowledge-skills/project-analysis.server.js +811 -0
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +796 -0
- package/dist/mcps/knowledge-skills/security-audit.server.js +846 -0
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +937 -0
- package/dist/mcps/knowledge-skills/session-management.server.js +470 -0
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +729 -0
- package/dist/mcps/knowledge-skills/strategist.server.js +217 -0
- package/dist/mcps/knowledge-skills/tech-writer.server.js +1191 -0
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +866 -0
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +827 -0
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1538 -0
- package/dist/mcps/lint.server.js +381 -0
- package/dist/mcps/mcp-client.js +574 -0
- package/dist/mcps/model-health-check.server.js +228 -0
- package/dist/mcps/orchestrator/config/agent-capabilities.js +87 -0
- package/dist/mcps/orchestrator/execution/execution-planner.js +279 -0
- package/dist/mcps/orchestrator/handlers/complexity-handler.js +94 -0
- package/dist/mcps/orchestrator/handlers/status-handler.js +232 -0
- package/dist/mcps/orchestrator/handlers/task-handler.js +197 -0
- package/dist/mcps/orchestrator/server.js +305 -0
- package/dist/mcps/orchestrator/types.js +6 -0
- package/dist/mcps/orchestrator.server.js +19 -0
- package/dist/mcps/performance-analysis.server.js +519 -0
- package/dist/mcps/processor-pipeline.server.js +561 -0
- package/dist/mcps/protocol/protocol-constants.js +46 -0
- package/dist/mcps/registry.json +110 -0
- package/dist/mcps/researcher.server.js +504 -0
- package/dist/mcps/security-scan.server.js +531 -0
- package/dist/mcps/simulation/index.js +12 -0
- package/dist/mcps/simulation/server-simulations.js +219 -0
- package/dist/mcps/simulation/simulation-engine.js +96 -0
- package/dist/mcps/state-manager.server.js +637 -0
- package/dist/mcps/tools/index.js +14 -0
- package/dist/mcps/tools/tool-cache.js +112 -0
- package/dist/mcps/tools/tool-discovery.js +65 -0
- package/dist/mcps/tools/tool-executor.js +75 -0
- package/dist/mcps/tools/tool-registry.js +67 -0
- package/dist/mcps/types/index.js +15 -0
- package/dist/mcps/types/json-rpc.types.js +7 -0
- package/dist/mcps/types/mcp.types.js +7 -0
- package/dist/metrics/agent-metrics.js +574 -0
- package/dist/metrics/index.js +6 -0
- package/dist/monitoring/advanced-profiler.js +232 -0
- package/dist/monitoring/memory-monitor.js +315 -0
- package/dist/monitoring/nudge-watchdog.js +356 -0
- package/dist/monitoring/test-auto-generation-monitor.js +157 -0
- package/dist/orchestrator/agent-spawn-governor.js +559 -0
- package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +399 -0
- package/dist/orchestrator/intelligent-commit-batcher.js +353 -0
- package/dist/orchestrator/multi-agent-orchestration-coordinator.js +456 -0
- package/dist/orchestrator/orchestrator.js +657 -0
- package/dist/orchestrator/self-direction-activation.js +245 -0
- package/dist/orchestrator/universal-librarian-consultation.js +216 -0
- package/dist/orchestrator/universal-registry-bridge.js +247 -0
- package/dist/performance/performance-budget-enforcer.js +434 -0
- package/dist/performance/performance-regression-tester.js +342 -0
- package/dist/plugin/xray-codex-injection.js +857 -0
- package/dist/postprocessor/PostProcessor.js +1048 -0
- package/dist/postprocessor/analysis/FailureAnalysisEngine.js +245 -0
- package/dist/postprocessor/autofix/AutoFixEngine.js +254 -0
- package/dist/postprocessor/autofix/FixValidator.js +56 -0
- package/dist/postprocessor/config.js +65 -0
- package/dist/postprocessor/escalation/EscalationEngine.js +492 -0
- package/dist/postprocessor/monitoring/MonitoringEngine.js +125 -0
- package/dist/postprocessor/redeploy/RedeployCoordinator.js +342 -0
- package/dist/postprocessor/services/RegressionAnalysisService.js +131 -0
- package/dist/postprocessor/success/SuccessHandler.js +134 -0
- package/dist/postprocessor/triggers/APITrigger.js +115 -0
- package/dist/postprocessor/triggers/GitHookTrigger.js +551 -0
- package/dist/postprocessor/triggers/WebhookTrigger.js +211 -0
- package/dist/postprocessor/types.js +4 -0
- package/dist/processors/doc-write-guard.js +46 -0
- package/dist/processors/implementations/agents-md-validation-processor.js +286 -0
- package/dist/processors/implementations/async-pattern-processor.js +158 -0
- package/dist/processors/implementations/codex-compliance-processor.js +57 -0
- package/dist/processors/implementations/commit-batcher-processor.js +71 -0
- package/dist/processors/implementations/console-log-guard-processor.js +163 -0
- package/dist/processors/implementations/coverage-analysis-processor.js +138 -0
- package/dist/processors/implementations/error-boundary-processor.js +44 -0
- package/dist/processors/implementations/inference-improvement-processor.js +270 -0
- package/dist/processors/implementations/log-protection-processor.js +118 -0
- package/dist/processors/implementations/nudge-processor.js +130 -0
- package/dist/processors/implementations/performance-budget-processor.js +217 -0
- package/dist/processors/implementations/postprocessor-chain-validator.js +149 -0
- package/dist/processors/implementations/pre-validate-processor.js +18 -0
- package/dist/processors/implementations/publish-preflight-processor.js +249 -0
- package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +33 -0
- package/dist/processors/implementations/refactoring-logging-processor.js +96 -0
- package/dist/processors/implementations/regression-testing-processor.js +59 -0
- package/dist/processors/implementations/session-capture-processor.js +37 -0
- package/dist/processors/implementations/session-summary-processor.js +130 -0
- package/dist/processors/implementations/spawn-governance-processor.js +219 -0
- package/dist/processors/implementations/state-validation-processor.js +15 -0
- package/dist/processors/implementations/storytelling-trigger-processor.js +589 -0
- package/dist/processors/implementations/test-auto-creation-processor.js +484 -0
- package/dist/processors/implementations/test-execution-processor.js +132 -0
- package/dist/processors/implementations/typescript-compilation-processor.js +87 -0
- package/dist/processors/implementations/version-compliance-processor.js +350 -0
- package/dist/processors/processor-interfaces.js +126 -0
- package/dist/processors/processor-manager.js +826 -0
- package/dist/processors/processor-types.js +12 -0
- package/dist/public/about.html +228 -0
- package/dist/public/enterprise.html +27 -0
- package/dist/public/features.html +102 -0
- package/dist/public/index.html +145 -0
- package/dist/reporting/framework-reporting-system.js +187 -0
- package/dist/reporting/log-parser.js +281 -0
- package/dist/reporting/metrics.js +202 -0
- package/dist/reporting/report-formatter.js +146 -0
- package/dist/reporting/types.js +1 -0
- package/dist/scripts/activate-kernel-pipeline.js +101 -0
- package/dist/scripts/integration.js +234 -0
- package/dist/scripts/pre-command +26 -0
- package/dist/scripts/pre-command.mjs +358 -0
- package/dist/security/comprehensive-security-audit.js +1005 -0
- package/dist/security/index.js +13 -0
- package/dist/security/prompt-security-validator.js +148 -0
- package/dist/security/security-agent-coordinator.js +204 -0
- package/dist/security/security-auditor.js +584 -0
- package/dist/security/security-hardener.js +170 -0
- package/dist/security/security-hardening-system.js +727 -0
- package/dist/security/security-headers.js +118 -0
- package/dist/security/security-orchestration-layer.js +496 -0
- package/dist/security/security-scanner.js +429 -0
- package/dist/services/inference-tuner.js +301 -0
- package/dist/session/index.js +3 -0
- package/dist/session/session-cleanup-manager.js +366 -0
- package/dist/session/session-monitor.js +503 -0
- package/dist/session/session-state-manager.js +522 -0
- package/dist/skills/api-design/SKILL.md +37 -0
- package/dist/skills/architect-tools/SKILL.md +37 -0
- package/dist/skills/architecture-patterns/SKILL.md +37 -0
- package/dist/skills/auto-format/SKILL.md +37 -0
- package/dist/skills/backend-engineer/SKILL.md +49 -0
- package/dist/skills/boot-orchestrator/SKILL.md +37 -0
- package/dist/skills/bug-triage/SKILL.md +43 -0
- package/dist/skills/code-analyzer/SKILL.md +45 -0
- package/dist/skills/code-review/SKILL.md +52 -0
- package/dist/skills/content-creator/SKILL.md +38 -0
- package/dist/skills/database-engineer/SKILL.md +46 -0
- package/dist/skills/devops-engineer/SKILL.md +49 -0
- package/dist/skills/enforcer/SKILL.md +37 -0
- package/dist/skills/framework-compliance-audit/SKILL.md +37 -0
- package/dist/skills/frontend-engineer/SKILL.md +49 -0
- package/dist/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
- package/dist/skills/git-workflow/SKILL.md +37 -0
- package/dist/skills/growth-strategist/SKILL.md +48 -0
- package/dist/skills/hermes-agent/SKILL.md +212 -0
- package/dist/skills/inference-improve/SKILL.md +97 -0
- package/dist/skills/lint/SKILL.md +37 -0
- package/dist/skills/log-monitor/SKILL.md +44 -0
- package/dist/skills/mobile-developer/SKILL.md +42 -0
- package/dist/skills/model-health-check/SKILL.md +37 -0
- package/dist/skills/multimodal-looker/SKILL.md +45 -0
- package/dist/skills/orchestrator/SKILL.md +37 -0
- package/dist/skills/performance-analysis/SKILL.md +37 -0
- package/dist/skills/performance-engineer/SKILL.md +41 -0
- package/dist/skills/performance-optimization/SKILL.md +37 -0
- package/dist/skills/processor-pipeline/SKILL.md +37 -0
- package/dist/skills/project-analysis/SKILL.md +42 -0
- package/dist/skills/refactoring-strategies/SKILL.md +37 -0
- package/dist/skills/registry.json +66 -0
- package/dist/skills/researcher/SKILL.md +37 -0
- package/dist/skills/security-audit/SKILL.md +48 -0
- package/dist/skills/security-scan/SKILL.md +37 -0
- package/dist/skills/seo-consultant/SKILL.md +43 -0
- package/dist/skills/session-management/SKILL.md +36 -0
- package/dist/skills/state-manager/SKILL.md +37 -0
- package/dist/skills/storyteller/SKILL.md +130 -0
- package/dist/skills/strategist/SKILL.md +32 -0
- package/dist/skills/tech-writer/SKILL.md +37 -0
- package/dist/skills/testing-best-practices/SKILL.md +37 -0
- package/dist/skills/testing-strategy/SKILL.md +43 -0
- package/dist/skills/ui-ux-design/SKILL.md +603 -0
- package/dist/state/context-providers.js +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/state-manager.js +208 -0
- package/dist/state/state-types.js +1 -0
- package/dist/testing/memory-regression-suite.js +258 -0
- package/dist/utils/batch-operations.js +292 -0
- package/dist/utils/codex-parser.js +445 -0
- package/dist/utils/command-runner.js +96 -0
- package/dist/utils/import-resolver.js +189 -0
- package/dist/utils/language-detector.js +383 -0
- package/dist/utils/path-resolver.js +112 -0
- package/dist/utils/shutdown-handler.js +75 -0
- package/dist/utils/test-template-generator.js +178 -0
- package/dist/utils/token-manager.js +163 -0
- package/dist/validation/estimation-validator.js +241 -0
- package/dist/validation/report-content-validator.js +218 -0
- package/opencode.json +153 -0
- package/package.json +170 -0
- package/scripts/helpers/resolve-config-path.cjs +57 -0
- package/scripts/helpers/resolve-config-path.mjs +73 -0
- package/scripts/hooks/pre-command +26 -0
- package/scripts/hooks/pre-command.mjs +358 -0
- package/scripts/hooks/run-hook.js +570 -0
- package/scripts/mjs/test-consumer-readiness.mjs +273 -0
- package/scripts/mjs/test-mcp-functionality.mjs +507 -0
- package/scripts/mjs/validate-mcp-connectivity.cjs +75 -0
- package/scripts/mjs/validate-postinstall-config.mjs +308 -0
- package/scripts/node/auto-reflection-generator.mjs +496 -0
- package/scripts/node/basic-security-audit.cjs +338 -0
- package/scripts/node/ci-cd-auto-fix.cjs +263 -0
- package/scripts/node/ci-report-generator.mjs +227 -0
- package/scripts/node/enforce-agents-md.mjs +420 -0
- package/scripts/node/enforce-version-compliance.sh +22 -0
- package/scripts/node/enforce-version-compliance.ts +126 -0
- package/scripts/node/github-actions-monitor.cjs +23 -0
- package/scripts/node/govern-reflection.mjs +160 -0
- package/scripts/node/postinstall.cjs +78 -0
- package/scripts/node/pre-publish-guard.js +267 -0
- package/scripts/node/prepare-consumer.cjs +143 -0
- package/scripts/node/reflection-processor.cjs +213 -0
- package/scripts/node/reflection-validate.sh +194 -0
- package/scripts/node/release-tweet.mjs +39 -0
- package/scripts/node/release.js +159 -0
- package/scripts/node/release.mjs +213 -0
- package/scripts/node/setup-dev.cjs +83 -0
- package/scripts/node/setup.cjs +214 -0
- package/scripts/node/sync-versions.mjs +140 -0
- package/scripts/node/universal-version-manager.js +1025 -0
- package/scripts/node/validate-external-processes.js +265 -0
- package/scripts/node/validate-mcp-connectivity.js +258 -0
- package/scripts/node/version-manager.mjs +524 -0
- package/scripts/validate-stringray-comprehensive.js +636 -0
- package/src/integrations/grok/plugin/0xray/.mcp.json +15 -0
- package/src/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
- package/src/mcps/agent-resolver.ts +168 -0
- package/src/mcps/architect-tools.server.ts +343 -0
- package/src/mcps/auto-format.server.ts +529 -0
- package/src/mcps/boot-orchestrator.server.ts +1082 -0
- package/src/mcps/config/__tests__/config-loader.test.ts +338 -0
- package/src/mcps/config/__tests__/config-validator.test.ts +646 -0
- package/src/mcps/config/__tests__/server-config-registry.test.ts +257 -0
- package/src/mcps/config/config-loader.ts +127 -0
- package/src/mcps/config/config-validator.ts +127 -0
- package/src/mcps/config/index.ts +32 -0
- package/src/mcps/config/plugin-server-registry.ts +335 -0
- package/src/mcps/config/server-config-registry.ts +395 -0
- package/src/mcps/connection/connection-manager.ts +91 -0
- package/src/mcps/connection/connection-pool.ts +216 -0
- package/src/mcps/connection/mcp-connection.ts +327 -0
- package/src/mcps/connection/process-spawner.ts +47 -0
- package/src/mcps/enforcer-tools.server.ts +1106 -0
- package/src/mcps/estimation.server.ts +229 -0
- package/src/mcps/framework-compliance-audit.server.ts +635 -0
- package/src/mcps/framework-help.server.ts +467 -0
- package/src/mcps/governance.server.ts +551 -0
- package/src/mcps/in-process-skill-registry.ts +79 -0
- package/src/mcps/knowledge-skills/api-design.server.test.ts +41 -0
- package/src/mcps/knowledge-skills/api-design.server.ts +160 -0
- package/src/mcps/knowledge-skills/architecture-patterns.server.ts +152 -0
- package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +624 -0
- package/src/mcps/knowledge-skills/code-analyzer.server.test.ts +129 -0
- package/src/mcps/knowledge-skills/code-analyzer.server.ts +591 -0
- package/src/mcps/knowledge-skills/code-review.server.ts +1132 -0
- package/src/mcps/knowledge-skills/content-creator.server.ts +300 -0
- package/src/mcps/knowledge-skills/database-design.server.ts +1200 -0
- package/src/mcps/knowledge-skills/devops-deployment.server.ts +1622 -0
- package/src/mcps/knowledge-skills/git-workflow.server.ts +152 -0
- package/src/mcps/knowledge-skills/growth-strategist.server.ts +413 -0
- package/src/mcps/knowledge-skills/log-monitor.server.ts +619 -0
- package/src/mcps/knowledge-skills/mobile-development.server.ts +672 -0
- package/src/mcps/knowledge-skills/multimodal-looker.server.ts +1500 -0
- package/src/mcps/knowledge-skills/performance-optimization.server.ts +2065 -0
- package/src/mcps/knowledge-skills/project-analysis.server.ts +1111 -0
- package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +1092 -0
- package/src/mcps/knowledge-skills/security-audit.server.test.ts +112 -0
- package/src/mcps/knowledge-skills/security-audit.server.ts +1193 -0
- package/src/mcps/knowledge-skills/seo-consultant.server.ts +1160 -0
- package/src/mcps/knowledge-skills/session-management.server.ts +576 -0
- package/src/mcps/knowledge-skills/skill-invocation.server.ts +941 -0
- package/src/mcps/knowledge-skills/strategist.server.ts +267 -0
- package/src/mcps/knowledge-skills/tech-writer.server.ts +1638 -0
- package/src/mcps/knowledge-skills/testing-best-practices.server.test.ts +136 -0
- package/src/mcps/knowledge-skills/testing-best-practices.server.ts +1232 -0
- package/src/mcps/knowledge-skills/testing-strategy.server.test.ts +100 -0
- package/src/mcps/knowledge-skills/testing-strategy.server.ts +1172 -0
- package/src/mcps/knowledge-skills/ui-ux-design.server.ts +2076 -0
- package/src/mcps/lint.server.ts +483 -0
- package/src/mcps/mcp-client.ts +706 -0
- package/src/mcps/model-health-check.server.ts +292 -0
- package/src/mcps/orchestrator/config/agent-capabilities.ts +108 -0
- package/src/mcps/orchestrator/execution/execution-planner.ts +353 -0
- package/src/mcps/orchestrator/handlers/complexity-handler.ts +125 -0
- package/src/mcps/orchestrator/handlers/status-handler.ts +295 -0
- package/src/mcps/orchestrator/handlers/task-handler.ts +268 -0
- package/src/mcps/orchestrator/server.ts +388 -0
- package/src/mcps/orchestrator/types.ts +81 -0
- package/src/mcps/orchestrator.server.ts +34 -0
- package/src/mcps/performance-analysis.server.ts +715 -0
- package/src/mcps/processor-pipeline.server.ts +778 -0
- package/src/mcps/protocol/protocol-constants.ts +51 -0
- package/src/mcps/registry.json +110 -0
- package/src/mcps/researcher.server.ts +595 -0
- package/src/mcps/security-scan.server.ts +651 -0
- package/src/mcps/simulation/__tests__/simulation-engine.test.ts +275 -0
- package/src/mcps/simulation/index.ts +23 -0
- package/src/mcps/simulation/server-simulations.ts +241 -0
- package/src/mcps/simulation/simulation-engine.ts +126 -0
- package/src/mcps/state-manager.server.ts +777 -0
- package/src/mcps/tools/__tests__/tool-cache.test.ts +205 -0
- package/src/mcps/tools/__tests__/tool-discovery.test.ts +189 -0
- package/src/mcps/tools/__tests__/tool-executor.test.ts +215 -0
- package/src/mcps/tools/__tests__/tool-registry.test.ts +230 -0
- package/src/mcps/tools/index.ts +15 -0
- package/src/mcps/tools/tool-cache.ts +145 -0
- package/src/mcps/tools/tool-discovery.ts +83 -0
- package/src/mcps/tools/tool-executor.ts +106 -0
- package/src/mcps/tools/tool-registry.ts +78 -0
- package/src/mcps/types/__tests__/types.test.ts +341 -0
- package/src/mcps/types/index.ts +17 -0
- package/src/mcps/types/json-rpc.types.ts +38 -0
- package/src/mcps/types/mcp.types.ts +115 -0
- package/src/opencode/agents/api-design.yml +31 -0
- package/src/opencode/agents/architect.yml +15 -0
- package/src/opencode/agents/architecture-patterns.yml +14 -0
- package/src/opencode/agents/auto-format.yml +14 -0
- package/src/opencode/agents/backend-engineer.yml +12 -0
- package/src/opencode/agents/boot-orchestrator.yml +14 -0
- package/src/opencode/agents/bug-triage-specialist.yml +15 -0
- package/src/opencode/agents/code-analyzer.yml +12 -0
- package/src/opencode/agents/code-reviewer.yml +14 -0
- package/src/opencode/agents/content-creator.yml +12 -0
- package/src/opencode/agents/database-engineer.yml +12 -0
- package/src/opencode/agents/devops-engineer.yml +12 -0
- package/src/opencode/agents/framework-compliance-audit.yml +14 -0
- package/src/opencode/agents/frontend-engineer.yml +12 -0
- package/src/opencode/agents/frontend-ui-ux-engineer.yml +12 -0
- package/src/opencode/agents/git-workflow.yml +15 -0
- package/src/opencode/agents/growth-strategist.yml +12 -0
- package/src/opencode/agents/hermes-agent.yml +12 -0
- package/src/opencode/agents/inference-improve.yml +12 -0
- package/src/opencode/agents/lint.yml +14 -0
- package/src/opencode/agents/log-monitor.yml +12 -0
- package/src/opencode/agents/mobile-developer.yml +12 -0
- package/src/opencode/agents/model-health-check.yml +12 -0
- package/src/opencode/agents/multimodal-looker.yml +12 -0
- package/src/opencode/agents/performance-analysis.yml +12 -0
- package/src/opencode/agents/performance-engineer.yml +12 -0
- package/src/opencode/agents/performance-optimization.yml +12 -0
- package/src/opencode/agents/processor-pipeline.yml +14 -0
- package/src/opencode/agents/project-analysis.yml +12 -0
- package/src/opencode/agents/refactorer.yml +12 -0
- package/src/opencode/agents/researcher.yml +12 -0
- package/src/opencode/agents/security-auditor.yml +12 -0
- package/src/opencode/agents/security-scan.yml +12 -0
- package/src/opencode/agents/seo-consultant.yml +12 -0
- package/src/opencode/agents/session-management.yml +12 -0
- package/src/opencode/agents/state-manager.yml +12 -0
- package/src/opencode/agents/storyteller.yml +12 -0
- package/src/opencode/agents/strategist.yml +12 -0
- package/src/opencode/agents/tech-writer.yml +12 -0
- package/src/opencode/agents/testing-best-practices.yml +12 -0
- package/src/opencode/agents/testing-lead.yml +12 -0
- package/src/opencode/agents/ui-ux-design.yml +12 -0
- package/src/opencode/codex.codex +8 -0
- package/src/opencode/commands/auto-format.md +99 -0
- package/src/opencode/commands/auto-summary-capture.md +90 -0
- package/src/opencode/commands/dependency-audit.md +184 -0
- package/src/opencode/commands/enforcer-daily-scan.md +137 -0
- package/src/opencode/commands/framework-compliance-audit.md +205 -0
- package/src/opencode/commands/interactive-validator.md +75 -0
- package/src/opencode/commands/job-summary-logger.md +68 -0
- package/src/opencode/commands/lint.md +11 -0
- package/src/opencode/commands/mode-switch.md +95 -0
- package/src/opencode/commands/model-health-check.md +186 -0
- package/src/opencode/commands/performance-analysis.md +144 -0
- package/src/opencode/commands/pre-commit-introspection.md +185 -0
- package/src/opencode/commands/pre-commit-introspection.sh +133 -0
- package/src/opencode/commands/security-scan.md +157 -0
- package/src/opencode/commands/sisyphus-validation.md +128 -0
- package/src/opencode/commands/summary-logger.md +83 -0
- package/src/opencode/enforcer-config.json +285 -0
- package/src/opencode/openclaw/config.json +25 -0
- package/src/opencode/workflows/post-deployment-audit.yml +123 -0
- package/src/skills/api-design/SKILL.md +37 -0
- package/src/skills/architect-tools/SKILL.md +37 -0
- package/src/skills/architecture-patterns/SKILL.md +37 -0
- package/src/skills/auto-format/SKILL.md +37 -0
- package/src/skills/backend-engineer/SKILL.md +49 -0
- package/src/skills/boot-orchestrator/SKILL.md +37 -0
- package/src/skills/bug-triage/SKILL.md +43 -0
- package/src/skills/code-analyzer/SKILL.md +45 -0
- package/src/skills/code-review/SKILL.md +52 -0
- package/src/skills/content-creator/SKILL.md +38 -0
- package/src/skills/database-engineer/SKILL.md +46 -0
- package/src/skills/devops-engineer/SKILL.md +49 -0
- package/src/skills/enforcer/SKILL.md +37 -0
- package/src/skills/framework-compliance-audit/SKILL.md +37 -0
- package/src/skills/frontend-engineer/SKILL.md +49 -0
- package/src/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
- package/src/skills/git-workflow/SKILL.md +37 -0
- package/src/skills/growth-strategist/SKILL.md +48 -0
- package/src/skills/hermes-agent/SKILL.md +212 -0
- package/src/skills/inference-improve/SKILL.md +97 -0
- package/src/skills/lint/SKILL.md +37 -0
- package/src/skills/log-monitor/SKILL.md +44 -0
- package/src/skills/mobile-developer/SKILL.md +42 -0
- package/src/skills/model-health-check/SKILL.md +37 -0
- package/src/skills/multimodal-looker/SKILL.md +45 -0
- package/src/skills/orchestrator/SKILL.md +37 -0
- package/src/skills/performance-analysis/SKILL.md +37 -0
- package/src/skills/performance-engineer/SKILL.md +41 -0
- package/src/skills/performance-optimization/SKILL.md +37 -0
- package/src/skills/processor-pipeline/SKILL.md +37 -0
- package/src/skills/project-analysis/SKILL.md +42 -0
- package/src/skills/refactoring-strategies/SKILL.md +37 -0
- package/src/skills/registry.json +66 -0
- package/src/skills/researcher/SKILL.md +37 -0
- package/src/skills/security-audit/SKILL.md +48 -0
- package/src/skills/security-scan/SKILL.md +37 -0
- package/src/skills/seo-consultant/SKILL.md +43 -0
- package/src/skills/session-management/SKILL.md +36 -0
- package/src/skills/state-manager/SKILL.md +37 -0
- package/src/skills/storyteller/SKILL.md +130 -0
- package/src/skills/strategist/SKILL.md +32 -0
- package/src/skills/tech-writer/SKILL.md +37 -0
- package/src/skills/testing-best-practices/SKILL.md +37 -0
- package/src/skills/testing-strategy/SKILL.md +43 -0
- package/src/skills/ui-ux-design/SKILL.md +603 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for managing 0xRay integrations.
|
|
5
|
+
* Provides registration, loading, unloading, health checking, and stats retrieval.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-03-15
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from "events";
|
|
11
|
+
import { createUnhealthyResult, isIntegration, IntegrationError, } from "./types.js";
|
|
12
|
+
import { frameworkLogger, generateJobId } from "../../core/framework-logger.js";
|
|
13
|
+
/**
|
|
14
|
+
* Error thrown when integration is not found in registry
|
|
15
|
+
*/
|
|
16
|
+
export class IntegrationNotFoundError extends Error {
|
|
17
|
+
constructor(integrationName) {
|
|
18
|
+
super(`Integration '${integrationName}' not found in registry`);
|
|
19
|
+
this.name = "IntegrationNotFoundError";
|
|
20
|
+
Error.captureStackTrace(this, this.constructor);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Error thrown when integration is already registered
|
|
25
|
+
*/
|
|
26
|
+
export class IntegrationAlreadyRegisteredError extends Error {
|
|
27
|
+
constructor(integrationName) {
|
|
28
|
+
super(`Integration '${integrationName}' is already registered`);
|
|
29
|
+
this.name = "IntegrationAlreadyRegisteredError";
|
|
30
|
+
Error.captureStackTrace(this, this.constructor);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Integration Registry
|
|
35
|
+
*
|
|
36
|
+
* Manages registration, loading, and lifecycle of integrations.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const registry = new IntegrationRegistry();
|
|
41
|
+
*
|
|
42
|
+
* // Register an integration
|
|
43
|
+
* registry.register('my-integration', new MyIntegration());
|
|
44
|
+
*
|
|
45
|
+
* // Get an integration
|
|
46
|
+
* const integration = registry.get('my-integration');
|
|
47
|
+
*
|
|
48
|
+
* // List all integrations
|
|
49
|
+
* const names = registry.list();
|
|
50
|
+
*
|
|
51
|
+
* // Load from config
|
|
52
|
+
* await registry.loadAll({
|
|
53
|
+
* integrations: {
|
|
54
|
+
* 'my-integration': { enabled: true }
|
|
55
|
+
* }
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export class IntegrationRegistry extends EventEmitter {
|
|
60
|
+
/** Map of registered integrations (name -> instance) */
|
|
61
|
+
registeredIntegrations = new Map();
|
|
62
|
+
/** Map of loaded integrations (name -> metadata) */
|
|
63
|
+
loadedIntegrations = new Map();
|
|
64
|
+
/** Job ID for registry operations */
|
|
65
|
+
jobId;
|
|
66
|
+
/**
|
|
67
|
+
* Create a new IntegrationRegistry
|
|
68
|
+
*/
|
|
69
|
+
constructor() {
|
|
70
|
+
super();
|
|
71
|
+
this.jobId = generateJobId("integration-registry");
|
|
72
|
+
}
|
|
73
|
+
// ==========================================================================
|
|
74
|
+
// Registration Methods
|
|
75
|
+
// ==========================================================================
|
|
76
|
+
/**
|
|
77
|
+
* Register an integration with the registry
|
|
78
|
+
*
|
|
79
|
+
* @param name - Unique name for the integration
|
|
80
|
+
* @param integration - Integration instance to register
|
|
81
|
+
* @throws IntegrationAlreadyRegisteredError if name already registered
|
|
82
|
+
*/
|
|
83
|
+
register(name, integration) {
|
|
84
|
+
if (this.registeredIntegrations.has(name)) {
|
|
85
|
+
throw new IntegrationAlreadyRegisteredError(name);
|
|
86
|
+
}
|
|
87
|
+
// Validate it's a proper integration
|
|
88
|
+
if (!isIntegration(integration)) {
|
|
89
|
+
throw new IntegrationError(`Invalid integration object for '${name}'. Must implement IIntegration interface.`, "INVALID_INTEGRATION", false, { name });
|
|
90
|
+
}
|
|
91
|
+
this.registeredIntegrations.set(name, integration);
|
|
92
|
+
this.emitEvent("integration-registered", {
|
|
93
|
+
name,
|
|
94
|
+
version: integration.version,
|
|
95
|
+
});
|
|
96
|
+
frameworkLogger.log("integration-registry", `Registered integration: ${name} v${integration.version}`, "info", { name, version: integration.version }, this.jobId).catch(() => { });
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Unregister an integration from the registry
|
|
100
|
+
*
|
|
101
|
+
* @param name - Name of the integration to unregister
|
|
102
|
+
* @throws IntegrationNotFoundError if integration not found
|
|
103
|
+
*/
|
|
104
|
+
unregister(name) {
|
|
105
|
+
const integration = this.registeredIntegrations.get(name);
|
|
106
|
+
if (!integration) {
|
|
107
|
+
throw new IntegrationNotFoundError(name);
|
|
108
|
+
}
|
|
109
|
+
// If loaded, unload first
|
|
110
|
+
if (this.loadedIntegrations.has(name)) {
|
|
111
|
+
this.unload(name).catch((error) => {
|
|
112
|
+
frameworkLogger.log("integration-registry", `Error unloading integration '${name}' during unregister: ${error}`, "error", { name, error: String(error) }, this.jobId).catch(() => { });
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
this.registeredIntegrations.delete(name);
|
|
116
|
+
this.emitEvent("integration-unregistered", { name });
|
|
117
|
+
frameworkLogger.log("integration-registry", `Unregistered integration: ${name}`, "info", { name }, this.jobId).catch(() => { });
|
|
118
|
+
}
|
|
119
|
+
// ==========================================================================
|
|
120
|
+
// Accessor Methods
|
|
121
|
+
// ==========================================================================
|
|
122
|
+
/**
|
|
123
|
+
* Get an integration by name
|
|
124
|
+
*
|
|
125
|
+
* @param name - Name of the integration
|
|
126
|
+
* @returns Integration instance or undefined if not found
|
|
127
|
+
*/
|
|
128
|
+
get(name) {
|
|
129
|
+
return this.registeredIntegrations.get(name);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get a loaded integration by name
|
|
133
|
+
*
|
|
134
|
+
* @param name - Name of the loaded integration
|
|
135
|
+
* @returns Loaded integration metadata or undefined if not loaded
|
|
136
|
+
*/
|
|
137
|
+
getLoaded(name) {
|
|
138
|
+
return this.loadedIntegrations.get(name);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* List all registered integration names
|
|
142
|
+
*
|
|
143
|
+
* @returns Array of integration names
|
|
144
|
+
*/
|
|
145
|
+
list() {
|
|
146
|
+
return Array.from(this.registeredIntegrations.keys());
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* List all loaded integration names
|
|
150
|
+
*
|
|
151
|
+
* @returns Array of loaded integration names
|
|
152
|
+
*/
|
|
153
|
+
listLoaded() {
|
|
154
|
+
return Array.from(this.loadedIntegrations.keys());
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if an integration is registered
|
|
158
|
+
*
|
|
159
|
+
* @param name - Name to check
|
|
160
|
+
* @returns true if registered
|
|
161
|
+
*/
|
|
162
|
+
isRegistered(name) {
|
|
163
|
+
return this.registeredIntegrations.has(name);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if an integration is loaded
|
|
167
|
+
*
|
|
168
|
+
* @param name - Name to check
|
|
169
|
+
* @returns true if loaded
|
|
170
|
+
*/
|
|
171
|
+
isLoaded(name) {
|
|
172
|
+
return this.loadedIntegrations.has(name);
|
|
173
|
+
}
|
|
174
|
+
// ==========================================================================
|
|
175
|
+
// Lifecycle Methods
|
|
176
|
+
// ==========================================================================
|
|
177
|
+
/**
|
|
178
|
+
* Load an integration by name
|
|
179
|
+
*
|
|
180
|
+
* @param name - Integration name
|
|
181
|
+
* @param config - Optional integration configuration
|
|
182
|
+
* @throws IntegrationNotFoundError if integration not registered
|
|
183
|
+
*/
|
|
184
|
+
async load(name, config) {
|
|
185
|
+
// Check if already loaded
|
|
186
|
+
if (this.loadedIntegrations.has(name)) {
|
|
187
|
+
frameworkLogger.log("integration-registry", `Integration '${name}' already loaded`, "warning", { name }, this.jobId).catch(() => { });
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const integration = this.registeredIntegrations.get(name);
|
|
191
|
+
if (!integration) {
|
|
192
|
+
throw new IntegrationNotFoundError(name);
|
|
193
|
+
}
|
|
194
|
+
// Merge configuration
|
|
195
|
+
const mergedConfig = {
|
|
196
|
+
enabled: true,
|
|
197
|
+
debug: false,
|
|
198
|
+
logLevel: "info",
|
|
199
|
+
...config,
|
|
200
|
+
};
|
|
201
|
+
try {
|
|
202
|
+
// Initialize the integration
|
|
203
|
+
await integration.initialize(mergedConfig);
|
|
204
|
+
// Store in loaded map
|
|
205
|
+
this.loadedIntegrations.set(name, {
|
|
206
|
+
instance: integration,
|
|
207
|
+
config: mergedConfig,
|
|
208
|
+
loadedAt: Date.now(),
|
|
209
|
+
});
|
|
210
|
+
this.emitEvent("integration-loaded", {
|
|
211
|
+
name,
|
|
212
|
+
version: integration.version,
|
|
213
|
+
});
|
|
214
|
+
frameworkLogger.log("integration-registry", `Loaded integration: ${name}`, "success", { name, version: integration.version }, this.jobId).catch(() => { });
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
218
|
+
this.emitEvent("error", {
|
|
219
|
+
name,
|
|
220
|
+
error: errorMessage,
|
|
221
|
+
}, error instanceof Error ? error : undefined);
|
|
222
|
+
throw new IntegrationError(`Failed to load integration '${name}': ${errorMessage}`, "LOAD_FAILED", true, { name, error: errorMessage });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Unload an integration by name
|
|
227
|
+
*
|
|
228
|
+
* @param name - Integration name
|
|
229
|
+
* @throws IntegrationNotFoundError if integration not loaded
|
|
230
|
+
*/
|
|
231
|
+
async unload(name) {
|
|
232
|
+
const loaded = this.loadedIntegrations.get(name);
|
|
233
|
+
if (!loaded) {
|
|
234
|
+
throw new IntegrationNotFoundError(`${name} (not loaded)`);
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
// Shutdown the integration
|
|
238
|
+
await loaded.instance.shutdown();
|
|
239
|
+
// Remove from loaded map
|
|
240
|
+
this.loadedIntegrations.delete(name);
|
|
241
|
+
this.emitEvent("integration-unloaded", { name });
|
|
242
|
+
frameworkLogger.log("integration-registry", `Unloaded integration: ${name}`, "success", { name }, this.jobId).catch(() => { });
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
246
|
+
// Still remove from loaded map even if shutdown failed
|
|
247
|
+
this.loadedIntegrations.delete(name);
|
|
248
|
+
this.emitEvent("error", {
|
|
249
|
+
name,
|
|
250
|
+
error: errorMessage,
|
|
251
|
+
phase: "unload",
|
|
252
|
+
}, error instanceof Error ? error : undefined);
|
|
253
|
+
frameworkLogger.log("integration-registry", `Error unloading integration '${name}': ${errorMessage}`, "error", { name, error: errorMessage }, this.jobId).catch(() => { });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Load all enabled integrations from configuration
|
|
258
|
+
*
|
|
259
|
+
* @param config - Integrations configuration
|
|
260
|
+
*/
|
|
261
|
+
async loadAll(config) {
|
|
262
|
+
const entries = Object.entries(config.integrations);
|
|
263
|
+
const enabledEntries = entries.filter(([, entry]) => entry.enabled);
|
|
264
|
+
frameworkLogger.log("integration-registry", `Loading ${enabledEntries.length} enabled integrations...`, "info", { total: entries.length, enabled: enabledEntries.length }, this.jobId).catch(() => { });
|
|
265
|
+
const results = [];
|
|
266
|
+
// Load all enabled integrations
|
|
267
|
+
for (const [name, entry] of enabledEntries) {
|
|
268
|
+
try {
|
|
269
|
+
// Check if registered
|
|
270
|
+
if (!this.registeredIntegrations.has(name)) {
|
|
271
|
+
frameworkLogger.log("integration-registry", `Skipping '${name}': not registered`, "warning", { name }, this.jobId).catch(() => { });
|
|
272
|
+
results.push({ name, success: false, error: "Not registered" });
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// Extract config from entry
|
|
276
|
+
const integrationConfig = {
|
|
277
|
+
...entry.config,
|
|
278
|
+
};
|
|
279
|
+
await this.load(name, integrationConfig);
|
|
280
|
+
results.push({ name, success: true });
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
284
|
+
results.push({ name, success: false, error: errorMessage });
|
|
285
|
+
frameworkLogger.log("integration-registry", `Failed to load integration '${name}': ${errorMessage}`, "error", { name, error: errorMessage }, this.jobId).catch(() => { });
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
this.emitEvent("load-complete", {
|
|
289
|
+
total: enabledEntries.length,
|
|
290
|
+
succeeded: results.filter((r) => r.success).length,
|
|
291
|
+
failed: results.filter((r) => !r.success).length,
|
|
292
|
+
results,
|
|
293
|
+
});
|
|
294
|
+
const succeeded = results.filter((r) => r.success).length;
|
|
295
|
+
const failed = results.filter((r) => !r.success).length;
|
|
296
|
+
frameworkLogger.log("integration-registry", `Load complete: ${succeeded} succeeded, ${failed} failed`, failed > 0 ? "warning" : "success", { succeeded, failed }, this.jobId).catch(() => { });
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Unload all loaded integrations
|
|
300
|
+
*/
|
|
301
|
+
async unloadAll() {
|
|
302
|
+
const loadedNames = Array.from(this.loadedIntegrations.keys());
|
|
303
|
+
frameworkLogger.log("integration-registry", `Unloading ${loadedNames.length} integrations...`, "info", { count: loadedNames.length }, this.jobId).catch(() => { });
|
|
304
|
+
const results = [];
|
|
305
|
+
// Unload all loaded integrations
|
|
306
|
+
for (const name of loadedNames) {
|
|
307
|
+
try {
|
|
308
|
+
await this.unload(name);
|
|
309
|
+
results.push({ name, success: true });
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
313
|
+
results.push({ name, success: false, error: errorMessage });
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
this.emitEvent("unload-complete", {
|
|
317
|
+
total: loadedNames.length,
|
|
318
|
+
succeeded: results.filter((r) => r.success).length,
|
|
319
|
+
failed: results.filter((r) => !r.success).length,
|
|
320
|
+
results,
|
|
321
|
+
});
|
|
322
|
+
const succeeded = results.filter((r) => r.success).length;
|
|
323
|
+
const failed = results.filter((r) => !r.success).length;
|
|
324
|
+
frameworkLogger.log("integration-registry", `Unload complete: ${succeeded} succeeded, ${failed} failed`, failed > 0 ? "warning" : "success", { succeeded, failed }, this.jobId).catch(() => { });
|
|
325
|
+
}
|
|
326
|
+
// ==========================================================================
|
|
327
|
+
// Health and Stats Methods
|
|
328
|
+
// ==========================================================================
|
|
329
|
+
/**
|
|
330
|
+
* Get health status of all loaded integrations
|
|
331
|
+
*
|
|
332
|
+
* @returns Record of integration names to health results
|
|
333
|
+
*/
|
|
334
|
+
async healthCheckAll() {
|
|
335
|
+
const results = {};
|
|
336
|
+
for (const [name, loaded] of this.loadedIntegrations) {
|
|
337
|
+
try {
|
|
338
|
+
results[name] = await loaded.instance.healthCheck();
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
342
|
+
results[name] = createUnhealthyResult(`Health check failed: ${errorMessage}`, {
|
|
343
|
+
error: errorMessage,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
this.emitEvent("health-check-complete", {
|
|
348
|
+
total: Object.keys(results).length,
|
|
349
|
+
healthy: Object.values(results).filter((r) => r.healthy).length,
|
|
350
|
+
unhealthy: Object.values(results).filter((r) => !r.healthy).length,
|
|
351
|
+
});
|
|
352
|
+
return results;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Get health status of a specific integration
|
|
356
|
+
*
|
|
357
|
+
* @param name - Integration name
|
|
358
|
+
* @returns Health result
|
|
359
|
+
* @throws IntegrationNotFoundError if integration not loaded
|
|
360
|
+
*/
|
|
361
|
+
async healthCheck(name) {
|
|
362
|
+
const loaded = this.loadedIntegrations.get(name);
|
|
363
|
+
if (!loaded) {
|
|
364
|
+
throw new IntegrationNotFoundError(`${name} (not loaded)`);
|
|
365
|
+
}
|
|
366
|
+
return loaded.instance.healthCheck();
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Get statistics from all loaded integrations
|
|
370
|
+
*
|
|
371
|
+
* @returns Record of integration names to stats
|
|
372
|
+
*/
|
|
373
|
+
getAllStats() {
|
|
374
|
+
const stats = {};
|
|
375
|
+
for (const [name, loaded] of this.loadedIntegrations) {
|
|
376
|
+
stats[name] = loaded.instance.getStats();
|
|
377
|
+
}
|
|
378
|
+
return stats;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get statistics from a specific integration
|
|
382
|
+
*
|
|
383
|
+
* @param name - Integration name
|
|
384
|
+
* @returns Integration stats
|
|
385
|
+
* @throws IntegrationNotFoundError if integration not loaded
|
|
386
|
+
*/
|
|
387
|
+
getStats(name) {
|
|
388
|
+
const loaded = this.loadedIntegrations.get(name);
|
|
389
|
+
if (!loaded) {
|
|
390
|
+
throw new IntegrationNotFoundError(`${name} (not loaded)`);
|
|
391
|
+
}
|
|
392
|
+
return loaded.instance.getStats();
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Get status of a specific integration
|
|
396
|
+
*
|
|
397
|
+
* @param name - Integration name
|
|
398
|
+
* @returns Integration status
|
|
399
|
+
*/
|
|
400
|
+
getStatus(name) {
|
|
401
|
+
const integration = this.registeredIntegrations.get(name);
|
|
402
|
+
return integration?.status;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get all integration statuses
|
|
406
|
+
*
|
|
407
|
+
* @returns Record of integration names to statuses
|
|
408
|
+
*/
|
|
409
|
+
getAllStatuses() {
|
|
410
|
+
const statuses = {};
|
|
411
|
+
for (const [name, integration] of this.registeredIntegrations) {
|
|
412
|
+
statuses[name] = integration.status;
|
|
413
|
+
}
|
|
414
|
+
return statuses;
|
|
415
|
+
}
|
|
416
|
+
// ==========================================================================
|
|
417
|
+
// Utility Methods
|
|
418
|
+
// ==========================================================================
|
|
419
|
+
/**
|
|
420
|
+
* Clear all registered integrations (not loaded ones)
|
|
421
|
+
*/
|
|
422
|
+
clear() {
|
|
423
|
+
const names = Array.from(this.registeredIntegrations.keys());
|
|
424
|
+
for (const name of names) {
|
|
425
|
+
// Only unregister if not loaded (loaded ones will be handled by unloadAll)
|
|
426
|
+
if (!this.loadedIntegrations.has(name)) {
|
|
427
|
+
this.registeredIntegrations.delete(name);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
frameworkLogger.log("integration-registry", "Cleared non-loaded integrations", "info", { cleared: names.length - this.loadedIntegrations.size }, this.jobId).catch(() => { });
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Get registry statistics
|
|
434
|
+
*
|
|
435
|
+
* @returns Registry statistics
|
|
436
|
+
*/
|
|
437
|
+
getRegistryStats() {
|
|
438
|
+
const byStatus = {
|
|
439
|
+
uninitialized: 0,
|
|
440
|
+
initializing: 0,
|
|
441
|
+
initialized: 0,
|
|
442
|
+
error: 0,
|
|
443
|
+
"shutting-down": 0,
|
|
444
|
+
shutdown: 0,
|
|
445
|
+
};
|
|
446
|
+
for (const [, integration] of this.registeredIntegrations) {
|
|
447
|
+
byStatus[integration.status]++;
|
|
448
|
+
}
|
|
449
|
+
return {
|
|
450
|
+
registered: this.registeredIntegrations.size,
|
|
451
|
+
loaded: this.loadedIntegrations.size,
|
|
452
|
+
byStatus,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
// ==========================================================================
|
|
456
|
+
// Private Methods
|
|
457
|
+
// ==========================================================================
|
|
458
|
+
/**
|
|
459
|
+
* Emit a registry event
|
|
460
|
+
*/
|
|
461
|
+
emitEvent(type, data = {}, error) {
|
|
462
|
+
const event = {
|
|
463
|
+
type,
|
|
464
|
+
timestamp: Date.now(),
|
|
465
|
+
...data,
|
|
466
|
+
...(error ? { error } : {}),
|
|
467
|
+
};
|
|
468
|
+
this.emit(type, event);
|
|
469
|
+
this.emit("event", event);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Auto-discover integrations from directory index files
|
|
474
|
+
*
|
|
475
|
+
* This function scans the integrations directory for integration modules
|
|
476
|
+
* and returns their discovered information.
|
|
477
|
+
*
|
|
478
|
+
* @param integrationsPath - Path to integrations directory
|
|
479
|
+
* @returns Array of discovered integrations
|
|
480
|
+
*
|
|
481
|
+
* @example
|
|
482
|
+
* ```typescript
|
|
483
|
+
* const discovered = await discoverIntegrations('./src/integrations');
|
|
484
|
+
* for (const d of discovered) {
|
|
485
|
+
* console.log(`Found: ${d.name} at ${d.path}`);
|
|
486
|
+
* }
|
|
487
|
+
* ```
|
|
488
|
+
*/
|
|
489
|
+
export async function discoverIntegrations(integrationsPath) {
|
|
490
|
+
const discovered = [];
|
|
491
|
+
try {
|
|
492
|
+
// Dynamic import of fs and path for file scanning
|
|
493
|
+
const fs = await import("fs");
|
|
494
|
+
const path = await import("path");
|
|
495
|
+
// Check if directory exists
|
|
496
|
+
if (!fs.existsSync(integrationsPath)) {
|
|
497
|
+
frameworkLogger.log("integration-registry", `Integrations directory not found: ${integrationsPath}`, "warning", { path: integrationsPath }).catch(() => { });
|
|
498
|
+
return discovered;
|
|
499
|
+
}
|
|
500
|
+
// Read directory contents
|
|
501
|
+
const entries = fs.readdirSync(integrationsPath, { withFileTypes: true });
|
|
502
|
+
// Find directories with index.ts
|
|
503
|
+
for (const entry of entries) {
|
|
504
|
+
if (!entry.isDirectory())
|
|
505
|
+
continue;
|
|
506
|
+
const integrationDir = path.join(integrationsPath, entry.name);
|
|
507
|
+
const indexPath = path.join(integrationDir, "index.ts");
|
|
508
|
+
// Skip base directory
|
|
509
|
+
if (entry.name === "base" || entry.name === "core")
|
|
510
|
+
continue;
|
|
511
|
+
if (fs.existsSync(indexPath)) {
|
|
512
|
+
try {
|
|
513
|
+
// Dynamic import the module
|
|
514
|
+
const module = await import(indexPath);
|
|
515
|
+
// Try to get integration name from exports
|
|
516
|
+
let name = entry.name;
|
|
517
|
+
// Look for default export or named export with "Integration" suffix
|
|
518
|
+
if (module.default && isIntegration(module.default)) {
|
|
519
|
+
name = module.default.name;
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
const keys = Object.keys(module);
|
|
523
|
+
const integrationKey = keys.find((k) => module[k] &&
|
|
524
|
+
typeof module[k] === "object" &&
|
|
525
|
+
"name" in module[k] &&
|
|
526
|
+
"version" in module[k]);
|
|
527
|
+
if (integrationKey) {
|
|
528
|
+
name = module[integrationKey].name;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
discovered.push({
|
|
532
|
+
name,
|
|
533
|
+
path: indexPath,
|
|
534
|
+
module,
|
|
535
|
+
});
|
|
536
|
+
frameworkLogger.log("integration-registry", `Discovered integration: ${name}`, "info", { name, path: indexPath }).catch(() => { });
|
|
537
|
+
}
|
|
538
|
+
catch (error) {
|
|
539
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
540
|
+
frameworkLogger.log("integration-registry", `Failed to load integration from ${indexPath}: ${errorMessage}`, "warning", { path: indexPath, error: errorMessage }).catch(() => { });
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
catch (error) {
|
|
546
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
547
|
+
frameworkLogger.log("integration-registry", `Error during integration discovery: ${errorMessage}`, "error", { error: errorMessage }).catch(() => { });
|
|
548
|
+
}
|
|
549
|
+
return discovered;
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Auto-register integrations from discovered modules
|
|
553
|
+
*
|
|
554
|
+
* @param registry - Registry instance to register with
|
|
555
|
+
* @param integrationsPath - Path to integrations directory
|
|
556
|
+
* @returns Number of integrations registered
|
|
557
|
+
*
|
|
558
|
+
* @example
|
|
559
|
+
* ```typescript
|
|
560
|
+
* const registry = new IntegrationRegistry();
|
|
561
|
+
* const count = await autoRegisterIntegrations(registry, './src/integrations');
|
|
562
|
+
* console.log(`Registered ${count} integrations`);
|
|
563
|
+
* ```
|
|
564
|
+
*/
|
|
565
|
+
export async function autoRegisterIntegrations(registry, integrationsPath) {
|
|
566
|
+
const discovered = await discoverIntegrations(integrationsPath);
|
|
567
|
+
let registered = 0;
|
|
568
|
+
for (const d of discovered) {
|
|
569
|
+
try {
|
|
570
|
+
// Try to find the integration export
|
|
571
|
+
let integration;
|
|
572
|
+
// Check default export
|
|
573
|
+
if (d.module && typeof d.module === "object" && "default" in d.module) {
|
|
574
|
+
const maybe = d.module.default;
|
|
575
|
+
if (isIntegration(maybe)) {
|
|
576
|
+
integration = maybe;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
// Check named exports
|
|
580
|
+
if (!integration) {
|
|
581
|
+
const keys = Object.keys(d.module);
|
|
582
|
+
for (const key of keys) {
|
|
583
|
+
const maybe = d.module[key];
|
|
584
|
+
if (isIntegration(maybe)) {
|
|
585
|
+
integration = maybe;
|
|
586
|
+
break;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
if (integration) {
|
|
591
|
+
registry.register(integration.name, integration);
|
|
592
|
+
registered++;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
catch (error) {
|
|
596
|
+
// Skip integrations that fail to register (already registered, etc.)
|
|
597
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
598
|
+
frameworkLogger.log("integration-registry", `Failed to register integration '${d.name}': ${errorMessage}`, "warning", { name: d.name, error: errorMessage }).catch(() => { });
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
return registered;
|
|
602
|
+
}
|
|
603
|
+
// ==========================================================================
|
|
604
|
+
// Re-export Types from types.js
|
|
605
|
+
// ==========================================================================
|
|
606
|
+
// Types are re-exported from types.js - import directly from './types.js'
|