@su-record/vibe 3.2.13 → 3.2.15

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 (305) hide show
  1. package/CLAUDE.md +15 -14
  2. package/README.en.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/cli/setup/ProjectSetup.d.ts +6 -0
  5. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
  6. package/dist/cli/setup/ProjectSetup.js +19 -13
  7. package/dist/cli/setup/ProjectSetup.js.map +1 -1
  8. package/dist/infra/lib/codex-proxy.d.ts +126 -0
  9. package/dist/infra/lib/codex-proxy.d.ts.map +1 -1
  10. package/dist/infra/lib/codex-proxy.js +16 -16
  11. package/dist/infra/lib/codex-proxy.js.map +1 -1
  12. package/dist/infra/lib/figma/audit.d.ts.map +1 -1
  13. package/dist/infra/lib/figma/audit.js +0 -2
  14. package/dist/infra/lib/figma/audit.js.map +1 -1
  15. package/dist/infra/lib/figma/extract.d.ts +6 -1
  16. package/dist/infra/lib/figma/extract.d.ts.map +1 -1
  17. package/dist/infra/lib/figma/extract.js +17 -15
  18. package/dist/infra/lib/figma/extract.js.map +1 -1
  19. package/dist/infra/lib/figma/types.d.ts +103 -0
  20. package/dist/infra/lib/figma/types.d.ts.map +1 -1
  21. package/dist/infra/lib/figma/types.js +8 -0
  22. package/dist/infra/lib/figma/types.js.map +1 -1
  23. package/hooks/hooks.json +1 -1
  24. package/hooks/scripts/clone-extract.js +16 -1
  25. package/hooks/scripts/code-check.js +72 -55
  26. package/hooks/scripts/lib/anchor.js +74 -0
  27. package/hooks/scripts/lib/console-allow.js +66 -0
  28. package/hooks/scripts/lib/dispatcher.js +71 -19
  29. package/hooks/scripts/lib/inbox.js +60 -0
  30. package/hooks/scripts/loop-ledger.js +24 -1
  31. package/hooks/scripts/post-edit-dispatcher.js +4 -3
  32. package/hooks/scripts/post-edit.js +2 -2
  33. package/package.json +13 -9
  34. package/skills/vibe/SKILL.md +2 -1
  35. package/skills/vibe.clone/references/verification-loops.md +6 -3
  36. package/skills/vibe.loop/SKILL.md +7 -4
  37. package/skills/vibe.review/SKILL.md +5 -1
  38. package/skills/vibe.run/references/e2e-and-autofix.md +1 -1
  39. package/skills/vibe.run/references/process-steps.md +1 -1
  40. package/vibe/constitution.md +1 -1
  41. package/vibe/rules/loop-contract.md +40 -3
  42. package/vibe/rules/quality/checklist.md +3 -3
  43. package/vibe/templates/constitution-template.md +1 -1
  44. package/dist/__tests__/agent-model-sync.test.d.ts +0 -2
  45. package/dist/__tests__/agent-model-sync.test.d.ts.map +0 -1
  46. package/dist/__tests__/agent-model-sync.test.js +0 -71
  47. package/dist/__tests__/agent-model-sync.test.js.map +0 -1
  48. package/dist/__tests__/architecture.test.d.ts +0 -2
  49. package/dist/__tests__/architecture.test.d.ts.map +0 -1
  50. package/dist/__tests__/architecture.test.js +0 -207
  51. package/dist/__tests__/architecture.test.js.map +0 -1
  52. package/dist/__tests__/skill-namespace.test.d.ts +0 -2
  53. package/dist/__tests__/skill-namespace.test.d.ts.map +0 -1
  54. package/dist/__tests__/skill-namespace.test.js +0 -60
  55. package/dist/__tests__/skill-namespace.test.js.map +0 -1
  56. package/dist/__tests__/stakes-contract.test.d.ts +0 -2
  57. package/dist/__tests__/stakes-contract.test.d.ts.map +0 -1
  58. package/dist/__tests__/stakes-contract.test.js +0 -166
  59. package/dist/__tests__/stakes-contract.test.js.map +0 -1
  60. package/dist/__tests__/stuck-semantics.test.d.ts +0 -2
  61. package/dist/__tests__/stuck-semantics.test.d.ts.map +0 -1
  62. package/dist/__tests__/stuck-semantics.test.js +0 -109
  63. package/dist/__tests__/stuck-semantics.test.js.map +0 -1
  64. package/dist/__tests__/wiring-integrity.test.d.ts +0 -2
  65. package/dist/__tests__/wiring-integrity.test.d.ts.map +0 -1
  66. package/dist/__tests__/wiring-integrity.test.js +0 -160
  67. package/dist/__tests__/wiring-integrity.test.js.map +0 -1
  68. package/dist/cli/commands/info.test.d.ts +0 -2
  69. package/dist/cli/commands/info.test.d.ts.map +0 -1
  70. package/dist/cli/commands/info.test.js +0 -74
  71. package/dist/cli/commands/info.test.js.map +0 -1
  72. package/dist/cli/commands/upgrade.test.d.ts +0 -2
  73. package/dist/cli/commands/upgrade.test.d.ts.map +0 -1
  74. package/dist/cli/commands/upgrade.test.js +0 -99
  75. package/dist/cli/commands/upgrade.test.js.map +0 -1
  76. package/dist/cli/design/design-md-parser.test.d.ts +0 -2
  77. package/dist/cli/design/design-md-parser.test.d.ts.map +0 -1
  78. package/dist/cli/design/design-md-parser.test.js +0 -149
  79. package/dist/cli/design/design-md-parser.test.js.map +0 -1
  80. package/dist/cli/detect.characterization.test.d.ts +0 -7
  81. package/dist/cli/detect.characterization.test.d.ts.map +0 -1
  82. package/dist/cli/detect.characterization.test.js +0 -294
  83. package/dist/cli/detect.characterization.test.js.map +0 -1
  84. package/dist/cli/postinstall/fs-utils.test.d.ts +0 -2
  85. package/dist/cli/postinstall/fs-utils.test.d.ts.map +0 -1
  86. package/dist/cli/postinstall/fs-utils.test.js +0 -259
  87. package/dist/cli/postinstall/fs-utils.test.js.map +0 -1
  88. package/dist/cli/setup/CodexHooks.test.d.ts +0 -2
  89. package/dist/cli/setup/CodexHooks.test.d.ts.map +0 -1
  90. package/dist/cli/setup/CodexHooks.test.js +0 -52
  91. package/dist/cli/setup/CodexHooks.test.js.map +0 -1
  92. package/dist/cli/setup/GlobalInstaller.test.d.ts +0 -2
  93. package/dist/cli/setup/GlobalInstaller.test.d.ts.map +0 -1
  94. package/dist/cli/setup/GlobalInstaller.test.js +0 -16
  95. package/dist/cli/setup/GlobalInstaller.test.js.map +0 -1
  96. package/dist/cli/utils/cli-detector.test.d.ts +0 -2
  97. package/dist/cli/utils/cli-detector.test.d.ts.map +0 -1
  98. package/dist/cli/utils/cli-detector.test.js +0 -52
  99. package/dist/cli/utils/cli-detector.test.js.map +0 -1
  100. package/dist/infra/lib/SkillFrontmatter.test.d.ts +0 -2
  101. package/dist/infra/lib/SkillFrontmatter.test.d.ts.map +0 -1
  102. package/dist/infra/lib/SkillFrontmatter.test.js +0 -60
  103. package/dist/infra/lib/SkillFrontmatter.test.js.map +0 -1
  104. package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts +0 -2
  105. package/dist/infra/lib/__tests__/AutomationLevel.test.d.ts.map +0 -1
  106. package/dist/infra/lib/__tests__/AutomationLevel.test.js +0 -297
  107. package/dist/infra/lib/__tests__/AutomationLevel.test.js.map +0 -1
  108. package/dist/infra/lib/__tests__/ComponentRegistry.test.d.ts +0 -2
  109. package/dist/infra/lib/__tests__/ComponentRegistry.test.d.ts.map +0 -1
  110. package/dist/infra/lib/__tests__/ComponentRegistry.test.js +0 -99
  111. package/dist/infra/lib/__tests__/ComponentRegistry.test.js.map +0 -1
  112. package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts +0 -2
  113. package/dist/infra/lib/__tests__/DecisionTracer.test.d.ts.map +0 -1
  114. package/dist/infra/lib/__tests__/DecisionTracer.test.js +0 -274
  115. package/dist/infra/lib/__tests__/DecisionTracer.test.js.map +0 -1
  116. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts +0 -2
  117. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.d.ts.map +0 -1
  118. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js +0 -350
  119. package/dist/infra/lib/__tests__/InteractiveCheckpoint.test.js.map +0 -1
  120. package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts +0 -2
  121. package/dist/infra/lib/__tests__/LoopBreaker.test.d.ts.map +0 -1
  122. package/dist/infra/lib/__tests__/LoopBreaker.test.js +0 -340
  123. package/dist/infra/lib/__tests__/LoopBreaker.test.js.map +0 -1
  124. package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts +0 -2
  125. package/dist/infra/lib/__tests__/VerificationLoop.test.d.ts.map +0 -1
  126. package/dist/infra/lib/__tests__/VerificationLoop.test.js +0 -486
  127. package/dist/infra/lib/__tests__/VerificationLoop.test.js.map +0 -1
  128. package/dist/infra/lib/config/GlobalConfigManager.test.d.ts +0 -2
  129. package/dist/infra/lib/config/GlobalConfigManager.test.d.ts.map +0 -1
  130. package/dist/infra/lib/config/GlobalConfigManager.test.js +0 -9
  131. package/dist/infra/lib/config/GlobalConfigManager.test.js.map +0 -1
  132. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.d.ts +0 -2
  133. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.d.ts.map +0 -1
  134. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js +0 -43
  135. package/dist/infra/lib/embedding/__tests__/EmbeddingProvider.test.js.map +0 -1
  136. package/dist/infra/lib/embedding/__tests__/VectorStore.test.d.ts +0 -2
  137. package/dist/infra/lib/embedding/__tests__/VectorStore.test.d.ts.map +0 -1
  138. package/dist/infra/lib/embedding/__tests__/VectorStore.test.js +0 -94
  139. package/dist/infra/lib/embedding/__tests__/VectorStore.test.js.map +0 -1
  140. package/dist/infra/lib/embedding/__tests__/cosine.test.d.ts +0 -2
  141. package/dist/infra/lib/embedding/__tests__/cosine.test.d.ts.map +0 -1
  142. package/dist/infra/lib/embedding/__tests__/cosine.test.js +0 -73
  143. package/dist/infra/lib/embedding/__tests__/cosine.test.js.map +0 -1
  144. package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts +0 -2
  145. package/dist/infra/lib/evolution/__tests__/deprecation.test.d.ts.map +0 -1
  146. package/dist/infra/lib/evolution/__tests__/deprecation.test.js +0 -251
  147. package/dist/infra/lib/evolution/__tests__/deprecation.test.js.map +0 -1
  148. package/dist/infra/lib/evolution/__tests__/eval.test.d.ts +0 -2
  149. package/dist/infra/lib/evolution/__tests__/eval.test.d.ts.map +0 -1
  150. package/dist/infra/lib/evolution/__tests__/eval.test.js +0 -603
  151. package/dist/infra/lib/evolution/__tests__/eval.test.js.map +0 -1
  152. package/dist/infra/lib/evolution/__tests__/generation.test.d.ts +0 -2
  153. package/dist/infra/lib/evolution/__tests__/generation.test.d.ts.map +0 -1
  154. package/dist/infra/lib/evolution/__tests__/generation.test.js +0 -396
  155. package/dist/infra/lib/evolution/__tests__/generation.test.js.map +0 -1
  156. package/dist/infra/lib/evolution/__tests__/insight.test.d.ts +0 -2
  157. package/dist/infra/lib/evolution/__tests__/insight.test.d.ts.map +0 -1
  158. package/dist/infra/lib/evolution/__tests__/insight.test.js +0 -204
  159. package/dist/infra/lib/evolution/__tests__/insight.test.js.map +0 -1
  160. package/dist/infra/lib/evolution/__tests__/integration.test.d.ts +0 -2
  161. package/dist/infra/lib/evolution/__tests__/integration.test.d.ts.map +0 -1
  162. package/dist/infra/lib/evolution/__tests__/integration.test.js +0 -206
  163. package/dist/infra/lib/evolution/__tests__/integration.test.js.map +0 -1
  164. package/dist/infra/lib/evolution/__tests__/lifecycle.test.d.ts +0 -2
  165. package/dist/infra/lib/evolution/__tests__/lifecycle.test.d.ts.map +0 -1
  166. package/dist/infra/lib/evolution/__tests__/lifecycle.test.js +0 -350
  167. package/dist/infra/lib/evolution/__tests__/lifecycle.test.js.map +0 -1
  168. package/dist/infra/lib/evolution/__tests__/parity.test.d.ts +0 -2
  169. package/dist/infra/lib/evolution/__tests__/parity.test.d.ts.map +0 -1
  170. package/dist/infra/lib/evolution/__tests__/parity.test.js +0 -319
  171. package/dist/infra/lib/evolution/__tests__/parity.test.js.map +0 -1
  172. package/dist/infra/lib/llm/auth/AuthProfileManager.test.d.ts +0 -5
  173. package/dist/infra/lib/llm/auth/AuthProfileManager.test.d.ts.map +0 -1
  174. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js +0 -168
  175. package/dist/infra/lib/llm/auth/AuthProfileManager.test.js.map +0 -1
  176. package/dist/infra/lib/llm/auth/TokenRefresher.test.d.ts +0 -2
  177. package/dist/infra/lib/llm/auth/TokenRefresher.test.d.ts.map +0 -1
  178. package/dist/infra/lib/llm/auth/TokenRefresher.test.js +0 -120
  179. package/dist/infra/lib/llm/auth/TokenRefresher.test.js.map +0 -1
  180. package/dist/infra/lib/llm/timeout.test.d.ts +0 -2
  181. package/dist/infra/lib/llm/timeout.test.d.ts.map +0 -1
  182. package/dist/infra/lib/llm/timeout.test.js +0 -50
  183. package/dist/infra/lib/llm/timeout.test.js.map +0 -1
  184. package/dist/infra/lib/llm-availability.test.d.ts +0 -2
  185. package/dist/infra/lib/llm-availability.test.d.ts.map +0 -1
  186. package/dist/infra/lib/llm-availability.test.js +0 -37
  187. package/dist/infra/lib/llm-availability.test.js.map +0 -1
  188. package/dist/infra/lib/memory/KnowledgeGraph.test.d.ts +0 -2
  189. package/dist/infra/lib/memory/KnowledgeGraph.test.d.ts.map +0 -1
  190. package/dist/infra/lib/memory/KnowledgeGraph.test.js +0 -189
  191. package/dist/infra/lib/memory/KnowledgeGraph.test.js.map +0 -1
  192. package/dist/infra/lib/memory/MemorySearch.test.d.ts +0 -2
  193. package/dist/infra/lib/memory/MemorySearch.test.d.ts.map +0 -1
  194. package/dist/infra/lib/memory/MemorySearch.test.js +0 -149
  195. package/dist/infra/lib/memory/MemorySearch.test.js.map +0 -1
  196. package/dist/infra/lib/memory/MemoryStorage.test.d.ts +0 -2
  197. package/dist/infra/lib/memory/MemoryStorage.test.d.ts.map +0 -1
  198. package/dist/infra/lib/memory/MemoryStorage.test.js +0 -198
  199. package/dist/infra/lib/memory/MemoryStorage.test.js.map +0 -1
  200. package/dist/infra/lib/memory/SessionRAGRetriever.test.d.ts +0 -2
  201. package/dist/infra/lib/memory/SessionRAGRetriever.test.d.ts.map +0 -1
  202. package/dist/infra/lib/memory/SessionRAGRetriever.test.js +0 -180
  203. package/dist/infra/lib/memory/SessionRAGRetriever.test.js.map +0 -1
  204. package/dist/infra/lib/memory/SessionRAGStore.test.d.ts +0 -2
  205. package/dist/infra/lib/memory/SessionRAGStore.test.d.ts.map +0 -1
  206. package/dist/infra/lib/memory/SessionRAGStore.test.js +0 -326
  207. package/dist/infra/lib/memory/SessionRAGStore.test.js.map +0 -1
  208. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.d.ts +0 -2
  209. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.d.ts.map +0 -1
  210. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.js +0 -114
  211. package/dist/infra/lib/memory/__tests__/InMemoryStorage.test.js.map +0 -1
  212. package/dist/infra/lib/memory/__tests__/ReflectionStore.test.d.ts +0 -2
  213. package/dist/infra/lib/memory/__tests__/ReflectionStore.test.d.ts.map +0 -1
  214. package/dist/infra/lib/memory/__tests__/ReflectionStore.test.js +0 -196
  215. package/dist/infra/lib/memory/__tests__/ReflectionStore.test.js.map +0 -1
  216. package/dist/infra/lib/memory/index.test.d.ts +0 -2
  217. package/dist/infra/lib/memory/index.test.d.ts.map +0 -1
  218. package/dist/infra/lib/memory/index.test.js +0 -23
  219. package/dist/infra/lib/memory/index.test.js.map +0 -1
  220. package/dist/infra/lib/telemetry/SkillTelemetry.test.d.ts +0 -2
  221. package/dist/infra/lib/telemetry/SkillTelemetry.test.d.ts.map +0 -1
  222. package/dist/infra/lib/telemetry/SkillTelemetry.test.js +0 -124
  223. package/dist/infra/lib/telemetry/SkillTelemetry.test.js.map +0 -1
  224. package/dist/infra/lib/ui-ux/Bm25Engine.test.d.ts +0 -2
  225. package/dist/infra/lib/ui-ux/Bm25Engine.test.d.ts.map +0 -1
  226. package/dist/infra/lib/ui-ux/Bm25Engine.test.js +0 -159
  227. package/dist/infra/lib/ui-ux/Bm25Engine.test.js.map +0 -1
  228. package/dist/infra/lib/ui-ux/CsvDataLoader.test.d.ts +0 -2
  229. package/dist/infra/lib/ui-ux/CsvDataLoader.test.d.ts.map +0 -1
  230. package/dist/infra/lib/ui-ux/CsvDataLoader.test.js +0 -141
  231. package/dist/infra/lib/ui-ux/CsvDataLoader.test.js.map +0 -1
  232. package/dist/infra/lib/ui-ux/DesignSystemGenerator.test.d.ts +0 -2
  233. package/dist/infra/lib/ui-ux/DesignSystemGenerator.test.d.ts.map +0 -1
  234. package/dist/infra/lib/ui-ux/DesignSystemGenerator.test.js +0 -370
  235. package/dist/infra/lib/ui-ux/DesignSystemGenerator.test.js.map +0 -1
  236. package/dist/infra/lib/ui-ux/SearchService.test.d.ts +0 -2
  237. package/dist/infra/lib/ui-ux/SearchService.test.d.ts.map +0 -1
  238. package/dist/infra/lib/ui-ux/SearchService.test.js +0 -215
  239. package/dist/infra/lib/ui-ux/SearchService.test.js.map +0 -1
  240. package/dist/test-helpers/index.d.ts +0 -36
  241. package/dist/test-helpers/index.d.ts.map +0 -1
  242. package/dist/test-helpers/index.js +0 -85
  243. package/dist/test-helpers/index.js.map +0 -1
  244. package/dist/test-helpers/index.test.d.ts +0 -2
  245. package/dist/test-helpers/index.test.d.ts.map +0 -1
  246. package/dist/test-helpers/index.test.js +0 -92
  247. package/dist/test-helpers/index.test.js.map +0 -1
  248. package/dist/tests/curated-release-notes.test.d.ts +0 -2
  249. package/dist/tests/curated-release-notes.test.d.ts.map +0 -1
  250. package/dist/tests/curated-release-notes.test.js +0 -160
  251. package/dist/tests/curated-release-notes.test.js.map +0 -1
  252. package/dist/tools/convention/analyzeComplexity.test.d.ts +0 -2
  253. package/dist/tools/convention/analyzeComplexity.test.d.ts.map +0 -1
  254. package/dist/tools/convention/analyzeComplexity.test.js +0 -207
  255. package/dist/tools/convention/analyzeComplexity.test.js.map +0 -1
  256. package/dist/tools/convention/validateCodeQuality.test.d.ts +0 -2
  257. package/dist/tools/convention/validateCodeQuality.test.d.ts.map +0 -1
  258. package/dist/tools/convention/validateCodeQuality.test.js +0 -230
  259. package/dist/tools/convention/validateCodeQuality.test.js.map +0 -1
  260. package/dist/tools/loop/validateLoopDefinition.test.d.ts +0 -14
  261. package/dist/tools/loop/validateLoopDefinition.test.d.ts.map +0 -1
  262. package/dist/tools/loop/validateLoopDefinition.test.js +0 -229
  263. package/dist/tools/loop/validateLoopDefinition.test.js.map +0 -1
  264. package/dist/tools/spec/executionPacket.test.d.ts +0 -2
  265. package/dist/tools/spec/executionPacket.test.d.ts.map +0 -1
  266. package/dist/tools/spec/executionPacket.test.js +0 -374
  267. package/dist/tools/spec/executionPacket.test.js.map +0 -1
  268. package/dist/tools/spec/prdParser.test.d.ts +0 -6
  269. package/dist/tools/spec/prdParser.test.d.ts.map +0 -1
  270. package/dist/tools/spec/prdParser.test.js +0 -332
  271. package/dist/tools/spec/prdParser.test.js.map +0 -1
  272. package/dist/tools/spec/specGenerator.test.d.ts +0 -2
  273. package/dist/tools/spec/specGenerator.test.d.ts.map +0 -1
  274. package/dist/tools/spec/specGenerator.test.js +0 -130
  275. package/dist/tools/spec/specGenerator.test.js.map +0 -1
  276. package/dist/tools/spec/traceabilityMatrix.path-resolution.test.d.ts +0 -10
  277. package/dist/tools/spec/traceabilityMatrix.path-resolution.test.d.ts.map +0 -1
  278. package/dist/tools/spec/traceabilityMatrix.path-resolution.test.js +0 -120
  279. package/dist/tools/spec/traceabilityMatrix.path-resolution.test.js.map +0 -1
  280. package/dist/tools/spec/traceabilityMatrix.test.d.ts +0 -6
  281. package/dist/tools/spec/traceabilityMatrix.test.d.ts.map +0 -1
  282. package/dist/tools/spec/traceabilityMatrix.test.js +0 -359
  283. package/dist/tools/spec/traceabilityMatrix.test.js.map +0 -1
  284. package/hooks/scripts/__tests__/.vibe/command-log.txt +0 -3
  285. package/hooks/scripts/__tests__/auto-test-debounce.test.js +0 -145
  286. package/hooks/scripts/__tests__/clone-behaviors.test.js +0 -152
  287. package/hooks/scripts/__tests__/clone-merge-responsive.test.js +0 -106
  288. package/hooks/scripts/__tests__/code-check-detectors.test.js +0 -213
  289. package/hooks/scripts/__tests__/code-check-memory-write.test.js +0 -81
  290. package/hooks/scripts/__tests__/codex-hook-adapter.test.js +0 -64
  291. package/hooks/scripts/__tests__/curation-index.test.js +0 -157
  292. package/hooks/scripts/__tests__/dispatcher-inprocess.test.js +0 -99
  293. package/hooks/scripts/__tests__/figma-extract.test.js +0 -338
  294. package/hooks/scripts/__tests__/hook-payload.test.js +0 -29
  295. package/hooks/scripts/__tests__/llm-orchestrate-antigravity.test.js +0 -66
  296. package/hooks/scripts/__tests__/loop-ledger.test.js +0 -321
  297. package/hooks/scripts/__tests__/post-edit-dispatcher.test.js +0 -139
  298. package/hooks/scripts/__tests__/pre-tool-guard.test.js +0 -523
  299. package/hooks/scripts/__tests__/recipe-extractor.test.js +0 -244
  300. package/hooks/scripts/__tests__/run-ledger-verify-required.test.js +0 -151
  301. package/hooks/scripts/__tests__/run-ledger.test.js +0 -481
  302. package/hooks/scripts/__tests__/scope-from-spec.test.js +0 -215
  303. package/hooks/scripts/__tests__/sentinel-guard.test.js +0 -263
  304. package/hooks/scripts/__tests__/step-counter.test.js +0 -459
  305. package/hooks/scripts/__tests__/utils-npm-root.test.js +0 -99
