@su-record/vibe 2.7.18 → 2.7.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/.env.example +37 -37
  2. package/CLAUDE.md +153 -153
  3. package/LICENSE +21 -21
  4. package/README.md +451 -449
  5. package/agents/architect-low.md +41 -41
  6. package/agents/architect-medium.md +59 -59
  7. package/agents/architect.md +80 -80
  8. package/agents/build-error-resolver.md +115 -115
  9. package/agents/compounder.md +261 -261
  10. package/agents/diagrammer.md +178 -178
  11. package/agents/docs/api-documenter.md +99 -99
  12. package/agents/docs/changelog-writer.md +93 -93
  13. package/agents/e2e-tester.md +294 -294
  14. package/agents/event/event-comms.md +78 -0
  15. package/agents/event/event-content.md +68 -0
  16. package/agents/event/event-image.md +95 -0
  17. package/agents/event/event-ops.md +84 -0
  18. package/agents/event/event-scheduler.md +69 -0
  19. package/agents/event/event-speaker.md +86 -0
  20. package/agents/explorer-low.md +42 -42
  21. package/agents/explorer-medium.md +59 -59
  22. package/agents/explorer.md +48 -48
  23. package/agents/implementer-low.md +43 -43
  24. package/agents/implementer-medium.md +52 -52
  25. package/agents/implementer.md +54 -54
  26. package/agents/junior-mentor.md +141 -141
  27. package/agents/planning/requirements-analyst.md +84 -84
  28. package/agents/planning/ux-advisor.md +83 -83
  29. package/agents/qa/acceptance-tester.md +86 -86
  30. package/agents/qa/edge-case-finder.md +93 -93
  31. package/agents/refactor-cleaner.md +143 -143
  32. package/agents/research/best-practices-agent.md +199 -199
  33. package/agents/research/codebase-patterns-agent.md +157 -157
  34. package/agents/research/framework-docs-agent.md +188 -188
  35. package/agents/research/security-advisory-agent.md +213 -213
  36. package/agents/review/architecture-reviewer.md +107 -107
  37. package/agents/review/complexity-reviewer.md +116 -116
  38. package/agents/review/data-integrity-reviewer.md +88 -88
  39. package/agents/review/git-history-reviewer.md +103 -103
  40. package/agents/review/performance-reviewer.md +86 -86
  41. package/agents/review/python-reviewer.md +150 -150
  42. package/agents/review/rails-reviewer.md +139 -139
  43. package/agents/review/react-reviewer.md +144 -144
  44. package/agents/review/security-reviewer.md +80 -80
  45. package/agents/review/simplicity-reviewer.md +140 -140
  46. package/agents/review/test-coverage-reviewer.md +116 -116
  47. package/agents/review/typescript-reviewer.md +127 -127
  48. package/agents/searcher.md +54 -54
  49. package/agents/simplifier.md +120 -120
  50. package/agents/tester.md +49 -49
  51. package/agents/ui/ui-a11y-auditor.md +93 -93
  52. package/agents/ui/ui-antipattern-detector.md +94 -94
  53. package/agents/ui/ui-dataviz-advisor.md +69 -69
  54. package/agents/ui/ui-design-system-gen.md +57 -57
  55. package/agents/ui/ui-industry-analyzer.md +49 -49
  56. package/agents/ui/ui-layout-architect.md +65 -65
  57. package/agents/ui/ui-stack-implementer.md +68 -68
  58. package/agents/ui/ux-compliance-reviewer.md +81 -81
  59. package/agents/ui-previewer.md +258 -258
  60. package/commands/vibe.analyze.md +379 -379
  61. package/commands/vibe.event.md +163 -0
  62. package/commands/vibe.review.md +607 -607
  63. package/commands/vibe.run.md +2217 -2124
  64. package/commands/vibe.spec.md +1195 -1195
  65. package/commands/vibe.spec.review.md +569 -569
  66. package/commands/vibe.trace.md +50 -0
  67. package/commands/vibe.utils.md +413 -413
  68. package/commands/vibe.verify.md +484 -484
  69. package/dist/__tests__/architecture.test.d.ts +2 -0
  70. package/dist/__tests__/architecture.test.d.ts.map +1 -0
  71. package/dist/__tests__/architecture.test.js +207 -0
  72. package/dist/__tests__/architecture.test.js.map +1 -0
  73. package/dist/cli/auth.js +3 -3
  74. package/dist/cli/auth.js.map +1 -1
  75. package/dist/cli/collaborator.js +52 -52
  76. package/dist/cli/commands/evolution.js +12 -12
  77. package/dist/cli/commands/info.d.ts.map +1 -1
  78. package/dist/cli/commands/info.js +45 -81
  79. package/dist/cli/commands/info.js.map +1 -1
  80. package/dist/cli/commands/init.js +5 -5
  81. package/dist/cli/commands/remove.js +14 -14
  82. package/dist/cli/commands/sentinel.js +27 -27
  83. package/dist/cli/commands/skills.js +5 -5
  84. package/dist/cli/commands/slack.js +10 -10
  85. package/dist/cli/commands/telegram.js +12 -12
  86. package/dist/cli/detect.d.ts.map +1 -1
  87. package/dist/cli/detect.js +55 -32
  88. package/dist/cli/detect.js.map +1 -1
  89. package/dist/cli/index.d.ts +1 -1
  90. package/dist/cli/index.d.ts.map +1 -1
  91. package/dist/cli/index.js +52 -52
  92. package/dist/cli/index.js.map +1 -1
  93. package/dist/cli/llm/claude-commands.js +16 -16
  94. package/dist/cli/llm/config.js +18 -18
  95. package/dist/cli/llm/gemini-commands.js +16 -16
  96. package/dist/cli/llm/gpt-commands.js +19 -19
  97. package/dist/cli/llm/help.js +21 -21
  98. package/dist/cli/postinstall/constants.d.ts.map +1 -1
  99. package/dist/cli/postinstall/constants.js +24 -0
  100. package/dist/cli/postinstall/constants.js.map +1 -1
  101. package/dist/cli/postinstall/cursor-agents.js +32 -32
  102. package/dist/cli/postinstall/cursor-rules.js +83 -83
  103. package/dist/cli/postinstall/cursor-skills.js +743 -743
  104. package/dist/cli/setup/Provisioner.js +42 -42
  105. package/dist/infra/lib/AutomationLevel.d.ts +48 -0
  106. package/dist/infra/lib/AutomationLevel.d.ts.map +1 -0
  107. package/dist/infra/lib/AutomationLevel.js +157 -0
  108. package/dist/infra/lib/AutomationLevel.js.map +1 -0
  109. package/dist/infra/lib/DecisionTracer.d.ts +81 -0
  110. package/dist/infra/lib/DecisionTracer.d.ts.map +1 -0
  111. package/dist/infra/lib/DecisionTracer.js +135 -0
  112. package/dist/infra/lib/DecisionTracer.js.map +1 -0
  113. package/dist/infra/lib/DeepInit.js +24 -24
  114. package/dist/infra/lib/InteractiveCheckpoint.d.ts +75 -0
  115. package/dist/infra/lib/InteractiveCheckpoint.d.ts.map +1 -0
  116. package/dist/infra/lib/InteractiveCheckpoint.js +179 -0
  117. package/dist/infra/lib/InteractiveCheckpoint.js.map +1 -0
  118. package/dist/infra/lib/IterationTracker.d.ts +44 -0
  119. package/dist/infra/lib/IterationTracker.d.ts.map +1 -1
  120. package/dist/infra/lib/IterationTracker.js +267 -12
  121. package/dist/infra/lib/IterationTracker.js.map +1 -1
  122. package/dist/infra/lib/LoopBreaker.d.ts +56 -0
  123. package/dist/infra/lib/LoopBreaker.d.ts.map +1 -0
  124. package/dist/infra/lib/LoopBreaker.js +109 -0
  125. package/dist/infra/lib/LoopBreaker.js.map +1 -0
  126. package/dist/infra/lib/PythonParser.js +108 -108
  127. package/dist/infra/lib/ReviewRace.js +96 -96
  128. package/dist/infra/lib/SkillFrontmatter.js +28 -28
  129. package/dist/infra/lib/SkillQualityGate.js +9 -9
  130. package/dist/infra/lib/SkillRepository.js +159 -159
  131. package/dist/infra/lib/UltraQA.js +99 -99
  132. package/dist/infra/lib/VerificationLoop.d.ts +105 -0
  133. package/dist/infra/lib/VerificationLoop.d.ts.map +1 -0
  134. package/dist/infra/lib/VerificationLoop.js +189 -0
  135. package/dist/infra/lib/VerificationLoop.js.map +1 -0
  136. package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts +2 -0
  137. package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts.map +1 -0
  138. package/dist/infra/lib/__tests__/AutomationLevel.test.js +297 -0
  139. package/dist/infra/lib/__tests__/AutomationLevel.test.js.map +1 -0
  140. package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts +2 -0
  141. package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts.map +1 -0
  142. package/dist/infra/lib/__tests__/DecisionTracer.test.js +274 -0
  143. package/dist/infra/lib/__tests__/DecisionTracer.test.js.map +1 -0
  144. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts +2 -0
  145. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts.map +1 -0
  146. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js +350 -0
  147. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js.map +1 -0
  148. package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts +2 -0
  149. package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts.map +1 -0
  150. package/dist/infra/lib/__tests__/LoopBreaker.test.js +340 -0
  151. package/dist/infra/lib/__tests__/LoopBreaker.test.js.map +1 -0
  152. package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts +2 -0
  153. package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts.map +1 -0
  154. package/dist/infra/lib/__tests__/VerificationLoop.test.js +486 -0
  155. package/dist/infra/lib/__tests__/VerificationLoop.test.js.map +1 -0
  156. package/dist/infra/lib/autonomy/AuditStore.js +41 -41
  157. package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
  158. package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
  159. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +3 -3
  160. package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
  161. package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
  162. package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
  163. package/dist/infra/lib/embedding/VectorStore.js +22 -22
  164. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js +4 -0
  165. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js.map +1 -1
  166. package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
  167. package/dist/infra/lib/evolution/DeprecationDetector.d.ts +68 -0
  168. package/dist/infra/lib/evolution/DeprecationDetector.d.ts.map +1 -0
  169. package/dist/infra/lib/evolution/DeprecationDetector.js +207 -0
  170. package/dist/infra/lib/evolution/DeprecationDetector.js.map +1 -0
  171. package/dist/infra/lib/evolution/DescriptionOptimizer.js +21 -21
  172. package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
  173. package/dist/infra/lib/evolution/InsightStore.js +90 -90
  174. package/dist/infra/lib/evolution/ParityTester.d.ts +74 -0
  175. package/dist/infra/lib/evolution/ParityTester.d.ts.map +1 -0
  176. package/dist/infra/lib/evolution/ParityTester.js +238 -0
  177. package/dist/infra/lib/evolution/ParityTester.js.map +1 -0
  178. package/dist/infra/lib/evolution/RollbackManager.js +5 -5
  179. package/dist/infra/lib/evolution/SkillBenchmark.js +23 -23
  180. package/dist/infra/lib/evolution/SkillEvalRunner.js +50 -50
  181. package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
  182. package/dist/infra/lib/evolution/UsageTracker.js +28 -28
  183. package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts +2 -0
  184. package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts.map +1 -0
  185. package/dist/infra/lib/evolution/__tests__/deprecation.test.js +251 -0
  186. package/dist/infra/lib/evolution/__tests__/deprecation.test.js.map +1 -0
  187. package/dist/infra/lib/evolution/__tests__/parity.test.d.ts +2 -0
  188. package/dist/infra/lib/evolution/__tests__/parity.test.d.ts.map +1 -0
  189. package/dist/infra/lib/evolution/__tests__/parity.test.js +319 -0
  190. package/dist/infra/lib/evolution/__tests__/parity.test.js.map +1 -0
  191. package/dist/infra/lib/evolution/index.d.ts +4 -0
  192. package/dist/infra/lib/evolution/index.d.ts.map +1 -1
  193. package/dist/infra/lib/evolution/index.js +3 -0
  194. package/dist/infra/lib/evolution/index.js.map +1 -1
  195. package/dist/infra/lib/gemini/orchestration.js +5 -5
  196. package/dist/infra/lib/gpt/orchestration.js +4 -4
  197. package/dist/infra/lib/gpt/specializations.d.ts +1 -1
  198. package/dist/infra/lib/gpt/specializations.js +1 -1
  199. package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
  200. package/dist/infra/lib/memory/MemorySearch.js +57 -57
  201. package/dist/infra/lib/memory/MemoryStorage.js +181 -181
  202. package/dist/infra/lib/memory/ObservationStore.js +28 -28
  203. package/dist/infra/lib/memory/ReflectionStore.js +30 -30
  204. package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
  205. package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
  206. package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
  207. package/dist/infra/lib/telemetry/SkillTelemetry.d.ts +6 -0
  208. package/dist/infra/lib/telemetry/SkillTelemetry.d.ts.map +1 -1
  209. package/dist/infra/lib/telemetry/SkillTelemetry.js +11 -0
  210. package/dist/infra/lib/telemetry/SkillTelemetry.js.map +1 -1
  211. package/dist/infra/orchestrator/AgentManager.js +12 -12
  212. package/dist/infra/orchestrator/AgentRegistry.js +65 -65
  213. package/dist/infra/orchestrator/BackgroundManager.d.ts.map +1 -1
  214. package/dist/infra/orchestrator/BackgroundManager.js +2 -0
  215. package/dist/infra/orchestrator/BackgroundManager.js.map +1 -1
  216. package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
  217. package/dist/infra/orchestrator/PhasePipeline.js +1 -1
  218. package/dist/infra/orchestrator/PhasePipeline.js.map +1 -1
  219. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
  220. package/dist/infra/orchestrator/parallelResearch.js +24 -24
  221. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  222. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  223. package/dist/tools/index.d.ts +16 -19
  224. package/dist/tools/index.d.ts.map +1 -1
  225. package/dist/tools/index.js +15 -27
  226. package/dist/tools/index.js.map +1 -1
  227. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  228. package/dist/tools/memory/getMemoryGraph.js +12 -12
  229. package/dist/tools/memory/getSessionContext.js +9 -9
  230. package/dist/tools/memory/linkMemories.js +14 -14
  231. package/dist/tools/memory/listMemories.js +4 -4
  232. package/dist/tools/memory/recallMemory.js +4 -4
  233. package/dist/tools/memory/saveMemory.js +4 -4
  234. package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
  235. package/dist/tools/memory/startSession.js +1 -1
  236. package/dist/tools/memory/startSession.js.map +1 -1
  237. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  238. package/dist/tools/semantic/astGrep.test.js +6 -6
  239. package/dist/tools/spec/index.d.ts +0 -4
  240. package/dist/tools/spec/index.d.ts.map +1 -1
  241. package/dist/tools/spec/index.js +0 -4
  242. package/dist/tools/spec/index.js.map +1 -1
  243. package/dist/tools/spec/prdParser.test.js +171 -171
  244. package/dist/tools/spec/specGenerator.js +169 -169
  245. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  246. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  247. package/hooks/gemini-hooks.json +73 -73
  248. package/hooks/hooks.json +137 -137
  249. package/hooks/scripts/code-check.js +77 -77
  250. package/hooks/scripts/context-save.js +212 -212
  251. package/hooks/scripts/evolution-engine.js +69 -0
  252. package/hooks/scripts/hud-status.js +291 -291
  253. package/hooks/scripts/keyword-detector.js +214 -214
  254. package/hooks/scripts/llm-orchestrate.js +475 -475
  255. package/hooks/scripts/post-edit.js +32 -32
  256. package/hooks/scripts/pre-tool-guard.js +125 -125
  257. package/hooks/scripts/prompt-dispatcher.js +185 -185
  258. package/hooks/scripts/sentinel-guard.js +104 -104
  259. package/hooks/scripts/session-start.js +106 -106
  260. package/hooks/scripts/skill-injector.js +83 -0
  261. package/hooks/scripts/stop-notify.js +209 -209
  262. package/hooks/scripts/utils.js +100 -100
  263. package/languages/csharp-unity.md +515 -515
  264. package/languages/gdscript-godot.md +470 -470
  265. package/languages/ruby-rails.md +489 -489
  266. package/languages/typescript-angular.md +433 -433
  267. package/languages/typescript-astro.md +416 -416
  268. package/languages/typescript-electron.md +406 -406
  269. package/languages/typescript-nestjs.md +524 -524
  270. package/languages/typescript-svelte.md +407 -407
  271. package/languages/typescript-tauri.md +365 -365
  272. package/package.json +101 -123
  273. package/skills/agents-md/SKILL.md +120 -120
  274. package/skills/arch-guard/SKILL.md +180 -180
  275. package/skills/brand-assets/SKILL.md +146 -146
  276. package/skills/capability-loop/SKILL.md +167 -167
  277. package/skills/characterization-test/SKILL.md +206 -206
  278. package/skills/commerce-patterns/SKILL.md +63 -63
  279. package/skills/commit-push-pr/SKILL.md +75 -75
  280. package/skills/context7-usage/SKILL.md +105 -105
  281. package/skills/core-capabilities/SKILL.md +13 -13
  282. package/skills/e2e-commerce/SKILL.md +61 -61
  283. package/skills/event-comms/SKILL.md +161 -0
  284. package/skills/event-ops/SKILL.md +197 -0
  285. package/skills/event-planning/SKILL.md +131 -0
  286. package/skills/exec-plan/SKILL.md +147 -147
  287. package/skills/frontend-design/SKILL.md +12 -12
  288. package/skills/git-worktree/SKILL.md +72 -72
  289. package/skills/handoff/SKILL.md +109 -109
  290. package/skills/parallel-research/SKILL.md +87 -87
  291. package/skills/priority-todos/SKILL.md +63 -63
  292. package/skills/seo-checklist/SKILL.md +57 -57
  293. package/skills/techdebt/SKILL.md +122 -122
  294. package/skills/tool-fallback/SKILL.md +103 -103
  295. package/skills/typescript-advanced-types/SKILL.md +66 -66
  296. package/skills/ui-ux-pro-max/SKILL.md +221 -221
  297. package/skills/vercel-react-best-practices/SKILL.md +59 -59
  298. package/skills/video-production/SKILL.md +51 -51
  299. package/vibe/config.json +29 -29
  300. package/vibe/constitution.md +227 -227
  301. package/vibe/rules/principles/communication-guide.md +98 -98
  302. package/vibe/rules/principles/development-philosophy.md +52 -52
  303. package/vibe/rules/principles/quick-start.md +102 -102
  304. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  305. package/vibe/rules/quality/checklist.md +276 -276
  306. package/vibe/rules/quality/performance.md +236 -236
  307. package/vibe/rules/quality/testing-strategy.md +440 -440
  308. package/vibe/rules/standards/anti-patterns.md +541 -541
  309. package/vibe/rules/standards/code-structure.md +291 -291
  310. package/vibe/rules/standards/complexity-metrics.md +313 -313
  311. package/vibe/rules/standards/git-workflow.md +237 -237
  312. package/vibe/rules/standards/naming-conventions.md +198 -198
  313. package/vibe/rules/standards/security.md +305 -305
  314. package/vibe/rules/writing/document-style.md +74 -74
  315. package/vibe/setup.sh +31 -31
  316. package/vibe/templates/constitution-template.md +252 -252
  317. package/vibe/templates/contract-backend-template.md +526 -526
  318. package/vibe/templates/contract-frontend-template.md +599 -599
  319. package/vibe/templates/feature-template.md +96 -96
  320. package/vibe/templates/spec-template.md +221 -221
  321. package/vibe/ui-ux-data/charts.csv +26 -26
  322. package/vibe/ui-ux-data/colors.csv +97 -97
  323. package/vibe/ui-ux-data/icons.csv +101 -101
  324. package/vibe/ui-ux-data/landing.csv +31 -31
  325. package/vibe/ui-ux-data/products.csv +96 -96
  326. package/vibe/ui-ux-data/react-performance.csv +45 -45
  327. package/vibe/ui-ux-data/stacks/astro.csv +54 -54
  328. package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
  329. package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
  330. package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
  331. package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
  332. package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
  333. package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
  334. package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
  335. package/vibe/ui-ux-data/stacks/react.csv +54 -54
  336. package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
  337. package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
  338. package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
  339. package/vibe/ui-ux-data/stacks/vue.csv +50 -50
  340. package/vibe/ui-ux-data/styles.csv +68 -68
  341. package/vibe/ui-ux-data/typography.csv +57 -57
  342. package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
  343. package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
  344. package/vibe/ui-ux-data/version.json +31 -31
  345. package/vibe/ui-ux-data/web-interface.csv +31 -31
