strray-ai 1.15.19 β†’ 1.15.22

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 (120) 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 +135 -4
  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/routing-refiner.js +1 -1
  20. package/dist/cli/commands/analytics-status.d.ts.map +1 -1
  21. package/dist/cli/commands/analytics-status.js +4 -3
  22. package/dist/cli/commands/analytics-status.js.map +1 -1
  23. package/dist/cli/commands/antigravity-status.d.ts.map +1 -1
  24. package/dist/cli/commands/antigravity-status.js +2 -1
  25. package/dist/cli/commands/antigravity-status.js.map +1 -1
  26. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  27. package/dist/cli/commands/skill-install.js +2 -1
  28. package/dist/cli/commands/skill-install.js.map +1 -1
  29. package/dist/cli/commands/status.d.ts.map +1 -1
  30. package/dist/cli/commands/status.js +11 -7
  31. package/dist/cli/commands/status.js.map +1 -1
  32. package/dist/cli/index.js +13 -7
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/server.js +2 -1
  35. package/dist/cli/server.js.map +1 -1
  36. package/dist/core/boot-orchestrator.js +1 -1
  37. package/dist/core/config-loader.d.ts.map +1 -1
  38. package/dist/core/config-loader.js +2 -1
  39. package/dist/core/config-loader.js.map +1 -1
  40. package/dist/core/context-loader.d.ts.map +1 -1
  41. package/dist/core/context-loader.js +2 -1
  42. package/dist/core/context-loader.js.map +1 -1
  43. package/dist/core/features-config.d.ts.map +1 -1
  44. package/dist/core/features-config.js +3 -2
  45. package/dist/core/features-config.js.map +1 -1
  46. package/dist/delegation/index.d.ts +3 -0
  47. package/dist/delegation/index.d.ts.map +1 -1
  48. package/dist/delegation/index.js +3 -0
  49. package/dist/delegation/index.js.map +1 -1
  50. package/dist/mcps/architect-tools.server.js +1 -1
  51. package/dist/mcps/auto-format.server.js +1 -1
  52. package/dist/mcps/boot-orchestrator.server.d.ts.map +1 -1
  53. package/dist/mcps/boot-orchestrator.server.js +4 -3
  54. package/dist/mcps/boot-orchestrator.server.js.map +1 -1
  55. package/dist/mcps/enforcer-tools.server.js +1 -1
  56. package/dist/mcps/estimation.server.js +1 -1
  57. package/dist/mcps/framework-compliance-audit.server.js +1 -1
  58. package/dist/mcps/framework-help.server.js +1 -1
  59. package/dist/mcps/knowledge-skills/api-design.server.js +1 -1
  60. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +1 -1
  61. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +1 -1
  62. package/dist/mcps/knowledge-skills/code-analyzer.server.js +1 -1
  63. package/dist/mcps/knowledge-skills/code-review.server.js +1 -1
  64. package/dist/mcps/knowledge-skills/content-creator.server.js +1 -1
  65. package/dist/mcps/knowledge-skills/database-design.server.js +1 -1
  66. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1 -1
  67. package/dist/mcps/knowledge-skills/git-workflow.server.js +1 -1
  68. package/dist/mcps/knowledge-skills/growth-strategist.server.js +1 -1
  69. package/dist/mcps/knowledge-skills/log-monitor.server.js +1 -1
  70. package/dist/mcps/knowledge-skills/mobile-development.server.js +1 -1
  71. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1 -1
  72. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1 -1
  73. package/dist/mcps/knowledge-skills/project-analysis.server.js +1 -1
  74. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +1 -1
  75. package/dist/mcps/knowledge-skills/security-audit.server.js +1 -1
  76. package/dist/mcps/knowledge-skills/seo-consultant.server.js +1 -1
  77. package/dist/mcps/knowledge-skills/session-management.server.js +1 -1
  78. package/dist/mcps/knowledge-skills/skill-invocation.server.js +1 -1
  79. package/dist/mcps/knowledge-skills/strategist.server.js +1 -1
  80. package/dist/mcps/knowledge-skills/tech-writer.server.js +2 -2
  81. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +1 -1
  82. package/dist/mcps/knowledge-skills/testing-strategy.server.js +1 -1
  83. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1 -1
  84. package/dist/mcps/lint.server.js +1 -1
  85. package/dist/mcps/model-health-check.server.js +1 -1
  86. package/dist/mcps/performance-analysis.server.js +1 -1
  87. package/dist/mcps/processor-pipeline.server.js +1 -1
  88. package/dist/mcps/researcher.server.js +1 -1
  89. package/dist/mcps/security-scan.server.js +1 -1
  90. package/dist/mcps/state-manager.server.js +1 -1
  91. package/dist/monitoring/advanced-profiler.d.ts +1 -1
  92. package/dist/monitoring/advanced-profiler.d.ts.map +1 -1
  93. package/dist/monitoring/advanced-profiler.js +3 -2
  94. package/dist/monitoring/advanced-profiler.js.map +1 -1
  95. package/dist/orchestrator/universal-registry-bridge.js +1 -1
  96. package/dist/plugin/strray-codex-injection.d.ts.map +1 -1
  97. package/dist/plugin/strray-codex-injection.js +31 -4
  98. package/dist/plugin/strray-codex-injection.js.map +1 -1
  99. package/dist/processors/implementations/inference-improvement-processor.d.ts +1 -0
  100. package/dist/processors/implementations/inference-improvement-processor.d.ts.map +1 -1
  101. package/dist/processors/implementations/inference-improvement-processor.js +8 -2
  102. package/dist/processors/implementations/inference-improvement-processor.js.map +1 -1
  103. package/dist/public/about.html +228 -0
  104. package/dist/public/enterprise.html +27 -0
  105. package/dist/public/features.html +102 -0
  106. package/dist/public/index.html +145 -0
  107. package/dist/scripts/integration.js +29 -15
  108. package/dist/scripts/integration.js.map +1 -1
  109. package/dist/state/state-manager.d.ts +1 -1
  110. package/dist/state/state-manager.d.ts.map +1 -1
  111. package/dist/state/state-manager.js +5 -1
  112. package/dist/state/state-manager.js.map +1 -1
  113. package/dist/utils/token-manager.d.ts.map +1 -1
  114. package/dist/utils/token-manager.js +2 -1
  115. package/dist/utils/token-manager.js.map +1 -1
  116. package/package.json +4 -7
  117. package/scripts/node/prepare-consumer.cjs +36 -0
  118. package/scripts/node/universal-version-manager.js +3 -3
  119. package/.opencode/init.sh +0 -138
  120. package/.opencode/package.json +0 -19
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.15.18",
2
+ "version": "1.15.21",
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.21",
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.21",
224
224
  "terms": [
225
225
  1,
226
226
  2,
@@ -11,10 +11,35 @@
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";
15
- // Dynamic imports for config-paths (works from both dist/plugin/ and .opencode/plugins/)
14
+ // Dynamic imports for config-paths and framework-logger
15
+ // Uses candidate-based resolution to work from both dist/plugin/ and .opencode/plugins/
16
16
  let _resolveCodexPath;
17
17
  let _resolveStateDir;
18
+ let _frameworkLogger;
19
+ async function loadFrameworkLogger() {
20
+ if (_frameworkLogger)
21
+ return _frameworkLogger;
22
+ const candidates = [
23
+ "../core/framework-logger.js",
24
+ "../../dist/core/framework-logger.js",
25
+ "../../../node_modules/strray-ai/dist/core/framework-logger.js",
26
+ ];
27
+ for (const p of candidates) {
28
+ try {
29
+ const mod = await import(p);
30
+ _frameworkLogger = mod.frameworkLogger;
31
+ return _frameworkLogger;
32
+ }
33
+ catch (_) {
34
+ // try next candidate
35
+ }
36
+ }
37
+ // Fallback: no-op logger so plugin doesn't crash
38
+ _frameworkLogger = {
39
+ log: (_module, _event, _status, _data) => { },
40
+ };
41
+ return _frameworkLogger;
42
+ }
18
43
  async function loadConfigPaths() {
19
44
  if (_resolveCodexPath && _resolveStateDir)
20
45
  return;
@@ -34,7 +59,8 @@ async function loadConfigPaths() {
34
59
  // try next candidate
35
60
  }
36
61
  }
37
- frameworkLogger.log("strray-codex-plugin", "config-paths-load-failed", "warning", { warning: "Failed to load config-paths module from any location" });
62
+ const logger = await loadFrameworkLogger();
63
+ logger.log("strray-codex-plugin", "config-paths-load-failed", "warning", { warning: "Failed to load config-paths module from any location" });
38
64
  }