@@ -1,319 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"parity.test.js","sourceRoot":"","sources":["../../../../../src/infra/lib/evolution/__tests__/parity.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * AuthProfileManager Tests
3
- */
4
- export {};
5
- //# sourceMappingURL=AuthProfileManager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProfileManager.test.d.ts","sourceRoot":"","sources":["../../../../../src/infra/lib/llm/auth/AuthProfileManager.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,168 +0,0 @@
1
- /**
2
- * AuthProfileManager Tests
3
- */
4
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
5
- import fs from 'fs';
6
- import path from 'path';
7
- import os from 'os';
8
- import { AuthProfileManager } from './AuthProfileManager.js';
9
- import { ProfileFileLock } from './ProfileFileLock.js';
10
- const TEST_DIR = path.join(os.tmpdir(), `vibe-auth-test-${process.pid}`);
11
- const TEST_PROFILES_PATH = path.join(TEST_DIR, 'auth-profiles.json');
12
- const TEST_LOCK_PATH = path.join(TEST_DIR, '.auth-profiles.lock');
13
- describe('AuthProfileManager', () => {
14
- let manager;
15
- let lock;
16
- beforeEach(() => {
17
- if (fs.existsSync(TEST_DIR)) {
18
- fs.rmSync(TEST_DIR, { recursive: true });
19
- }
20
- fs.mkdirSync(TEST_DIR, { recursive: true });
21
- lock = new ProfileFileLock(TEST_LOCK_PATH);
22
- manager = new AuthProfileManager(TEST_PROFILES_PATH, lock);
23
- });
24
- afterEach(() => {
25
- try {
26
- if (lock.isLocked())
27
- lock.release();
28
- }
29
- catch { /* ignore */ }
30
- if (fs.existsSync(TEST_DIR)) {
31
- fs.rmSync(TEST_DIR, { recursive: true });
32
- }
33
- });
34
- it('should add and list profiles', async () => {
35
- await manager.addProfile('gpt', 'apikey', 'sk-test1234567890', 1);
36
- await manager.addProfile('gpt', 'codex-cli', 'user@example.com', 2);
37
- const profiles = manager.listProfiles('gpt');
38
- expect(profiles).toHaveLength(2);
39
- expect(profiles[0].identifier).toBe('***7890');
40
- expect(profiles[1].identifier).toBe('user@example.com');
41
- });
42
- it('should return active profile by priority', async () => {
43
- await manager.addProfile('antigravity', 'apikey', 'key-high', 10);
44
- await manager.addProfile('antigravity', 'apikey', 'key-low', 1);
45
- const active = manager.getActiveProfile('antigravity');
46
- expect(active).not.toBeNull();
47
- expect(active.priority).toBe(1);
48
- });
49
- it('should apply cooldown after 3 failures', async () => {
50
- const profile = await manager.addProfile('gpt', 'apikey', 'sk-test-key-1234', 1);
51
- await manager.markFailure(profile.id, 'rate limit 429');
52
- await manager.markFailure(profile.id, 'rate limit 429');
53
- await manager.markFailure(profile.id, 'rate limit 429');
54
- const profiles = manager.listProfiles('gpt');
55
- const updated = profiles.find(p => p.id === profile.id);
56
- expect(updated).toBeDefined();
57
- expect(updated.errorCount).toBe(3);
58
- expect(updated.cooldownUntil).toBeGreaterThan(Date.now());
59
- });
60
- it('should skip cooldown profiles in getActiveProfile', async () => {
61
- const p1 = await manager.addProfile('gpt', 'apikey', 'sk-key-one-1234', 1);
62
- await manager.addProfile('gpt', 'apikey', 'sk-key-two-5678', 2);
63
- // Put p1 into cooldown
64
- await manager.markFailure(p1.id);
65
- await manager.markFailure(p1.id);
66
- await manager.markFailure(p1.id);
67
- const active = manager.getActiveProfile('gpt');
68
- expect(active).not.toBeNull();
69
- expect(active.id).not.toBe(p1.id);
70
- });
71
- it('should return soonest-expiring when all in cooldown', async () => {
72
- const p1 = await manager.addProfile('gpt', 'apikey', 'sk-key-one-1234', 1);
73
- const p2 = await manager.addProfile('gpt', 'apikey', 'sk-key-two-5678', 2);
74
- // Put both into cooldown
75
- for (let i = 0; i < 3; i++) {
76
- await manager.markFailure(p1.id);
77
- await manager.markFailure(p2.id);
78
- }
79
- // p2 has 1 more failure → longer cooldown
80
- await manager.markFailure(p2.id);
81
- const active = manager.getActiveProfile('gpt');
82
- expect(active).not.toBeNull();
83
- // p1 should have shorter cooldown
84
- expect(active.id).toBe(p1.id);
85
- });
86
- it('should reset on markSuccess', async () => {
87
- const profile = await manager.addProfile('antigravity', 'apikey', 'key-abcd1234', 1);
88
- await manager.markFailure(profile.id);
89
- await manager.markFailure(profile.id);
90
- await manager.markFailure(profile.id);
91
- await manager.markSuccess(profile.id);
92
- const profiles = manager.listProfiles('antigravity');
93
- const updated = profiles.find(p => p.id === profile.id);
94
- expect(updated.errorCount).toBe(0);
95
- expect(updated.cooldownUntil).toBe(0);
96
- });
97
- it('should remove profiles', async () => {
98
- const profile = await manager.addProfile('antigravity', 'apikey', 'key-1234', 1);
99
- expect(manager.listProfiles('antigravity')).toHaveLength(1);
100
- const removed = await manager.removeProfile(profile.id);
101
- expect(removed).toBe(true);
102
- expect(manager.listProfiles('antigravity')).toHaveLength(0);
103
- });
104
- it('should enforce max profiles per provider', async () => {
105
- // Add 10 profiles
106
- for (let i = 0; i < 10; i++) {
107
- await manager.addProfile('gpt', 'apikey', `sk-key-${i}-${String(i).padStart(4, '0')}`, i + 1);
108
- }
109
- expect(manager.listProfiles('gpt')).toHaveLength(10);
110
- // Adding 11th should evict oldest
111
- await manager.addProfile('gpt', 'apikey', 'sk-key-new-0011', 11);
112
- expect(manager.listProfiles('gpt')).toHaveLength(10);
113
- });
114
- it('should clear cooldowns', async () => {
115
- const profile = await manager.addProfile('gpt', 'apikey', 'sk-key-cd-1234', 1);
116
- await manager.markFailure(profile.id);
117
- await manager.markFailure(profile.id);
118
- await manager.markFailure(profile.id);
119
- await manager.clearCooldowns('gpt');
120
- const profiles = manager.listProfiles('gpt');
121
- expect(profiles[0].cooldownUntil).toBe(0);
122
- expect(profiles[0].errorCount).toBe(0);
123
- });
124
- it('should mask API keys in identifiers', async () => {
125
- const profile = await manager.addProfile('gpt', 'apikey', 'sk-1234567890abcdef', 1);
126
- expect(profile.identifier).toBe('***cdef');
127
- expect(profile.identifier).not.toContain('sk-');
128
- });
129
- });
130
- describe('ProfileFileLock', () => {
131
- let lockInstance;
132
- const lockPath = path.join(TEST_DIR, '.test-lock');
133
- beforeEach(() => {
134
- if (fs.existsSync(TEST_DIR)) {
135
- fs.rmSync(TEST_DIR, { recursive: true });
136
- }
137
- fs.mkdirSync(TEST_DIR, { recursive: true });
138
- lockInstance = new ProfileFileLock(lockPath);
139
- });
140
- afterEach(() => {
141
- try {
142
- lockInstance.release();
143
- }
144
- catch { /* ignore */ }
145
- if (fs.existsSync(TEST_DIR)) {
146
- fs.rmSync(TEST_DIR, { recursive: true });
147
- }
148
- });
149
- it('should acquire and release lock', async () => {
150
- expect(lockInstance.isLocked()).toBe(false);
151
- await lockInstance.acquire();
152
- expect(lockInstance.isLocked()).toBe(true);
153
- lockInstance.release();
154
- expect(lockInstance.isLocked()).toBe(false);
155
- });
156
- it('should detect stale locks', async () => {
157
- // Create a stale lock manually (no PID)
158
- fs.mkdirSync(lockPath);
159
- // Backdate the mtime
160
- const pastTime = new Date(Date.now() - 60_000);
161
- fs.utimesSync(lockPath, pastTime, pastTime);
162
- // Should be able to acquire (stale lock auto-cleanup)
163
- await lockInstance.acquire(5000);
164
- expect(lockInstance.isLocked()).toBe(true);
165
- lockInstance.release();
166
- });
167
- });
168
- //# sourceMappingURL=AuthProfileManager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProfileManager.test.js","sourceRoot":"","sources":["../../../../../src/infra/lib/llm/auth/AuthProfileManager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TokenRefresher.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenRefresher.test.d.ts","sourceRoot":"","sources":["../../../../../src/infra/lib/llm/auth/TokenRefresher.test.ts"],"names":[],"mappings":""}