strray-ai 1.15.18 β†’ 1.15.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.
Files changed (140) hide show
  1. package/.opencode/codex.codex +1 -1
  2. package/.opencode/enforcer-config.json +2 -2
  3. package/.opencode/plugins/strray-codex-injection.js +127 -1
  4. package/.opencode/strray/codex.json +1 -1
  5. package/.opencode/strray/config.json +1 -1
  6. package/.opencode/strray/features.json +1 -1
  7. package/.opencode/strray/integrations.json +3 -3
  8. package/.strray/agents_template.md +109 -0
  9. package/.strray/codex.json +531 -0
  10. package/.strray/config.json +29 -0
  11. package/.strray/features.json +132 -0
  12. package/.strray/integrations.json +23 -0
  13. package/.strray/routing-mappings.json +752 -0
  14. package/.strray/workflow_state.json +28 -0
  15. package/dist/analytics/consent-manager.d.ts +1 -1
  16. package/dist/analytics/consent-manager.d.ts.map +1 -1
  17. package/dist/analytics/consent-manager.js +3 -2
  18. package/dist/analytics/consent-manager.js.map +1 -1
  19. package/dist/analytics/predictive-analytics.d.ts +21 -4
  20. package/dist/analytics/predictive-analytics.d.ts.map +1 -1
  21. package/dist/analytics/predictive-analytics.js +147 -3
  22. package/dist/analytics/predictive-analytics.js.map +1 -1
  23. package/dist/analytics/routing-refiner.js +1 -1
  24. package/dist/cli/commands/analytics-status.d.ts.map +1 -1
  25. package/dist/cli/commands/analytics-status.js +4 -3
  26. package/dist/cli/commands/analytics-status.js.map +1 -1
  27. package/dist/cli/commands/antigravity-status.d.ts.map +1 -1
  28. package/dist/cli/commands/antigravity-status.js +2 -1
  29. package/dist/cli/commands/antigravity-status.js.map +1 -1
  30. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  31. package/dist/cli/commands/skill-install.js +2 -1
  32. package/dist/cli/commands/skill-install.js.map +1 -1
  33. package/dist/cli/commands/status.d.ts.map +1 -1
  34. package/dist/cli/commands/status.js +11 -7
  35. package/dist/cli/commands/status.js.map +1 -1
  36. package/dist/cli/index.js +13 -7
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/cli/server.js +18 -4
  39. package/dist/cli/server.js.map +1 -1
  40. package/dist/core/boot-orchestrator.js +1 -1
  41. package/dist/core/config-loader.d.ts.map +1 -1
  42. package/dist/core/config-loader.js +2 -1
  43. package/dist/core/config-loader.js.map +1 -1
  44. package/dist/core/context-loader.d.ts.map +1 -1
  45. package/dist/core/context-loader.js +2 -1
  46. package/dist/core/context-loader.js.map +1 -1
  47. package/dist/core/features-config.d.ts.map +1 -1
  48. package/dist/core/features-config.js +3 -2
  49. package/dist/core/features-config.js.map +1 -1
  50. package/dist/core/kernel-patterns.d.ts.map +1 -1
  51. package/dist/core/kernel-patterns.js +56 -9
  52. package/dist/core/kernel-patterns.js.map +1 -1
  53. package/dist/delegation/agent-delegator.d.ts +12 -0
  54. package/dist/delegation/agent-delegator.d.ts.map +1 -1
  55. package/dist/delegation/agent-delegator.js +113 -0
  56. package/dist/delegation/agent-delegator.js.map +1 -1
  57. package/dist/delegation/analytics/outcome-tracker.d.ts.map +1 -1
  58. package/dist/delegation/analytics/outcome-tracker.js +4 -2
  59. package/dist/delegation/analytics/outcome-tracker.js.map +1 -1
  60. package/dist/delegation/config/types.d.ts +1 -0
  61. package/dist/delegation/config/types.d.ts.map +1 -1
  62. package/dist/enforcement/core/rule-registry.d.ts.map +1 -1
  63. package/dist/enforcement/core/rule-registry.js +5 -1
  64. package/dist/enforcement/core/rule-registry.js.map +1 -1
  65. package/dist/mcps/architect-tools.server.js +1 -1
  66. package/dist/mcps/auto-format.server.js +1 -1
  67. package/dist/mcps/boot-orchestrator.server.d.ts.map +1 -1
  68. package/dist/mcps/boot-orchestrator.server.js +4 -3
  69. package/dist/mcps/boot-orchestrator.server.js.map +1 -1
  70. package/dist/mcps/enforcer-tools.server.js +1 -1
  71. package/dist/mcps/estimation.server.js +1 -1
  72. package/dist/mcps/framework-compliance-audit.server.js +1 -1
  73. package/dist/mcps/framework-help.server.js +1 -1
  74. package/dist/mcps/knowledge-skills/api-design.server.js +1 -1
  75. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +1 -1
  76. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +1 -1
  77. package/dist/mcps/knowledge-skills/code-analyzer.server.js +1 -1
  78. package/dist/mcps/knowledge-skills/code-review.server.js +1 -1
  79. package/dist/mcps/knowledge-skills/content-creator.server.js +1 -1
  80. package/dist/mcps/knowledge-skills/database-design.server.js +1 -1
  81. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1 -1
  82. package/dist/mcps/knowledge-skills/git-workflow.server.js +1 -1
  83. package/dist/mcps/knowledge-skills/growth-strategist.server.js +1 -1
  84. package/dist/mcps/knowledge-skills/log-monitor.server.js +1 -1
  85. package/dist/mcps/knowledge-skills/mobile-development.server.js +1 -1
  86. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1 -1
  87. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1 -1
  88. package/dist/mcps/knowledge-skills/project-analysis.server.js +1 -1
  89. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +1 -1
  90. package/dist/mcps/knowledge-skills/security-audit.server.js +1 -1
  91. package/dist/mcps/knowledge-skills/seo-consultant.server.js +1 -1
  92. package/dist/mcps/knowledge-skills/session-management.server.js +1 -1
  93. package/dist/mcps/knowledge-skills/skill-invocation.server.js +1 -1
  94. package/dist/mcps/knowledge-skills/strategist.server.js +1 -1
  95. package/dist/mcps/knowledge-skills/tech-writer.server.js +2 -2
  96. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +1 -1
  97. package/dist/mcps/knowledge-skills/testing-strategy.server.js +1 -1
  98. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1 -1
  99. package/dist/mcps/lint.server.js +1 -1
  100. package/dist/mcps/model-health-check.server.js +1 -1
  101. package/dist/mcps/performance-analysis.server.js +1 -1
  102. package/dist/mcps/processor-pipeline.server.js +1 -1
  103. package/dist/mcps/researcher.server.js +1 -1
  104. package/dist/mcps/security-scan.server.js +1 -1
  105. package/dist/mcps/state-manager.server.js +1 -1
  106. package/dist/monitoring/advanced-profiler.d.ts +1 -1
  107. package/dist/monitoring/advanced-profiler.d.ts.map +1 -1
  108. package/dist/monitoring/advanced-profiler.js +3 -2
  109. package/dist/monitoring/advanced-profiler.js.map +1 -1
  110. package/dist/orchestrator/universal-registry-bridge.js +1 -1
  111. package/dist/plugin/strray-codex-injection.d.ts +0 -6
  112. package/dist/plugin/strray-codex-injection.d.ts.map +1 -1
  113. package/dist/plugin/strray-codex-injection.js +127 -1
  114. package/dist/plugin/strray-codex-injection.js.map +1 -1
  115. package/dist/processors/implementations/inference-improvement-processor.d.ts +1 -0
  116. package/dist/processors/implementations/inference-improvement-processor.d.ts.map +1 -1
  117. package/dist/processors/implementations/inference-improvement-processor.js +8 -2
  118. package/dist/processors/implementations/inference-improvement-processor.js.map +1 -1
  119. package/dist/public/about.html +228 -0
  120. package/dist/public/enterprise.html +27 -0
  121. package/dist/public/features.html +102 -0
  122. package/dist/public/index.html +145 -0
  123. package/dist/scripts/integration.js +29 -15
  124. package/dist/scripts/integration.js.map +1 -1
  125. package/dist/services/inference-tuner.d.ts +20 -0
  126. package/dist/services/inference-tuner.d.ts.map +1 -1
  127. package/dist/services/inference-tuner.js +130 -3
  128. package/dist/services/inference-tuner.js.map +1 -1
  129. package/dist/state/state-manager.d.ts +1 -1
  130. package/dist/state/state-manager.d.ts.map +1 -1
  131. package/dist/state/state-manager.js +5 -1
  132. package/dist/state/state-manager.js.map +1 -1
  133. package/dist/utils/token-manager.d.ts.map +1 -1
  134. package/dist/utils/token-manager.js +2 -1
  135. package/dist/utils/token-manager.js.map +1 -1
  136. package/package.json +6 -12
  137. package/scripts/node/prepare-consumer.cjs +36 -0
  138. package/scripts/node/universal-version-manager.js +3 -3
  139. package/.opencode/init.sh +0 -138
  140. package/.opencode/package.json +0 -19
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.15.18",
2
+ "version": "1.15.19",
3
3
  "terms": [
4
4
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
5
5
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "framework": "StringRay 1.0.0",
3
- "version": "1.15.18",
3
+ "version": "1.15.19",
4
4
  "description": "Codex-compliant framework configuration for Credible UI project",
5
5
  "thresholds": {
6
6
  "bundleSize": {
@@ -220,7 +220,7 @@
220
220
  }
221
221
  },
222
222
  "codex": {
223
- "version": "1.15.18",
223
+ "version": "1.15.19",
224
224
  "terms": [
225
225
  1,
226
226
  2,
@@ -11,7 +11,27 @@
11
11
  import * as fs from "fs";
12
12
  import * as path from "path";
13
13
  import { spawn } from "child_process";
14
- import { frameworkLogger } from "../core/framework-logger.js";
14
+ // frameworkLogger β€” dynamically loaded (works from both dist/plugin/ and .opencode/plugins/)
15
+ let frameworkLogger;
16
+ async function loadFrameworkLogger() {
17
+ if (frameworkLogger)
18
+ return;
19
+ const candidates = [
20
+ "../../dist/core/framework-logger.js",
21
+ "../core/framework-logger.js",
22
+ ];
23
+ for (const p of candidates) {
24
+ try {
25
+ frameworkLogger = (await import(p)).frameworkLogger;
26
+ return;
27
+ }
28
+ catch (_) {
29
+ // try next candidate
30
+ }
31
+ }
32
+ // Fallback noop logger β€” plugin works without structured logging
33
+ frameworkLogger = { log: () => { } };
34
+ }
15
35
  // Dynamic imports for config-paths (works from both dist/plugin/ and .opencode/plugins/)
16
36
  let _resolveCodexPath;
17
37
  let _resolveStateDir;
@@ -34,6 +54,7 @@ async function loadConfigPaths() {
34
54
  // try next candidate
35
55
  }
36
56
  }
57
+ await loadFrameworkLogger();
37
58
  frameworkLogger.log("strray-codex-plugin", "config-paths-load-failed", "warning", { warning: "Failed to load config-paths module from any location" });
38
59
  }
39
60
  /** Convenience wrapper β€” must be awaited before use */
@@ -63,6 +84,7 @@ async function importSystemPromptGenerator() {
63
84
  // try next candidate
64
85
  }
65
86
  }