@@ -0,0 +1,319 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { join } from 'path';
3
+ import { tmpdir } from 'os';
4
+ import { rmSync } from 'fs';
5
+ import { MemoryStorage } from '../../memory/MemoryStorage.js';
6
+ import { ParityTester, PARITY_THRESHOLDS } from '../ParityTester.js';
7
+ function makeTester() {
8
+ const testDir = join(tmpdir(), `parity-${Date.now()}-${Math.random().toString(36).slice(2)}`);
9
+ const storage = new MemoryStorage(testDir);
10
+ const tester = new ParityTester(storage);
11
+ return { tester, storage, testDir };
12
+ }
13
+ describe('ParityTester', () => {
14
+ let tester;
15
+ let storage;
16
+ let testDir;
17
+ beforeEach(() => {
18
+ ({ tester, storage, testDir } = makeTester());
19
+ });
20
+ afterEach(() => {
21
+ storage.close();
22
+ try {
23
+ rmSync(testDir, { recursive: true, force: true });
24
+ }
25
+ catch { /* ignore */ }
26
+ });
27
+ // ─── Model Registration ──────────────────────────────────────────────────────
28
+ describe('model registration', () => {
29
+ it('registers a model and returns ModelVersion', () => {
30
+ const model = tester.registerModel('claude-sonnet-4-5', 'Claude Sonnet 4.5');
31
+ expect(model.id).toBe('claude-sonnet-4-5');
32
+ expect(model.name).toBe('Claude Sonnet 4.5');
33
+ expect(model.registeredAt).toBeTruthy();
34
+ });
35
+ it('retrieves all registered models', () => {
36
+ tester.registerModel('claude-sonnet-4-5', 'Claude Sonnet 4.5');
37
+ tester.registerModel('claude-sonnet-4-6', 'Claude Sonnet 4.6');
38
+ const models = tester.getModels();
39
+ expect(models).toHaveLength(2);
40
+ expect(models.map(m => m.id)).toEqual(['claude-sonnet-4-5', 'claude-sonnet-4-6']);
41
+ });
42
+ it('replaces model on re-registration', () => {
43
+ tester.registerModel('claude-sonnet-4-5', 'Old Name');
44
+ tester.registerModel('claude-sonnet-4-5', 'New Name');
45
+ const models = tester.getModels();
46
+ expect(models).toHaveLength(1);
47
+ expect(models[0].name).toBe('New Name');
48
+ });
49
+ it('returns empty array when no models registered', () => {
50
+ expect(tester.getModels()).toEqual([]);
51
+ });
52
+ });
53
+ // ─── Record Baseline ─────────────────────────────────────────────────────────
54
+ describe('recordModelBaseline', () => {
55
+ it('records baseline results without error', () => {
56
+ tester.registerModel('claude-sonnet-4-5', 'Claude Sonnet 4.5');
57
+ expect(() => {
58
+ tester.recordModelBaseline('my-skill', 'claude-sonnet-4-5', [
59
+ { evalId: 'eval-1', passed: true, output: 'good', durationMs: 100, tokenCount: 50 },
60
+ { evalId: 'eval-2', passed: false, output: 'bad', durationMs: 200, tokenCount: 80 },
61
+ ]);
62
+ }).not.toThrow();
63
+ });
64
+ it('accepts optional prompt field', () => {
65
+ expect(() => {
66
+ tester.recordModelBaseline('my-skill', 'claude-sonnet-4-5', [
67
+ { evalId: 'eval-1', passed: true, output: 'ok', durationMs: 100, tokenCount: 50, prompt: 'Do X' },
68
+ ]);
69
+ }).not.toThrow();
70
+ });
71
+ });
72
+ // ─── Parity Test: Obsolete Candidate ─────────────────────────────────────────
73
+ describe('runParityTest — obsolete candidate', () => {
74
+ it('marks skill as obsolete when new model baseline is close to with-skill', () => {
75
+ const evals = ['eval-1', 'eval-2', 'eval-3', 'eval-4', 'eval-5'];
76
+ // Old model: 2/5 pass
77
+ tester.recordModelBaseline('skill-a', 'old-model', evals.map((id, i) => ({
78
+ evalId: id, passed: i < 2, output: '', durationMs: 100, tokenCount: 50, prompt: `prompt-${id}`,
79
+ })));
80
+ // New model: 5/5 pass (much better)
81
+ tester.recordModelBaseline('skill-a', 'new-model', evals.map(id => ({
82
+ evalId: id, passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: `prompt-${id}`,
83
+ })));
84
+ // With-skill: 5/5 pass
85
+ tester.recordModelBaseline('skill-a', 'with_skill', evals.map(id => ({
86
+ evalId: id, passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: `prompt-${id}`,
87
+ })));
88
+ const result = tester.runParityTest('skill-a', 'old-model', 'new-model');
89
+ expect(result.oldBaselinePassRate).toBeCloseTo(0.4);
90
+ expect(result.newBaselinePassRate).toBeCloseTo(1.0);
91
+ expect(result.withSkillPassRate).toBeCloseTo(1.0);
92
+ expect(result.parityScore).toBeCloseTo(1.0);
93
+ expect(result.obsoleteCandidate).toBe(true);
94
+ });
95
+ it('parityScore is capped at 1.0 even if new baseline exceeds with-skill', () => {
96
+ // new baseline: 4/4, with_skill: 3/4 → ratio would be 4/3 > 1.0
97
+ tester.recordModelBaseline('skill-b', 'old-model', [
98
+ { evalId: 'e1', passed: false, output: '', durationMs: 100, tokenCount: 50 },
99
+ ]);
100
+ tester.recordModelBaseline('skill-b', 'new-model', [
101
+ { evalId: 'e1', passed: true, output: '', durationMs: 100, tokenCount: 50 },
102
+ { evalId: 'e2', passed: true, output: '', durationMs: 100, tokenCount: 50 },
103
+ { evalId: 'e3', passed: true, output: '', durationMs: 100, tokenCount: 50 },
104
+ { evalId: 'e4', passed: true, output: '', durationMs: 100, tokenCount: 50 },
105
+ ]);
106
+ tester.recordModelBaseline('skill-b', 'with_skill', [
107
+ { evalId: 'e1', passed: true, output: '', durationMs: 100, tokenCount: 50 },
108
+ { evalId: 'e2', passed: true, output: '', durationMs: 100, tokenCount: 50 },
109
+ { evalId: 'e3', passed: true, output: '', durationMs: 100, tokenCount: 50 },
110
+ { evalId: 'e4', passed: false, output: '', durationMs: 100, tokenCount: 50 },
111
+ ]);
112
+ const result = tester.runParityTest('skill-b', 'old-model', 'new-model');
113
+ expect(result.parityScore).toBeLessThanOrEqual(1.0);
114
+ });
115
+ });
116
+ // ─── Parity Test: Not Obsolete ───────────────────────────────────────────────
117
+ describe('runParityTest — not obsolete', () => {
118
+ it('does not mark skill as obsolete when new model is same as old', () => {
119
+ const evals = ['eval-1', 'eval-2', 'eval-3'];
120
+ // Old model: 1/3 pass
121
+ tester.recordModelBaseline('skill-c', 'old-model', evals.map((id, i) => ({
122
+ evalId: id, passed: i === 0, output: '', durationMs: 100, tokenCount: 50,
123
+ })));
124
+ // New model: same 1/3 pass
125
+ tester.recordModelBaseline('skill-c', 'new-model', evals.map((id, i) => ({
126
+ evalId: id, passed: i === 0, output: '', durationMs: 100, tokenCount: 50,
127
+ })));
128
+ // With-skill: 3/3 pass
129
+ tester.recordModelBaseline('skill-c', 'with_skill', evals.map(id => ({
130
+ evalId: id, passed: true, output: '', durationMs: 100, tokenCount: 50,
131
+ })));
132
+ const result = tester.runParityTest('skill-c', 'old-model', 'new-model');
133
+ expect(result.newBaselinePassRate).toBeCloseTo(1 / 3);
134
+ expect(result.parityScore).toBeCloseTo(1 / 3);
135
+ expect(result.obsoleteCandidate).toBe(false);
136
+ });
137
+ it('does not mark as obsolete when parity is just below threshold', () => {
138
+ // new baseline: 84%, with_skill: 100% → parity = 0.84 < 0.85
139
+ const evals = Array.from({ length: 100 }, (_, i) => `eval-${i}`);
140
+ tester.recordModelBaseline('skill-d', 'old-model', evals.map((id, i) => ({
141
+ evalId: id, passed: i < 50, output: '', durationMs: 10, tokenCount: 10,
142
+ })));
143
+ tester.recordModelBaseline('skill-d', 'new-model', evals.map((id, i) => ({
144
+ evalId: id, passed: i < 84, output: '', durationMs: 10, tokenCount: 10,
145
+ })));
146
+ tester.recordModelBaseline('skill-d', 'with_skill', evals.map(id => ({
147
+ evalId: id, passed: true, output: '', durationMs: 10, tokenCount: 10,
148
+ })));
149
+ const result = tester.runParityTest('skill-d', 'old-model', 'new-model');
150
+ expect(result.parityScore).toBeCloseTo(0.84);
151
+ expect(result.obsoleteCandidate).toBe(false);
152
+ });
153
+ });
154
+ // ─── Parity Test: Threshold Boundary ─────────────────────────────────────────
155
+ describe('runParityTest — threshold boundary', () => {
156
+ it(`marks obsolete at exactly OBSOLESCENCE_RATIO (${PARITY_THRESHOLDS.OBSOLESCENCE_RATIO})`, () => {
157
+ // 17/20 = 0.85 new baseline, 20/20 with-skill → parity = 0.85
158
+ const evals = Array.from({ length: 20 }, (_, i) => `e-${i}`);
159
+ tester.recordModelBaseline('skill-e', 'old-model', evals.map((id, i) => ({
160
+ evalId: id, passed: i < 10, output: '', durationMs: 10, tokenCount: 10,
161
+ })));
162
+ tester.recordModelBaseline('skill-e', 'new-model', evals.map((id, i) => ({
163
+ evalId: id, passed: i < 17, output: '', durationMs: 10, tokenCount: 10,
164
+ })));
165
+ tester.recordModelBaseline('skill-e', 'with_skill', evals.map(id => ({
166
+ evalId: id, passed: true, output: '', durationMs: 10, tokenCount: 10,
167
+ })));
168
+ const result = tester.runParityTest('skill-e', 'old-model', 'new-model');
169
+ expect(result.parityScore).toBeCloseTo(0.85);
170
+ expect(result.obsoleteCandidate).toBe(true);
171
+ });
172
+ });
173
+ // ─── EvalComparisons ─────────────────────────────────────────────────────────
174
+ describe('evalComparisons', () => {
175
+ it('computes improved flag correctly', () => {
176
+ tester.recordModelBaseline('skill-f', 'old-model', [
177
+ { evalId: 'e1', passed: false, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q1' },
178
+ { evalId: 'e2', passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q2' },
179
+ { evalId: 'e3', passed: false, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q3' },
180
+ ]);
181
+ tester.recordModelBaseline('skill-f', 'new-model', [
182
+ { evalId: 'e1', passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q1' }, // improved
183
+ { evalId: 'e2', passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q2' }, // not improved (was already passing)
184
+ { evalId: 'e3', passed: false, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q3' }, // not improved
185
+ ]);
186
+ tester.recordModelBaseline('skill-f', 'with_skill', [
187
+ { evalId: 'e1', passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q1' },
188
+ { evalId: 'e2', passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q2' },
189
+ { evalId: 'e3', passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: 'Q3' },
190
+ ]);
191
+ const result = tester.runParityTest('skill-f', 'old-model', 'new-model');
192
+ const e1 = result.evalComparisons.find(c => c.evalId === 'e1');
193
+ const e2 = result.evalComparisons.find(c => c.evalId === 'e2');
194
+ const e3 = result.evalComparisons.find(c => c.evalId === 'e3');
195
+ expect(e1?.improved).toBe(true);
196
+ expect(e2?.improved).toBe(false);
197
+ expect(e3?.improved).toBe(false);
198
+ expect(e1?.prompt).toBe('Q1');
199
+ });
200
+ });
201
+ // ─── History and Latest ───────────────────────────────────────────────────────
202
+ describe('getHistory and getLatest', () => {
203
+ it('returns empty history for unknown skill', () => {
204
+ expect(tester.getHistory('no-such-skill')).toEqual([]);
205
+ });
206
+ it('returns null latest for unknown skill', () => {
207
+ expect(tester.getLatest('no-such-skill')).toBeNull();
208
+ });
209
+ it('accumulates history over multiple runs', () => {
210
+ const setup = (modelId, passCount, total) => {
211
+ const evals = Array.from({ length: total }, (_, i) => `e-${i}`);
212
+ tester.recordModelBaseline('skill-g', modelId, evals.map((id, i) => ({
213
+ evalId: id, passed: i < passCount, output: '', durationMs: 10, tokenCount: 10,
214
+ })));
215
+ };
216
+ setup('with_skill', 5, 5);
217
+ setup('old-model', 2, 5);
218
+ setup('new-model-v1', 3, 5);
219
+ tester.runParityTest('skill-g', 'old-model', 'new-model-v1');
220
+ setup('new-model-v2', 5, 5);
221
+ tester.runParityTest('skill-g', 'old-model', 'new-model-v2');
222
+ const history = tester.getHistory('skill-g');
223
+ expect(history).toHaveLength(2);
224
+ expect(history[0].newModel).toBe('new-model-v1');
225
+ expect(history[1].newModel).toBe('new-model-v2');
226
+ });
227
+ it('getLatest returns the most recent test', () => {
228
+ const setup = (modelId, passCount, total) => {
229
+ const evals = Array.from({ length: total }, (_, i) => `e-${i}`);
230
+ tester.recordModelBaseline('skill-h', modelId, evals.map((id, i) => ({
231
+ evalId: id, passed: i < passCount, output: '', durationMs: 10, tokenCount: 10,
232
+ })));
233
+ };
234
+ setup('with_skill', 5, 5);
235
+ setup('old-model', 1, 5);
236
+ setup('new-model-a', 3, 5);
237
+ const firstResult = tester.runParityTest('skill-h', 'old-model', 'new-model-a');
238
+ setup('new-model-b', 5, 5);
239
+ const secondResult = tester.runParityTest('skill-h', 'old-model', 'new-model-b');
240
+ // Verify second result is more recent by timestamp
241
+ expect(secondResult.timestamp >= firstResult.timestamp).toBe(true);
242
+ // getLatest should return the entry with the lexicographically greatest createdAt (ISO string)
243
+ // If timestamps are equal (same millisecond), verify we get one of the two valid results
244
+ const latest = tester.getLatest('skill-h');
245
+ expect(latest).not.toBeNull();
246
+ expect(['new-model-a', 'new-model-b']).toContain(latest.newModel);
247
+ // The second result should be obsolete
248
+ expect(secondResult.obsoleteCandidate).toBe(true);
249
+ });
250
+ });
251
+ // ─── Edge Cases ───────────────────────────────────────────────────────────────
252
+ describe('edge cases', () => {
253
+ it('handles empty baseline results — parityScore = 0, not obsolete', () => {
254
+ const result = tester.runParityTest('empty-skill', 'old-model', 'new-model');
255
+ expect(result.oldBaselinePassRate).toBe(0);
256
+ expect(result.newBaselinePassRate).toBe(0);
257
+ expect(result.withSkillPassRate).toBe(0);
258
+ expect(result.parityScore).toBe(0);
259
+ expect(result.obsoleteCandidate).toBe(false);
260
+ expect(result.evalComparisons).toEqual([]);
261
+ });
262
+ it('returns parity score 1.0 when both new baseline and with-skill are 0 but new baseline has results', () => {
263
+ // new baseline passes, but with_skill has no data → parityScore = 1.0 (new baseline > 0, with_skill = 0)
264
+ tester.recordModelBaseline('skill-zero', 'new-model', [
265
+ { evalId: 'e1', passed: true, output: '', durationMs: 100, tokenCount: 50 },
266
+ ]);
267
+ const result = tester.runParityTest('skill-zero', 'old-model', 'new-model');
268
+ expect(result.withSkillPassRate).toBe(0);
269
+ expect(result.parityScore).toBe(1.0);
270
+ expect(result.obsoleteCandidate).toBe(true);
271
+ });
272
+ it('persists result id and timestamp', () => {
273
+ const result = tester.runParityTest('skill-ids', 'old-model', 'new-model');
274
+ expect(result.id).toMatch(/^parity-/);
275
+ expect(result.timestamp).toBeTruthy();
276
+ expect(new Date(result.timestamp).getTime()).not.toBeNaN();
277
+ });
278
+ });
279
+ // ─── Format Report ────────────────────────────────────────────────────────────
280
+ describe('formatReport', () => {
281
+ it('produces a markdown report with summary table', () => {
282
+ const evals = ['e1', 'e2', 'e3', 'e4'];
283
+ tester.recordModelBaseline('skill-rpt', 'old-model', evals.map((id, i) => ({
284
+ evalId: id, passed: i < 1, output: '', durationMs: 100, tokenCount: 50, prompt: `Prompt ${id}`,
285
+ })));
286
+ tester.recordModelBaseline('skill-rpt', 'new-model', evals.map((id, i) => ({
287
+ evalId: id, passed: i < 4, output: '', durationMs: 100, tokenCount: 50, prompt: `Prompt ${id}`,
288
+ })));
289
+ tester.recordModelBaseline('skill-rpt', 'with_skill', evals.map(id => ({
290
+ evalId: id, passed: true, output: '', durationMs: 100, tokenCount: 50, prompt: `Prompt ${id}`,
291
+ })));
292
+ const result = tester.runParityTest('skill-rpt', 'old-model', 'new-model');
293
+ const report = tester.formatReport(result);
294
+ expect(report).toContain('# Parity Report: skill-rpt');
295
+ expect(report).toContain('Old Model');
296
+ expect(report).toContain('New Model');
297
+ expect(report).toContain('Parity Score');
298
+ expect(report).toContain('YES');
299
+ expect(report).toContain('deprecation candidate');
300
+ expect(report).toContain('Per-Eval Comparison');
301
+ });
302
+ it('omits recommendation section when not obsolete', () => {
303
+ tester.recordModelBaseline('skill-keep', 'old-model', [
304
+ { evalId: 'e1', passed: false, output: '', durationMs: 100, tokenCount: 50 },
305
+ ]);
306
+ tester.recordModelBaseline('skill-keep', 'new-model', [
307
+ { evalId: 'e1', passed: false, output: '', durationMs: 100, tokenCount: 50 },
308
+ ]);
309
+ tester.recordModelBaseline('skill-keep', 'with_skill', [
310
+ { evalId: 'e1', passed: true, output: '', durationMs: 100, tokenCount: 50 },
311
+ ]);
312
+ const result = tester.runParityTest('skill-keep', 'old-model', 'new-model');
313
+ const report = tester.formatReport(result);
314
+ expect(report).toContain('No');
315
+ expect(report).not.toContain('deprecation candidate');
316
+ });
317
+ });
318
+ });
319
+ //# sourceMappingURL=parity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parity.test.js","sourceRoot":"","sources":["../../../../../src/infra/lib/evolution/__tests__/parity.test.ts"],"names":[],"mappings":"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"}
@@ -28,4 +28,8 @@ export { SkillClassifier } from './SkillClassifier.js';
28
28
  export type { SkillCategory, ClassificationResult } from './SkillClassifier.js';
29
29
  export { DescriptionOptimizer } from './DescriptionOptimizer.js';
30
30
  export type { TriggerEvalQuery, TriggerEvalResult, DescriptionCandidate, OptimizationRun, } from './DescriptionOptimizer.js';
31
+ export { DeprecationDetector } from './DeprecationDetector.js';
32
+ export type { DeprecationCandidate, DeprecationReport } from './DeprecationDetector.js';
33
+ export { ParityTester, PARITY_THRESHOLDS } from './ParityTester.js';
34
+ export type { ParityTestResult, ModelVersion, EvalComparison } from './ParityTester.js';
31
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGnH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAC3D,UAAU,EAAE,YAAY,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,GAC3E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,GAC3E,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGnH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAC3D,UAAU,EAAE,YAAY,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,GAC3E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,GAC3E,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -23,4 +23,7 @@ export { SkillEvalRunner } from './SkillEvalRunner.js';
23
23
  export { SkillBenchmark } from './SkillBenchmark.js';
24
24
  export { SkillClassifier } from './SkillClassifier.js';
25
25
  export { DescriptionOptimizer } from './DescriptionOptimizer.js';
26
+ export { DeprecationDetector } from './DeprecationDetector.js';
27
+ // Phase 5b: Model Parity Testing
28
+ export { ParityTester, PARITY_THRESHOLDS } from './ParityTester.js';
26
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -28,35 +28,35 @@ export async function coreGeminiOrchestrate(prompt, systemPrompt, options = {})
28
28
  * Core Spec 파싱 (Core Spec → 실행 계획)
29
29
  */
30
30
  export async function coreGeminiParseSpec(spec) {
31
- return coreGeminiOrchestrate(spec, `You are a Core Spec parser. Parse the given specification and output a structured execution plan.
31
+ return coreGeminiOrchestrate(spec, `You are a Core Spec parser. Parse the given specification and output a structured execution plan.
32
32
  Output format: { "phases": [...], "files": [...], "dependencies": [...] }`);
33
33
  }
34
34
  /**
35
35
  * Core 실행 계획 수립 (Task → Steps)
36
36
  */
37
37
  export async function coreGeminiPlanExecution(task, context) {
38
- return coreGeminiOrchestrate(`Task: ${task}\n\nContext:\n${context}`, `You are a Core execution planner. Given a task and context, create a step-by-step execution plan.
38
+ return coreGeminiOrchestrate(`Task: ${task}\n\nContext:\n${context}`, `You are a Core execution planner. Given a task and context, create a step-by-step execution plan.
39
39
  Output format: { "steps": [{ "id": 1, "action": "...", "target": "...", "expected": "..." }], "estimatedComplexity": "low|medium|high" }`);
40
40
  }
41
41
  /**
42
42
  * Core 코드 분석 (빠른 구조 분석)
43
43
  */
44
44
  export async function coreGeminiAnalyze(code, question) {
45
- return coreGeminiOrchestrate(`Code:\n\`\`\`\n${code}\n\`\`\`\n\nQuestion: ${question}`, `You are a code analyzer. Answer the question about the given code concisely.
45
+ return coreGeminiOrchestrate(`Code:\n\`\`\`\n${code}\n\`\`\`\n\nQuestion: ${question}`, `You are a code analyzer. Answer the question about the given code concisely.
46
46
  Output format: { "answer": "...", "confidence": 0.0-1.0, "relatedSymbols": [...] }`);
47
47
  }
48
48
  /**
49
49
  * Core 다음 액션 결정 (상태 기반)
50
50
  */
51
51
  export async function coreGeminiDecideNextAction(currentState, availableActions, goal) {
52
- return coreGeminiOrchestrate(`Current State:\n${currentState}\n\nAvailable Actions:\n${availableActions.join('\n')}\n\nGoal: ${goal}`, `You are an action decider. Based on the current state and goal, select the best next action.
52
+ return coreGeminiOrchestrate(`Current State:\n${currentState}\n\nAvailable Actions:\n${availableActions.join('\n')}\n\nGoal: ${goal}`, `You are an action decider. Based on the current state and goal, select the best next action.
53
53
  Output format: { "selectedAction": "...", "reason": "...", "parameters": {} }`);
54
54
  }
55
55
  /**
56
56
  * Core UI/UX 분석 (검색 없이 내부 지식으로)
57
57
  */
58
58
  export async function coreGeminiAnalyzeUX(description) {
59
- return coreGeminiOrchestrate(description, `You are a UI/UX expert. Analyze the given design description and provide structured feedback.
59
+ return coreGeminiOrchestrate(description, `You are a UI/UX expert. Analyze the given design description and provide structured feedback.
60
60
  Output format: { "issues": [...], "suggestions": [...], "accessibility": { "score": 0-100, "concerns": [...] } }`, { jsonMode: true });
61
61
  }
62
62
  //# sourceMappingURL=orchestration.js.map
@@ -25,28 +25,28 @@ export async function coreGptOrchestrate(prompt, systemPrompt, options = {}) {
25
25
  * Core Spec 파싱 (Core Spec → 실행 계획)
26
26
  */
27
27
  export async function coreGptParseSpec(spec) {
28
- return coreGptOrchestrate(spec, `You are a Core Spec parser. Parse the given specification and output a structured execution plan.
28
+ return coreGptOrchestrate(spec, `You are a Core Spec parser. Parse the given specification and output a structured execution plan.
29
29
  Output format: { "phases": [...], "files": [...], "dependencies": [...] }`);
30
30
  }
31
31
  /**
32
32
  * Core 실행 계획 수립 (Task → Steps)
33
33
  */
34
34
  export async function coreGptPlanExecution(task, context) {
35
- return coreGptOrchestrate(`Task: ${task}\n\nContext:\n${context}`, `You are a Core execution planner. Given a task and context, create a step-by-step execution plan.
35
+ return coreGptOrchestrate(`Task: ${task}\n\nContext:\n${context}`, `You are a Core execution planner. Given a task and context, create a step-by-step execution plan.
36
36
  Output format: { "steps": [{ "id": 1, "action": "...", "target": "...", "expected": "..." }], "estimatedComplexity": "low|medium|high" }`);
37
37
  }
38
38
  /**
39
39
  * Core 코드 분석 (빠른 구조 분석)
40
40
  */
41
41
  export async function coreGptAnalyze(code, question) {
42
- return coreGptOrchestrate(`Code:\n\`\`\`\n${code}\n\`\`\`\n\nQuestion: ${question}`, `You are a code analyzer. Answer the question about the given code concisely.
42
+ return coreGptOrchestrate(`Code:\n\`\`\`\n${code}\n\`\`\`\n\nQuestion: ${question}`, `You are a code analyzer. Answer the question about the given code concisely.
43
43
  Output format: { "answer": "...", "confidence": 0.0-1.0, "relatedSymbols": [...] }`);
44
44
  }
45
45
  /**
46
46
  * Core 다음 액션 결정 (상태 기반)
47
47
  */
48
48
  export async function coreGptDecideNextAction(currentState, availableActions, goal) {
49
- return coreGptOrchestrate(`Current State:\n${currentState}\n\nAvailable Actions:\n${availableActions.join('\n')}\n\nGoal: ${goal}`, `You are an action decider. Based on the current state and goal, select the best next action.
49
+ return coreGptOrchestrate(`Current State:\n${currentState}\n\nAvailable Actions:\n${availableActions.join('\n')}\n\nGoal: ${goal}`, `You are an action decider. Based on the current state and goal, select the best next action.
50
50
  Output format: { "selectedAction": "...", "reason": "...", "parameters": {} }`);
51
51
  }
52
52
  //# sourceMappingURL=orchestration.js.map
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export declare function analyzeArchitecture(prompt: string): Promise<string>;
8
8
  /**
9
- * 코드 디버깅 (GPT-5.3 Codex 사용 — 코딩 특화)
9
+ * 코드 디버깅 (GPT-5.4 Codex 사용 — 코딩 특화)
10
10
  */
11
11
  export declare function debugCode(prompt: string): Promise<string>;
12
12
  //# sourceMappingURL=specializations.d.ts.map
@@ -14,7 +14,7 @@ export async function analyzeArchitecture(prompt) {
14
14
  });
15
15
  }
16
16
  /**
17
- * 코드 디버깅 (GPT-5.3 Codex 사용 — 코딩 특화)
17
+ * 코드 디버깅 (GPT-5.4 Codex 사용 — 코딩 특화)
18
18
  */
19
19
  export async function debugCode(prompt) {
20
20
  return ask(prompt, {
@@ -14,10 +14,10 @@ export class KnowledgeGraph {
14
14
  const timestamp = new Date().toISOString();
15
15
  const metadataJson = metadata ? JSON.stringify(metadata) : null;
16
16
  try {
17
- const stmt = this.db.prepare(`
18
- INSERT OR REPLACE INTO memory_relations
19
- (sourceKey, targetKey, relationType, strength, metadata, timestamp)
20
- VALUES (?, ?, ?, ?, ?, ?)
17
+ const stmt = this.db.prepare(`
18
+ INSERT OR REPLACE INTO memory_relations
19
+ (sourceKey, targetKey, relationType, strength, metadata, timestamp)
20
+ VALUES (?, ?, ?, ?, ?, ?)
21
21
  `);
22
22
  stmt.run(sourceKey, targetKey, relationType, strength, metadataJson, timestamp);
23
23
  return true;