39
65
  /** Convenience wrapper β€” must be awaited before use */
40
66
  async function resolveCodexPath(...args) {
@@ -63,7 +89,8 @@ async function importSystemPromptGenerator() {
63
89
  // try next candidate
64
90
  }
65
91
  }
66
- frameworkLogger.log("strray-codex-plugin", "system-prompt-generator-load-failed", "warning", { warning: "Failed to load lean system prompt generator, using fallback" });
92
+ const logger = await loadFrameworkLogger();
93
+ logger.log("strray-codex-plugin", "system-prompt-generator-load-failed", "warning", { warning: "Failed to load lean system prompt generator, using fallback" });
67
94
  }
68
95
  }
69
96
  let ProcessorManager;
@@ -379,6 +406,59 @@ function formatCodexContext(contexts) {
379
406
  * This plugin hooks into experimental.chat.system.transform event
380
407
  * to inject codex terms into system prompt before it's sent to LLM.
381
408
  */
409
+ /** Inference tuning: run every N tool calls */
410
+ const INFERENCE_TUNE_INTERVAL = 100;
411
+ let _openCodeToolCallCount = 0;
412
+ let _lastTuneToolCallCount = 0;
413
+ /**
414
+ * Map tool names to agent/skill identifiers for outcome tracking.
415
+ * This lets the analytics pipeline correlate tool usage patterns
416
+ * with agent routing effectiveness.
417
+ */
418
+ const TOOL_AGENT_MAP = {
419
+ write: { agent: "code-reviewer", skill: "write" },
420
+ edit: { agent: "code-reviewer", skill: "edit" },
421
+ multiedit: { agent: "code-reviewer", skill: "multiedit" },
422
+ bash: { agent: "testing-lead", skill: "execution" },
423
+ search: { agent: "researcher", skill: "search" },
424
+ read: { agent: "researcher", skill: "read" },
425
+ glob: { agent: "researcher", skill: "glob" },
426
+ grep: { agent: "researcher", skill: "search" },
427
+ ls: { agent: "researcher", skill: "list" },
428
+ };
429
+ /**
430
+ * Classify a tool call into a meaningful task type for analytics.
431
+ * Mirrors _classify_task_type in the Hermes plugin so both plugins
432
+ * produce comparable outcome data for the inference tuner.
433
+ */
434
+ function classifyTaskType(tool, args) {
435
+ const cmd = String(args?.command ?? "").toLowerCase().trim();
436
+ if (tool === "bash" && cmd) {
437
+ if (/(npm|yarn|pnpm)\s+test|jest|vitest|mocha|pytest/.test(cmd))
438
+ return "testing";
439
+ if (/(npm|yarn|pnpm)\s+run|npx|cargo|go run|make\s/.test(cmd))
440
+ return "build";
441
+ if (/audit|security|snyk|owasp|bandit/.test(cmd))
442
+ return "security";
443
+ if (/eslint|prettier|black|ruff|lint|format/.test(cmd))
444
+ return "lint";
445
+ if (/git\s/.test(cmd))
446
+ return "git";
447
+ if (/(npm|yarn|pnpm)\s+install|pip install|cargo add/.test(cmd))
448
+ return "install";
449
+ if (/grep|rg |find |ls |cat |head |tail /.test(cmd))
450
+ return "search";
451
+ }
452
+ if (tool === "write")
453
+ return "write";
454
+ if (tool === "edit" || tool === "multiedit")
455
+ return "edit";
456
+ if (tool === "read")
457
+ return "read";
458
+ if (tool === "search" || tool === "grep" || tool === "glob")
459
+ return "search";
460
+ return "unknown";
461
+ }
382
462
  export default async function strrayCodexPlugin(input) {
383
463
  const { directory: inputDirectory } = input;
384
464
  const directory = inputDirectory || process.cwd();
@@ -575,6 +655,37 @@ export default async function strrayCodexPlugin(input) {
575
655
  const logger = await getOrCreateLogger(directory);
576
656
  await loadStrRayComponents();
577
657
  const { tool, args, result } = input;
658
+ // Record routing outcome for analytics pipeline.
659
+ // This feeds the inference tuner with real tool usage data so it
660
+ // can refine keyword mappings and improve predictive analytics.
661
+ try {
662
+ const { routingOutcomeTracker } = await import("../delegation/analytics/outcome-tracker.js");
663
+ const mapping = TOOL_AGENT_MAP[tool];
664
+ const taskType = classifyTaskType(tool, args);
665
+ const rawDesc = args?.content
666
+ ? String(args.content).slice(0, 150)
667
+ : args?.filePath
668
+ ? String(args.filePath)
669
+ : args?.command
670
+ ? String(args.command).slice(0, 150)
671
+ : tool;
672
+ const description = `[${taskType}] ${rawDesc}`;
673
+ const outcomeFields = {
674
+ taskId: `opencode-${_openCodeToolCallCount}`,
675
+ taskDescription: description,
676
+ routedAgent: mapping?.agent ?? "direct",
677
+ routedSkill: mapping?.skill ?? tool,
678
+ confidence: mapping ? 0.8 : 0.5,
679
+ success: result?.error == null,
680
+ routingMethod: mapping ? "keyword" : "default",
681
+ };
682
+ if (taskType !== "unknown")
683
+ outcomeFields.taskType = taskType;
684
+ routingOutcomeTracker.recordOutcome(outcomeFields);
685
+ }
686
+ catch {
687
+ // Outcome tracker not available β€” skip silently
688
+ }
578
689
  // Debug: log full input
579
690
  logger.log(`πŸ“₯ After hook input: ${JSON.stringify({ tool, hasArgs: !!args, args, hasResult: !!result }).slice(0, 200)}`);
580
691
  // Run post-processors for write/edit operations AFTER tool completes
@@ -640,6 +751,26 @@ export default async function strrayCodexPlugin(input) {
640
751
  logger.error(`πŸ’₯ Post-processor error`, error);
641
752
  }
642
753
  }
754
+ // Auto inference tuning: every INFERENCE_TUNE_INTERVAL tool calls,
755
+ // run a single tuning cycle to close the feedback loop.
756
+ _openCodeToolCallCount++;
757
+ if (_openCodeToolCallCount - _lastTuneToolCallCount >= INFERENCE_TUNE_INTERVAL) {
758
+ _lastTuneToolCallCount = _openCodeToolCallCount;
759
+ try {
760
+ const { inferenceTuner } = await import("../services/inference-tuner.js");
761
+ inferenceTuner
762
+ .runTuningCycle()
763
+ .then(() => {
764
+ logger.log(`πŸ”„ Inference tuning cycle completed (call #${_openCodeToolCallCount})`);
765
+ })
766
+ .catch((err) => {
767
+ logger.log(`⚠️ Inference tuning cycle skipped: ${err instanceof Error ? err.message : String(err)}`);
768
+ });
769
+ }
770
+ catch {
771
+ // Tuner not available in this environment β€” skip silently
772
+ }
773
+ }
643
774
  },
644
775
  config: async (_config) => {
645
776
  const logger = await getOrCreateLogger(directory);
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.15.18",
2
+ "version": "1.15.21",
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.21",
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.21",
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.21",
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.21",
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.21",
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)