87
+ await loadFrameworkLogger();
66
88
  frameworkLogger.log("strray-codex-plugin", "system-prompt-generator-load-failed", "warning", { warning: "Failed to load lean system prompt generator, using fallback" });
67
89
  }
68
90
  }
@@ -379,6 +401,59 @@ function formatCodexContext(contexts) {
379
401
  * This plugin hooks into experimental.chat.system.transform event
380
402
  * to inject codex terms into system prompt before it's sent to LLM.
381
403
  */
404
+ /** Inference tuning: run every N tool calls */
405
+ const INFERENCE_TUNE_INTERVAL = 100;
406
+ let _openCodeToolCallCount = 0;
407
+ let _lastTuneToolCallCount = 0;
408
+ /**
409
+ * Map tool names to agent/skill identifiers for outcome tracking.
410
+ * This lets the analytics pipeline correlate tool usage patterns
411
+ * with agent routing effectiveness.
412
+ */
413
+ const TOOL_AGENT_MAP = {
414
+ write: { agent: "code-reviewer", skill: "write" },
415
+ edit: { agent: "code-reviewer", skill: "edit" },
416
+ multiedit: { agent: "code-reviewer", skill: "multiedit" },
417
+ bash: { agent: "testing-lead", skill: "execution" },
418
+ search: { agent: "researcher", skill: "search" },
419
+ read: { agent: "researcher", skill: "read" },
420
+ glob: { agent: "researcher", skill: "glob" },
421
+ grep: { agent: "researcher", skill: "search" },
422
+ ls: { agent: "researcher", skill: "list" },
423
+ };
424
+ /**
425
+ * Classify a tool call into a meaningful task type for analytics.
426
+ * Mirrors _classify_task_type in the Hermes plugin so both plugins
427
+ * produce comparable outcome data for the inference tuner.
428
+ */
429
+ function classifyTaskType(tool, args) {
430
+ const cmd = String(args?.command ?? "").toLowerCase().trim();
431
+ if (tool === "bash" && cmd) {
432
+ if (/(npm|yarn|pnpm)\s+test|jest|vitest|mocha|pytest/.test(cmd))
433
+ return "testing";
434
+ if (/(npm|yarn|pnpm)\s+run|npx|cargo|go run|make\s/.test(cmd))
435
+ return "build";
436
+ if (/audit|security|snyk|owasp|bandit/.test(cmd))
437
+ return "security";
438
+ if (/eslint|prettier|black|ruff|lint|format/.test(cmd))
439
+ return "lint";
440
+ if (/git\s/.test(cmd))
441
+ return "git";
442
+ if (/(npm|yarn|pnpm)\s+install|pip install|cargo add/.test(cmd))
443
+ return "install";
444
+ if (/grep|rg |find |ls |cat |head |tail /.test(cmd))
445
+ return "search";
446
+ }
447
+ if (tool === "write")
448
+ return "write";
449
+ if (tool === "edit" || tool === "multiedit")
450
+ return "edit";
451
+ if (tool === "read")
452
+ return "read";
453
+ if (tool === "search" || tool === "grep" || tool === "glob")
454
+ return "search";
455
+ return "unknown";
456
+ }
382
457
  export default async function strrayCodexPlugin(input) {
383
458
  const { directory: inputDirectory } = input;
384
459
  const directory = inputDirectory || process.cwd();
@@ -575,6 +650,37 @@ export default async function strrayCodexPlugin(input) {
575
650
  const logger = await getOrCreateLogger(directory);
576
651
  await loadStrRayComponents();
577
652
  const { tool, args, result } = input;
653
+ // Record routing outcome for analytics pipeline.
654
+ // This feeds the inference tuner with real tool usage data so it
655
+ // can refine keyword mappings and improve predictive analytics.
656
+ try {
657
+ const { routingOutcomeTracker } = await import("../delegation/analytics/outcome-tracker.js");
658
+ const mapping = TOOL_AGENT_MAP[tool];
659
+ const taskType = classifyTaskType(tool, args);
660
+ const rawDesc = args?.content
661
+ ? String(args.content).slice(0, 150)
662
+ : args?.filePath
663
+ ? String(args.filePath)
664
+ : args?.command
665
+ ? String(args.command).slice(0, 150)
666
+ : tool;
667
+ const description = `[${taskType}] ${rawDesc}`;
668
+ const outcomeFields = {
669
+ taskId: `opencode-${_openCodeToolCallCount}`,
670
+ taskDescription: description,
671
+ routedAgent: mapping?.agent ?? "direct",
672
+ routedSkill: mapping?.skill ?? tool,
673
+ confidence: mapping ? 0.8 : 0.5,
674
+ success: result?.error == null,
675
+ routingMethod: mapping ? "keyword" : "default",
676
+ };
677
+ if (taskType !== "unknown")
678
+ outcomeFields.taskType = taskType;
679
+ routingOutcomeTracker.recordOutcome(outcomeFields);
680
+ }
681
+ catch {
682
+ // Outcome tracker not available β€” skip silently
683
+ }
578
684
  // Debug: log full input
579
685
  logger.log(`πŸ“₯ After hook input: ${JSON.stringify({ tool, hasArgs: !!args, args, hasResult: !!result }).slice(0, 200)}`);
580
686
  // Run post-processors for write/edit operations AFTER tool completes
@@ -640,6 +746,26 @@ export default async function strrayCodexPlugin(input) {
640
746
  logger.error(`πŸ’₯ Post-processor error`, error);
641
747
  }
642
748
  }
749
+ // Auto inference tuning: every INFERENCE_TUNE_INTERVAL tool calls,
750
+ // run a single tuning cycle to close the feedback loop.
751
+ _openCodeToolCallCount++;
752
+ if (_openCodeToolCallCount - _lastTuneToolCallCount >= INFERENCE_TUNE_INTERVAL) {
753
+ _lastTuneToolCallCount = _openCodeToolCallCount;
754
+ try {
755
+ const { inferenceTuner } = await import("../services/inference-tuner.js");
756
+ inferenceTuner
757
+ .runTuningCycle()
758
+ .then(() => {
759
+ logger.log(`πŸ”„ Inference tuning cycle completed (call #${_openCodeToolCallCount})`);
760
+ })
761
+ .catch((err) => {
762
+ logger.log(`⚠️ Inference tuning cycle skipped: ${err instanceof Error ? err.message : String(err)}`);
763
+ });
764
+ }
765
+ catch {
766
+ // Tuner not available in this environment β€” skip silently
767
+ }
768
+ }
643
769
  },
644
770
  config: async (_config) => {
645
771
  const logger = await getOrCreateLogger(directory);
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.15.18",
2
+ "version": "1.15.19",
3
3
  "lastUpdated": "2026-03-09",
4
4
  "errorPreventionTarget": 0.996,
5
5
  "terms": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./config.schema.json",
3
- "version": "1.15.18",
3
+ "version": "1.15.19",
4
4
  "description": "StringRay Framework - Token Management & Performance Configuration",
5
5
 
6
6
  "token_management": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "1.15.18",
3
+ "version": "1.15.19",
4
4
  "description": "StringRay Framework - Unified Feature Configuration",
5
5
  "token_optimization": {
6
6
  "enabled": true,
@@ -4,19 +4,19 @@
4
4
  "openclaw": {
5
5
  "enabled": false,
6
6
  "type": "external-service",
7
- "version": "1.15.18",
7
+ "version": "1.15.19",
8
8
  "config": {}
9
9
  },
10
10
  "python-bridge": {
11
11
  "enabled": false,
12
12
  "type": "protocol-bridge",
13
- "version": "1.15.18",
13
+ "version": "1.15.19",
14
14
  "config": {}
15
15
  },
16
16
  "react": {
17
17
  "enabled": false,
18
18
  "type": "framework-adapter",
19
- "version": "1.15.18",
19
+ "version": "1.15.19",
20
20
  "config": {}
21
21
  }
22
22
  }
@@ -0,0 +1,109 @@
1
+ # StringRay AI v1.15.1 – Agent Context & Universal Development Codex
2
+
3
+ **Framework Version**: 1.14.1
4
+ **Codex Version**: 1.7.5 (condensed)
5
+ **Last Updated**: 2026-03-23
6
+ **Purpose**: Systematic error prevention and production-ready AI-assisted development
7
+
8
+ ## 🎯 CRITICAL RULES – ZERO TOLERANCE (MANDATORY)
9
+
10
+ 1. **Full File Reading Before Edit**
11
+ ALWAYS read the ENTIRE file using the `read` tool before ANY edit, refactor, or write.
12
+ Understand complete structure, imports, dependencies, and context.
13
+ Partial/contextual edits are strictly forbidden.
14
+
15
+ 2. **Verify Changes Actually Applied**
16
+ After every edit/write: use `read` to confirm the exact changes are present.
17
+ Check for regressions and unintended modifications.
18
+ NEVER declare success without observable verification.
19
+
20
+ 3. **Command & Tool Output Review**
21
+ Immediately review ALL command/tool outputs.
22
+ Identify errors, warnings, or anomalies.
23
+ Add TODO for course correction if issues found.
24
+ Do not proceed until critical problems are resolved.
25
+
26
+ 4. **No False Success Claims**
27
+ Only report "completed", "edited", or "fixed" after verification steps confirm success.
28
+ Prohibited: assuming success, subjective "looks correct", skipping checks for "trivial" changes.
29
+
30
+ 5. **Surgical & Progressive Fixes**
31
+ Fix root causes minimally – no patches, stubs, or over-engineering.
32
+ All code must be production-ready from first commit.
33
+
34
+ 6. **Error & Loop Prevention**
35
+ Resolve all errors before continuing (90%+ runtime prevention target).
36
+ Every loop/async must have clear termination/timeout.
37
+
38
+ 7. **Type Safety & Immutability First**
39
+ No `any`, `@ts-ignore`. Prefer immutable patterns and early returns/guards.
40
+
41
+ 8. **DRY, YAGNI, Separation of Concerns**
42
+ No duplication. No unnecessary features. One responsibility per module/function.
43
+
44
+ 9. **Test & Performance Awareness**
45
+ >85% behavioral coverage target. Respect bundle <2MB, FCP <2s budgets.
46
+
47
+ 10. **Security & Input Validation**
48
+ Validate/sanitize all inputs. Security by design.
49
+
50
+ ## Core Codex Terms (Top 20 – Enforced)
51
+
52
+ 1. Progressive production-ready code
53
+ 2. No patches/stubs/bridge code
54
+ 3. Avoid over-engineering
55
+ 4. Fit-for-purpose prod-level code
56
+ 5. Surgical root-cause fixes
57
+ 6. Batched introspection cycles
58
+ 7. Resolve all errors (90% prevention)
59
+ 8. Prevent infinite loops/timeouts
60
+ 9. Shared global state / single source of truth
61
+ 10. Type safety first (no `any`)
62
+ 11. Early returns & guard clauses
63
+ 12. Error boundaries & graceful degradation
64
+ 13. Immutability preferred
65
+ 14. Separation of concerns
66
+ 15. DRY – eliminate duplication
67
+ 16. YAGNI – no speculative features
68
+ 17. Meaningful, self-documenting names
69
+ 18. Small, focused functions (<30 lines ideal)
70
+ 19. Consistent style (linter enforced)
71
+ 20. Test coverage >85% (behavioral focus)
72
+
73
+ ## Agent Capabilities Matrix
74
+
75
+ | Agent | Role | Complexity | Key Tools | Strategy |
76
+ |---------------------------|-----------------------------------|------------|----------------------------------------|-------------------|
77
+ | enforcer | Codex & error prevention | All | read, grep, lsp_*, bash | Block violations |
78
+ | orchestrator | Workflow coordination | Enterprise | read, grep, call_omo_agent, session_* | Consensus |
79
+ | architect | Design & decisions | High | read, grep, lsp_*, background_task | Expert priority |
80
+ | bug-triage-specialist | Error investigation & fixes | Debug | read, grep, ast_grep_* | Majority vote |
81
+ | code-reviewer | Quality & standards | Changes | read, grep, lsp_diagnostics | Expert priority |
82
+ | security-auditor | Vulnerabilities & compliance | Security | read, grep, grep_app_searchGitHub | Block critical |
83
+ | refactorer | Debt & consolidation | Refactor | read, grep, lsp_rename, ast_grep_* | Majority vote |
84
+ | testing-lead | Testing strategy & coverage | Tests | read, grep, lsp_* | Expert priority |
85
+ | storyteller | Narrative deep reflections | Narrative | read, grep, write | Expert priority |
86
+ | researcher | Codebase exploration | Research | read, grep, codesearch, websearch | Expert priority |
87
+
88
+ ## Complexity Routing Summary
89
+
90
+ Score = (filesΓ—2 + change/10 + depsΓ—3 + duration/10) Γ— operation_weight Γ— risk_mult
91
+ - Operation weights: debug 2.0, refactor 1.8, analyze 1.5, modify 1.2, others 1.0
92
+ - Risk multipliers: critical 1.6, high 1.3, medium 1.0, low 0.8
93
+ Thresholds:
94
+ - ≀15 β†’ single agent
95
+ - 16–50 β†’ multi-agent possible
96
+ - 51+ β†’ orchestrator-led
97
+
98
+ ## Operational Guidelines
99
+
100
+ - Evaluate complexity before execution
101
+ - Always verify: read full file β†’ apply change β†’ read again β†’ confirm no regressions
102
+ - Use `call_omo_agent` or `task()` for delegation
103
+ - Log JobId for traceability
104
+ - Enforce codex compliance on every operation
105
+
106
+ **Codex Enforcement**: All actions validated against these rules. Violations block progress until resolved.
107
+ **Target**: 99.6% systematic error prevention through verification-first behavior.
108
+
109
+ (End of file - total 105 lines)