contextos-agents 1.6.1 → 2.0.0-beta.2

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 (323) hide show
  1. package/.agents/AGENTS.md +6 -1
  2. package/.agents/adapters/aider/export.js +117 -97
  3. package/.agents/adapters/claude/export.js +68 -26
  4. package/.agents/adapters/copilot/export.js +90 -51
  5. package/.agents/adapters/cursor/export.js +83 -68
  6. package/.agents/adapters/drift-detector.js +196 -0
  7. package/.agents/adapters/gemini/export.js +76 -45
  8. package/.agents/adapters/pure-compiler.js +443 -0
  9. package/.agents/adapters/zed/export.js +109 -62
  10. package/.agents/compiled/registry.v2.json +504 -0
  11. package/.agents/compiled/registry.v2.sha256 +1 -0
  12. package/.agents/compiler/manifest-compiler.js +963 -0
  13. package/.agents/compiler/vendor/yaml.LICENSE.txt +13 -0
  14. package/.agents/compiler/vendor/yaml.SBOM.json +6 -0
  15. package/.agents/compiler/vendor/yaml.js +139 -0
  16. package/.agents/core/profiles/init.yaml +25 -0
  17. package/.agents/core/skills/context-manager/references/context-rules.md +59 -0
  18. package/.agents/core/skills/context-manager/skill.yaml +10 -5
  19. package/.agents/core/skills/context-os/SKILL.md +3 -6
  20. package/.agents/core/skills/context-os/skill.yaml +14 -8
  21. package/.agents/core/skills/engineering-workflow/SKILL.md +1 -1
  22. package/.agents/core/skills/engineering-workflow/skill.yaml +7 -7
  23. package/.agents/core/skills/gemini-precision/SKILL.md +4 -0
  24. package/.agents/core/skills/gemini-precision/skill.yaml +5 -6
  25. package/.agents/core/skills/gstack-roles/SKILL.md +3 -1
  26. package/.agents/core/skills/gstack-roles/skill.yaml +9 -6
  27. package/.agents/core/skills/ponytail-mindset/skill.yaml +7 -7
  28. package/.agents/core/skills/security/skill.yaml +21 -2
  29. package/.agents/ctx.js +587 -111
  30. package/.agents/customization-dx.js +282 -0
  31. package/.agents/doctor.js +877 -33
  32. package/.agents/filesystem/index.js +71 -0
  33. package/.agents/filesystem/journaled-transaction.js +451 -0
  34. package/.agents/filesystem/lockfile-v2.js +275 -0
  35. package/.agents/filesystem/platform-hardening.js +222 -0
  36. package/.agents/filesystem/project-lock.js +218 -0
  37. package/.agents/filesystem/safe-path.js +256 -0
  38. package/.agents/generated/claude/skills/context-os/SKILL.md +1 -1
  39. package/.agents/generated/claude/skills/engineering-workflow/SKILL.md +1 -1
  40. package/.agents/generated/claude/skills/gemini-precision/SKILL.md +4 -0
  41. package/.agents/generated/claude/skills/gstack-roles/SKILL.md +3 -1
  42. package/.agents/generated/gemini/skills/context-os/SKILL.md +2 -2
  43. package/.agents/generated/gemini/skills/engineering-workflow/SKILL.md +1 -1
  44. package/.agents/generated/gemini/skills/gemini-precision/SKILL.md +4 -0
  45. package/.agents/generated/gemini/skills/gstack-roles/SKILL.md +3 -1
  46. package/.agents/plugins/contextos/hooks.json +25 -0
  47. package/.agents/plugins/contextos/plugin.json +19 -0
  48. package/.agents/plugins.js +432 -73
  49. package/.agents/profiles.js +507 -46
  50. package/.agents/resolver.js +50 -414
  51. package/.agents/schemas/attestation.review.v1.json +111 -0
  52. package/.agents/schemas/attestation.verification.v1.json +85 -0
  53. package/.agents/schemas/lockfile.v2.schema.json +134 -0
  54. package/.agents/schemas/profile.v2.schema.json +114 -0
  55. package/.agents/schemas/runtime.thread.v1.json +192 -0
  56. package/.agents/schemas/skill.manifest.v2.json +177 -0
  57. package/.agents/schemas/verification.spec.v1.json +39 -0
  58. package/.agents/schemas/workspace.graph.schema.json +106 -0
  59. package/.agents/stats.js +22 -9
  60. package/.agents/transaction-core/event-store.js +288 -0
  61. package/.agents/transaction-core/idempotency.js +129 -0
  62. package/.agents/transaction-core/ipc-lock.js +311 -0
  63. package/.agents/transaction-core/plugin-supply-chain-bundle.js +436 -0
  64. package/.agents/validate.js +143 -14
  65. package/.agents/watch.js +354 -102
  66. package/.agents/workspace/workspace-graph.js +778 -0
  67. package/README.md +59 -387
  68. package/benchmarks/v2/analysis/statistics.js +140 -0
  69. package/benchmarks/v2/analysis/stats.js +69 -0
  70. package/benchmarks/v2/arms/arm-definitions.js +79 -0
  71. package/benchmarks/v2/dataset.schema.json +34 -0
  72. package/benchmarks/v2/evaluators/index.js +25 -0
  73. package/benchmarks/v2/evaluators/verified-success.js +116 -0
  74. package/benchmarks/v2/harness/runner.js +88 -0
  75. package/benchmarks/v2/pilot-tasks.json +392 -0
  76. package/bin/commands/recover.js +88 -0
  77. package/bin/commands/uninstall.js +207 -0
  78. package/bin/commands/update.js +325 -0
  79. package/bin/commands.js +342 -0
  80. package/bin/index.js +326 -149
  81. package/bin/lib/detector.js +106 -0
  82. package/bin/lib/lockfile.js +253 -0
  83. package/bin/lib/safe-writer.js +290 -0
  84. package/package.json +85 -73
  85. package/registry.json +15 -7
  86. package/registry.schema.json +3 -1
  87. package/registry.v2.schema.json +86 -0
  88. package/.agents/core/profiles/backend.yaml +0 -47
  89. package/.agents/core/profiles/enterprise.yaml +0 -46
  90. package/.agents/core/profiles/frontend.yaml +0 -46
  91. package/.agents/core/profiles/hackathon.yaml +0 -45
  92. package/.agents/core/profiles/mvp.yaml +0 -44
  93. package/.agents/core/profiles/startup.yaml +0 -48
  94. package/.agents/core/skills/adapters/EXAMPLES.md +0 -19
  95. package/.agents/core/skills/adapters/SKILL.md +0 -105
  96. package/.agents/core/skills/adapters/TROUBLESHOOTING.md +0 -7
  97. package/.agents/core/skills/adapters/VALIDATION.json +0 -12
  98. package/.agents/core/skills/adapters/skill.yaml +0 -10
  99. package/.agents/core/skills/architecture-diagrams/SKILL.md +0 -108
  100. package/.agents/core/skills/architecture-diagrams/VALIDATION.json +0 -12
  101. package/.agents/core/skills/architecture-diagrams/skill.yaml +0 -8
  102. package/.agents/core/skills/brutalist-design/SKILL.md +0 -150
  103. package/.agents/core/skills/brutalist-design/VALIDATION.json +0 -12
  104. package/.agents/core/skills/brutalist-design/skill.yaml +0 -8
  105. package/.agents/core/skills/database/EXAMPLES.md +0 -74
  106. package/.agents/core/skills/database/SKILL.md +0 -101
  107. package/.agents/core/skills/database/TROUBLESHOOTING.md +0 -18
  108. package/.agents/core/skills/database/VALIDATION.json +0 -11
  109. package/.agents/core/skills/database/skill.yaml +0 -25
  110. package/.agents/core/skills/ddd/EXAMPLES.md +0 -42
  111. package/.agents/core/skills/ddd/SKILL.md +0 -247
  112. package/.agents/core/skills/ddd/TROUBLESHOOTING.md +0 -19
  113. package/.agents/core/skills/ddd/VALIDATION.json +0 -12
  114. package/.agents/core/skills/ddd/ddd.md +0 -178
  115. package/.agents/core/skills/ddd/skill.yaml +0 -10
  116. package/.agents/core/skills/decisions/EXAMPLES.md +0 -35
  117. package/.agents/core/skills/decisions/SKILL.md +0 -90
  118. package/.agents/core/skills/decisions/TROUBLESHOOTING.md +0 -13
  119. package/.agents/core/skills/decisions/VALIDATION.json +0 -12
  120. package/.agents/core/skills/decisions/skill.yaml +0 -10
  121. package/.agents/core/skills/docker/EXAMPLES.md +0 -56
  122. package/.agents/core/skills/docker/SKILL.md +0 -63
  123. package/.agents/core/skills/docker/TROUBLESHOOTING.md +0 -18
  124. package/.agents/core/skills/docker/VALIDATION.json +0 -11
  125. package/.agents/core/skills/docker/skill.yaml +0 -23
  126. package/.agents/core/skills/fastapi/EXAMPLES.md +0 -36
  127. package/.agents/core/skills/fastapi/SKILL.md +0 -148
  128. package/.agents/core/skills/fastapi/TROUBLESHOOTING.md +0 -19
  129. package/.agents/core/skills/fastapi/VALIDATION.json +0 -12
  130. package/.agents/core/skills/fastapi/fastapi.md +0 -112
  131. package/.agents/core/skills/fastapi/skill.yaml +0 -10
  132. package/.agents/core/skills/generators/EXAMPLES.md +0 -19
  133. package/.agents/core/skills/generators/SKILL.md +0 -112
  134. package/.agents/core/skills/generators/TROUBLESHOOTING.md +0 -7
  135. package/.agents/core/skills/generators/VALIDATION.json +0 -12
  136. package/.agents/core/skills/generators/skill.yaml +0 -10
  137. package/.agents/core/skills/generators/templates/API.md +0 -77
  138. package/.agents/core/skills/generators/templates/ARCHITECTURE.md +0 -70
  139. package/.agents/core/skills/generators/templates/DATABASE.md +0 -42
  140. package/.agents/core/skills/generators/templates/DECISION.md +0 -46
  141. package/.agents/core/skills/generators/templates/PRD.md +0 -67
  142. package/.agents/core/skills/generators/templates/PROJECT_GRAPH.md +0 -56
  143. package/.agents/core/skills/generators/templates/ROADMAP.md +0 -51
  144. package/.agents/core/skills/generators/templates/TASKS.md +0 -43
  145. package/.agents/core/skills/generators/templates/UI.md +0 -73
  146. package/.agents/core/skills/graphify/EXAMPLES.md +0 -73
  147. package/.agents/core/skills/graphify/SKILL.md +0 -130
  148. package/.agents/core/skills/graphify/VALIDATION.json +0 -12
  149. package/.agents/core/skills/graphify/skill.yaml +0 -13
  150. package/.agents/core/skills/impeccable-design/EXAMPLES.md +0 -26
  151. package/.agents/core/skills/impeccable-design/SKILL.md +0 -201
  152. package/.agents/core/skills/impeccable-design/TROUBLESHOOTING.md +0 -19
  153. package/.agents/core/skills/impeccable-design/VALIDATION.json +0 -12
  154. package/.agents/core/skills/impeccable-design/skill.yaml +0 -14
  155. package/.agents/core/skills/interview-me/SKILL.md +0 -97
  156. package/.agents/core/skills/interview-me/VALIDATION.json +0 -12
  157. package/.agents/core/skills/interview-me/skill.yaml +0 -8
  158. package/.agents/core/skills/microservices/EXAMPLES.md +0 -38
  159. package/.agents/core/skills/microservices/SKILL.md +0 -164
  160. package/.agents/core/skills/microservices/TROUBLESHOOTING.md +0 -19
  161. package/.agents/core/skills/microservices/VALIDATION.json +0 -12
  162. package/.agents/core/skills/microservices/microservices.md +0 -119
  163. package/.agents/core/skills/microservices/skill.yaml +0 -10
  164. package/.agents/core/skills/minimalist-design/SKILL.md +0 -113
  165. package/.agents/core/skills/minimalist-design/VALIDATION.json +0 -12
  166. package/.agents/core/skills/minimalist-design/skill.yaml +0 -8
  167. package/.agents/core/skills/nestjs/EXAMPLES.md +0 -40
  168. package/.agents/core/skills/nestjs/SKILL.md +0 -139
  169. package/.agents/core/skills/nestjs/TROUBLESHOOTING.md +0 -19
  170. package/.agents/core/skills/nestjs/VALIDATION.json +0 -12
  171. package/.agents/core/skills/nestjs/nestjs.md +0 -103
  172. package/.agents/core/skills/nestjs/skill.yaml +0 -10
  173. package/.agents/core/skills/nextjs/EXAMPLES.md +0 -40
  174. package/.agents/core/skills/nextjs/SKILL.md +0 -163
  175. package/.agents/core/skills/nextjs/TROUBLESHOOTING.md +0 -19
  176. package/.agents/core/skills/nextjs/VALIDATION.json +0 -12
  177. package/.agents/core/skills/nextjs/nextjs.md +0 -67
  178. package/.agents/core/skills/nextjs/skill.yaml +0 -10
  179. package/.agents/core/skills/node/EXAMPLES.md +0 -80
  180. package/.agents/core/skills/node/SKILL.md +0 -128
  181. package/.agents/core/skills/node/TROUBLESHOOTING.md +0 -19
  182. package/.agents/core/skills/node/VALIDATION.json +0 -12
  183. package/.agents/core/skills/node/node.md +0 -87
  184. package/.agents/core/skills/node/skill.yaml +0 -10
  185. package/.agents/core/skills/performance/EXAMPLES.md +0 -30
  186. package/.agents/core/skills/performance/SKILL.md +0 -75
  187. package/.agents/core/skills/performance/TROUBLESHOOTING.md +0 -19
  188. package/.agents/core/skills/performance/VALIDATION.json +0 -12
  189. package/.agents/core/skills/performance/performance.md +0 -52
  190. package/.agents/core/skills/performance/skill.yaml +0 -10
  191. package/.agents/core/skills/react/EXAMPLES.md +0 -79
  192. package/.agents/core/skills/react/SKILL.md +0 -132
  193. package/.agents/core/skills/react/TROUBLESHOOTING.md +0 -19
  194. package/.agents/core/skills/react/VALIDATION.json +0 -12
  195. package/.agents/core/skills/react/react.md +0 -93
  196. package/.agents/core/skills/react/skill.yaml +0 -10
  197. package/.agents/core/skills/react-best-practices/SKILL.md +0 -155
  198. package/.agents/core/skills/react-best-practices/VALIDATION.json +0 -12
  199. package/.agents/core/skills/react-best-practices/skill.yaml +0 -10
  200. package/.agents/core/skills/redesign-audit/SKILL.md +0 -117
  201. package/.agents/core/skills/redesign-audit/VALIDATION.json +0 -12
  202. package/.agents/core/skills/redesign-audit/skill.yaml +0 -8
  203. package/.agents/core/skills/soft-design/SKILL.md +0 -108
  204. package/.agents/core/skills/soft-design/VALIDATION.json +0 -12
  205. package/.agents/core/skills/soft-design/skill.yaml +0 -8
  206. package/.agents/core/skills/state-management/EXAMPLES.md +0 -56
  207. package/.agents/core/skills/state-management/SKILL.md +0 -48
  208. package/.agents/core/skills/state-management/TROUBLESHOOTING.md +0 -18
  209. package/.agents/core/skills/state-management/VALIDATION.json +0 -11
  210. package/.agents/core/skills/state-management/skill.yaml +0 -22
  211. package/.agents/core/skills/subagent-orchestrator/SKILL.md +0 -100
  212. package/.agents/core/skills/subagent-orchestrator/VALIDATION.json +0 -12
  213. package/.agents/core/skills/subagent-orchestrator/skill.yaml +0 -8
  214. package/.agents/core/skills/system-design/EXAMPLES.md +0 -75
  215. package/.agents/core/skills/system-design/SKILL.md +0 -419
  216. package/.agents/core/skills/system-design/TROUBLESHOOTING.md +0 -19
  217. package/.agents/core/skills/system-design/VALIDATION.json +0 -12
  218. package/.agents/core/skills/system-design/skill.yaml +0 -13
  219. package/.agents/core/skills/system-design/system-design.md +0 -112
  220. package/.agents/core/skills/testing/EXAMPLES.md +0 -71
  221. package/.agents/core/skills/testing/SKILL.md +0 -70
  222. package/.agents/core/skills/testing/TROUBLESHOOTING.md +0 -18
  223. package/.agents/core/skills/testing/VALIDATION.json +0 -11
  224. package/.agents/core/skills/testing/skill.yaml +0 -26
  225. package/.agents/core/skills/typescript/EXAMPLES.md +0 -64
  226. package/.agents/core/skills/typescript/SKILL.md +0 -112
  227. package/.agents/core/skills/typescript/TROUBLESHOOTING.md +0 -19
  228. package/.agents/core/skills/typescript/VALIDATION.json +0 -12
  229. package/.agents/core/skills/typescript/skill.yaml +0 -10
  230. package/.agents/core/skills/typescript/typescript.md +0 -71
  231. package/.agents/core/skills/ui-design/EXAMPLES.md +0 -21
  232. package/.agents/core/skills/ui-design/SKILL.md +0 -124
  233. package/.agents/core/skills/ui-design/TROUBLESHOOTING.md +0 -19
  234. package/.agents/core/skills/ui-design/VALIDATION.json +0 -12
  235. package/.agents/core/skills/ui-design/skill.yaml +0 -10
  236. package/.agents/core/skills/ui-design/ui.md +0 -88
  237. package/.agents/core/skills/ui-ux-pro/EXAMPLES.md +0 -62
  238. package/.agents/core/skills/ui-ux-pro/SKILL.md +0 -375
  239. package/.agents/core/skills/ui-ux-pro/TROUBLESHOOTING.md +0 -19
  240. package/.agents/core/skills/ui-ux-pro/VALIDATION.json +0 -12
  241. package/.agents/core/skills/ui-ux-pro/skill.yaml +0 -13
  242. package/.agents/core/skills/ux-design/EXAMPLES.md +0 -36
  243. package/.agents/core/skills/ux-design/SKILL.md +0 -116
  244. package/.agents/core/skills/ux-design/TROUBLESHOOTING.md +0 -19
  245. package/.agents/core/skills/ux-design/VALIDATION.json +0 -12
  246. package/.agents/core/skills/ux-design/skill.yaml +0 -10
  247. package/.agents/core/skills/ux-design/ux.md +0 -80
  248. package/.agents/core/skills/vercel-optimize/SKILL.md +0 -83
  249. package/.agents/core/skills/vercel-optimize/VALIDATION.json +0 -12
  250. package/.agents/core/skills/vercel-optimize/skill.yaml +0 -10
  251. package/.agents/core/skills/web-accessibility/EXAMPLES.md +0 -39
  252. package/.agents/core/skills/web-accessibility/SKILL.md +0 -170
  253. package/.agents/core/skills/web-accessibility/TROUBLESHOOTING.md +0 -19
  254. package/.agents/core/skills/web-accessibility/VALIDATION.json +0 -12
  255. package/.agents/core/skills/web-accessibility/accessibility.md +0 -63
  256. package/.agents/core/skills/web-accessibility/skill.yaml +0 -10
  257. package/.agents/generated/claude/skills/adapters/SKILL.md +0 -126
  258. package/.agents/generated/claude/skills/architecture-diagrams/SKILL.md +0 -101
  259. package/.agents/generated/claude/skills/brutalist-design/SKILL.md +0 -145
  260. package/.agents/generated/claude/skills/database/SKILL.md +0 -191
  261. package/.agents/generated/claude/skills/ddd/SKILL.md +0 -305
  262. package/.agents/generated/claude/skills/decisions/SKILL.md +0 -134
  263. package/.agents/generated/claude/skills/docker/SKILL.md +0 -135
  264. package/.agents/generated/claude/skills/fastapi/SKILL.md +0 -200
  265. package/.agents/generated/claude/skills/generators/SKILL.md +0 -133
  266. package/.agents/generated/claude/skills/graphify/SKILL.md +0 -198
  267. package/.agents/generated/claude/skills/impeccable-design/SKILL.md +0 -241
  268. package/.agents/generated/claude/skills/interview-me/SKILL.md +0 -90
  269. package/.agents/generated/claude/skills/microservices/SKILL.md +0 -218
  270. package/.agents/generated/claude/skills/minimalist-design/SKILL.md +0 -108
  271. package/.agents/generated/claude/skills/nestjs/SKILL.md +0 -195
  272. package/.agents/generated/claude/skills/nextjs/SKILL.md +0 -219
  273. package/.agents/generated/claude/skills/node/SKILL.md +0 -224
  274. package/.agents/generated/claude/skills/performance/SKILL.md +0 -121
  275. package/.agents/generated/claude/skills/react/SKILL.md +0 -227
  276. package/.agents/generated/claude/skills/react-best-practices/SKILL.md +0 -146
  277. package/.agents/generated/claude/skills/redesign-audit/SKILL.md +0 -112
  278. package/.agents/generated/claude/skills/soft-design/SKILL.md +0 -103
  279. package/.agents/generated/claude/skills/state-management/SKILL.md +0 -120
  280. package/.agents/generated/claude/skills/subagent-orchestrator/SKILL.md +0 -93
  281. package/.agents/generated/claude/skills/system-design/SKILL.md +0 -507
  282. package/.agents/generated/claude/skills/testing/SKILL.md +0 -157
  283. package/.agents/generated/claude/skills/typescript/SKILL.md +0 -192
  284. package/.agents/generated/claude/skills/ui-design/SKILL.md +0 -161
  285. package/.agents/generated/claude/skills/ui-ux-pro/SKILL.md +0 -451
  286. package/.agents/generated/claude/skills/ux-design/SKILL.md +0 -168
  287. package/.agents/generated/claude/skills/vercel-optimize/SKILL.md +0 -76
  288. package/.agents/generated/claude/skills/web-accessibility/SKILL.md +0 -225
  289. package/.agents/generated/gemini/skills/adapters/SKILL.md +0 -135
  290. package/.agents/generated/gemini/skills/architecture-diagrams/SKILL.md +0 -107
  291. package/.agents/generated/gemini/skills/brutalist-design/SKILL.md +0 -151
  292. package/.agents/generated/gemini/skills/database/SKILL.md +0 -200
  293. package/.agents/generated/gemini/skills/ddd/SKILL.md +0 -314
  294. package/.agents/generated/gemini/skills/decisions/SKILL.md +0 -143
  295. package/.agents/generated/gemini/skills/docker/SKILL.md +0 -144
  296. package/.agents/generated/gemini/skills/fastapi/SKILL.md +0 -209
  297. package/.agents/generated/gemini/skills/generators/SKILL.md +0 -142
  298. package/.agents/generated/gemini/skills/graphify/SKILL.md +0 -205
  299. package/.agents/generated/gemini/skills/impeccable-design/SKILL.md +0 -250
  300. package/.agents/generated/gemini/skills/interview-me/SKILL.md +0 -96
  301. package/.agents/generated/gemini/skills/microservices/SKILL.md +0 -227
  302. package/.agents/generated/gemini/skills/minimalist-design/SKILL.md +0 -114
  303. package/.agents/generated/gemini/skills/nestjs/SKILL.md +0 -204
  304. package/.agents/generated/gemini/skills/nextjs/SKILL.md +0 -298
  305. package/.agents/generated/gemini/skills/node/SKILL.md +0 -323
  306. package/.agents/generated/gemini/skills/performance/SKILL.md +0 -185
  307. package/.agents/generated/gemini/skills/react/SKILL.md +0 -332
  308. package/.agents/generated/gemini/skills/react-best-practices/SKILL.md +0 -152
  309. package/.agents/generated/gemini/skills/redesign-audit/SKILL.md +0 -118
  310. package/.agents/generated/gemini/skills/soft-design/SKILL.md +0 -109
  311. package/.agents/generated/gemini/skills/state-management/SKILL.md +0 -129
  312. package/.agents/generated/gemini/skills/subagent-orchestrator/SKILL.md +0 -99
  313. package/.agents/generated/gemini/skills/system-design/SKILL.md +0 -631
  314. package/.agents/generated/gemini/skills/testing/SKILL.md +0 -166
  315. package/.agents/generated/gemini/skills/typescript/SKILL.md +0 -275
  316. package/.agents/generated/gemini/skills/ui-design/SKILL.md +0 -170
  317. package/.agents/generated/gemini/skills/ui-ux-pro/SKILL.md +0 -460
  318. package/.agents/generated/gemini/skills/ux-design/SKILL.md +0 -177
  319. package/.agents/generated/gemini/skills/vercel-optimize/SKILL.md +0 -82
  320. package/.agents/generated/gemini/skills/web-accessibility/SKILL.md +0 -300
  321. package/.agents/mcp/runtime.py +0 -470
  322. package/.agents/mcp/server.mjs +0 -189271
  323. package/benchmarks/gemini-issues.js +0 -533
