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.
Files changed (739) hide show
  1. package/.opencode/agents/api-design.yml +31 -0
  2. package/.opencode/agents/architect.yml +15 -0
  3. package/.opencode/agents/architecture-patterns.yml +14 -0
  4. package/.opencode/agents/auto-format.yml +14 -0
  5. package/.opencode/agents/backend-engineer.yml +12 -0
  6. package/.opencode/agents/boot-orchestrator.yml +14 -0
  7. package/.opencode/agents/bug-triage-specialist.yml +15 -0
  8. package/.opencode/agents/code-analyzer.yml +12 -0
  9. package/.opencode/agents/code-reviewer.yml +14 -0
  10. package/.opencode/agents/content-creator.yml +12 -0
  11. package/.opencode/agents/database-engineer.yml +12 -0
  12. package/.opencode/agents/devops-engineer.yml +12 -0
  13. package/.opencode/agents/framework-compliance-audit.yml +14 -0
  14. package/.opencode/agents/frontend-engineer.yml +12 -0
  15. package/.opencode/agents/frontend-ui-ux-engineer.yml +12 -0
  16. package/.opencode/agents/git-workflow.yml +15 -0
  17. package/.opencode/agents/growth-strategist.yml +12 -0
  18. package/.opencode/agents/hermes-agent.yml +12 -0
  19. package/.opencode/agents/inference-improve.yml +12 -0
  20. package/.opencode/agents/lint.yml +14 -0
  21. package/.opencode/agents/log-monitor.yml +12 -0
  22. package/.opencode/agents/mobile-developer.yml +12 -0
  23. package/.opencode/agents/model-health-check.yml +12 -0
  24. package/.opencode/agents/multimodal-looker.yml +12 -0
  25. package/.opencode/agents/performance-analysis.yml +12 -0
  26. package/.opencode/agents/performance-engineer.yml +12 -0
  27. package/.opencode/agents/performance-optimization.yml +12 -0
  28. package/.opencode/agents/processor-pipeline.yml +14 -0
  29. package/.opencode/agents/project-analysis.yml +12 -0
  30. package/.opencode/agents/refactorer.yml +12 -0
  31. package/.opencode/agents/researcher.yml +12 -0
  32. package/.opencode/agents/security-auditor.yml +12 -0
  33. package/.opencode/agents/security-scan.yml +12 -0
  34. package/.opencode/agents/seo-consultant.yml +12 -0
  35. package/.opencode/agents/session-management.yml +12 -0
  36. package/.opencode/agents/state-manager.yml +12 -0
  37. package/.opencode/agents/storyteller.yml +12 -0
  38. package/.opencode/agents/strategist.yml +12 -0
  39. package/.opencode/agents/tech-writer.yml +12 -0
  40. package/.opencode/agents/testing-best-practices.yml +12 -0
  41. package/.opencode/agents/testing-lead.yml +12 -0
  42. package/.opencode/agents/ui-ux-design.yml +12 -0
  43. package/.opencode/codex.codex +8 -0
  44. package/.opencode/commands/auto-format.md +99 -0
  45. package/.opencode/commands/auto-summary-capture.md +90 -0
  46. package/.opencode/commands/dependency-audit.md +184 -0
  47. package/.opencode/commands/enforcer-daily-scan.md +137 -0
  48. package/.opencode/commands/framework-compliance-audit.md +205 -0
  49. package/.opencode/commands/interactive-validator.md +75 -0
  50. package/.opencode/commands/job-summary-logger.md +68 -0
  51. package/.opencode/commands/lint.md +11 -0
  52. package/.opencode/commands/mode-switch.md +95 -0
  53. package/.opencode/commands/model-health-check.md +186 -0
  54. package/.opencode/commands/performance-analysis.md +144 -0
  55. package/.opencode/commands/pre-commit-introspection.md +185 -0
  56. package/.opencode/commands/pre-commit-introspection.sh +133 -0
  57. package/.opencode/commands/security-scan.md +157 -0
  58. package/.opencode/commands/sisyphus-validation.md +128 -0
  59. package/.opencode/commands/summary-logger.md +83 -0
  60. package/.opencode/enforcer-config.json +285 -0
  61. package/.opencode/hooks/hook-metrics.json +380 -0
  62. package/.opencode/hooks/post-commit +114 -0
  63. package/.opencode/hooks/post-push +34 -0
  64. package/.opencode/init.sh +151 -0
  65. package/.opencode/skills/api-design/SKILL.md +37 -0
  66. package/.opencode/skills/architect-tools/SKILL.md +37 -0
  67. package/.opencode/skills/architecture-patterns/SKILL.md +37 -0
  68. package/.opencode/skills/auto-format/SKILL.md +37 -0
  69. package/.opencode/skills/backend-engineer/SKILL.md +49 -0
  70. package/.opencode/skills/boot-orchestrator/SKILL.md +37 -0
  71. package/.opencode/skills/bug-triage/SKILL.md +43 -0
  72. package/.opencode/skills/code-analyzer/SKILL.md +45 -0
  73. package/.opencode/skills/code-review/SKILL.md +52 -0
  74. package/.opencode/skills/content-creator/SKILL.md +38 -0
  75. package/.opencode/skills/database-engineer/SKILL.md +46 -0
  76. package/.opencode/skills/devops-engineer/SKILL.md +49 -0
  77. package/.opencode/skills/enforcer/SKILL.md +37 -0
  78. package/.opencode/skills/framework-compliance-audit/SKILL.md +37 -0
  79. package/.opencode/skills/frontend-engineer/SKILL.md +49 -0
  80. package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  81. package/.opencode/skills/git-workflow/SKILL.md +37 -0
  82. package/.opencode/skills/growth-strategist/SKILL.md +48 -0
  83. package/.opencode/skills/hermes-agent/SKILL.md +212 -0
  84. package/.opencode/skills/inference-improve/SKILL.md +97 -0
  85. package/.opencode/skills/lint/SKILL.md +37 -0
  86. package/.opencode/skills/log-monitor/SKILL.md +44 -0
  87. package/.opencode/skills/mobile-developer/SKILL.md +42 -0
  88. package/.opencode/skills/model-health-check/SKILL.md +37 -0
  89. package/.opencode/skills/multimodal-looker/SKILL.md +45 -0
  90. package/.opencode/skills/orchestrator/SKILL.md +37 -0
  91. package/.opencode/skills/performance-analysis/SKILL.md +37 -0
  92. package/.opencode/skills/performance-engineer/SKILL.md +41 -0
  93. package/.opencode/skills/performance-optimization/SKILL.md +37 -0
  94. package/.opencode/skills/processor-pipeline/SKILL.md +37 -0
  95. package/.opencode/skills/project-analysis/SKILL.md +42 -0
  96. package/.opencode/skills/refactoring-strategies/SKILL.md +37 -0
  97. package/.opencode/skills/registry.json +66 -0
  98. package/.opencode/skills/researcher/SKILL.md +37 -0
  99. package/.opencode/skills/security-audit/SKILL.md +47 -0
  100. package/.opencode/skills/security-scan/SKILL.md +37 -0
  101. package/.opencode/skills/seo-consultant/SKILL.md +43 -0
  102. package/.opencode/skills/session-management/SKILL.md +36 -0
  103. package/.opencode/skills/state-manager/SKILL.md +37 -0
  104. package/.opencode/skills/storyteller/SKILL.md +130 -0
  105. package/.opencode/skills/strategist/SKILL.md +32 -0
  106. package/.opencode/skills/tech-writer/SKILL.md +37 -0
  107. package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
  108. package/.opencode/skills/testing-strategy/SKILL.md +43 -0
  109. package/.opencode/skills/ui-ux-design/SKILL.md +603 -0
  110. package/.opencode/workflows/post-deployment-audit.yml +123 -0
  111. package/AGENTS.md +110 -0
  112. package/LICENSE +21 -0
  113. package/README.md +131 -0
  114. package/dist/AGENTS.md +110 -0
  115. package/dist/CHANGELOG.md +2182 -0
  116. package/dist/LICENSE +21 -0
  117. package/dist/README.md +131 -0
  118. package/dist/agents/architect.js +56 -0
  119. package/dist/agents/backend-engineer.js +81 -0
  120. package/dist/agents/bug-triage-specialist.js +74 -0
  121. package/dist/agents/code-analyzer.js +150 -0
  122. package/dist/agents/code-reviewer.js +69 -0
  123. package/dist/agents/content-creator.js +72 -0
  124. package/dist/agents/database-engineer.js +76 -0
  125. package/dist/agents/devops-engineer.js +84 -0
  126. package/dist/agents/frontend-engineer.js +78 -0
  127. package/dist/agents/frontend-ui-ux-engineer.js +64 -0
  128. package/dist/agents/growth-strategist.js +111 -0
  129. package/dist/agents/index.js +45 -0
  130. package/dist/agents/librarian-agents-updater.js +333 -0
  131. package/dist/agents/log-monitor.js +109 -0
  132. package/dist/agents/mobile-developer.js +102 -0
  133. package/dist/agents/multimodal-looker.js +93 -0
  134. package/dist/agents/performance-engineer.js +86 -0
  135. package/dist/agents/refactorer.js +80 -0
  136. package/dist/agents/registry.js +340 -0
  137. package/dist/agents/researcher.js +83 -0
  138. package/dist/agents/security-auditor.js +158 -0
  139. package/dist/agents/seo-consultant.js +53 -0
  140. package/dist/agents/strategist.js +47 -0
  141. package/dist/agents/tech-writer.js +84 -0
  142. package/dist/agents/testing-lead.js +95 -0
  143. package/dist/agents/types.js +1 -0
  144. package/dist/analytics/consent-manager.js +258 -0
  145. package/dist/analytics/emerging-pattern-detector.js +260 -0
  146. package/dist/analytics/pattern-learning-engine.js +278 -0
  147. package/dist/analytics/pattern-performance-tracker.js +336 -0
  148. package/dist/analytics/predictive-analytics.js +248 -0
  149. package/dist/analytics/prompt-pattern-analyzer.js +371 -0
  150. package/dist/analytics/routing-performance-analyzer.js +356 -0
  151. package/dist/analytics/routing-refiner.js +380 -0
  152. package/dist/analytics/simple-pattern-analyzer.js +297 -0
  153. package/dist/architect/architect-tools.js +437 -0
  154. package/dist/architect/architectural-integrity.js +78 -0
  155. package/dist/benchmark/performance-benchmark.js +372 -0
  156. package/dist/cli/commands/analytics-disable.js +72 -0
  157. package/dist/cli/commands/analytics-enable-action.js +82 -0
  158. package/dist/cli/commands/analytics-preview.js +106 -0
  159. package/dist/cli/commands/analytics-status.js +68 -0
  160. package/dist/cli/commands/antigravity-status.js +106 -0
  161. package/dist/cli/commands/archive-logs.js +161 -0
  162. package/dist/cli/commands/credible-init.js +82 -0
  163. package/dist/cli/commands/grok-install.js +16 -0
  164. package/dist/cli/commands/hermes-install.js +66 -0
  165. package/dist/cli/commands/mcp-install.js +253 -0
  166. package/dist/cli/commands/openclaw-install.js +44 -0
  167. package/dist/cli/commands/opencode-install.js +99 -0
  168. package/dist/cli/commands/plugin-commands.js +246 -0
  169. package/dist/cli/commands/publish-agent.js +184 -0
  170. package/dist/cli/commands/security-audit.js +219 -0
  171. package/dist/cli/commands/skill-install.js +481 -0
  172. package/dist/cli/commands/status.js +196 -0
  173. package/dist/cli/commands/storyteller.js +230 -0
  174. package/dist/cli/index.js +986 -0
  175. package/dist/cli/server.js +147 -0
  176. package/dist/config/default-agents.js +16 -0
  177. package/dist/core/activity-logger.js +260 -0
  178. package/dist/core/adaptive-kernel.js +192 -0
  179. package/dist/core/agent-spawn-gate.js +120 -0
  180. package/dist/core/boot-orchestrator.js +812 -0
  181. package/dist/core/bridge.mjs +945 -0
  182. package/dist/core/codex-formatter.js +220 -0
  183. package/dist/core/codex-injector.js +424 -0
  184. package/dist/core/config-loader.js +148 -0
  185. package/dist/core/config-paths.js +162 -0
  186. package/dist/core/context-loader.js +269 -0
  187. package/dist/core/context-validator.js +212 -0
  188. package/dist/core/features-config.js +457 -0
  189. package/dist/core/framework-logger.js +275 -0
  190. package/dist/core/index.js +6 -0
  191. package/dist/core/kernel-patterns.js +302 -0
  192. package/dist/core/logging-config.js +43 -0
  193. package/dist/core/model-router.js +175 -0
  194. package/dist/core/orchestrator.js +408 -0
  195. package/dist/core/system-prompt-generator.js +265 -0
  196. package/dist/core/trace-context.js +33 -0
  197. package/dist/core/xray-activation.js +134 -0
  198. package/dist/delegation/agent-delegator.js +769 -0
  199. package/dist/delegation/agent-expertise.js +156 -0
  200. package/dist/delegation/analytics/index.js +12 -0
  201. package/dist/delegation/analytics/learning-engine.js +277 -0
  202. package/dist/delegation/analytics/outcome-tracker.js +279 -0
  203. package/dist/delegation/analytics/routing-analytics.js +193 -0
  204. package/dist/delegation/ast-code-parser.js +878 -0
  205. package/dist/delegation/codebase-context-analyzer.js +1040 -0
  206. package/dist/delegation/complexity-analyzer.js +282 -0
  207. package/dist/delegation/complexity-core.js +219 -0
  208. package/dist/delegation/config/types.js +6 -0
  209. package/dist/delegation/dependency-graph-builder.js +409 -0
  210. package/dist/delegation/index.js +20 -0
  211. package/dist/delegation/metrics-aggregator.js +335 -0
  212. package/dist/delegation/session-coordinator.js +352 -0
  213. package/dist/delegation/strategy-selector.js +108 -0
  214. package/dist/delegation/voting-coordinator.js +375 -0
  215. package/dist/delegation/voting-types.js +10 -0
  216. package/dist/delegation/weighted-voting-aggregator.js +194 -0
  217. package/dist/enforcement/core/index.js +19 -0
  218. package/dist/enforcement/core/rule-executor.js +365 -0
  219. package/dist/enforcement/core/rule-hierarchy.js +259 -0
  220. package/dist/enforcement/core/rule-registry.js +240 -0
  221. package/dist/enforcement/core/violation-fixer.js +651 -0
  222. package/dist/enforcement/enforcer-tools.js +909 -0
  223. package/dist/enforcement/index.js +41 -0
  224. package/dist/enforcement/loaders/agent-triage-loader.js +222 -0
  225. package/dist/enforcement/loaders/agents-md-validation-loader.js +252 -0
  226. package/dist/enforcement/loaders/base-loader.js +86 -0
  227. package/dist/enforcement/loaders/codex-loader.js +396 -0
  228. package/dist/enforcement/loaders/index.js +40 -0
  229. package/dist/enforcement/loaders/loader-orchestrator.js +168 -0
  230. package/dist/enforcement/loaders/processor-loader.js +113 -0
  231. package/dist/enforcement/rule-enforcer.js +298 -0
  232. package/dist/enforcement/test-auto-healing.js +325 -0
  233. package/dist/enforcement/types.js +30 -0
  234. package/dist/enforcement/validators/architecture-validators.js +600 -0
  235. package/dist/enforcement/validators/base-validator.js +108 -0
  236. package/dist/enforcement/validators/code-quality-validators.js +336 -0
  237. package/dist/enforcement/validators/index.js +21 -0
  238. package/dist/enforcement/validators/security-validators.js +220 -0
  239. package/dist/enforcement/validators/testing-validators.js +253 -0
  240. package/dist/enforcement/validators/validator-registry.js +150 -0
  241. package/dist/execution/opencode-cli-invoker.js +173 -0
  242. package/dist/execution/proposal-applier.js +254 -0
  243. package/dist/governance/codex-policy.service.js +167 -0
  244. package/dist/governance/governance-core.js +152 -0
  245. package/dist/governance/governance-service.js +274 -0
  246. package/dist/governance/governance-types.js +6 -0
  247. package/dist/index.js +24 -0
  248. package/dist/inference/deploy-verifier.js +161 -0
  249. package/dist/inference/index.js +5 -0
  250. package/dist/inference/inference-accumulator.js +126 -0
  251. package/dist/inference/inference-cycle.js +1168 -0
  252. package/dist/inference/semantic-patterns.js +310 -0
  253. package/dist/inference/session-capture.js +308 -0
  254. package/dist/integrations/base/ExampleIntegration.js +181 -0
  255. package/dist/integrations/base/Integration.js +395 -0
  256. package/dist/integrations/base/README.md +446 -0
  257. package/dist/integrations/base/index.js +16 -0
  258. package/dist/integrations/base/registry.js +606 -0
  259. package/dist/integrations/base/types.js +118 -0
  260. package/dist/integrations/governance/governance-client.js +316 -0
  261. package/dist/integrations/governance/index.js +373 -0
  262. package/dist/integrations/governance/types.js +97 -0
  263. package/dist/integrations/grok/grok-cli.js +83 -0
  264. package/dist/integrations/grok/hooks/pre-tool-use.js +134 -0
  265. package/dist/integrations/grok/plugin/0xray/.mcp.json +15 -0
  266. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
  267. package/dist/integrations/hermes-agent/__init__.py +718 -0
  268. package/dist/integrations/hermes-agent/after-install.md +71 -0
  269. package/dist/integrations/hermes-agent/bridge.mjs +861 -0
  270. package/dist/integrations/hermes-agent/conftest.py +14 -0
  271. package/dist/integrations/hermes-agent/plugin.yaml +12 -0
  272. package/dist/integrations/hermes-agent/schemas.py +100 -0
  273. package/dist/integrations/hermes-agent/test_plugin.py +1100 -0
  274. package/dist/integrations/hermes-agent/tools.py +253 -0
  275. package/dist/integrations/openclaw/README.md +134 -0
  276. package/dist/integrations/openclaw/api-server.js +389 -0
  277. package/dist/integrations/openclaw/client.js +492 -0
  278. package/dist/integrations/openclaw/config.js +374 -0
  279. package/dist/integrations/openclaw/hooks/strray-hooks.js +280 -0
  280. package/dist/integrations/openclaw/index.js +351 -0
  281. package/dist/integrations/openclaw/types.js +153 -0
  282. package/dist/integrations/plugins/index.js +10 -0
  283. package/dist/integrations/plugins/plugin-integration.js +606 -0
  284. package/dist/integrations/plugins/plugin-registry.js +580 -0
  285. package/dist/mcps/agent-resolver.js +106 -0
  286. package/dist/mcps/architect-tools.server.js +277 -0
  287. package/dist/mcps/auto-format.server.js +413 -0
  288. package/dist/mcps/boot-orchestrator.server.js +853 -0
  289. package/dist/mcps/config/config-loader.js +103 -0
  290. package/dist/mcps/config/config-validator.js +101 -0
  291. package/dist/mcps/config/index.js +30 -0
  292. package/dist/mcps/config/plugin-server-registry.js +223 -0
  293. package/dist/mcps/config/server-config-registry.js +348 -0
  294. package/dist/mcps/connection/connection-manager.js +79 -0
  295. package/dist/mcps/connection/connection-pool.js +164 -0
  296. package/dist/mcps/connection/mcp-connection.js +233 -0
  297. package/dist/mcps/connection/process-spawner.js +34 -0
  298. package/dist/mcps/enforcer-tools.server.js +778 -0
  299. package/dist/mcps/estimation.server.js +192 -0
  300. package/dist/mcps/framework-compliance-audit.server.js +500 -0
  301. package/dist/mcps/framework-help.server.js +400 -0
  302. package/dist/mcps/governance.server.js +464 -0
  303. package/dist/mcps/in-process-skill-registry.js +48 -0
  304. package/dist/mcps/knowledge-skills/api-design.server.js +123 -0
  305. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +113 -0
  306. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +474 -0
  307. package/dist/mcps/knowledge-skills/code-analyzer.server.js +605 -0
  308. package/dist/mcps/knowledge-skills/code-review.server.js +847 -0
  309. package/dist/mcps/knowledge-skills/content-creator.server.js +256 -0
  310. package/dist/mcps/knowledge-skills/database-design.server.js +822 -0
  311. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1180 -0
  312. package/dist/mcps/knowledge-skills/git-workflow.server.js +115 -0
  313. package/dist/mcps/knowledge-skills/growth-strategist.server.js +361 -0
  314. package/dist/mcps/knowledge-skills/log-monitor.server.js +451 -0
  315. package/dist/mcps/knowledge-skills/mobile-development.server.js +525 -0
  316. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1063 -0
  317. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1587 -0
  318. package/dist/mcps/knowledge-skills/project-analysis.server.js +811 -0
  319. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +796 -0
  320. package/dist/mcps/knowledge-skills/security-audit.server.js +846 -0
  321. package/dist/mcps/knowledge-skills/seo-consultant.server.js +937 -0
  322. package/dist/mcps/knowledge-skills/session-management.server.js +470 -0
  323. package/dist/mcps/knowledge-skills/skill-invocation.server.js +729 -0
  324. package/dist/mcps/knowledge-skills/strategist.server.js +217 -0
  325. package/dist/mcps/knowledge-skills/tech-writer.server.js +1191 -0
  326. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +866 -0
  327. package/dist/mcps/knowledge-skills/testing-strategy.server.js +827 -0
  328. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1538 -0
  329. package/dist/mcps/lint.server.js +381 -0
  330. package/dist/mcps/mcp-client.js +574 -0
  331. package/dist/mcps/model-health-check.server.js +228 -0
  332. package/dist/mcps/orchestrator/config/agent-capabilities.js +87 -0
  333. package/dist/mcps/orchestrator/execution/execution-planner.js +279 -0
  334. package/dist/mcps/orchestrator/handlers/complexity-handler.js +94 -0
  335. package/dist/mcps/orchestrator/handlers/status-handler.js +232 -0
  336. package/dist/mcps/orchestrator/handlers/task-handler.js +197 -0
  337. package/dist/mcps/orchestrator/server.js +305 -0
  338. package/dist/mcps/orchestrator/types.js +6 -0
  339. package/dist/mcps/orchestrator.server.js +19 -0
  340. package/dist/mcps/performance-analysis.server.js +519 -0
  341. package/dist/mcps/processor-pipeline.server.js +561 -0
  342. package/dist/mcps/protocol/protocol-constants.js +46 -0
  343. package/dist/mcps/registry.json +110 -0
  344. package/dist/mcps/researcher.server.js +504 -0
  345. package/dist/mcps/security-scan.server.js +531 -0
  346. package/dist/mcps/simulation/index.js +12 -0
  347. package/dist/mcps/simulation/server-simulations.js +219 -0
  348. package/dist/mcps/simulation/simulation-engine.js +96 -0
  349. package/dist/mcps/state-manager.server.js +637 -0
  350. package/dist/mcps/tools/index.js +14 -0
  351. package/dist/mcps/tools/tool-cache.js +112 -0
  352. package/dist/mcps/tools/tool-discovery.js +65 -0
  353. package/dist/mcps/tools/tool-executor.js +75 -0
  354. package/dist/mcps/tools/tool-registry.js +67 -0
  355. package/dist/mcps/types/index.js +15 -0
  356. package/dist/mcps/types/json-rpc.types.js +7 -0
  357. package/dist/mcps/types/mcp.types.js +7 -0
  358. package/dist/metrics/agent-metrics.js +574 -0
  359. package/dist/metrics/index.js +6 -0
  360. package/dist/monitoring/advanced-profiler.js +232 -0
  361. package/dist/monitoring/memory-monitor.js +315 -0
  362. package/dist/monitoring/nudge-watchdog.js +356 -0
  363. package/dist/monitoring/test-auto-generation-monitor.js +157 -0
  364. package/dist/orchestrator/agent-spawn-governor.js +559 -0
  365. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +399 -0
  366. package/dist/orchestrator/intelligent-commit-batcher.js +353 -0
  367. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +456 -0
  368. package/dist/orchestrator/orchestrator.js +657 -0
  369. package/dist/orchestrator/self-direction-activation.js +245 -0
  370. package/dist/orchestrator/universal-librarian-consultation.js +216 -0
  371. package/dist/orchestrator/universal-registry-bridge.js +247 -0
  372. package/dist/performance/performance-budget-enforcer.js +434 -0
  373. package/dist/performance/performance-regression-tester.js +342 -0
  374. package/dist/plugin/xray-codex-injection.js +857 -0
  375. package/dist/postprocessor/PostProcessor.js +1048 -0
  376. package/dist/postprocessor/analysis/FailureAnalysisEngine.js +245 -0
  377. package/dist/postprocessor/autofix/AutoFixEngine.js +254 -0
  378. package/dist/postprocessor/autofix/FixValidator.js +56 -0
  379. package/dist/postprocessor/config.js +65 -0
  380. package/dist/postprocessor/escalation/EscalationEngine.js +492 -0
  381. package/dist/postprocessor/monitoring/MonitoringEngine.js +125 -0
  382. package/dist/postprocessor/redeploy/RedeployCoordinator.js +342 -0
  383. package/dist/postprocessor/services/RegressionAnalysisService.js +131 -0
  384. package/dist/postprocessor/success/SuccessHandler.js +134 -0
  385. package/dist/postprocessor/triggers/APITrigger.js +115 -0
  386. package/dist/postprocessor/triggers/GitHookTrigger.js +551 -0
  387. package/dist/postprocessor/triggers/WebhookTrigger.js +211 -0
  388. package/dist/postprocessor/types.js +4 -0
  389. package/dist/processors/doc-write-guard.js +46 -0
  390. package/dist/processors/implementations/agents-md-validation-processor.js +286 -0
  391. package/dist/processors/implementations/async-pattern-processor.js +158 -0
  392. package/dist/processors/implementations/codex-compliance-processor.js +57 -0
  393. package/dist/processors/implementations/commit-batcher-processor.js +71 -0
  394. package/dist/processors/implementations/console-log-guard-processor.js +163 -0
  395. package/dist/processors/implementations/coverage-analysis-processor.js +138 -0
  396. package/dist/processors/implementations/error-boundary-processor.js +44 -0
  397. package/dist/processors/implementations/inference-improvement-processor.js +270 -0
  398. package/dist/processors/implementations/log-protection-processor.js +118 -0
  399. package/dist/processors/implementations/nudge-processor.js +130 -0
  400. package/dist/processors/implementations/performance-budget-processor.js +217 -0
  401. package/dist/processors/implementations/postprocessor-chain-validator.js +149 -0
  402. package/dist/processors/implementations/pre-validate-processor.js +18 -0
  403. package/dist/processors/implementations/publish-preflight-processor.js +249 -0
  404. package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +33 -0
  405. package/dist/processors/implementations/refactoring-logging-processor.js +96 -0
  406. package/dist/processors/implementations/regression-testing-processor.js +59 -0
  407. package/dist/processors/implementations/session-capture-processor.js +37 -0
  408. package/dist/processors/implementations/session-summary-processor.js +130 -0
  409. package/dist/processors/implementations/spawn-governance-processor.js +219 -0
  410. package/dist/processors/implementations/state-validation-processor.js +15 -0
  411. package/dist/processors/implementations/storytelling-trigger-processor.js +589 -0
  412. package/dist/processors/implementations/test-auto-creation-processor.js +484 -0
  413. package/dist/processors/implementations/test-execution-processor.js +132 -0
  414. package/dist/processors/implementations/typescript-compilation-processor.js +87 -0
  415. package/dist/processors/implementations/version-compliance-processor.js +350 -0
  416. package/dist/processors/processor-interfaces.js +126 -0
  417. package/dist/processors/processor-manager.js +826 -0
  418. package/dist/processors/processor-types.js +12 -0
  419. package/dist/public/about.html +228 -0
  420. package/dist/public/enterprise.html +27 -0
  421. package/dist/public/features.html +102 -0
  422. package/dist/public/index.html +145 -0
  423. package/dist/reporting/framework-reporting-system.js +187 -0
  424. package/dist/reporting/log-parser.js +281 -0
  425. package/dist/reporting/metrics.js +202 -0
  426. package/dist/reporting/report-formatter.js +146 -0
  427. package/dist/reporting/types.js +1 -0
  428. package/dist/scripts/activate-kernel-pipeline.js +101 -0
  429. package/dist/scripts/integration.js +234 -0
  430. package/dist/scripts/pre-command +26 -0
  431. package/dist/scripts/pre-command.mjs +358 -0
  432. package/dist/security/comprehensive-security-audit.js +1005 -0
  433. package/dist/security/index.js +13 -0
  434. package/dist/security/prompt-security-validator.js +148 -0
  435. package/dist/security/security-agent-coordinator.js +204 -0
  436. package/dist/security/security-auditor.js +584 -0
  437. package/dist/security/security-hardener.js +170 -0
  438. package/dist/security/security-hardening-system.js +727 -0
  439. package/dist/security/security-headers.js +118 -0
  440. package/dist/security/security-orchestration-layer.js +496 -0
  441. package/dist/security/security-scanner.js +429 -0
  442. package/dist/services/inference-tuner.js +301 -0
  443. package/dist/session/index.js +3 -0
  444. package/dist/session/session-cleanup-manager.js +366 -0
  445. package/dist/session/session-monitor.js +503 -0
  446. package/dist/session/session-state-manager.js +522 -0
  447. package/dist/skills/api-design/SKILL.md +37 -0
  448. package/dist/skills/architect-tools/SKILL.md +37 -0
  449. package/dist/skills/architecture-patterns/SKILL.md +37 -0
  450. package/dist/skills/auto-format/SKILL.md +37 -0
  451. package/dist/skills/backend-engineer/SKILL.md +49 -0
  452. package/dist/skills/boot-orchestrator/SKILL.md +37 -0
  453. package/dist/skills/bug-triage/SKILL.md +43 -0
  454. package/dist/skills/code-analyzer/SKILL.md +45 -0
  455. package/dist/skills/code-review/SKILL.md +52 -0
  456. package/dist/skills/content-creator/SKILL.md +38 -0
  457. package/dist/skills/database-engineer/SKILL.md +46 -0
  458. package/dist/skills/devops-engineer/SKILL.md +49 -0
  459. package/dist/skills/enforcer/SKILL.md +37 -0
  460. package/dist/skills/framework-compliance-audit/SKILL.md +37 -0
  461. package/dist/skills/frontend-engineer/SKILL.md +49 -0
  462. package/dist/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  463. package/dist/skills/git-workflow/SKILL.md +37 -0
  464. package/dist/skills/growth-strategist/SKILL.md +48 -0
  465. package/dist/skills/hermes-agent/SKILL.md +212 -0
  466. package/dist/skills/inference-improve/SKILL.md +97 -0
  467. package/dist/skills/lint/SKILL.md +37 -0
  468. package/dist/skills/log-monitor/SKILL.md +44 -0
  469. package/dist/skills/mobile-developer/SKILL.md +42 -0
  470. package/dist/skills/model-health-check/SKILL.md +37 -0
  471. package/dist/skills/multimodal-looker/SKILL.md +45 -0
  472. package/dist/skills/orchestrator/SKILL.md +37 -0
  473. package/dist/skills/performance-analysis/SKILL.md +37 -0
  474. package/dist/skills/performance-engineer/SKILL.md +41 -0
  475. package/dist/skills/performance-optimization/SKILL.md +37 -0
  476. package/dist/skills/processor-pipeline/SKILL.md +37 -0
  477. package/dist/skills/project-analysis/SKILL.md +42 -0
  478. package/dist/skills/refactoring-strategies/SKILL.md +37 -0
  479. package/dist/skills/registry.json +66 -0
  480. package/dist/skills/researcher/SKILL.md +37 -0
  481. package/dist/skills/security-audit/SKILL.md +48 -0
  482. package/dist/skills/security-scan/SKILL.md +37 -0
  483. package/dist/skills/seo-consultant/SKILL.md +43 -0
  484. package/dist/skills/session-management/SKILL.md +36 -0
  485. package/dist/skills/state-manager/SKILL.md +37 -0
  486. package/dist/skills/storyteller/SKILL.md +130 -0
  487. package/dist/skills/strategist/SKILL.md +32 -0
  488. package/dist/skills/tech-writer/SKILL.md +37 -0
  489. package/dist/skills/testing-best-practices/SKILL.md +37 -0
  490. package/dist/skills/testing-strategy/SKILL.md +43 -0
  491. package/dist/skills/ui-ux-design/SKILL.md +603 -0
  492. package/dist/state/context-providers.js +1 -0
  493. package/dist/state/index.js +7 -0
  494. package/dist/state/state-manager.js +208 -0
  495. package/dist/state/state-types.js +1 -0
  496. package/dist/testing/memory-regression-suite.js +258 -0
  497. package/dist/utils/batch-operations.js +292 -0
  498. package/dist/utils/codex-parser.js +445 -0
  499. package/dist/utils/command-runner.js +96 -0
  500. package/dist/utils/import-resolver.js +189 -0
  501. package/dist/utils/language-detector.js +383 -0
  502. package/dist/utils/path-resolver.js +112 -0
  503. package/dist/utils/shutdown-handler.js +75 -0
  504. package/dist/utils/test-template-generator.js +178 -0
  505. package/dist/utils/token-manager.js +163 -0
  506. package/dist/validation/estimation-validator.js +241 -0
  507. package/dist/validation/report-content-validator.js +218 -0
  508. package/opencode.json +153 -0
  509. package/package.json +170 -0
  510. package/scripts/helpers/resolve-config-path.cjs +57 -0
  511. package/scripts/helpers/resolve-config-path.mjs +73 -0
  512. package/scripts/hooks/pre-command +26 -0
  513. package/scripts/hooks/pre-command.mjs +358 -0
  514. package/scripts/hooks/run-hook.js +570 -0
  515. package/scripts/mjs/test-consumer-readiness.mjs +273 -0
  516. package/scripts/mjs/test-mcp-functionality.mjs +507 -0
  517. package/scripts/mjs/validate-mcp-connectivity.cjs +75 -0
  518. package/scripts/mjs/validate-postinstall-config.mjs +308 -0
  519. package/scripts/node/auto-reflection-generator.mjs +496 -0
  520. package/scripts/node/basic-security-audit.cjs +338 -0
  521. package/scripts/node/ci-cd-auto-fix.cjs +263 -0
  522. package/scripts/node/ci-report-generator.mjs +227 -0
  523. package/scripts/node/enforce-agents-md.mjs +420 -0
  524. package/scripts/node/enforce-version-compliance.sh +22 -0
  525. package/scripts/node/enforce-version-compliance.ts +126 -0
  526. package/scripts/node/github-actions-monitor.cjs +23 -0
  527. package/scripts/node/govern-reflection.mjs +160 -0
  528. package/scripts/node/postinstall.cjs +78 -0
  529. package/scripts/node/pre-publish-guard.js +267 -0
  530. package/scripts/node/prepare-consumer.cjs +143 -0
  531. package/scripts/node/reflection-processor.cjs +213 -0
  532. package/scripts/node/reflection-validate.sh +194 -0
  533. package/scripts/node/release-tweet.mjs +39 -0
  534. package/scripts/node/release.js +159 -0
  535. package/scripts/node/release.mjs +213 -0
  536. package/scripts/node/setup-dev.cjs +83 -0
  537. package/scripts/node/setup.cjs +214 -0
  538. package/scripts/node/sync-versions.mjs +140 -0
  539. package/scripts/node/universal-version-manager.js +1025 -0
  540. package/scripts/node/validate-external-processes.js +265 -0
  541. package/scripts/node/validate-mcp-connectivity.js +258 -0
  542. package/scripts/node/version-manager.mjs +524 -0
  543. package/scripts/validate-stringray-comprehensive.js +636 -0
  544. package/src/integrations/grok/plugin/0xray/.mcp.json +15 -0
  545. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
  546. package/src/mcps/agent-resolver.ts +168 -0
  547. package/src/mcps/architect-tools.server.ts +343 -0
  548. package/src/mcps/auto-format.server.ts +529 -0
  549. package/src/mcps/boot-orchestrator.server.ts +1082 -0
  550. package/src/mcps/config/__tests__/config-loader.test.ts +338 -0
  551. package/src/mcps/config/__tests__/config-validator.test.ts +646 -0
  552. package/src/mcps/config/__tests__/server-config-registry.test.ts +257 -0
  553. package/src/mcps/config/config-loader.ts +127 -0
  554. package/src/mcps/config/config-validator.ts +127 -0
  555. package/src/mcps/config/index.ts +32 -0
  556. package/src/mcps/config/plugin-server-registry.ts +335 -0
  557. package/src/mcps/config/server-config-registry.ts +395 -0
  558. package/src/mcps/connection/connection-manager.ts +91 -0
  559. package/src/mcps/connection/connection-pool.ts +216 -0
  560. package/src/mcps/connection/mcp-connection.ts +327 -0
  561. package/src/mcps/connection/process-spawner.ts +47 -0
  562. package/src/mcps/enforcer-tools.server.ts +1106 -0
  563. package/src/mcps/estimation.server.ts +229 -0
  564. package/src/mcps/framework-compliance-audit.server.ts +635 -0
  565. package/src/mcps/framework-help.server.ts +467 -0
  566. package/src/mcps/governance.server.ts +551 -0
  567. package/src/mcps/in-process-skill-registry.ts +79 -0
  568. package/src/mcps/knowledge-skills/api-design.server.test.ts +41 -0
  569. package/src/mcps/knowledge-skills/api-design.server.ts +160 -0
  570. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +152 -0
  571. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +624 -0
  572. package/src/mcps/knowledge-skills/code-analyzer.server.test.ts +129 -0
  573. package/src/mcps/knowledge-skills/code-analyzer.server.ts +591 -0
  574. package/src/mcps/knowledge-skills/code-review.server.ts +1132 -0
  575. package/src/mcps/knowledge-skills/content-creator.server.ts +300 -0
  576. package/src/mcps/knowledge-skills/database-design.server.ts +1200 -0
  577. package/src/mcps/knowledge-skills/devops-deployment.server.ts +1622 -0
  578. package/src/mcps/knowledge-skills/git-workflow.server.ts +152 -0
  579. package/src/mcps/knowledge-skills/growth-strategist.server.ts +413 -0
  580. package/src/mcps/knowledge-skills/log-monitor.server.ts +619 -0
  581. package/src/mcps/knowledge-skills/mobile-development.server.ts +672 -0
  582. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +1500 -0
  583. package/src/mcps/knowledge-skills/performance-optimization.server.ts +2065 -0
  584. package/src/mcps/knowledge-skills/project-analysis.server.ts +1111 -0
  585. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +1092 -0
  586. package/src/mcps/knowledge-skills/security-audit.server.test.ts +112 -0
  587. package/src/mcps/knowledge-skills/security-audit.server.ts +1193 -0
  588. package/src/mcps/knowledge-skills/seo-consultant.server.ts +1160 -0
  589. package/src/mcps/knowledge-skills/session-management.server.ts +576 -0
  590. package/src/mcps/knowledge-skills/skill-invocation.server.ts +941 -0
  591. package/src/mcps/knowledge-skills/strategist.server.ts +267 -0
  592. package/src/mcps/knowledge-skills/tech-writer.server.ts +1638 -0
  593. package/src/mcps/knowledge-skills/testing-best-practices.server.test.ts +136 -0
  594. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +1232 -0
  595. package/src/mcps/knowledge-skills/testing-strategy.server.test.ts +100 -0
  596. package/src/mcps/knowledge-skills/testing-strategy.server.ts +1172 -0
  597. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +2076 -0
  598. package/src/mcps/lint.server.ts +483 -0
  599. package/src/mcps/mcp-client.ts +706 -0
  600. package/src/mcps/model-health-check.server.ts +292 -0
  601. package/src/mcps/orchestrator/config/agent-capabilities.ts +108 -0
  602. package/src/mcps/orchestrator/execution/execution-planner.ts +353 -0
  603. package/src/mcps/orchestrator/handlers/complexity-handler.ts +125 -0
  604. package/src/mcps/orchestrator/handlers/status-handler.ts +295 -0
  605. package/src/mcps/orchestrator/handlers/task-handler.ts +268 -0
  606. package/src/mcps/orchestrator/server.ts +388 -0
  607. package/src/mcps/orchestrator/types.ts +81 -0
  608. package/src/mcps/orchestrator.server.ts +34 -0
  609. package/src/mcps/performance-analysis.server.ts +715 -0
  610. package/src/mcps/processor-pipeline.server.ts +778 -0
  611. package/src/mcps/protocol/protocol-constants.ts +51 -0
  612. package/src/mcps/registry.json +110 -0
  613. package/src/mcps/researcher.server.ts +595 -0
  614. package/src/mcps/security-scan.server.ts +651 -0
  615. package/src/mcps/simulation/__tests__/simulation-engine.test.ts +275 -0
  616. package/src/mcps/simulation/index.ts +23 -0
  617. package/src/mcps/simulation/server-simulations.ts +241 -0
  618. package/src/mcps/simulation/simulation-engine.ts +126 -0
  619. package/src/mcps/state-manager.server.ts +777 -0
  620. package/src/mcps/tools/__tests__/tool-cache.test.ts +205 -0
  621. package/src/mcps/tools/__tests__/tool-discovery.test.ts +189 -0
  622. package/src/mcps/tools/__tests__/tool-executor.test.ts +215 -0
  623. package/src/mcps/tools/__tests__/tool-registry.test.ts +230 -0
  624. package/src/mcps/tools/index.ts +15 -0
  625. package/src/mcps/tools/tool-cache.ts +145 -0
  626. package/src/mcps/tools/tool-discovery.ts +83 -0
  627. package/src/mcps/tools/tool-executor.ts +106 -0
  628. package/src/mcps/tools/tool-registry.ts +78 -0
  629. package/src/mcps/types/__tests__/types.test.ts +341 -0
  630. package/src/mcps/types/index.ts +17 -0
  631. package/src/mcps/types/json-rpc.types.ts +38 -0
  632. package/src/mcps/types/mcp.types.ts +115 -0
  633. package/src/opencode/agents/api-design.yml +31 -0
  634. package/src/opencode/agents/architect.yml +15 -0
  635. package/src/opencode/agents/architecture-patterns.yml +14 -0
  636. package/src/opencode/agents/auto-format.yml +14 -0
  637. package/src/opencode/agents/backend-engineer.yml +12 -0
  638. package/src/opencode/agents/boot-orchestrator.yml +14 -0
  639. package/src/opencode/agents/bug-triage-specialist.yml +15 -0
  640. package/src/opencode/agents/code-analyzer.yml +12 -0
  641. package/src/opencode/agents/code-reviewer.yml +14 -0
  642. package/src/opencode/agents/content-creator.yml +12 -0
  643. package/src/opencode/agents/database-engineer.yml +12 -0
  644. package/src/opencode/agents/devops-engineer.yml +12 -0
  645. package/src/opencode/agents/framework-compliance-audit.yml +14 -0
  646. package/src/opencode/agents/frontend-engineer.yml +12 -0
  647. package/src/opencode/agents/frontend-ui-ux-engineer.yml +12 -0
  648. package/src/opencode/agents/git-workflow.yml +15 -0
  649. package/src/opencode/agents/growth-strategist.yml +12 -0
  650. package/src/opencode/agents/hermes-agent.yml +12 -0
  651. package/src/opencode/agents/inference-improve.yml +12 -0
  652. package/src/opencode/agents/lint.yml +14 -0
  653. package/src/opencode/agents/log-monitor.yml +12 -0
  654. package/src/opencode/agents/mobile-developer.yml +12 -0
  655. package/src/opencode/agents/model-health-check.yml +12 -0
  656. package/src/opencode/agents/multimodal-looker.yml +12 -0
  657. package/src/opencode/agents/performance-analysis.yml +12 -0
  658. package/src/opencode/agents/performance-engineer.yml +12 -0
  659. package/src/opencode/agents/performance-optimization.yml +12 -0
  660. package/src/opencode/agents/processor-pipeline.yml +14 -0
  661. package/src/opencode/agents/project-analysis.yml +12 -0
  662. package/src/opencode/agents/refactorer.yml +12 -0
  663. package/src/opencode/agents/researcher.yml +12 -0
  664. package/src/opencode/agents/security-auditor.yml +12 -0
  665. package/src/opencode/agents/security-scan.yml +12 -0
  666. package/src/opencode/agents/seo-consultant.yml +12 -0
  667. package/src/opencode/agents/session-management.yml +12 -0
  668. package/src/opencode/agents/state-manager.yml +12 -0
  669. package/src/opencode/agents/storyteller.yml +12 -0
  670. package/src/opencode/agents/strategist.yml +12 -0
  671. package/src/opencode/agents/tech-writer.yml +12 -0
  672. package/src/opencode/agents/testing-best-practices.yml +12 -0
  673. package/src/opencode/agents/testing-lead.yml +12 -0
  674. package/src/opencode/agents/ui-ux-design.yml +12 -0
  675. package/src/opencode/codex.codex +8 -0
  676. package/src/opencode/commands/auto-format.md +99 -0
  677. package/src/opencode/commands/auto-summary-capture.md +90 -0
  678. package/src/opencode/commands/dependency-audit.md +184 -0
  679. package/src/opencode/commands/enforcer-daily-scan.md +137 -0
  680. package/src/opencode/commands/framework-compliance-audit.md +205 -0
  681. package/src/opencode/commands/interactive-validator.md +75 -0
  682. package/src/opencode/commands/job-summary-logger.md +68 -0
  683. package/src/opencode/commands/lint.md +11 -0
  684. package/src/opencode/commands/mode-switch.md +95 -0
  685. package/src/opencode/commands/model-health-check.md +186 -0
  686. package/src/opencode/commands/performance-analysis.md +144 -0
  687. package/src/opencode/commands/pre-commit-introspection.md +185 -0
  688. package/src/opencode/commands/pre-commit-introspection.sh +133 -0
  689. package/src/opencode/commands/security-scan.md +157 -0
  690. package/src/opencode/commands/sisyphus-validation.md +128 -0
  691. package/src/opencode/commands/summary-logger.md +83 -0
  692. package/src/opencode/enforcer-config.json +285 -0
  693. package/src/opencode/openclaw/config.json +25 -0
  694. package/src/opencode/workflows/post-deployment-audit.yml +123 -0
  695. package/src/skills/api-design/SKILL.md +37 -0
  696. package/src/skills/architect-tools/SKILL.md +37 -0
  697. package/src/skills/architecture-patterns/SKILL.md +37 -0
  698. package/src/skills/auto-format/SKILL.md +37 -0
  699. package/src/skills/backend-engineer/SKILL.md +49 -0
  700. package/src/skills/boot-orchestrator/SKILL.md +37 -0
  701. package/src/skills/bug-triage/SKILL.md +43 -0
  702. package/src/skills/code-analyzer/SKILL.md +45 -0
  703. package/src/skills/code-review/SKILL.md +52 -0
  704. package/src/skills/content-creator/SKILL.md +38 -0
  705. package/src/skills/database-engineer/SKILL.md +46 -0
  706. package/src/skills/devops-engineer/SKILL.md +49 -0
  707. package/src/skills/enforcer/SKILL.md +37 -0
  708. package/src/skills/framework-compliance-audit/SKILL.md +37 -0
  709. package/src/skills/frontend-engineer/SKILL.md +49 -0
  710. package/src/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  711. package/src/skills/git-workflow/SKILL.md +37 -0
  712. package/src/skills/growth-strategist/SKILL.md +48 -0
  713. package/src/skills/hermes-agent/SKILL.md +212 -0
  714. package/src/skills/inference-improve/SKILL.md +97 -0
  715. package/src/skills/lint/SKILL.md +37 -0
  716. package/src/skills/log-monitor/SKILL.md +44 -0
  717. package/src/skills/mobile-developer/SKILL.md +42 -0
  718. package/src/skills/model-health-check/SKILL.md +37 -0
  719. package/src/skills/multimodal-looker/SKILL.md +45 -0
  720. package/src/skills/orchestrator/SKILL.md +37 -0
  721. package/src/skills/performance-analysis/SKILL.md +37 -0
  722. package/src/skills/performance-engineer/SKILL.md +41 -0
  723. package/src/skills/performance-optimization/SKILL.md +37 -0
  724. package/src/skills/processor-pipeline/SKILL.md +37 -0
  725. package/src/skills/project-analysis/SKILL.md +42 -0
  726. package/src/skills/refactoring-strategies/SKILL.md +37 -0
  727. package/src/skills/registry.json +66 -0
  728. package/src/skills/researcher/SKILL.md +37 -0
  729. package/src/skills/security-audit/SKILL.md +48 -0
  730. package/src/skills/security-scan/SKILL.md +37 -0
  731. package/src/skills/seo-consultant/SKILL.md +43 -0
  732. package/src/skills/session-management/SKILL.md +36 -0
  733. package/src/skills/state-manager/SKILL.md +37 -0
  734. package/src/skills/storyteller/SKILL.md +130 -0
  735. package/src/skills/strategist/SKILL.md +32 -0
  736. package/src/skills/tech-writer/SKILL.md +37 -0
  737. package/src/skills/testing-best-practices/SKILL.md +37 -0
  738. package/src/skills/testing-strategy/SKILL.md +43 -0
  739. package/src/skills/ui-ux-design/SKILL.md +603 -0
