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,115 @@
1
+ /**
2
+ * API Trigger for Post-Processor
3
+ *
4
+ * Provides a REST API endpoint to manually trigger PostProcessor
5
+ * operations. Useful for CI/CD pipelines, manual test triggers,
6
+ * and retry mechanisms.
7
+ *
8
+ * @version 2.0.0
9
+ * @since 2026-03-08
10
+ */
11
+ import express from 'express';
12
+ import { frameworkLogger } from '../../core/framework-logger.js';
13
+ export class APITrigger {
14
+ postProcessor;
15
+ initialized = false;
16
+ app;
17
+ config;
18
+ constructor(postProcessor, config) {
19
+ this.postProcessor = postProcessor;
20
+ this.config = {
21
+ enabled: true,
22
+ path: '/api/post-process',
23
+ ...config
24
+ };
25
+ this.app = express();
26
+ }
27
+ async initialize() {
28
+ if (this.initialized)
29
+ return;
30
+ // Setup API endpoints
31
+ this.setupAPIEndpoints();
32
+ this.initialized = true;
33
+ frameworkLogger.log('api-trigger', 'initialized', 'info', {
34
+ path: this.config.path,
35
+ apiKeyRequired: this.config.apiKey
36
+ });
37
+ }
38
+ setupAPIEndpoints() {
39
+ const { path: apiPath, apiKey } = this.config;
40
+ const endpointPath = apiPath || '/api/post-process';
41
+ // Rate limiting
42
+ this.app.use(express.json({ limit: '10mb' }));
43
+ // Middleware: API key authentication (if configured)
44
+ if (apiKey) {
45
+ this.app.use((req, res, next) => {
46
+ const providedKey = req.headers['x-api-key'];
47
+ if (!providedKey) {
48
+ res.status(401).json({ error: 'API key required' });
49
+ return;
50
+ }
51
+ if (providedKey !== apiKey) {
52
+ res.status(403).json({ error: 'Invalid API key' });
53
+ return;
54
+ }
55
+ next();
56
+ });
57
+ }
58
+ // POST endpoint to trigger PostProcessor
59
+ this.app.post(endpointPath, async (req, res) => {
60
+ try {
61
+ const body = req.body;
62
+ frameworkLogger.log('api-trigger', 'trigger-request', 'info', {
63
+ tool: body.tool,
64
+ operation: body.operation,
65
+ reason: body.reason
66
+ });
67
+ // Create PostProcessor context
68
+ const context = {
69
+ trigger: 'api',
70
+ tool: body.tool || 'api',
71
+ operation: body.operation || 'manual',
72
+ commitSha: '',
73
+ repository: '',
74
+ branch: '',
75
+ author: '',
76
+ files: []
77
+ };
78
+ // Trigger PostProcessor
79
+ await this.triggerPostProcessor(context);
80
+ res.json({
81
+ success: true,
82
+ message: 'PostProcessor triggered successfully',
83
+ triggeredAt: new Date().toISOString()
84
+ });
85
+ }
86
+ catch (error) {
87
+ frameworkLogger.log('api-trigger', 'trigger-error', 'error', {
88
+ error: error instanceof Error ? error.message : String(error)
89
+ });
90
+ res.status(500).json({
91
+ error: 'PostProcessor trigger failed',
92
+ message: error instanceof Error ? error.message : 'Unknown error'
93
+ });
94
+ }
95
+ });
96
+ // GET endpoint for status
97
+ this.app.get(endpointPath + '/status', (req, res) => {
98
+ res.json({
99
+ status: 'operational',
100
+ triggerType: 'api',
101
+ configured: this.config.enabled,
102
+ timestamp: new Date().toISOString()
103
+ });
104
+ });
105
+ }
106
+ async triggerPostProcessor(context) {
107
+ await this.postProcessor.executePostProcessorLoop(context);
108
+ }
109
+ getApp() {
110
+ return this.app;
111
+ }
112
+ shutdown() {
113
+ this.initialized = false;
114
+ }
115
+ }
@@ -0,0 +1,551 @@
1
+ /**
2
+ * Git Hook Trigger for Post-Processor
3
+ */
4
+ import * as fs from "fs";
5
+ import * as path from "path";
6
+ import { pipeline } from "stream/promises";
7
+ import { frameworkLogger } from "../../core/framework-logger.js";
8
+ // Re-export for backwards compatibility and external usage
9
+ export { cleanupLogFiles };
10
+ export { archiveLogFiles }; // Export for use in hooks
11
+ /**
12
+ * Archive and rotate log files to prevent unbounded growth
13
+ */
14
+ async function archiveLogFiles(config) {
15
+ const jobId = `log-archive-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
16
+ const result = {
17
+ archived: 0,
18
+ errors: [],
19
+ };
20
+ try {
21
+ const fs = await import("fs");
22
+ const path = await import("path");
23
+ const zlib = await import("zlib");
24
+ // Ensure archive directory exists
25
+ if (!fs.existsSync(config.archiveDirectory)) {
26
+ fs.mkdirSync(config.archiveDirectory, { recursive: true });
27
+ }
28
+ const activityLogPath = path.join(process.cwd(), "logs", "framework", "activity.log");
29
+ if (fs.existsSync(activityLogPath)) {
30
+ const stats = fs.statSync(activityLogPath);
31
+ const shouldArchive = stats.size > config.maxFileSizeMB * 1024 * 1024 || // Size-based
32
+ Date.now() - stats.mtime.getTime() >
33
+ config.rotationIntervalHours * 60 * 60 * 1000; // Time-based
34
+ if (shouldArchive) {
35
+ // Use full timestamp to prevent overwriting same-day archives
36
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); // YYYY-MM-DDTHH-MM-SS-mmm
37
+ const archiveName = `framework-activity-${timestamp}.log`; // Unique per run
38
+ const archivePath = path.join(process.cwd(), "logs", "framework", archiveName); // Archive in same directory
39
+ let archiveSuccess = false;
40
+ let finalArchivePath = archivePath;
41
+ try {
42
+ // Copy current log to archive
43
+ fs.copyFileSync(activityLogPath, archivePath);
44
+ // Compress if enabled
45
+ if (config.compressionEnabled) {
46
+ const compressedPath = `${archivePath}.gz`;
47
+ const gzip = zlib.createGzip();
48
+ const input = fs.createReadStream(archivePath);
49
+ const output = fs.createWriteStream(compressedPath);
50
+ // Use pipeline for proper error handling
51
+ await pipeline(input, gzip, output);
52
+ // Verify compression succeeded
53
+ if (fs.existsSync(compressedPath)) {
54
+ const compressedStats = fs.statSync(compressedPath);
55
+ if (compressedStats.size > 0) {
56
+ fs.unlinkSync(archivePath); // Remove uncompressed
57
+ archiveSuccess = true;
58
+ finalArchivePath = compressedPath;
59
+ }
60
+ }
61
+ }
62
+ else {
63
+ // Verify uncompressed archive
64
+ const archiveStats = fs.statSync(archivePath);
65
+ archiveSuccess = archiveStats.size > 0;
66
+ }
67
+ // ONLY reset if archive was created successfully
68
+ if (archiveSuccess) {
69
+ const header = `# Log rotated on ${new Date().toISOString()}\n`;
70
+ fs.writeFileSync(activityLogPath, header);
71
+ result.archived++;
72
+ }
73
+ else {
74
+ // Archive failed - don't reset the log, leave it intact
75
+ result.errors.push(`Archive creation failed for ${archivePath} - log left intact`);
76
+ await frameworkLogger.log("log-archiver", "archive-failed-log-intact", "error", {
77
+ jobId,
78
+ reason: "Archive creation failed, log not reset",
79
+ activityLogPath,
80
+ });
81
+ return result; // Exit early, log not modified
82
+ }
83
+ }
84
+ catch (archiveError) {
85
+ // Archive failed - don't reset the log, leave it intact
86
+ const errorMsg = archiveError instanceof Error ? archiveError.message : String(archiveError);
87
+ result.errors.push(`Archive failed: ${errorMsg} - log left intact`);
88
+ // Clean up partial archive if it exists
89
+ if (fs.existsSync(archivePath)) {
90
+ try {
91
+ fs.unlinkSync(archivePath);
92
+ }
93
+ catch { /* ignore cleanup error */ }
94
+ }
95
+ const compressedPath = `${archivePath}.gz`;
96
+ if (fs.existsSync(compressedPath)) {
97
+ try {
98
+ fs.unlinkSync(compressedPath);
99
+ }
100
+ catch { /* ignore cleanup error */ }
101
+ }
102
+ await frameworkLogger.log("log-archiver", "archive-error-log-intact", "error", {
103
+ jobId,
104
+ error: errorMsg,
105
+ activityLogPath,
106
+ });
107
+ return result; // Exit early, log not modified
108
+ }
109
+ await frameworkLogger.log("log-archiver", "activity-log-rotated", "success", {
110
+ jobId,
111
+ archivePath: config.compressionEnabled
112
+ ? `${archivePath}.gz`
113
+ : archivePath,
114
+ originalSize: stats.size,
115
+ rotationReason: stats.size > config.maxFileSizeMB * 1024 * 1024 ? "size" : "time",
116
+ compatibleWithReporting: true, // Uses framework-activity-*.log.gz naming
117
+ });
118
+ }
119
+ }
120
+ // Clean up old archives beyond retention period (integrate with existing cleanup)
121
+ // Note: Framework reporting system already handles cleanup of framework-activity-*.log.gz files
122
+ // This ensures compatibility and prevents double-cleanup
123
+ }
124
+ catch (error) {
125
+ const errorMsg = `Log archiving failed: ${error}`;
126
+ result.errors.push(errorMsg);
127
+ await frameworkLogger.log("log-archiver", "archiving-error", "error", {
128
+ jobId,
129
+ error: error instanceof Error ? error.message : String(error),
130
+ });
131
+ }
132
+ return result;
133
+ }
134
+ /**
135
+ * Special archiving strategy for critical historical logs
136
+ */
137
+ async function archiveCriticalHistoricalLogs() {
138
+ const jobId = `critical-archive-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
139
+ const result = {
140
+ archived: 0,
141
+ errors: [],
142
+ };
143
+ try {
144
+ const fs = await import("fs");
145
+ const path = await import("path");
146
+ const historicalDir = path.join(process.cwd(), "logs", "historical");
147
+ if (!fs.existsSync(historicalDir)) {
148
+ fs.mkdirSync(historicalDir, { recursive: true });
149
+ }
150
+ const refactoringLogPath = path.join(process.cwd(), "logs", "agents", "refactoring-log.md");
151
+ if (fs.existsSync(refactoringLogPath)) {
152
+ const stats = fs.statSync(refactoringLogPath);
153
+ const lastModified = new Date(stats.mtime);
154
+ const currentMonth = `${lastModified.getFullYear()}-${String(lastModified.getMonth() + 1).padStart(2, "0")}`;
155
+ const monthlyArchiveName = `refactoring-log-${currentMonth}.md`;
156
+ const monthlyArchivePath = path.join(historicalDir, monthlyArchiveName);
157
+ if (!fs.existsSync(monthlyArchivePath)) {
158
+ fs.copyFileSync(refactoringLogPath, monthlyArchivePath);
159
+ result.archived++;
160
+ await frameworkLogger.log("log-archiver", "refactoring-log-archived", "info", {
161
+ jobId,
162
+ archivePath: monthlyArchivePath,
163
+ size: stats.size,
164
+ snapshotMonth: currentMonth,
165
+ });
166
+ }
167
+ }
168
+ }
169
+ catch (error) {
170
+ const errorMsg = `Critical log archiving failed: ${error}`;
171
+ result.errors.push(errorMsg);
172
+ await frameworkLogger.log("log-archiver", "critical-archiving-error", "error", {
173
+ jobId,
174
+ error: error instanceof Error ? error.message : String(error),
175
+ });
176
+ }
177
+ return result;
178
+ }
179
+ async function cleanupLogFiles(config) {
180
+ const jobId = `log-cleanup-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
181
+ const result = {
182
+ cleaned: 0,
183
+ errors: [],
184
+ };
185
+ const maxAgeMs = config.maxAgeHours * 60 * 60 * 1000;
186
+ const now = Date.now();
187
+ for (const dir of config.directories) {
188
+ try {
189
+ if (!fs.existsSync(dir))
190
+ continue;
191
+ const files = fs.readdirSync(dir);
192
+ for (const file of files) {
193
+ const filePath = path.join(dir, file);
194
+ const stat = fs.statSync(filePath);
195
+ // Skip directories
196
+ if (stat.isDirectory())
197
+ continue;
198
+ // Check if file should be excluded
199
+ const shouldExclude = config.excludePatterns.some((pattern) => file.includes(pattern.replace("*", "")));
200
+ if (shouldExclude)
201
+ continue;
202
+ // Check if file is too old
203
+ const ageMs = now - stat.mtime.getTime();
204
+ if (ageMs > maxAgeMs) {
205
+ try {
206
+ fs.unlinkSync(filePath);
207
+ result.cleaned++;
208
+ await frameworkLogger.log("git-hooks", "log-file-cleaned", "info", {
209
+ jobId,
210
+ file: filePath,
211
+ age: Math.round(ageMs / (1000 * 60 * 60)), // hours
212
+ size: stat.size,
213
+ });
214
+ }
215
+ catch (error) {
216
+ const errorMsg = `Failed to clean log file ${filePath}: ${error}`;
217
+ result.errors.push(errorMsg);
218
+ await frameworkLogger.log("git-hooks", "log-cleanup-error", "error", {
219
+ jobId,
220
+ file: filePath,
221
+ error: error instanceof Error ? error.message : String(error),
222
+ });
223
+ }
224
+ }
225
+ }
226
+ }
227
+ catch (error) {
228
+ const errorMsg = `Failed to process directory ${dir}: ${error}`;
229
+ result.errors.push(errorMsg);
230
+ await frameworkLogger.log("git-hooks", "log-cleanup-directory-error", "error", {
231
+ jobId,
232
+ directory: dir,
233
+ error: error instanceof Error ? error.message : String(error),
234
+ });
235
+ }
236
+ }
237
+ return result;
238
+ }
239
+ export class GitHookTrigger {
240
+ postProcessor;
241
+ initialized = false;
242
+ constructor(postProcessor) {
243
+ this.postProcessor = postProcessor;
244
+ }
245
+ async initialize() {
246
+ if (this.initialized)
247
+ return;
248
+ const hooksDir = path.join(process.cwd(), ".opencode", "hooks");
249
+ const gitHooksDir = path.join(process.cwd(), ".git", "hooks");
250
+ const postCommitHook = path.join(hooksDir, "post-commit");
251
+ const postPushHook = path.join(hooksDir, "post-push");
252
+ // Ensure our hooks directory exists
253
+ if (!fs.existsSync(hooksDir)) {
254
+ fs.mkdirSync(hooksDir, { recursive: true });
255
+ }
256
+ // Ensure .git/hooks directory exists (should exist in git repo)
257
+ if (!fs.existsSync(gitHooksDir)) {
258
+ await frameworkLogger.log("git-hook-trigger", "git-hooks-directory-not-found", "warning", { gitHooksDir });
259
+ return;
260
+ }
261
+ // Install hooks in our directory first
262
+ this.installHook(postCommitHook, "post-commit");
263
+ this.installHook(postPushHook, "post-push");
264
+ // Create symlinks in .git/hooks to activate them
265
+ await this.activateGitHooks(gitHooksDir, postCommitHook, postPushHook);
266
+ this.initialized = true;
267
+ }
268
+ installHook(hookPath, hookType) {
269
+ const hookContent = this.generateHookScript(hookType);
270
+ // Check if hook already exists and has our content
271
+ if (fs.existsSync(hookPath)) {
272
+ const existing = fs.readFileSync(hookPath, "utf8");
273
+ if (existing.includes("postprocessor-trigger")) {
274
+ return; // Already installed
275
+ }
276
+ // Backup existing hook
277
+ fs.renameSync(hookPath, `${hookPath}.backup`);
278
+ }
279
+ fs.writeFileSync(hookPath, hookContent);
280
+ fs.chmodSync(hookPath, "755");
281
+ }
282
+ generateHookScript(hookType) {
283
+ const isPushHook = hookType === "post-push";
284
+ return `#!/bin/bash
285
+ # 0xRay Post-Processor ${hookType} Hook
286
+ # Automatically triggers post-processor after ${hookType}
287
+
288
+ # Get hook type from script name
289
+ HOOK_NAME=$(basename "$0")
290
+ COMMIT_SHA=""
291
+
292
+ if [ "$HOOK_NAME" = "post-commit" ]; then
293
+ # Light monitoring for local commits - just basic validation
294
+ COMMIT_SHA=$(git rev-parse HEAD)
295
+ MONITORING_LEVEL="basic"
296
+ elif [ "$HOOK_NAME" = "post-push" ]; then
297
+ # Full monitoring for pushes - comprehensive validation
298
+ # For push hooks, we need to parse the pushed refs from stdin
299
+ while read local_ref local_sha remote_ref remote_sha; do
300
+ if [ "$local_sha" != "0000000000000000000000000000000000000000" ]; then
301
+ COMMIT_SHA=$local_sha
302
+ break
303
+ fi
304
+ done
305
+ MONITORING_LEVEL="full"
306
+ else
307
+ COMMIT_SHA=$(git rev-parse HEAD)
308
+ MONITORING_LEVEL="basic"
309
+ fi
310
+
311
+ if [ -z "$COMMIT_SHA" ]; then
312
+ echo "Warning: Could not determine commit SHA for post-processor"
313
+ exit 0
314
+ fi
315
+
316
+ # Get repository info
317
+ REPO="strray-framework/stringray" # Placeholder for now
318
+ BRANCH=$(git rev-parse --abbrev-ref HEAD)
319
+ AUTHOR=$(git log -1 --pretty=format:'%an <%ae>')
320
+
321
+ # Get changed files (different logic for commit vs push)
322
+ if [ "$HOOK_NAME" = "post-commit" ]; then
323
+ FILES=$(git diff --name-only HEAD~1 2>/dev/null || git diff --name-only --cached)
324
+ else
325
+ FILES=$(git log --name-only --oneline -1 $COMMIT_SHA | tail -n +2)
326
+ fi
327
+
328
+ # Trigger post-processor asynchronously (don't block git operations)
329
+ (
330
+ cd "$(dirname "$0")/../.." # Navigate to project root
331
+
332
+ # Find the 0xRay plugin in node_modules or current project (development)
333
+ STRRAY_PLUGIN=""
334
+ if [ -d "node_modules/strray-framework" ]; then
335
+ STRRAY_PLUGIN="node_modules/strray-framework"
336
+ elif [ -d "node_modules/@strray/strray-framework" ]; then
337
+ STRRAY_PLUGIN="node_modules/@strray/strray-framework"
338
+ elif [ -d "node_modules/OpenCode/plugins/strray-framework" ]; then
339
+ STRRAY_PLUGIN="node_modules/OpenCode/plugins/strray-framework"
340
+ elif [ -f "dist/postprocessor/PostProcessor.js" ]; then
341
+ # Development mode - use current project
342
+ STRRAY_PLUGIN="."
343
+ fi
344
+
345
+ if command -v node >/dev/null 2>&1 && [ -n "$STRRAY_PLUGIN" ]; then
346
+ # Call a separate script to avoid bash variable issues
347
+ export COMMIT_SHA="$COMMIT_SHA"
348
+ export REPO="$REPO"
349
+ export BRANCH="$BRANCH"
350
+ export AUTHOR="$AUTHOR"
351
+ export STRRAY_PLUGIN="$STRRAY_PLUGIN"
352
+ export MONITORING_LEVEL="$MONITORING_LEVEL"
353
+ export IS_FULL_MONITORING="$([ "$MONITORING_LEVEL" = "full" ] && echo "true" || echo "false")"
354
+
355
+ # Run appropriate monitoring based on hook type
356
+ if [ "$HOOK_NAME" = "post-commit" ]; then
357
+ # LIGHT MONITORING: Quick validation, don't block git workflow
358
+ # Timeout: 2 seconds max, log metrics for monitoring
359
+ START_TIME=\$(date +%s)
360
+ timeout 2 node -e "
361
+ (async () => {
362
+ try {
363
+ // Use import resolver to avoid hardcoded dist paths
364
+ const { importResolver } = await import('./utils/import-resolver.js');
365
+ const { LightweightValidator } = await importResolver.importModule('postprocessor/validation/LightweightValidator');
366
+
367
+ const validator = new LightweightValidator();
368
+ const result = await validator.validate();
369
+
370
+ if (result.warnings.length > 0) {
371
+ await frameworkLogger.log('-git-hook-trigger', '-result-warnings-length-warning-s-found-', 'info', { message: '⚠️ ' + result.warnings.length + ' warning(s) found:' });
372
+ result.warnings.forEach(w => await frameworkLogger.log('-git-hook-trigger', '-w-', 'info', { message: ' ' + w) });
373
+ }
374
+
375
+ if (!result.passed) {
376
+ await frameworkLogger.log('-git-hook-trigger', '-result-errors-length-error-s-found-', 'error', { message: '❌ ' + result.errors.length + ' error(s) found:' });
377
+ result.errors.forEach(e => await frameworkLogger.log('-git-hook-trigger', '-e-', 'info', { message: ' ' + e) });
378
+ process.exit(1);
379
+ }
380
+
381
+ await frameworkLogger.log('-git-hook-trigger', '-post-commit-validation-passed-in-result-duration-', 'success', { message: '✅ Post-commit: Validation passed in ' + result.duration + 'ms' });
382
+ } catch (error) {
383
+ await frameworkLogger.log('git-hook-trigger', 'post-commit-validation-failed', 'error', { error: error instanceof Error ? error.message : String(error) });
384
+ process.exit(1);
385
+ }
386
+ })();
387
+ " 2>/dev/null
388
+ EXIT_CODE=\$?
389
+ END_TIME=\$(date +%s)
390
+ DURATION=\$((END_TIME - START_TIME))
391
+
392
+ # Log metrics for monitoring (convert to milliseconds)
393
+ DURATION_MS=\$((DURATION * 1000))
394
+ # LOG CLEANUP: Remove old log files after validation
395
+ # Use relative path from CWD - works in both dev and consumer
396
+ node -e "
397
+ (async () => {
398
+ try {
399
+ // Use dynamic import that works in both dev and consumer
400
+ const basePath = process.env.STRRAY_BASE_PATH || '.';
401
+ const distPath = process.env.STRRAY_DIST_PATH || 'dist';
402
+ // First archive logs (compress and rotate) before cleanup
403
+ const { archiveLogFiles } = await import(basePath + '/' + distPath + '/postprocessor/triggers/GitHookTrigger.js');
404
+ const archiveResult = await archiveLogFiles({
405
+ archiveDirectory: 'logs/framework',
406
+ maxFileSizeMB: 10, // Archive if > 10MB
407
+ rotationIntervalHours: 24, // Archive if > 24 hours old
408
+ compressionEnabled: true,
409
+ maxAgeHours: 168, // Keep archives for 7 days
410
+ directories: ['logs/framework'],
411
+ excludePatterns: []
412
+ });
413
+ if (archiveResult.archived > 0) {
414
+ await frameworkLogger.log('-git-hook-trigger', '-archived-log-files-', 'info', { message: \`📦 Archived \${archiveResult.archived} log files\` });
415
+ }
416
+
417
+ // Then cleanup old files
418
+ const { cleanupLogFiles } = await import(basePath + '/' + distPath + '/postprocessor/triggers/GitHookTrigger.js');
419
+ const result = await cleanupLogFiles({
420
+ maxAgeHours: 24,
421
+ excludePatterns: [
422
+ // Core inference/logging - NEVER DELETE
423
+ 'activity.log',
424
+ 'framework-activity-',
425
+ 'strray-plugin-',
426
+
427
+ // Analysis & reflections - Contains inference data
428
+ 'kernel-',
429
+ 'reflection-',
430
+
431
+ // Documentation & plans - Important artifacts
432
+ '.md',
433
+ 'AUTOMATED_',
434
+ 'REFACTORING-',
435
+ 'release-',
436
+
437
+ // Subdirectories with important data (but test-activity should be cleaned)
438
+ 'deployment/',
439
+ 'monitoring/',
440
+ 'reports/',
441
+ 'reflections/',
442
+
443
+ // Init logs can be cleaned but keep recent
444
+ 'strray-init-2026-01-2', // Keep Jan 20s
445
+ 'strray-init-2026-01-3', // Keep Jan 30s
446
+
447
+ // Other important files
448
+ 'current-session.log',
449
+ 'full-test-run.log',
450
+ 'kernel-codex',
451
+ 'kernel-methodology',
452
+ 'kernel-status',
453
+ 'kernel-update',
454
+ 'kernel-v2',
455
+ ],
456
+ directories: ['logs/'],
457
+ enabled: true
458
+ });
459
+ if (result.cleaned > 0) {
460
+ await frameworkLogger.log('-git-hook-trigger', '-cleaned-result-cleaned-old-log-files-', 'info', { message: '🧹 Cleaned ' + result.cleaned + ' old log files' });
461
+ }
462
+ if (result.errors.length > 0) {
463
+ await frameworkLogger.log('git-hook-trigger', 'log-cleanup-errors', 'error', { errors: result.errors });
464
+ }
465
+ } catch (error) {
466
+ await frameworkLogger.log('git-hook-trigger', 'log-cleanup-failed', 'error', { error: error instanceof Error ? error.message : String(error) });
467
+ }
468
+ })();
469
+ "
470
+
471
+ echo "HOOK_METRICS: post-commit duration=\${DURATION_MS}ms exit_code=\${EXIT_CODE}" >&2
472
+ collector.recordMetrics('post-commit', \${DURATION_MS}, \${EXIT_CODE});
473
+ " 2>/dev/null
474
+ EXIT_CODE=\$?
475
+ END_TIME=\$(date +%s)
476
+ DURATION=\$((END_TIME - START_TIME))
477
+
478
+ # Log comprehensive metrics for monitoring (convert to milliseconds)
479
+ DURATION_MS=\$((DURATION * 1000))
480
+ echo "HOOK_METRICS: post-push duration=\${DURATION_MS}ms exit_code=\${EXIT_CODE}" >&2
481
+
482
+ # Record metrics using metrics collector (direct import for reliability)
483
+ # Use environment variable for base path - works in both dev and consumer
484
+ node -e "
485
+ (async () => {
486
+ try {
487
+ const basePath = process.env.STRRAY_BASE_PATH || '.';
488
+ const distPath = process.env.STRRAY_DIST_PATH || 'dist';
489
+ const { HookMetricsCollector } = await import(basePath + '/' + distPath + '/postprocessor/validation/HookMetricsCollector.js');
490
+ const collector = new HookMetricsCollector();
491
+ collector.recordMetrics('post-push', \${DURATION_MS}, \${EXIT_CODE});
492
+ } catch (error) {
493
+ // Silently fail if metrics collection fails
494
+ }
495
+ })();
496
+ " 2>/dev/null || true
497
+
498
+ [ \$EXIT_CODE -eq 0 ] && exit 0 || exit 1
499
+ fi
500
+ else
501
+ echo "Warning: 0xRay plugin not found or Node.js not available, skipping post-processor"
502
+ fi
503
+ )
504
+
505
+ # Don't wait for background process
506
+ exit 0
507
+ `;
508
+ }
509
+ async activateGitHooks(gitHooksDir, postCommitHook, postPushHook) {
510
+ try {
511
+ // Define the target hook paths in .git/hooks
512
+ const gitPostCommitHook = path.join(gitHooksDir, "post-commit");
513
+ const gitPostPushHook = path.join(gitHooksDir, "post-push");
514
+ // Create relative symlinks from .git/hooks to our hooks
515
+ const relativePostCommit = path.relative(gitHooksDir, postCommitHook);
516
+ const relativePostPush = path.relative(gitHooksDir, postPushHook);
517
+ // Handle existing hooks by backing them up
518
+ this.backupExistingHook(gitPostCommitHook);
519
+ this.backupExistingHook(gitPostPushHook);
520
+ // Create symlinks to activate our hooks
521
+ fs.symlinkSync(relativePostCommit, gitPostCommitHook);
522
+ fs.symlinkSync(relativePostPush, gitPostPushHook);
523
+ }
524
+ catch (error) {
525
+ await frameworkLogger.log("git-hook-trigger", "git-hooks-activation-failed", "error", { error: String(error) });
526
+ await frameworkLogger.log("git-hook-trigger", "manual-activation-hint", "info", { message: "💡 To activate manually, run:" });
527
+ await frameworkLogger.log("git-hook-trigger", "manual-activation-command-1", "info", {
528
+ message: ` ln -s "../../.opencode/hooks/post-commit" ".git/hooks/post-commit"`,
529
+ });
530
+ await frameworkLogger.log("git-hook-trigger", "manual-activation-command-2", "info", {
531
+ message: ` ln -s "../../.opencode/hooks/post-push" ".git/hooks/post-push"`,
532
+ });
533
+ }
534
+ }
535
+ backupExistingHook(hookPath) {
536
+ if (fs.existsSync(hookPath)) {
537
+ const existing = fs.readFileSync(hookPath, "utf8");
538
+ if (!existing.includes("postprocessor-trigger")) {
539
+ // Backup non-postprocessor hooks
540
+ fs.renameSync(hookPath, `${hookPath}.backup`);
541
+ }
542
+ else {
543
+ // Remove our existing symlink
544
+ fs.unlinkSync(hookPath);
545
+ }
546
+ }
547
+ }
548
+ async triggerPostProcessor(context) {
549
+ await this.postProcessor.executePostProcessorLoop(context);
550
+ }
551
+ }