@@ -2,444 +2,80 @@
2
2
  * .agents/resolver.js
3
3
  * ContextOS — Dynamic Skill Resolver & Progressive Index Engine
4
4
  *
5
- * Resolves the minimal set of skills required for a given task, file list, or prompt,
6
- * keeping the LLM's active context lean and fast.
5
+ * Unified facade wrapping CanonicalResolver for 100% CLI and MCP parity.
6
+ * Implements evidence-based scoring, transitive closures, token budget planning,
7
+ * and transparent explainability.
7
8
  */
8
9
 
9
10
  'use strict';
10
11
 
11
- const fs = require('fs');
12
- const path = require('path');
13
-
14
- const AGENTS_DIR = path.join(__dirname);
15
- const CORE_SKILLS_DIR = path.join(AGENTS_DIR, 'core', 'skills');
16
-
17
- /**
18
- * Keyword & Regex matching rules for dynamic resolution.
19
- */
20
- const SKILL_RULES = [
21
- {
22
- skill: 'nextjs',
23
- strong: [/\bnext(?:\.js)?\b/i, /\bapp\s*router\b/i, /\bserver\s*actions?\b/i, /\brsc\b/i, /некст/i],
24
- medium: [/\bpage\.tsx\b/i, /\blayout\.tsx\b/i],
25
- weak: [],
26
- fileGlobs: [/app\/.*\.(tsx|jsx|ts|js)$/, /next\.config\./],
27
- },
28
- {
29
- skill: 'react',
30
- strong: [/\breact\b/i, /\buseOptimistic\b/i, /компонент/i, /хук/i],
31
- medium: [/\bcomponent\b/i, /\bhooks?\b/i, /\buseState\b/i, /\buseEffect\b/i, /\buseMemo\b/i, /\bprops\b/i, /модал\w*/i],
32
- weak: [],
33
- fileGlobs: [/\.(tsx|jsx)$/],
34
- },
35
- {
36
- skill: 'typescript',
37
- strong: [/\btypescript\b/i, /\btype-?safe\b/i, /\bgenerics?\b/i, /\binterface\b/i, /\btsconfig\b/i, /тайпскрипт/i, /типизац/i],
38
- medium: [],
39
- weak: [/\btypes?\b/i],
40
- fileGlobs: [/\.tsx?$/, /tsconfig\.json$/],
41
- },
42
- {
43
- skill: 'ui-ux-pro',
44
- strong: [/\bui\b/i, /\bux\b/i, /\btailwind\b/i, /\bstyling\b/i, /дизайн/i, /верстк/i, /макет/i, /интерфейс/i],
45
- medium: [/\bcss\b/i, /\btheme\b/i, /\bmodal\b/i, /\bbutton\b/i, /модал\w*/i, /кнопк/i],
46
- weak: [/\bdesign\b/i],
47
- fileGlobs: [/\.(css|scss|sass)$/, /tailwind\.config\./],
48
- },
49
- {
50
- skill: 'web-accessibility',
51
- strong: [/\baccessib\w*\b/i, /\ba11y\b/i, /\baria\b/i, /\bfocus\s*trap\b/i, /\bkeyboard\s*nav/i, /\bwcag\b/i, /\bscreen\s*reader\b/i, /доступност/i, /скринридер/i],
52
- medium: [],
53
- weak: [],
54
- fileGlobs: [],
55
- },
56
- {
57
- skill: 'impeccable-design',
58
- strong: [/\bvisual\s*qa\b/i, /\bmicro-?animation\b/i, /\bglassmorphism\b/i, /\btypography\b/i, /анимац/i, /полировк/i],
59
- medium: [/\bpolish\b/i],
60
- weak: [],
61
- fileGlobs: [],
62
- },
63
- {
64
- skill: 'database',
65
- strong: [/\bdatabase\b/i, /\bsql\b/i, /\bpostgres(?:ql)?\b/i, /\bprisma\b/i, /\bdrizzle\b/i, /\bmigration\b/i, /\borm\b/i, /баз.*данн/i, /миграц/i, /таблиц/i],
66
- medium: [/\bschema\b/i],
67
- weak: [/\bquery\b/i, /\bindex(?:ing)?\b/i],
68
- fileGlobs: [/\.prisma$/, /drizzle\.config\./, /\bmigrations?\/.*\.sql$/],
69
- },
70
- {
71
- skill: 'security',
72
- strong: [/\bauth\b/i, /\bjwt\b/i, /\blogin\b/i, /\bcsrf\b/i, /\bxss\b/i, /\brate\s*limit\b/i, /авториз/i, /аутентифик/i, /парол/i, /безопасност/i],
73
- medium: [/\bpermission\b/i, /\bsession\b/i, /\btoken\b/i, /токен/i],
74
- weak: [],
75
- fileGlobs: [/\bauth\b/, /\bsecurity\b/],
76
- },
77
- {
78
- skill: 'performance',
79
- strong: [/\bperformance\b/i, /\blatency\b/i, /\blcp\b/i, /\bcls\b/i, /\binp\b/i, /\bcore\s*web\s*vitals\b/i, /\bwaterfall\b/i, /\bbundle\s*size\b/i, /производительн/i, /ускор/i],
80
- medium: [/\boptimize\b/i, /\bslow\b/i, /оптимиз/i, /медленн/i],
81
- weak: [],
82
- fileGlobs: [],
83
- },
84
- {
85
- skill: 'testing',
86
- strong: [/\bvitest\b/i, /\bjest\b/i, /\bplaywright\b/i, /\btdd\b/i, /\bbdd\b/i, /\be2e\b/i, /тестирован/i, /покрыти/i, /юнит/i],
87
- medium: [/\btest(?:s|ing)?\b/i, /\bmock\b/i, /тест/i],
88
- weak: [],
89
- fileGlobs: [/\.(test|spec)\.(ts|js|tsx|jsx|py)$/, /vitest\.config\./, /playwright\.config\./],
90
- },
91
- {
92
- skill: 'docker',
93
- strong: [/\bdocker\b/i, /\bdockerfile\b/i, /\bcompose\b/i, /\bkubernetes\b/i, /\bk8s\b/i, /докер/i],
94
- medium: [],
95
- weak: [/\bcontainer\b/i, /контейнер/i],
96
- fileGlobs: [/Dockerfile/, /docker-compose\./],
97
- },
98
- {
99
- skill: 'fastapi',
100
- strong: [/\bfastapi\b/i, /\bpydantic\b/i, /\buvicorn\b/i, /\bpytest\b/i, /питон/i],
101
- medium: [/\bpython\b/i],
102
- weak: [],
103
- fileGlobs: [/\.py$/, /requirements\.txt$/, /pyproject\.toml$/],
104
- },
105
- {
106
- skill: 'nestjs',
107
- strong: [/\bnestjs\b/i, /\b@nestjs\b/i, /нест/i],
108
- medium: [],
109
- weak: [/\bmodule\b/i, /\bcontroller\b/i, /\binjectable\b/i],
110
- fileGlobs: [/nest-cli\.json$/],
111
- },
112
- {
113
- skill: 'node',
114
- strong: [/\bnode(?:\.js)?\b/i, /\bexpress\b/i, /\bfastify\b/i],
115
- medium: [/\bbackend\b/i, /\bapi\s*route\b/i, /бэкенд/i, /эндпоинт/i],
116
- weak: [],
117
- fileGlobs: [],
118
- },
119
- {
120
- skill: 'ddd',
121
- strong: [/\bddd\b/i, /\bdomain-?driven\b/i, /\baggregate\b/i, /\bvalue\s*object\b/i, /\bbounded\s*context\b/i],
122
- medium: [/\bentity\b/i, /домен/i, /агрегат/i],
123
- weak: [],
124
- fileGlobs: [],
125
- },
126
- {
127
- skill: 'microservices',
128
- strong: [/\bmicroservices?\b/i, /\bevent-?driven\b/i, /\brabbitmq\b/i, /\bkafka\b/i, /\bgrpc\b/i, /микросервис/i],
129
- medium: [/\bpub\/?sub\b/i, /очеред/i],
130
- weak: [],
131
- fileGlobs: [],
132
- },
133
- {
134
- skill: 'system-design',
135
- strong: [/\bsystem\s*design\b/i, /\bhigh\s*concurrency\b/i, /\bcircuit\s*breaker\b/i, /масштабируем/i],
136
- medium: [/\barchitecture\b/i, /\bscalab(?:le|ility)\b/i, /архитектур/i],
137
- weak: [],
138
- fileGlobs: [],
139
- },
140
- {
141
- skill: 'graphify',
142
- strong: [/\bgraphify\b/i, /\bknowledge\s*graph\b/i, /\bcodebase\s*graph\b/i, /\bproject\s*graph\b/i, /\bblast\s*radius\b/i, /\bmap\s*(?:the\s*)?codebase\b/i, /граф\s*проект/i, /граф\s*зависимост/i],
143
- medium: [],
144
- weak: [],
145
- fileGlobs: [/graph\.json$/, /GRAPH_REPORT\.md$/],
146
- },
147
- {
148
- skill: 'architecture-diagrams',
149
- strong: [/\bflowchart\b/i, /\bsequence\s*diagram\b/i],
150
- medium: [/\bdiagrams?\b/i, /диаграмм/i, /схем/i, /нарисуй/i],
151
- weak: [],
152
- fileGlobs: [],
153
- },
154
- {
155
- skill: 'subagent-orchestrator',
156
- strong: [/\bsubagent\b/i, /\bparallel\s*tasks\b/i, /субагент/i, /распараллел/i],
157
- medium: [/\bdelegate\b/i, /делегируй/i],
158
- weak: [],
159
- fileGlobs: [],
160
- },
161
- {
162
- skill: 'interview-me',
163
- strong: [/\binterview\b/i, /интервью/i, /расспроси/i],
164
- medium: [/\bclarify\b/i, /\bquestions\b/i, /уточни\b/i],
165
- weak: [],
166
- fileGlobs: [],
167
- },
168
- ];
169
-
170
- /**
171
- * @typedef {Object} SkillIndexItem
172
- * @property {string} name - Skill unique identifier
173
- * @property {string} description - Brief summary of the skill
174
- * @property {string} path - Relative path to the skill markdown document
175
- */
176
-
177
- /**
178
- * @typedef {Object} ResolveSkillsOptions
179
- * @property {string} [prompt] - Free-form prompt text describing the current task
180
- * @property {string[]} [files] - List of file paths currently touched or opened
181
- * @property {string} [phase] - Active lifecycle phase (Define, Plan, Build, Verify, Review, Ship)
182
- * @property {string} [domain] - Engineering domain override (Frontend, Backend, Architecture, Full-Stack, DevOps)
183
- */
184
-
185
- /**
186
- * @typedef {Object} ResolvedSkillsResult
187
- * @property {string} domain - Identified technical domain
188
- * @property {string} phase - Current pipeline phase
189
- * @property {string} role - Specialized GStack agent role
190
- * @property {string[]} skills - Resolved list of minimal skill identifiers
191
- */
192
-
193
- /**
194
- * Builds a compact, progressive index of all available skills.
195
- *
196
- * @param {string} [projectDir=process.cwd()] - Target root directory of the project
197
- * @returns {SkillIndexItem[]} Array of indexed skill metadata objects
198
- */
199
- function buildSkillIndex(projectDir = process.cwd()) {
200
- const shared = require(path.join(AGENTS_DIR, 'adapters', 'shared.js'));
201
- const skillDirs = shared.collectSkillDirectories();
202
- const index = [];
203
-
204
- for (const dir of skillDirs) {
205
- const skillName = path.basename(dir);
206
- const skillMdPath = path.join(dir, 'SKILL.md');
207
- if (!fs.existsSync(skillMdPath)) continue;
208
-
209
- const raw = fs.readFileSync(skillMdPath, 'utf8');
210
- let description = '';
211
- const descMatch = raw.match(/description:\s*(?:>)?\s*([^\n\r]+)/);
212
- if (descMatch) {
213
- description = descMatch[1].trim().replace(/^['"]|['"]$/g, '');
214
- }
215
-
216
- const relPath = path.relative(projectDir, skillMdPath).replace(/\\/g, '/');
217
-
218
- index.push({
219
- name: skillName,
220
- description: description || `ContextOS skill for ${skillName}`,
221
- path: relPath,
222
- });
223
- }
224
-
225
- return index;
226
- }
12
+ const {
13
+ CanonicalResolver,
14
+ DEFAULT_CONTEXT_BUDGET_TOKENS,
15
+ WEIGHTS,
16
+ analyzeImportGraph,
17
+ } = require('./resolver/canonical-resolver.js');
227
18
 
228
19
  /**
229
- * Phase 2: AST & Project Dependency Graph Analysis.
230
- * Scans project manifests and configs to detect active technologies
231
- * that keyword or regex matching in prompts might omit.
20
+ * Resolves the minimal set of skills for a given prompt, file list, and phase.
232
21
  *
233
- * @param {string} [projectDir=process.cwd()] - Project root directory
234
- * @returns {Map<string, number>} Map of skill name to score weight
22
+ * @param {Object} options - Context options
23
+ * @returns {Object} Resolution result
235
24
  */
236
- function analyzeImportGraph(projectDir = process.cwd()) {
237
- const techSignals = new Map();
238
- if (!projectDir || !fs.existsSync(projectDir)) return techSignals;
25
+ function resolveSkills({ prompt = '', files = [], phase = 'Build', domain = '', projectDir = process.cwd(), maxSkills, contextBudgetTokens = DEFAULT_CONTEXT_BUDGET_TOKENS } = {}) {
26
+ const resolver = new CanonicalResolver({ rootDir: projectDir });
27
+ const result = resolver.resolve({
28
+ task: prompt,
29
+ files,
30
+ explicitPhase: phase,
31
+ domain,
32
+ projectDir,
33
+ maxSkills,
34
+ contextBudgetTokens,
35
+ });
239
36
 
240
- const addSignal = (skill, weight) => {
241
- techSignals.set(skill, (techSignals.get(skill) || 0) + weight);
37
+ return {
38
+ domain: result.domain,
39
+ phase: result.phase.value,
40
+ role: result.role,
41
+ skills: result.skills,
42
+ risk: result.risk,
43
+ selected: result.selected,
44
+ excluded: result.excluded,
45
+ conflicts: result.conflicts,
46
+ warnings: result.warnings,
47
+ totalEstimatedTokens: result.totalEstimatedTokens,
48
+ registryFingerprint: result.registryFingerprint,
49
+ workspaceFingerprint: result.workspaceFingerprint,
242
50
  };
243
-
244
- // 1. Scan package.json dependencies and devDependencies
245
- const pkgPath = path.join(projectDir, 'package.json');
246
- if (fs.existsSync(pkgPath)) {
247
- try {
248
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
249
- const allDeps = {
250
- ...(pkg.dependencies || {}),
251
- ...(pkg.devDependencies || {}),
252
- ...(pkg.peerDependencies || {}),
253
- };
254
-
255
- const DEP_SKILL_MAP = {
256
- 'react': 'react',
257
- 'react-dom': 'react',
258
- 'next': 'nextjs',
259
- 'prisma': 'database',
260
- '@prisma/client': 'database',
261
- 'drizzle-orm': 'database',
262
- 'drizzle-kit': 'database',
263
- 'typeorm': 'database',
264
- 'mongoose': 'database',
265
- 'pg': 'database',
266
- 'mysql2': 'database',
267
- 'vitest': 'testing',
268
- 'jest': 'testing',
269
- 'playwright': 'testing',
270
- '@playwright/test': 'testing',
271
- 'cypress': 'testing',
272
- 'express': 'node',
273
- 'fastify': 'node',
274
- 'hono': 'node',
275
- '@nestjs/core': 'nestjs',
276
- 'typescript': 'typescript',
277
- 'zod': 'typescript',
278
- 'tailwindcss': 'ui-ux-pro',
279
- 'lucide-react': 'ui-ux-pro',
280
- '@radix-ui/react-dialog': 'web-accessibility',
281
- 'framer-motion': 'impeccable-design',
282
- 'dockerode': 'docker',
283
- 'ioredis': 'system-design',
284
- 'kafkajs': 'microservices',
285
- 'amqplib': 'microservices',
286
- };
287
-
288
- for (const [dep, skill] of Object.entries(DEP_SKILL_MAP)) {
289
- if (allDeps[dep]) {
290
- addSignal(skill, 15);
291
- }
292
- }
293
- } catch {
294
- // ignore malformed package.json
295
- }
296
- }
297
-
298
- // 2. Scan framework & tooling configuration files
299
- const CONFIG_FILE_MAP = [
300
- { file: 'tsconfig.json', skill: 'typescript', weight: 10 },
301
- { file: 'next.config.js', skill: 'nextjs', weight: 15 },
302
- { file: 'next.config.mjs', skill: 'nextjs', weight: 15 },
303
- { file: 'next.config.ts', skill: 'nextjs', weight: 15 },
304
- { file: 'tailwind.config.js', skill: 'ui-ux-pro', weight: 10 },
305
- { file: 'tailwind.config.ts', skill: 'ui-ux-pro', weight: 10 },
306
- { file: 'nest-cli.json', skill: 'nestjs', weight: 15 },
307
- { file: 'prisma/schema.prisma', skill: 'database', weight: 15 },
308
- { file: 'drizzle.config.ts', skill: 'database', weight: 15 },
309
- { file: 'drizzle.config.js', skill: 'database', weight: 15 },
310
- { file: 'Dockerfile', skill: 'docker', weight: 15 },
311
- { file: 'docker-compose.yml', skill: 'docker', weight: 15 },
312
- { file: 'docker-compose.yaml', skill: 'docker', weight: 15 },
313
- { file: 'requirements.txt', skill: 'fastapi', weight: 15 },
314
- { file: 'pyproject.toml', skill: 'fastapi', weight: 15 },
315
- { file: 'vitest.config.ts', skill: 'testing', weight: 15 },
316
- { file: 'vitest.config.js', skill: 'testing', weight: 15 },
317
- { file: 'playwright.config.ts', skill: 'testing', weight: 15 },
318
- { file: 'playwright.config.js', skill: 'testing', weight: 15 },
319
- ];
320
-
321
- for (const { file, skill, weight } of CONFIG_FILE_MAP) {
322
- if (fs.existsSync(path.join(projectDir, file))) {
323
- addSignal(skill, weight);
324
- }
325
- }
326
-
327
- return techSignals;
328
51
  }
329
52
 
330
53
  /**
331
- * Resolves the minimal set of skills for a given prompt, file list, and phase.
54
+ * Builds a progressive index of installed skills.
332
55
  *
333
- * @param {ResolveSkillsOptions} [options={}] - Task context options
334
- * @returns {ResolvedSkillsResult} Resolved domain, role, and activated skill names
56
+ * @param {string} [projectDir=process.cwd()]
57
+ * @returns {Array<{name: string, description: string, path: string}>}
335
58
  */
336
- function resolveSkills({ prompt = '', files = [], phase = 'Build', domain = '', projectDir = process.cwd() } = {}) {
337
- const promptText = (prompt || '').toLowerCase();
338
- const scores = new Map();
339
-
340
- for (const rule of SKILL_RULES) {
341
- let score = 0;
342
-
343
- // Strong triggers (10 points each match)
344
- for (const pat of rule.strong || []) {
345
- if (pat.test(promptText)) score += 10;
346
- }
347
-
348
- // Medium triggers (5 points each match)
349
- for (const pat of rule.medium || []) {
350
- if (pat.test(promptText)) score += 5;
351
- }
352
-
353
- // Weak triggers (2 points each match)
354
- for (const pat of rule.weak || []) {
355
- if (pat.test(promptText)) score += 2;
356
- }
357
-
358
- // File matches (10 points per matching file)
359
- for (const file of files) {
360
- const normalized = file.replace(/\\/g, '/');
361
- for (const pat of rule.fileGlobs || []) {
362
- if (pat.test(normalized)) score += 10;
363
- }
364
- }
365
-
366
- // Minimum score threshold for domain skill activation
367
- if (score >= 5) {
368
- scores.set(rule.skill, score);
369
- }
370
- }
371
-
372
- // Phase 2: Merge AST & Project Dependency Graph Signals
373
- if (projectDir) {
374
- const astSignals = analyzeImportGraph(projectDir);
375
- for (const [skill, astScore] of astSignals) {
376
- scores.set(skill, (scores.get(skill) || 0) + astScore);
377
- }
378
- }
379
-
380
- // Sort matched domain skills by score descending
381
- const sortedDomainSkills = Array.from(scores.entries())
382
- .sort((a, b) => b[1] - a[1])
383
- .map(([skill]) => skill);
384
-
385
- // Cap domain skills to top 4 max to prevent context bloat
386
- const MAX_DOMAIN_SKILLS = 4;
387
- const topDomainSkills = sortedDomainSkills.slice(0, MAX_DOMAIN_SKILLS);
388
-
389
- // Synergy rules (from AGENTS.md matrix)
390
- const hasSynergyPrereq = topDomainSkills.includes('database') ||
391
- topDomainSkills.includes('microservices') ||
392
- topDomainSkills.includes('ddd') ||
393
- topDomainSkills.includes('graphify');
394
-
395
- if (hasSynergyPrereq && !topDomainSkills.includes('system-design')) {
396
- if (topDomainSkills.length < MAX_DOMAIN_SKILLS + 1) {
397
- topDomainSkills.push('system-design');
398
- }
399
- }
400
-
401
- // Foundational skills (always active)
402
- const allSkills = ['ponytail-mindset', 'engineering-workflow', ...topDomainSkills];
403
- const finalSkills = Array.from(new Set(allSkills));
404
-
405
- // Infer Domain if not specified
406
- let inferredDomain = domain;
407
- if (!inferredDomain) {
408
- const isFrontend = finalSkills.includes('react') || finalSkills.includes('nextjs') || finalSkills.includes('ui-ux-pro');
409
- const isBackend = finalSkills.includes('database') || finalSkills.includes('fastapi') || finalSkills.includes('nestjs') || finalSkills.includes('node') || finalSkills.includes('system-design');
410
- if (isFrontend && isBackend) inferredDomain = 'Full-Stack';
411
- else if (isFrontend) inferredDomain = 'Frontend';
412
- else if (isBackend) inferredDomain = 'Backend';
413
- else inferredDomain = 'Architecture';
414
- }
415
-
416
- // Infer Role
417
- let inferredRole = 'Senior Developer';
418
- if (phase.toLowerCase() === 'define') inferredRole = 'Product Manager';
419
- else if (phase.toLowerCase() === 'plan') inferredRole = 'Architect';
420
- else if (phase.toLowerCase() === 'review') inferredRole = inferredDomain === 'Frontend' ? 'Staff Engineer + Senior Designer' : 'Staff Engineer';
421
- else if (phase.toLowerCase() === 'test') inferredRole = 'QA Lead';
422
- else if (phase.toLowerCase() === 'ship') inferredRole = 'Release Engineer';
423
-
424
- return {
425
- domain: inferredDomain,
426
- phase: phase,
427
- role: inferredRole,
428
- skills: finalSkills,
429
- };
59
+ function buildSkillIndex(projectDir = process.cwd()) {
60
+ const resolver = new CanonicalResolver({ rootDir: projectDir });
61
+ return resolver.buildSkillIndex(projectDir);
430
62
  }
431
63
 
432
64
  /**
433
- * Formats resolved skills into a clean ContextOS declaration string.
65
+ * Formats resolved skills into a clean ContextOS declaration string matching AGENTS.md.
434
66
  *
435
- * @param {ResolvedSkillsResult} resolution - Resolution result from resolveSkills
436
- * @returns {string} ContextOS formatted header string matching Step 0 format
67
+ * @param {Object} resolution
68
+ * @returns {string}
437
69
  */
438
70
  function formatDeclaration(resolution) {
439
- return `[DOMAIN: ${resolution.domain}] [PHASE: ${resolution.phase}] [ROLE: ${resolution.role}]\nSkills loaded: ${resolution.skills.join(', ')}`;
71
+ const resolver = new CanonicalResolver();
72
+ return resolver.formatDeclaration(resolution);
440
73
  }
441
74
 
442
75
  module.exports = {
76
+ CanonicalResolver,
77
+ DEFAULT_CONTEXT_BUDGET_TOKENS,
78
+ WEIGHTS,
443
79
  buildSkillIndex,
444
80
  resolveSkills,
445
81
  analyzeImportGraph,
@@ -0,0 +1,111 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "ContextOS Review Attestation v1",
4
+ "type": "object",
5
+ "required": [
6
+ "schemaVersion",
7
+ "status",
8
+ "subject",
9
+ "implementerExecutionId",
10
+ "reviewerExecutionId",
11
+ "provider",
12
+ "model",
13
+ "independenceLevel",
14
+ "rawOutputDigest",
15
+ "retries"
16
+ ],
17
+ "additionalProperties": false,
18
+ "properties": {
19
+ "schemaVersion": {
20
+ "type": "integer",
21
+ "const": 1
22
+ },
23
+ "status": {
24
+ "type": "string",
25
+ "enum": [
26
+ "NOT_CONFIGURED",
27
+ "PENDING",
28
+ "RUNNING",
29
+ "PASS",
30
+ "FAIL",
31
+ "ERROR",
32
+ "TIMEOUT",
33
+ "UNAVAILABLE",
34
+ "MALFORMED",
35
+ "STALE"
36
+ ]
37
+ },
38
+ "subject": {
39
+ "type": "object",
40
+ "required": [
41
+ "repositoryFingerprint",
42
+ "baseSha",
43
+ "headSha",
44
+ "diffSha256",
45
+ "scopeSha256"
46
+ ],
47
+ "properties": {
48
+ "repositoryFingerprint": { "type": "string" },
49
+ "baseSha": { "type": "string" },
50
+ "headSha": { "type": "string" },
51
+ "diffSha256": { "type": "string" },
52
+ "scopeSha256": { "type": "string" }
53
+ },
54
+ "additionalProperties": false
55
+ },
56
+ "implementerExecutionId": { "type": "string" },
57
+ "reviewerExecutionId": { "type": "string" },
58
+ "provider": { "type": "string" },
59
+ "model": { "type": "string" },
60
+ "independenceLevel": {
61
+ "type": "string",
62
+ "enum": [
63
+ "same_process",
64
+ "separate_process",
65
+ "isolated_container",
66
+ "external_evaluator"
67
+ ]
68
+ },
69
+ "rawOutputDigest": { "type": "string" },
70
+ "staticFindings": {
71
+ "type": "array",
72
+ "items": {
73
+ "type": "object",
74
+ "required": ["ruleId", "severity", "message"],
75
+ "properties": {
76
+ "ruleId": { "type": "string" },
77
+ "severity": {
78
+ "type": "string",
79
+ "enum": ["low", "medium", "high", "critical"]
80
+ },
81
+ "message": { "type": "string" },
82
+ "file": { "type": "string" },
83
+ "line": { "type": "integer" }
84
+ },
85
+ "additionalProperties": false
86
+ }
87
+ },
88
+ "llmVerdict": {
89
+ "type": "object",
90
+ "required": ["specCompliance", "codeQuality", "summary"],
91
+ "properties": {
92
+ "specCompliance": {
93
+ "type": "string",
94
+ "enum": ["PASS", "FAIL", "UNCERTAIN"]
95
+ },
96
+ "codeQuality": {
97
+ "type": "string",
98
+ "enum": ["PASS", "FAIL", "NEEDS_WORK"]
99
+ },
100
+ "summary": { "type": "string" }
101
+ },
102
+ "additionalProperties": false
103
+ },
104
+ "retries": {
105
+ "type": "integer",
106
+ "minimum": 0
107
+ },
108
+ "startedAt": { "type": "number" },
109
+ "completedAt": { "type": "number" }
110
+ }
111
+ }