@@ -0,0 +1,857 @@
1
+ /**
2
+ * Consumer runtime compat shim from prior StringRay releases (1-line min per Scope Rule; xray codex injection + XRAY_||STRRAY_ env + .strray fallbacks).
3
+ */
4
+ import * as fs from "fs";
5
+ import * as path from "path";
6
+ import { spawn } from "child_process";
7
+ // ---------------------------------------------------------------------------
8
+ // Dynamic module holders (loaded via candidate-based resolution)
9
+ // ---------------------------------------------------------------------------
10
+ let _resolveCodexPath = null;
11
+ let _resolveStateDir = null;
12
+ let _frameworkLogger = null;
13
+ let _systemPromptGenerator = null;
14
+ let _ProcessorManager = null;
15
+ let _StrRayStateManager = null;
16
+ let _featuresConfigLoader = null;
17
+ let _detectTaskType = null;
18
+ // ---------------------------------------------------------------------------
19
+ // Module loaders (candidate-based resolution for dev, dist, and consumer paths)
20
+ // ---------------------------------------------------------------------------
21
+ async function loadFrameworkLogger() {
22
+ if (_frameworkLogger)
23
+ return _frameworkLogger;
24
+ const candidates = [
25
+ "../core/framework-logger.js",
26
+ "../../node_modules/0xray/dist/core/framework-logger.js",
27
+ ];
28
+ for (const p of candidates) {
29
+ try {
30
+ const mod = await import(p);
31
+ _frameworkLogger = mod.frameworkLogger;
32
+ return _frameworkLogger;
33
+ }
34
+ catch (_) {
35
+ // try next candidate
36
+ }
37
+ }
38
+ _frameworkLogger = {
39
+ log: (_module, _event, _status, _data) => { },
40
+ };
41
+ return _frameworkLogger;
42
+ }
43
+ async function loadConfigPaths() {
44
+ if (_resolveCodexPath && _resolveStateDir)
45
+ return;
46
+ const candidates = [
47
+ "../core/config-paths.js",
48
+ "../../node_modules/0xray/dist/core/config-paths.js",
49
+ ];
50
+ for (const p of candidates) {
51
+ try {
52
+ const mod = await import(p);
53
+ _resolveCodexPath = mod.resolveCodexPath;
54
+ _resolveStateDir = mod.resolveStateDir;
55
+ return;
56
+ }
57
+ catch (_) {
58
+ // try next candidate
59
+ }
60
+ }
61
+ const logger = await loadFrameworkLogger();
62
+ logger.log("strray-codex-plugin", "config-paths-load-failed", "warning", { warning: "Failed to load config-paths module from any location" });
63
+ }
64
+ async function resolveCodexPath(root) {
65
+ await loadConfigPaths();
66
+ if (!_resolveCodexPath)
67
+ throw new Error("resolveCodexPath not available after loading");
68
+ return _resolveCodexPath(root);
69
+ }
70
+ async function resolveStateDir(root) {
71
+ await loadConfigPaths();
72
+ if (!_resolveStateDir)
73
+ throw new Error("resolveStateDir not available after loading");
74
+ return _resolveStateDir(root);
75
+ }
76
+ async function importSystemPromptGenerator() {
77
+ if (_systemPromptGenerator)
78
+ return;
79
+ const candidates = [
80
+ "../core/system-prompt-generator.js",
81
+ "../../node_modules/0xray/dist/core/system-prompt-generator.js",
82
+ ];
83
+ for (const p of candidates) {
84
+ try {
85
+ const module = await import(p);
86
+ _systemPromptGenerator = module.generateLeanSystemPrompt;
87
+ return;
88
+ }
89
+ catch (_) {
90
+ // try next candidate
91
+ }
92
+ }
93
+ const logger = await loadFrameworkLogger();
94
+ logger.log("strray-codex-plugin", "system-prompt-generator-load-failed", "warning", { warning: "Failed to load lean system prompt generator, using fallback" });
95
+ }
96
+ function validateModulePath(resolvedPath, allowedPrefix) {
97
+ const normalized = path.resolve(resolvedPath);
98
+ const allowed = path.resolve(allowedPrefix);
99
+ if (!normalized.startsWith(allowed)) {
100
+ throw new Error(`Module path validation failed: ${normalized} is outside allowed path ${allowed}`);
101
+ }
102
+ }
103
+ async function loadStringRayComponents() {
104
+ if (_ProcessorManager && _StrRayStateManager && _featuresConfigLoader)
105
+ return;
106
+ const logger = await getOrCreateLogger(process.cwd());
107
+ try {
108
+ // FIXED: Removed hardcoded ../../dist/ paths (source of dist/dist build corruption)
109
+ // Using dynamic resolution instead
110
+ const root = process.cwd();
111
+ const distPrefix = path.join(root, 'dist');
112
+ validateModulePath(`${root}/dist/processors/processor-manager.js`, distPrefix);
113
+ validateModulePath(`${root}/dist/state/state-manager.js`, distPrefix);
114
+ validateModulePath(`${root}/dist/core/features-config.js`, distPrefix);
115
+ const procModule = await import(`${root}/dist/processors/processor-manager.js`);
116
+ const stateModule = await import(`${root}/dist/state/state-manager.js`);
117
+ const featuresModule = await import(`${root}/dist/core/features-config.js`);
118
+ _ProcessorManager = procModule.ProcessorManager;
119
+ _StrRayStateManager = stateModule.StrRayStateManager;
120
+ _featuresConfigLoader = featuresModule.featuresConfigLoader;
121
+ _detectTaskType = featuresModule.detectTaskType;
122
+ logger.log(`✅ Loaded from cwd/dist/`);
123
+ return;
124
+ }
125
+ catch (e) {
126
+ const message = e instanceof Error ? e.message : String(e);
127
+ logger.log(`❌ Failed to load from cwd/dist/: ${message}`);
128
+ }
129
+ const pluginPaths = ["0xray", "strray-framework"];
130
+ for (const pluginPath of pluginPaths) {
131
+ try {
132
+ // FIXED: Avoided hardcoded /dist/ in node_modules paths to prevent build corruption
133
+ const nodeModulesPrefix = path.join(process.cwd(), 'node_modules');
134
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/processors/processor-manager.js`, nodeModulesPrefix);
135
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/state/state-manager.js`, nodeModulesPrefix);
136
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/core/features-config.js`, nodeModulesPrefix);
137
+ const pm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/processors/processor-manager.js`);
138
+ const sm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/state/state-manager.js`);
139
+ const fm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/core/features-config.js`);
140
+ _ProcessorManager = pm.ProcessorManager;
141
+ _StrRayStateManager = sm.StrRayStateManager;
142
+ _featuresConfigLoader = fm.featuresConfigLoader;
143
+ _detectTaskType = fm.detectTaskType;
144
+ logger.log(`✅ Loaded from node_modules/${pluginPath}/dist/`);
145
+ return;
146
+ }
147
+ catch (e) {
148
+ const message = e instanceof Error ? e.message : String(e);
149
+ logger.log(`❌ Failed to load from node_modules/${pluginPath}/dist/: ${message}`);
150
+ }
151
+ }
152
+ }
153
+ // ---------------------------------------------------------------------------
154
+ // Helpers
155
+ // ---------------------------------------------------------------------------
156
+ function spawnPromise(command, args, cwd) {
157
+ return new Promise((resolve, reject) => {
158
+ const child = spawn(command, args, {
159
+ cwd,
160
+ stdio: ["ignore", "inherit", "pipe"],
161
+ });
162
+ let stderr = "";
163
+ if (child.stderr) {
164
+ child.stderr.on("data", (data) => {
165
+ stderr += data.toString();
166
+ });
167
+ }
168
+ child.on("close", (code) => {
169
+ if (code === 0) {
170
+ resolve({ stdout: "", stderr });
171
+ }
172
+ else {
173
+ reject(new Error(`Process exited with code ${code}: ${stderr}`));
174
+ }
175
+ });
176
+ child.on("error", (error) => {
177
+ reject(error);
178
+ });
179
+ });
180
+ }
181
+ class PluginLogger {
182
+ logPath;
183
+ constructor(directory) {
184
+ const logsDir = path.join(directory, ".opencode", "logs");
185
+ if (!fs.existsSync(logsDir)) {
186
+ fs.mkdirSync(logsDir, { recursive: true });
187
+ }
188
+ const today = new Date().toISOString().split("T")[0];
189
+ this.logPath = path.join(logsDir, `strray-plugin-${today}.log`);
190
+ }
191
+ async logAsync(message) {
192
+ try {
193
+ const timestamp = new Date().toISOString();
194
+ const logEntry = `[${timestamp}] ${message}\n`;
195
+ await fs.promises.appendFile(this.logPath, logEntry, "utf-8");
196
+ }
197
+ catch {
198
+ // Silent fail - logging failure should not break plugin
199
+ }
200
+ }
201
+ log(message) {
202
+ void this.logAsync(message);
203
+ }
204
+ error(message, error) {
205
+ const errorDetail = error instanceof Error ? `: ${error.message}` : "";
206
+ this.log(`ERROR: ${message}${errorDetail}`);
207
+ }
208
+ }
209
+ let loggerInstance = null;
210
+ let loggerInitPromise = null;
211
+ async function getOrCreateLogger(directory) {
212
+ if (loggerInstance) {
213
+ return loggerInstance;
214
+ }
215
+ if (loggerInitPromise) {
216
+ return loggerInitPromise;
217
+ }
218
+ loggerInitPromise = (async () => {
219
+ const logger = new PluginLogger(directory);
220
+ loggerInstance = logger;
221
+ return logger;
222
+ })();
223
+ return loggerInitPromise;
224
+ }
225
+ function getFrameworkVersion() {
226
+ try {
227
+ const packageJsonPath = path.join(process.cwd(), "package.json");
228
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
229
+ return packageJson.version || "1.4.6";
230
+ }
231
+ catch {
232
+ return "1.4.6";
233
+ }
234
+ }
235
+ function getFrameworkIdentity() {
236
+ const version = getFrameworkVersion();
237
+ return `0xRay Framework v${version} - AI Orchestration
238
+
239
+ 🔧 Core: architect, code-reviewer, refactorer, testing-lead, strategist
240
+ 📚 Codex: 5 Essential Terms (99.6% Error Prevention Target)
241
+ 🎯 Goal: Progressive, production-ready development workflow
242
+
243
+ 📖 Documentation: config dir (codex, config, agents docs) — resolved via config-paths
244
+ `;
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // Enforcer quality gate
248
+ // ---------------------------------------------------------------------------
249
+ async function runEnforcerQualityGate(input, logger) {
250
+ const violations = [];
251
+ const { tool, args } = input;
252
+ try {
253
+ const { RuleEnforcer } = await import("../enforcement/rule-enforcer.js");
254
+ const ruleEnforcer = new RuleEnforcer();
255
+ const context = {
256
+ operation: tool === "write" ? "write" : tool === "edit" ? "edit" : "read",
257
+ };
258
+ if (args?.filePath) {
259
+ context.files = [args.filePath];
260
+ }
261
+ if (args?.content) {
262
+ context.newCode = args.content;
263
+ }
264
+ const report = await ruleEnforcer.validateOperation(tool, context);
265
+ const blockingViolations = [];
266
+ const allViolations = [];
267
+ if (report.errors && report.errors.length > 0) {
268
+ for (const error of report.errors) {
269
+ allViolations.push(error);
270
+ blockingViolations.push(error);
271
+ }
272
+ }
273
+ if (report.results) {
274
+ for (const result of report.results) {
275
+ if (!result.passed) {
276
+ const isBlocking = result.severity === "error" || result.severity === "blocking" || result.severity === "high";
277
+ allViolations.push(result.message);
278
+ if (isBlocking) {
279
+ blockingViolations.push(result.message);
280
+ }
281
+ }
282
+ }
283
+ }
284
+ if (allViolations.length > 0) {
285
+ logger.log(`⚠️ ENFORCER: ${allViolations.length} rule violation(s) detected`);
286
+ for (const v of allViolations.slice(0, 5)) {
287
+ logger.log(` - ${v}`);
288
+ }
289
+ if (allViolations.length > 5) {
290
+ logger.log(` ... and ${allViolations.length - 5} more`);
291
+ }
292
+ }
293
+ const passed = blockingViolations.length === 0;
294
+ violations.push(...blockingViolations);
295
+ if (!passed) {
296
+ logger.error(`🚫 Quality Gate FAILED with ${blockingViolations.length} blocking violation(s)`);
297
+ }
298
+ else {
299
+ logger.log(`✅ Quality Gate PASSED (${allViolations.length} warning(s))`);
300
+ }
301
+ return { passed, violations };
302
+ }
303
+ catch (error) {
304
+ logger.log(`Warning: RuleEnforcer unavailable, using fallback checks: ${error instanceof Error ? error.message : String(error)}`);
305
+ if (tool === "write" && args?.filePath) {
306
+ const filePath = args.filePath;
307
+ if (filePath.endsWith(".ts") &&
308
+ !filePath.includes(".test.") &&
309
+ !filePath.includes(".spec.")) {
310
+ const testPath = filePath.replace(".ts", ".test.ts");
311
+ const specPath = filePath.replace(".ts", ".spec.ts");
312
+ if (!fs.existsSync(testPath) && !fs.existsSync(specPath)) {
313
+ violations.push(`tests-required: No test file found for ${filePath}`);
314
+ }
315
+ }
316
+ }
317
+ if (args?.content) {
318
+ const errorPatterns = [/console\.log\s*\(/g, /TODO\s*:/gi, /FIXME\s*:/gi];
319
+ for (const pattern of errorPatterns) {
320
+ if (pattern.test(args.content)) {
321
+ violations.push(`resolve-all-errors: Found error pattern in code`);
322
+ break;
323
+ }
324
+ }
325
+ }
326
+ const passed = violations.length === 0;
327
+ if (!passed) {
328
+ logger.error(`🚫 Fallback Quality Gate FAILED with ${violations.length} violation(s)`);
329
+ }
330
+ else {
331
+ logger.log(`✅ Fallback Quality Gate PASSED`);
332
+ }
333
+ return { passed, violations };
334
+ }
335
+ }
336
+ let cachedCodexContexts = null;
337
+ async function getCodexFileLocations(directory) {
338
+ const root = directory || process.cwd();
339
+ const resolved = await resolveCodexPath(root);
340
+ resolved.push(path.join(root, ".opencode", "codex.codex"), path.join(root, ".strray", "agents_template.md"), path.join(root, ".opencode", "strray", "agents_template.md"), path.join(root, "AGENTS.md"));
341
+ return resolved;
342
+ }
343
+ function readFileContent(filePath) {
344
+ try {
345
+ return fs.readFileSync(filePath, "utf-8");
346
+ }
347
+ catch (error) {
348
+ const logger = new PluginLogger(process.cwd());
349
+ logger.error(`Failed to read file ${filePath}`, error);
350
+ return null;
351
+ }
352
+ }
353
+ function extractCodexMetadata(content) {
354
+ if (content.trim().startsWith("{")) {
355
+ try {
356
+ const parsed = JSON.parse(content);
357
+ const version = parsed.version || "1.6.0";
358
+ const terms = parsed.terms || {};
359
+ const termCount = Object.keys(terms).length;
360
+ return { version, termCount };
361
+ }
362
+ catch {
363
+ // Not valid JSON, try markdown format
364
+ }
365
+ }
366
+ const versionMatch = content.match(/\*\*Version\*\*:\s*(\d+\.\d+\.\d+)/);
367
+ const version = versionMatch?.[1] ?? "1.6.0";
368
+ const termMatches = content.match(/####\s*\d+\.\s/g);
369
+ const termCount = termMatches ? termMatches.length : 0;
370
+ return { version, termCount };
371
+ }
372
+ function createCodexContextEntry(filePath, content) {
373
+ const metadata = extractCodexMetadata(content);
374
+ return {
375
+ id: `strray-codex-${path.basename(filePath)}`,
376
+ source: filePath,
377
+ content,
378
+ priority: "critical",
379
+ metadata: {
380
+ version: metadata.version,
381
+ termCount: metadata.termCount,
382
+ loadedAt: new Date().toISOString(),
383
+ },
384
+ };
385
+ }
386
+ async function loadCodexContext(directory) {
387
+ if (cachedCodexContexts) {
388
+ return cachedCodexContexts;
389
+ }
390
+ const codexContexts = [];
391
+ const locations = await getCodexFileLocations(directory);
392
+ for (const fileLocation of locations) {
393
+ const fullPath = path.isAbsolute(fileLocation) ? fileLocation : path.join(directory, fileLocation);
394
+ const content = readFileContent(fullPath);
395
+ if (content && content.trim().length > 0) {
396
+ const entry = createCodexContextEntry(fullPath, content);
397
+ if (entry.metadata.termCount > 0) {
398
+ codexContexts.push(entry);
399
+ }
400
+ }
401
+ }
402
+ cachedCodexContexts = codexContexts;
403
+ if (codexContexts.length === 0) {
404
+ void getOrCreateLogger(directory).then((l) => l.error(`No valid codex files found. Checked: ${locations.join(", ")}`));
405
+ }
406
+ return codexContexts;
407
+ }
408
+ function formatCodexContext(contexts) {
409
+ if (contexts.length === 0) {
410
+ return "";
411
+ }
412
+ const parts = [];
413
+ for (const context of contexts) {
414
+ parts.push(`# 0xRay Codex Context v${context.metadata.version}`, `Source: ${context.source}`, `Terms Loaded: ${context.metadata.termCount}`, `Loaded At: ${context.metadata.loadedAt}`, "", context.content, "", "---", "");
415
+ }
416
+ return parts.join("\n");
417
+ }
418
+ // ---------------------------------------------------------------------------
419
+ // Analytics and task classification
420
+ // ---------------------------------------------------------------------------
421
+ const INFERENCE_TUNE_INTERVAL = 100;
422
+ let _openCodeToolCallCount = 0;
423
+ let _lastTuneToolCallCount = 0;
424
+ const TOOL_AGENT_MAP = {
425
+ write: { agent: "code-reviewer", skill: "write" },
426
+ edit: { agent: "code-reviewer", skill: "edit" },
427
+ multiedit: { agent: "code-reviewer", skill: "multiedit" },
428
+ bash: { agent: "testing-lead", skill: "execution" },
429
+ search: { agent: "researcher", skill: "search" },
430
+ read: { agent: "researcher", skill: "read" },
431
+ glob: { agent: "researcher", skill: "glob" },
432
+ grep: { agent: "researcher", skill: "search" },
433
+ ls: { agent: "researcher", skill: "list" },
434
+ };
435
+ function classifyTaskType(tool, args) {
436
+ const cmd = String(args?.command ?? "").toLowerCase().trim();
437
+ if (tool === "bash" && cmd) {
438
+ if (/(npm|yarn|pnpm)\s+test|jest|vitest|mocha|pytest/.test(cmd))
439
+ return "testing";
440
+ if (/(npm|yarn|pnpm)\s+run|npx|cargo|go run|make\s/.test(cmd))
441
+ return "build";
442
+ if (/audit|security|snyk|owasp|bandit/.test(cmd))
443
+ return "security";
444
+ if (/eslint|prettier|black|ruff|lint|format/.test(cmd))
445
+ return "lint";
446
+ if (/git\s/.test(cmd))
447
+ return "git";
448
+ if (/(npm|yarn|pnpm)\s+install|pip install|cargo add/.test(cmd))
449
+ return "install";
450
+ if (/grep|rg |find |ls |cat |head |tail /.test(cmd))
451
+ return "search";
452
+ }
453
+ if (tool === "write")
454
+ return "write";
455
+ if (tool === "edit" || tool === "multiedit")
456
+ return "edit";
457
+ if (tool === "read")
458
+ return "read";
459
+ if (tool === "search" || tool === "grep" || tool === "glob")
460
+ return "search";
461
+ return "unknown";
462
+ }
463
+ // ---------------------------------------------------------------------------
464
+ // Shared helpers extracted from duplicated plugin logic
465
+ // ---------------------------------------------------------------------------
466
+ function isWriteEditOperation(tool) {
467
+ return tool === "write" || tool === "edit" || tool === "multiedit";
468
+ }
469
+ function isPublishOperation(tool) {
470
+ return tool === "publish" || tool === "release" || tool === "npm-publish" || tool === "strray-release";
471
+ }
472
+ function resolveAgentName(input) {
473
+ const globalAgent = globalThis.currentAgent;
474
+ if (globalAgent?.agentType)
475
+ return globalAgent.agentType;
476
+ if (globalAgent?.type)
477
+ return globalAgent.type;
478
+ if (input?.agentType)
479
+ return input.agentType;
480
+ return "architect";
481
+ }
482
+ function registerAllProcessors(pm) {
483
+ pm.registerProcessor({ name: "preValidate", type: "pre", priority: 10, enabled: true });
484
+ pm.registerProcessor({ name: "codexCompliance", type: "pre", priority: 20, enabled: true });
485
+ pm.registerProcessor({ name: "versionCompliance", type: "pre", priority: 25, enabled: true });
486
+ pm.registerProcessor({ name: "testAutoCreation", type: "post", priority: 5, enabled: true });
487
+ pm.registerProcessor({ name: "testExecution", type: "post", priority: 10, enabled: true });
488
+ pm.registerProcessor({ name: "coverageAnalysis", type: "post", priority: 20, enabled: true });
489
+ }
490
+ function registerAfterPostProcessors(pm) {
491
+ pm.registerProcessor({ name: "testAutoCreation", type: "post", priority: 50, enabled: true });
492
+ pm.registerProcessor({ name: "testExecution", type: "post", priority: 10, enabled: true });
493
+ pm.registerProcessor({ name: "coverageAnalysis", type: "post", priority: 20, enabled: true });
494
+ }
495
+ function logPreProcessorResults(results, logger) {
496
+ logger.log(`📊 Pre-processor result: ${results.success ? "SUCCESS" : "FAILED"} (${results.results.length} processors)`);
497
+ if (!results.success) {
498
+ const failures = results.results.filter((r) => !r.success);
499
+ for (const f of failures) {
500
+ logger.error(`❌ Pre-processor ${f.processorName} failed: ${f.error}`);
501
+ }
502
+ }
503
+ else {
504
+ for (const r of results.results) {
505
+ logger.log(`✅ Pre-processor ${r.processorName}: ${r.success ? "OK" : "FAILED"}`);
506
+ }
507
+ }
508
+ }
509
+ function logPostProcessorResults(results, logger) {
510
+ const allSuccess = results.every((r) => r.success);
511
+ logger.log(`📊 Post-processor result: ${allSuccess ? "SUCCESS" : "FAILED"} (${results.length} processors)`);
512
+ for (const r of results) {
513
+ if (r.success) {
514
+ logger.log(`✅ Post-processor ${r.processorName}: OK`);
515
+ }
516
+ else {
517
+ logger.error(`❌ Post-processor ${r.processorName} failed: ${r.error}`);
518
+ }
519
+ }
520
+ }
521
+ function logTestAutoCreationResult(results, logger) {
522
+ const testAutoResult = results.find((r) => r.processorName === "testAutoCreation");
523
+ if (testAutoResult) {
524
+ const data = testAutoResult.data;
525
+ if (testAutoResult.success && data?.testCreated && data?.testFile) {
526
+ logger.log(`✅ TEST AUTO-CREATION: Created ${data.testFile}`);
527
+ }
528
+ else if (!testAutoResult.success) {
529
+ logger.log(`ℹ️ TEST AUTO-CREATION: ${testAutoResult.error ?? "skipped - no new files"}`);
530
+ }
531
+ }
532
+ }
533
+ // ---------------------------------------------------------------------------
534
+ // Main plugin function
535
+ // ---------------------------------------------------------------------------
536
+ export default async function strrayCodexPlugin(input) {
537
+ const { directory: inputDirectory } = input;
538
+ const directory = inputDirectory || process.cwd();
539
+ return {
540
+ "experimental.chat.system.transform": async (_input, output) => {
541
+ try {
542
+ await importSystemPromptGenerator();
543
+ let leanPrompt = getFrameworkIdentity();
544
+ if (_systemPromptGenerator) {
545
+ leanPrompt = await _systemPromptGenerator({
546
+ showWelcomeBanner: true,
547
+ showCodexContext: false,
548
+ enableTokenOptimization: true,
549
+ maxTokenBudget: 8192,
550
+ showCriticalTermsOnly: true,
551
+ showEssentialLinks: true,
552
+ });
553
+ }
554
+ if (output.system && Array.isArray(output.system)) {
555
+ output.system = [leanPrompt];
556
+ }
557
+ }
558
+ catch (error) {
559
+ const logger = await getOrCreateLogger(directory);
560
+ logger.error("System prompt injection failed:", error);
561
+ const fallback = getFrameworkIdentity();
562
+ if (output.system && Array.isArray(output.system)) {
563
+ output.system = [fallback];
564
+ }
565
+ }
566
+ },
567
+ "tool.execute.before": async (input, output) => {
568
+ const logger = await getOrCreateLogger(directory);
569
+ logger.log(`🚀 TOOL EXECUTE BEFORE HOOK FIRED: ${input.tool}`);
570
+ logger.log(`📥 Full input: ${JSON.stringify(input)}`);
571
+ await loadStringRayComponents();
572
+ if (_featuresConfigLoader && _detectTaskType) {
573
+ try {
574
+ const config = _featuresConfigLoader.loadConfig();
575
+ if (config.model_routing?.enabled) {
576
+ const taskType = _detectTaskType(input.tool);
577
+ const routing = taskType !== "unknown"
578
+ ? config.model_routing.task_routing?.[taskType]
579
+ : undefined;
580
+ if (routing?.model) {
581
+ output.model = routing.model;
582
+ logger.log(`Model routed: ${input.tool} → ${taskType} → ${routing.model}`);
583
+ }
584
+ }
585
+ }
586
+ catch (e) {
587
+ logger.error("Model routing error", e);
588
+ }
589
+ }
590
+ const { tool, args } = input;
591
+ const qualityGateResult = await runEnforcerQualityGate(input, logger);
592
+ if (!qualityGateResult.passed) {
593
+ logger.error(`🚫 Quality gate failed: ${qualityGateResult.violations.join(", ")}`);
594
+ throw new Error(`ENFORCER BLOCKED: ${qualityGateResult.violations.join("; ")}`);
595
+ }
596
+ logger.log(`✅ Quality gate passed for ${tool}`);
597
+ if (isWriteEditOperation(tool)) {
598
+ if (!_ProcessorManager || !_StrRayStateManager) {
599
+ logger.error("ProcessorManager or StrRayStateManager not loaded");
600
+ return;
601
+ }
602
+ let stateManager;
603
+ let processorManager;
604
+ const globalState = globalThis.strRayStateManager;
605
+ if (globalState) {
606
+ logger.log("🔗 Connecting to booted 0xRay framework");
607
+ stateManager = globalState;
608
+ }
609
+ else {
610
+ logger.log("🚀 0xRay framework not booted, initializing...");
611
+ stateManager = new _StrRayStateManager(await resolveStateDir(directory));
612
+ globalThis.strRayStateManager = stateManager;
613
+ }
614
+ processorManager = stateManager.get("processor:manager") ?? null;
615
+ if (!processorManager) {
616
+ logger.log("⚙️ Creating and registering processors...");
617
+ processorManager = new _ProcessorManager(stateManager);
618
+ registerAllProcessors(processorManager);
619
+ stateManager.set("processor:manager", processorManager);
620
+ logger.log("✅ Processors registered successfully");
621
+ }
622
+ else {
623
+ logger.log("✅ Using existing processor manager");
624
+ }
625
+ try {
626
+ logger.log(`▶️ Executing pre-processors for ${tool}...`);
627
+ const preProcessorInput = {
628
+ tool,
629
+ args: args,
630
+ context: {
631
+ directory,
632
+ operation: "tool_execution",
633
+ filePath: args?.filePath,
634
+ },
635
+ };
636
+ const result = await processorManager.executePreProcessors(preProcessorInput);
637
+ logPreProcessorResults(result, logger);
638
+ }
639
+ catch (error) {
640
+ logger.error(`💥 Pre-processor execution error`, error);
641
+ }
642
+ try {
643
+ logger.log(`▶️ Executing post-processors for ${tool}...`);
644
+ logger.log(`📝 Post-processor args: ${JSON.stringify(args)}`);
645
+ const agentName = resolveAgentName(input);
646
+ const postProcessorContext = {
647
+ directory,
648
+ operation: tool,
649
+ filePath: args?.filePath,
650
+ success: true,
651
+ agentName,
652
+ metadata: {
653
+ isPublishing: isPublishOperation(tool),
654
+ hook: "tool_execution",
655
+ toolName: tool,
656
+ timestamp: Date.now(),
657
+ agentType: agentName,
658
+ },
659
+ };
660
+ const postResults = await processorManager.executePostProcessors(tool, postProcessorContext, []);
661
+ logPostProcessorResults(postResults, logger);
662
+ }
663
+ catch (error) {
664
+ logger.error(`💥 Post-processor execution error`, error);
665
+ }
666
+ }
667
+ },
668
+ "tool.execute.after": async (input, _output) => {
669
+ const logger = await getOrCreateLogger(directory);
670
+ await loadStringRayComponents();
671
+ const { tool, args, result } = input;
672
+ try {
673
+ const { routingOutcomeTracker } = await import("../delegation/analytics/outcome-tracker.js");
674
+ const mapping = TOOL_AGENT_MAP[tool];
675
+ const taskType = classifyTaskType(tool, args);
676
+ const rawDesc = args?.content
677
+ ? String(args.content).slice(0, 150)
678
+ : args?.filePath
679
+ ? String(args.filePath)
680
+ : args?.command
681
+ ? String(args.command).slice(0, 150)
682
+ : tool;
683
+ const description = `[${taskType}] ${rawDesc}`;
684
+ const outcomeFields = {
685
+ taskId: `opencode-${_openCodeToolCallCount}`,
686
+ taskDescription: description,
687
+ routedAgent: mapping?.agent ?? "direct",
688
+ routedSkill: mapping?.skill ?? tool,
689
+ confidence: mapping ? 0.8 : 0.5,
690
+ success: result?.error == null,
691
+ routingMethod: mapping ? "keyword" : "default",
692
+ };
693
+ if (taskType !== "unknown")
694
+ outcomeFields.taskType = taskType;
695
+ routingOutcomeTracker.recordOutcome(outcomeFields);
696
+ }
697
+ catch {
698
+ // Outcome tracker not available — skip silently
699
+ }
700
+ logger.log(`📥 After hook input: ${JSON.stringify({ tool, hasArgs: !!args, args, hasResult: !!result }).slice(0, 200)}`);
701
+ if (isWriteEditOperation(tool)) {
702
+ if (!_ProcessorManager || !_StrRayStateManager)
703
+ return;
704
+ const stateManager = new _StrRayStateManager(await resolveStateDir(directory));
705
+ const processorManager = new _ProcessorManager(stateManager);
706
+ registerAfterPostProcessors(processorManager);
707
+ try {
708
+ logger.log(`📝 Post-processor tool: ${tool}`);
709
+ logger.log(`📝 Post-processor args: ${JSON.stringify(args)}`);
710
+ logger.log(`📝 Post-processor directory: ${directory}`);
711
+ const postProcessorContext = {
712
+ directory,
713
+ operation: tool,
714
+ filePath: args?.filePath,
715
+ success: result?.success !== false,
716
+ metadata: {
717
+ isPublishing: isPublishOperation(tool),
718
+ hook: "tool_execution",
719
+ toolName: tool,
720
+ timestamp: Date.now(),
721
+ },
722
+ };
723
+ const postResults = await processorManager.executePostProcessors(tool, postProcessorContext, []);
724
+ logPostProcessorResults(postResults, logger);
725
+ logTestAutoCreationResult(postResults, logger);
726
+ }
727
+ catch (error) {
728
+ logger.error(`💥 Post-processor error`, error);
729
+ }
730
+ }
731
+ _openCodeToolCallCount++;
732
+ if (_openCodeToolCallCount - _lastTuneToolCallCount >= INFERENCE_TUNE_INTERVAL) {
733
+ _lastTuneToolCallCount = _openCodeToolCallCount;
734
+ try {
735
+ const { inferenceTuner } = await import("../services/inference-tuner.js");
736
+ inferenceTuner
737
+ .runTuningCycle()
738
+ .then(() => {
739
+ logger.log(`🔄 Inference tuning cycle completed (call #${_openCodeToolCallCount})`);
740
+ })
741
+ .catch((err) => {
742
+ logger.log(`⚠️ Inference tuning cycle skipped: ${err instanceof Error ? err.message : String(err)}`);
743
+ });
744
+ }
745
+ catch {
746
+ // Tuner not available in this environment — skip silently
747
+ }
748
+ // DISABLED: Auto governance proposal voting causes runaway token consumption
749
+ // See bug fix: inference cycle auto-trigger disabled to prevent recursive
750
+ // opencode process spawning via invokeViaOpencode() → architect → task subagents
751
+ //
752
+ // try {
753
+ // const { InferenceCycle } = await import(
754
+ // "../inference/inference-cycle.js"
755
+ // );
756
+ // const cycle = new InferenceCycle(directory);
757
+ // cycle.maybeRunCycle()...
758
+ // } catch {}
759
+ }
760
+ },
761
+ "chat.message": async (input, output) => {
762
+ const logger = await getOrCreateLogger(directory);
763
+ if (!output.parts) {
764
+ return;
765
+ }
766
+ const textContent = input.parts?.find(p => p.type === "text")?.text ?? "";
767
+ if (!textContent) {
768
+ return;
769
+ }
770
+ const agentMentionRegex = /@(\w+)(?:\s+(.+?))?(?=$|\n\n|\r\r)/g;
771
+ let match;
772
+ let hasAgentMention = false;
773
+ let transformedText = textContent;
774
+ const knownAgents = {
775
+ "architect": "architect",
776
+ "strategist": "strategist",
777
+ "testing-lead": "testing-lead",
778
+ "bug-triage-specialist": "bug-triage-specialist",
779
+ "code-reviewer": "code-reviewer",
780
+ "security-auditor": "security-auditor",
781
+ "refactorer": "refactorer",
782
+ "researcher": "researcher",
783
+ "code-analyzer": "code-analyzer",
784
+ "frontend-engineer": "frontend-engineer",
785
+ "frontend-ui-ux-engineer": "frontend-ui-ux-engineer",
786
+ "backend-engineer": "backend-engineer",
787
+ "database-engineer": "database-engineer",
788
+ "devops-engineer": "devops-engineer",
789
+ "performance-engineer": "performance-engineer",
790
+ "mobile-developer": "mobile-developer",
791
+ "content-creator": "content-creator",
792
+ "growth-strategist": "growth-strategist",
793
+ "seo-consultant": "seo-consultant",
794
+ "tech-writer": "tech-writer",
795
+ "multimodal-looker": "multimodal-looker",
796
+ "log-monitor": "log-monitor",
797
+ };
798
+ while ((match = agentMentionRegex.exec(textContent)) !== null) {
799
+ const agentName = match[1].toLowerCase().replace(/-/g, "");
800
+ const taskPart = match[2]?.trim() ?? "";
801
+ if (knownAgents[agentName]) {
802
+ hasAgentMention = true;
803
+ const canonicalAgent = knownAgents[agentName];
804
+ logger.log(`🎯 Agent mention detected: @${canonicalAgent}`);
805
+ const prefix = `\n[DELEGATE TO AGENT: ${canonicalAgent}]\n`;
806
+ transformedText = prefix + (taskPart || textContent.replace(`@${match[1]}`, "").trim());
807
+ break;
808
+ }
809
+ }
810
+ if (hasAgentMention) {
811
+ const textPart = output.parts.find(p => p.type === "text");
812
+ if (textPart) {
813
+ textPart.text = transformedText;
814
+ logger.log(`✅ Transformed prompt for agent routing`);
815
+ }
816
+ }
817
+ },
818
+ config: async (_config) => {
819
+ const lockFile = path.join(directory, ".opencode", "logs", ".strray-init.lock");
820
+ const now = Date.now();
821
+ try {
822
+ if (fs.existsSync(lockFile)) {
823
+ const stat = fs.statSync(lockFile);
824
+ if (now - stat.mtimeMs < 15000) {
825
+ return;
826
+ }
827
+ }
828
+ fs.writeFileSync(lockFile, String(now));
829
+ }
830
+ catch {
831
+ // lock check failed — proceed anyway
832
+ }
833
+ const logger = await getOrCreateLogger(directory);
834
+ logger.log("🔧 Plugin config hook triggered - initializing 0xRay integration");
835
+ let initScriptPath = path.join(directory, ".opencode", "init.sh");
836
+ const pkgInitPath = path.join(directory, "node_modules", "0xray", ".opencode", "init.sh");
837
+ if (!fs.existsSync(initScriptPath) && fs.existsSync(pkgInitPath)) {
838
+ initScriptPath = pkgInitPath;
839
+ }
840
+ if (fs.existsSync(initScriptPath)) {
841
+ try {
842
+ const { stderr } = await spawnPromise("bash", [initScriptPath], directory);
843
+ if (stderr) {
844
+ logger.error(`Framework init error: ${stderr}`);
845
+ }
846
+ else {
847
+ logger.log("✅ 0xRay Framework initialized successfully");
848
+ }
849
+ }
850
+ catch (error) {
851
+ logger.error("Framework initialization failed", error);
852
+ }
853
+ }
854
+ logger.log("✅ Plugin config hook completed");
855
+ },
856
+ };
857
+ }