@sentry/warden 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/.oxlintrc.json +169 -0
  2. package/CHANGELOG.md +427 -0
  3. package/README.md +4 -1
  4. package/dist/cli/args.d.ts +6 -2
  5. package/dist/cli/args.d.ts.map +1 -1
  6. package/dist/cli/args.js +175 -207
  7. package/dist/cli/args.js.map +1 -1
  8. package/dist/cli/commands/add.d.ts.map +1 -1
  9. package/dist/cli/commands/add.js +16 -5
  10. package/dist/cli/commands/add.js.map +1 -1
  11. package/dist/cli/commands/build.d.ts +13 -0
  12. package/dist/cli/commands/build.d.ts.map +1 -0
  13. package/dist/cli/commands/build.js +384 -0
  14. package/dist/cli/commands/build.js.map +1 -0
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +13 -5
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/commands/runs.d.ts.map +1 -1
  19. package/dist/cli/commands/runs.js +12 -6
  20. package/dist/cli/commands/runs.js.map +1 -1
  21. package/dist/cli/commands/sync.d.ts.map +1 -1
  22. package/dist/cli/commands/sync.js +4 -1
  23. package/dist/cli/commands/sync.js.map +1 -1
  24. package/dist/cli/context.d.ts.map +1 -1
  25. package/dist/cli/context.js +8 -1
  26. package/dist/cli/context.js.map +1 -1
  27. package/dist/cli/files.d.ts.map +1 -1
  28. package/dist/cli/files.js +27 -9
  29. package/dist/cli/files.js.map +1 -1
  30. package/dist/cli/help.d.ts +4 -0
  31. package/dist/cli/help.d.ts.map +1 -0
  32. package/dist/cli/help.js +448 -0
  33. package/dist/cli/help.js.map +1 -0
  34. package/dist/cli/index.js +2 -13
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/input.d.ts +12 -0
  37. package/dist/cli/input.d.ts.map +1 -1
  38. package/dist/cli/input.js +60 -0
  39. package/dist/cli/input.js.map +1 -1
  40. package/dist/cli/main.d.ts +41 -2
  41. package/dist/cli/main.d.ts.map +1 -1
  42. package/dist/cli/main.js +294 -75
  43. package/dist/cli/main.js.map +1 -1
  44. package/dist/cli/output/box.js +1 -1
  45. package/dist/cli/output/formatters.d.ts +10 -2
  46. package/dist/cli/output/formatters.d.ts.map +1 -1
  47. package/dist/cli/output/formatters.js +32 -9
  48. package/dist/cli/output/formatters.js.map +1 -1
  49. package/dist/cli/output/index.d.ts +1 -1
  50. package/dist/cli/output/index.d.ts.map +1 -1
  51. package/dist/cli/output/index.js +1 -1
  52. package/dist/cli/output/index.js.map +1 -1
  53. package/dist/cli/output/ink-runner.d.ts +3 -1
  54. package/dist/cli/output/ink-runner.d.ts.map +1 -1
  55. package/dist/cli/output/ink-runner.js +64 -28
  56. package/dist/cli/output/ink-runner.js.map +1 -1
  57. package/dist/cli/output/jsonl.d.ts +37 -0
  58. package/dist/cli/output/jsonl.d.ts.map +1 -1
  59. package/dist/cli/output/jsonl.js +6 -0
  60. package/dist/cli/output/jsonl.js.map +1 -1
  61. package/dist/cli/output/live-status.d.ts +48 -0
  62. package/dist/cli/output/live-status.d.ts.map +1 -0
  63. package/dist/cli/output/live-status.js +173 -0
  64. package/dist/cli/output/live-status.js.map +1 -0
  65. package/dist/cli/output/reporter.d.ts +4 -0
  66. package/dist/cli/output/reporter.d.ts.map +1 -1
  67. package/dist/cli/output/reporter.js +20 -3
  68. package/dist/cli/output/reporter.js.map +1 -1
  69. package/dist/cli/output/tasks.d.ts +8 -5
  70. package/dist/cli/output/tasks.d.ts.map +1 -1
  71. package/dist/cli/output/tasks.js +113 -71
  72. package/dist/cli/output/tasks.js.map +1 -1
  73. package/dist/cli/signals.d.ts +15 -0
  74. package/dist/cli/signals.d.ts.map +1 -0
  75. package/dist/cli/signals.js +26 -0
  76. package/dist/cli/signals.js.map +1 -0
  77. package/dist/config/loader.d.ts +48 -7
  78. package/dist/config/loader.d.ts.map +1 -1
  79. package/dist/config/loader.js +228 -32
  80. package/dist/config/loader.js.map +1 -1
  81. package/dist/config/schema.d.ts +55 -0
  82. package/dist/config/schema.d.ts.map +1 -1
  83. package/dist/config/schema.js +34 -2
  84. package/dist/config/schema.js.map +1 -1
  85. package/dist/diff/context.d.ts +9 -2
  86. package/dist/diff/context.d.ts.map +1 -1
  87. package/dist/diff/context.js +65 -17
  88. package/dist/diff/context.js.map +1 -1
  89. package/dist/evals/runner.d.ts.map +1 -1
  90. package/dist/evals/runner.js +16 -0
  91. package/dist/evals/runner.js.map +1 -1
  92. package/dist/event/context.d.ts.map +1 -1
  93. package/dist/event/context.js +1 -0
  94. package/dist/event/context.js.map +1 -1
  95. package/dist/event/schedule-context.d.ts.map +1 -1
  96. package/dist/event/schedule-context.js +1 -0
  97. package/dist/event/schedule-context.js.map +1 -1
  98. package/dist/index.d.ts +6 -6
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +3 -3
  101. package/dist/index.js.map +1 -1
  102. package/dist/output/dedup.d.ts +8 -11
  103. package/dist/output/dedup.d.ts.map +1 -1
  104. package/dist/output/dedup.js +39 -37
  105. package/dist/output/dedup.js.map +1 -1
  106. package/dist/output/github-checks.d.ts +1 -0
  107. package/dist/output/github-checks.d.ts.map +1 -1
  108. package/dist/output/github-checks.js +9 -7
  109. package/dist/output/github-checks.js.map +1 -1
  110. package/dist/sdk/analyze.d.ts.map +1 -1
  111. package/dist/sdk/analyze.js +147 -277
  112. package/dist/sdk/analyze.js.map +1 -1
  113. package/dist/sdk/circuit-breaker.d.ts +26 -0
  114. package/dist/sdk/circuit-breaker.d.ts.map +1 -0
  115. package/dist/sdk/circuit-breaker.js +53 -0
  116. package/dist/sdk/circuit-breaker.js.map +1 -0
  117. package/dist/sdk/errors.d.ts +5 -0
  118. package/dist/sdk/errors.d.ts.map +1 -1
  119. package/dist/sdk/errors.js +27 -0
  120. package/dist/sdk/errors.js.map +1 -1
  121. package/dist/sdk/extract.d.ts +18 -9
  122. package/dist/sdk/extract.d.ts.map +1 -1
  123. package/dist/sdk/extract.js +95 -87
  124. package/dist/sdk/extract.js.map +1 -1
  125. package/dist/sdk/fix-quality.d.ts +5 -0
  126. package/dist/sdk/fix-quality.d.ts.map +1 -1
  127. package/dist/sdk/fix-quality.js +42 -23
  128. package/dist/sdk/fix-quality.js.map +1 -1
  129. package/dist/sdk/haiku.d.ts +6 -0
  130. package/dist/sdk/haiku.d.ts.map +1 -1
  131. package/dist/sdk/haiku.js +75 -49
  132. package/dist/sdk/haiku.js.map +1 -1
  133. package/dist/sdk/json-output.d.ts +31 -0
  134. package/dist/sdk/json-output.d.ts.map +1 -0
  135. package/dist/sdk/json-output.js +98 -0
  136. package/dist/sdk/json-output.js.map +1 -0
  137. package/dist/sdk/model-pricing.json +56 -16
  138. package/dist/sdk/post-process.d.ts +29 -0
  139. package/dist/sdk/post-process.d.ts.map +1 -0
  140. package/dist/sdk/post-process.js +65 -0
  141. package/dist/sdk/post-process.js.map +1 -0
  142. package/dist/sdk/prepare.d.ts.map +1 -1
  143. package/dist/sdk/prepare.js +4 -1
  144. package/dist/sdk/prepare.js.map +1 -1
  145. package/dist/sdk/pricing.d.ts +18 -0
  146. package/dist/sdk/pricing.d.ts.map +1 -1
  147. package/dist/sdk/pricing.js +108 -3
  148. package/dist/sdk/pricing.js.map +1 -1
  149. package/dist/sdk/prompt-sections.d.ts +56 -0
  150. package/dist/sdk/prompt-sections.d.ts.map +1 -0
  151. package/dist/sdk/prompt-sections.js +118 -0
  152. package/dist/sdk/prompt-sections.js.map +1 -0
  153. package/dist/sdk/prompt.d.ts +2 -17
  154. package/dist/sdk/prompt.d.ts.map +1 -1
  155. package/dist/sdk/prompt.js +15 -37
  156. package/dist/sdk/prompt.js.map +1 -1
  157. package/dist/sdk/report-files.d.ts +15 -0
  158. package/dist/sdk/report-files.d.ts.map +1 -0
  159. package/dist/sdk/report-files.js +20 -0
  160. package/dist/sdk/report-files.js.map +1 -0
  161. package/dist/sdk/runner.d.ts +9 -1
  162. package/dist/sdk/runner.d.ts.map +1 -1
  163. package/dist/sdk/runner.js +6 -0
  164. package/dist/sdk/runner.js.map +1 -1
  165. package/dist/sdk/runtimes/claude.d.ts +3 -0
  166. package/dist/sdk/runtimes/claude.d.ts.map +1 -0
  167. package/dist/sdk/runtimes/claude.js +376 -0
  168. package/dist/sdk/runtimes/claude.js.map +1 -0
  169. package/dist/sdk/runtimes/index.d.ts +12 -0
  170. package/dist/sdk/runtimes/index.d.ts.map +1 -0
  171. package/dist/sdk/runtimes/index.js +22 -0
  172. package/dist/sdk/runtimes/index.js.map +1 -0
  173. package/dist/sdk/runtimes/types.d.ts +116 -0
  174. package/dist/sdk/runtimes/types.d.ts.map +1 -0
  175. package/dist/sdk/runtimes/types.js +17 -0
  176. package/dist/sdk/runtimes/types.js.map +1 -0
  177. package/dist/sdk/types.d.ts +23 -2
  178. package/dist/sdk/types.d.ts.map +1 -1
  179. package/dist/sdk/types.js.map +1 -1
  180. package/dist/sdk/usage.d.ts +21 -6
  181. package/dist/sdk/usage.d.ts.map +1 -1
  182. package/dist/sdk/usage.js +36 -23
  183. package/dist/sdk/usage.js.map +1 -1
  184. package/dist/sdk/verify.d.ts +25 -0
  185. package/dist/sdk/verify.d.ts.map +1 -0
  186. package/dist/sdk/verify.js +226 -0
  187. package/dist/sdk/verify.js.map +1 -0
  188. package/dist/skill-builder/agentic.d.ts +33 -0
  189. package/dist/skill-builder/agentic.d.ts.map +1 -0
  190. package/dist/skill-builder/agentic.js +240 -0
  191. package/dist/skill-builder/agentic.js.map +1 -0
  192. package/dist/skill-builder/authoring-provider.d.ts +5 -0
  193. package/dist/skill-builder/authoring-provider.d.ts.map +1 -0
  194. package/dist/skill-builder/authoring-provider.js +70 -0
  195. package/dist/skill-builder/authoring-provider.js.map +1 -0
  196. package/dist/skill-builder/definition.d.ts +46 -0
  197. package/dist/skill-builder/definition.d.ts.map +1 -0
  198. package/dist/skill-builder/definition.js +171 -0
  199. package/dist/skill-builder/definition.js.map +1 -0
  200. package/dist/skill-builder/outline-contract.d.ts +113 -0
  201. package/dist/skill-builder/outline-contract.d.ts.map +1 -0
  202. package/dist/skill-builder/outline-contract.js +73 -0
  203. package/dist/skill-builder/outline-contract.js.map +1 -0
  204. package/dist/skill-builder/outline-state.d.ts +158 -0
  205. package/dist/skill-builder/outline-state.d.ts.map +1 -0
  206. package/dist/skill-builder/outline-state.js +87 -0
  207. package/dist/skill-builder/outline-state.js.map +1 -0
  208. package/dist/skill-builder/outline.d.ts +36 -0
  209. package/dist/skill-builder/outline.d.ts.map +1 -0
  210. package/dist/skill-builder/outline.js +345 -0
  211. package/dist/skill-builder/outline.js.map +1 -0
  212. package/dist/skill-builder/skill-contract.d.ts +97 -0
  213. package/dist/skill-builder/skill-contract.d.ts.map +1 -0
  214. package/dist/skill-builder/skill-contract.js +58 -0
  215. package/dist/skill-builder/skill-contract.js.map +1 -0
  216. package/dist/skill-builder/skill-prompts.d.ts +61 -0
  217. package/dist/skill-builder/skill-prompts.d.ts.map +1 -0
  218. package/dist/skill-builder/skill-prompts.js +285 -0
  219. package/dist/skill-builder/skill-prompts.js.map +1 -0
  220. package/dist/skill-builder/skill.d.ts +23 -0
  221. package/dist/skill-builder/skill.d.ts.map +1 -0
  222. package/dist/skill-builder/skill.js +563 -0
  223. package/dist/skill-builder/skill.js.map +1 -0
  224. package/dist/skills/index.d.ts +2 -2
  225. package/dist/skills/index.d.ts.map +1 -1
  226. package/dist/skills/index.js +1 -1
  227. package/dist/skills/index.js.map +1 -1
  228. package/dist/skills/loader.d.ts +20 -6
  229. package/dist/skills/loader.d.ts.map +1 -1
  230. package/dist/skills/loader.js +88 -141
  231. package/dist/skills/loader.js.map +1 -1
  232. package/dist/skills/remote.d.ts +11 -7
  233. package/dist/skills/remote.d.ts.map +1 -1
  234. package/dist/skills/remote.js +62 -162
  235. package/dist/skills/remote.js.map +1 -1
  236. package/dist/triggers/matcher.d.ts.map +1 -1
  237. package/dist/triggers/matcher.js +28 -15
  238. package/dist/triggers/matcher.js.map +1 -1
  239. package/dist/types/index.d.ts +40 -0
  240. package/dist/types/index.d.ts.map +1 -1
  241. package/dist/types/index.js +11 -0
  242. package/dist/types/index.js.map +1 -1
  243. package/dist/utils/index.d.ts +1 -0
  244. package/dist/utils/index.d.ts.map +1 -1
  245. package/dist/utils/index.js +1 -0
  246. package/dist/utils/index.js.map +1 -1
  247. package/dist/utils/path.d.ts +17 -0
  248. package/dist/utils/path.d.ts.map +1 -0
  249. package/dist/utils/path.js +36 -0
  250. package/dist/utils/path.js.map +1 -0
  251. package/package.json +8 -8
  252. package/policies/README.md +22 -0
  253. package/policies/code-comments.md +20 -0
  254. package/policies/policy-template.md +14 -0
  255. package/skills/warden/SPEC.md +112 -0
  256. package/skills/warden/references/cli-reference.md +2 -2
  257. package/skills/warden/references/config-schema.md +29 -13
  258. package/skills/warden/references/configuration.md +20 -8
  259. package/skills/warden/references/creating-skills.md +3 -0
  260. package/skills/warden-sweep/SPEC.md +126 -0
  261. package/src/builtin-skills/security-review/SKILL.md +81 -0
  262. package/src/builtin-skills/security-review/SPEC.md +77 -0
  263. package/src/builtin-skills/security-review/references/github-workflows.md +186 -0
  264. package/src/builtin-skills/security-review/references/javascript-typescript.md +69 -0
  265. package/src/builtin-skills/security-review/references/python.md +70 -0
  266. package/src/internal-skills/skill-writer/EVAL.md +124 -0
  267. package/src/internal-skills/skill-writer/SKILL.md +159 -0
  268. package/src/internal-skills/skill-writer/SOURCES.md +94 -0
  269. package/src/internal-skills/skill-writer/SPEC.md +153 -0
  270. package/src/internal-skills/skill-writer/references/artifact-layouts/argument-driven-skill-layout.md +32 -0
  271. package/src/internal-skills/skill-writer/references/artifact-layouts/asset-template-skill-layout.md +30 -0
  272. package/src/internal-skills/skill-writer/references/artifact-layouts/inline-skill-layout.md +28 -0
  273. package/src/internal-skills/skill-writer/references/artifact-layouts/reference-backed-skill-layout.md +35 -0
  274. package/src/internal-skills/skill-writer/references/artifact-layouts/script-backed-skill-layout.md +31 -0
  275. package/src/internal-skills/skill-writer/references/authoring-path.md +91 -0
  276. package/src/internal-skills/skill-writer/references/claude-code/argument-substitutions.md +20 -0
  277. package/src/internal-skills/skill-writer/references/claude-code/dynamic-context.md +16 -0
  278. package/src/internal-skills/skill-writer/references/claude-code/frontmatter-and-invocation.md +33 -0
  279. package/src/internal-skills/skill-writer/references/claude-code/hook-backed-skills.md +28 -0
  280. package/src/internal-skills/skill-writer/references/claude-code/subagent-fork-skills.md +22 -0
  281. package/src/internal-skills/skill-writer/references/description-optimization.md +28 -0
  282. package/src/internal-skills/skill-writer/references/design-principles.md +74 -0
  283. package/src/internal-skills/skill-writer/references/evaluation-path.md +73 -0
  284. package/src/internal-skills/skill-writer/references/examples/documentation-skill.md +70 -0
  285. package/src/internal-skills/skill-writer/references/examples/evaluator-loop-skill.md +38 -0
  286. package/src/internal-skills/skill-writer/references/examples/hook-backed-skill.md +39 -0
  287. package/src/internal-skills/skill-writer/references/examples/router-skill.md +41 -0
  288. package/src/internal-skills/skill-writer/references/examples/security-review-skill.md +69 -0
  289. package/src/internal-skills/skill-writer/references/examples/subagent-fork-skill.md +39 -0
  290. package/src/internal-skills/skill-writer/references/examples/workflow-process-skill.md +65 -0
  291. package/src/internal-skills/skill-writer/references/execution-shapes.md +68 -0
  292. package/src/internal-skills/skill-writer/references/iteration-evidence.md +82 -0
  293. package/src/internal-skills/skill-writer/references/iteration-path.md +40 -0
  294. package/src/internal-skills/skill-writer/references/mode-selection.md +67 -0
  295. package/src/internal-skills/skill-writer/references/output-contracts.md +68 -0
  296. package/src/internal-skills/skill-writer/references/reference-architecture.md +71 -0
  297. package/src/internal-skills/skill-writer/references/registration-validation.md +67 -0
  298. package/src/internal-skills/skill-writer/references/source-discovery.md +60 -0
  299. package/src/internal-skills/skill-writer/references/spec-template.md +118 -0
  300. package/src/internal-skills/skill-writer/references/structure-troubleshooting.md +111 -0
  301. package/src/internal-skills/skill-writer/references/synthesis-path.md +119 -0
  302. package/src/internal-skills/skill-writer/references/workflow-mechanics/evaluator-loops.md +25 -0
  303. package/src/internal-skills/skill-writer/references/workflow-mechanics/orchestrator-workers.md +25 -0
  304. package/src/internal-skills/skill-writer/references/workflow-mechanics/parallel-workflows.md +21 -0
  305. package/src/internal-skills/skill-writer/references/workflow-mechanics/plan-validate-execute.md +26 -0
  306. package/src/internal-skills/skill-writer/references/workflow-mechanics/prompt-chaining.md +24 -0
  307. package/src/internal-skills/skill-writer/references/workflow-mechanics/routing-workflows.md +28 -0
  308. package/src/internal-skills/skill-writer/references/workflow-mechanics/validation-loops.md +26 -0
  309. package/src/internal-skills/skill-writer/scripts/quick_validate.py +158 -0
  310. package/src/internal-skills/skill-writer/scripts/quick_validate_test.py +79 -0
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/sdk/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAazE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAiEpB"}
1
+ {"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/sdk/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAazE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAoEpB"}
@@ -67,7 +67,10 @@ export function prepareFiles(context, options = {}) {
67
67
  maxChunkSize: chunking?.coalesce?.maxChunkSize,
68
68
  })
69
69
  : splitHunks;
70
- const hunksWithContext = expandDiffContext(context.repoPath, { ...diff, hunks }, contextLines);
70
+ const hunksWithContext = expandDiffContext(context.repoPath, { ...diff, hunks }, {
71
+ contextLines,
72
+ contentSource: context.diffContextSource,
73
+ });
71
74
  allHunks.push(...hunksWithContext);
72
75
  }
73
76
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/sdk/prepare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/sdk/prepare.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,15 @@
1
1
  import type { UsageStats } from '../types/index.js';
2
+ export interface UsageCostBreakdown {
3
+ freshInputUSD: number;
4
+ outputUSD: number;
5
+ cacheReadUSD: number;
6
+ cacheCreationUSD: number;
7
+ cacheCreation5mUSD: number;
8
+ cacheCreation1hUSD: number;
9
+ webSearchUSD: number;
10
+ totalUSD: number;
11
+ }
12
+ export declare function estimateUsageCostBreakdown(model: string | undefined, usage: UsageStats): UsageCostBreakdown | undefined;
2
13
  /**
3
14
  * Usage shape returned by the Anthropic Messages API.
4
15
  */
@@ -7,6 +18,13 @@ interface ApiUsage {
7
18
  output_tokens: number;
8
19
  cache_read_input_tokens?: number | null;
9
20
  cache_creation_input_tokens?: number | null;
21
+ cache_creation?: {
22
+ ephemeral_1h_input_tokens?: number | null;
23
+ ephemeral_5m_input_tokens?: number | null;
24
+ } | null;
25
+ server_tool_use?: {
26
+ web_search_requests?: number | null;
27
+ } | null;
10
28
  }
11
29
  /**
12
30
  * Convert Anthropic API usage to our UsageStats format.
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA+BpD;;GAEG;AACH,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,UAAU,CA6B1E"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiBpD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA+ED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,KAAK,EAAE,UAAU,GAChB,kBAAkB,GAAG,SAAS,CA+ChC;AAED;;GAEG;AACH,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE;QACf,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1C,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3C,GAAG,IAAI,CAAC;IACT,eAAe,CAAC,EAAE;QAChB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,GAAG,IAAI,CAAC;CACV;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,UAAU,CA8C1E"}
@@ -10,8 +10,98 @@ const MODEL_PRICING = Object.fromEntries(Object.entries(rawPricing).map(([id, p]
10
10
  outputPerToken: p.outputPerMTok / 1_000_000,
11
11
  cacheReadPerToken: p.cacheReadPerMTok / 1_000_000,
12
12
  cacheCreationPerToken: p.cacheWritePerMTok / 1_000_000,
13
+ cacheCreation1hPerToken: p.cacheWrite1hPerMTok / 1_000_000,
14
+ webSearchPerRequest: p.webSearchPer1K / 1_000,
13
15
  },
14
16
  ]));
17
+ const MODEL_ALIASES = {
18
+ 'claude-sonnet-4': 'claude-sonnet-4-0',
19
+ 'claude-4-sonnet': 'claude-sonnet-4-0',
20
+ 'claude-sonnet-4-6': 'claude-sonnet-4-5',
21
+ 'claude-opus-4': 'claude-opus-4-0',
22
+ 'claude-4-opus': 'claude-opus-4-0',
23
+ 'claude-opus-4-6': 'claude-opus-4-5',
24
+ };
25
+ function hasModelPricing(pricing) {
26
+ return pricing !== undefined && (pricing.inputPerToken > 0 ||
27
+ pricing.outputPerToken > 0 ||
28
+ pricing.cacheReadPerToken > 0 ||
29
+ pricing.cacheCreationPerToken > 0 ||
30
+ pricing.cacheCreation1hPerToken > 0);
31
+ }
32
+ function lookupModelPricing(model) {
33
+ const pricing = MODEL_PRICING[model];
34
+ return hasModelPricing(pricing) ? pricing : undefined;
35
+ }
36
+ function normalizeModelId(model) {
37
+ const undated = model.replace(/-\d{8}$/, '');
38
+ if (lookupModelPricing(undated))
39
+ return undated;
40
+ return MODEL_ALIASES[undated] ?? undated;
41
+ }
42
+ function applyLongContextPricing(model, pricing, inputTokens) {
43
+ const canonical = normalizeModelId(model);
44
+ const sonnetLongContext = inputTokens > 200_000 &&
45
+ (canonical === 'claude-sonnet-4-0' || canonical === 'claude-sonnet-4-5');
46
+ if (!sonnetLongContext) {
47
+ return pricing;
48
+ }
49
+ const inputPerToken = pricing.inputPerToken * 2;
50
+ return {
51
+ ...pricing,
52
+ inputPerToken,
53
+ outputPerToken: pricing.outputPerToken * 1.5,
54
+ cacheReadPerToken: inputPerToken * 0.1,
55
+ cacheCreationPerToken: inputPerToken * 1.25,
56
+ cacheCreation1hPerToken: inputPerToken * 2,
57
+ };
58
+ }
59
+ function getModelPricing(model, inputTokens = 0) {
60
+ const exact = lookupModelPricing(model);
61
+ if (exact)
62
+ return applyLongContextPricing(model, exact, inputTokens);
63
+ const canonical = normalizeModelId(model);
64
+ const pricing = lookupModelPricing(canonical) ?? lookupModelPricing(`${canonical}-latest`);
65
+ return pricing ? applyLongContextPricing(model, pricing, inputTokens) : undefined;
66
+ }
67
+ export function estimateUsageCostBreakdown(model, usage) {
68
+ if (!model)
69
+ return undefined;
70
+ const cacheReadInputTokens = usage.cacheReadInputTokens ?? 0;
71
+ const cacheCreation5mInputTokens = usage.cacheCreation5mInputTokens ?? 0;
72
+ const cacheCreation1hInputTokens = usage.cacheCreation1hInputTokens ?? 0;
73
+ const cacheCreationInputTokens = Math.max(usage.cacheCreationInputTokens ?? 0, cacheCreation5mInputTokens + cacheCreation1hInputTokens);
74
+ const cacheCreationInputTokensByTier = cacheCreation5mInputTokens + cacheCreation1hInputTokens;
75
+ const uncategorizedCacheCreationInputTokens = Math.max(0, cacheCreationInputTokens - cacheCreationInputTokensByTier);
76
+ const freshInputTokens = Math.max(0, usage.inputTokens - cacheReadInputTokens - cacheCreationInputTokens);
77
+ const webSearchRequests = usage.webSearchRequests ?? 0;
78
+ const pricing = getModelPricing(model, usage.inputTokens);
79
+ if (!pricing)
80
+ return undefined;
81
+ const freshInputUSD = freshInputTokens * pricing.inputPerToken;
82
+ const outputUSD = usage.outputTokens * pricing.outputPerToken;
83
+ const cacheReadUSD = cacheReadInputTokens * pricing.cacheReadPerToken;
84
+ const cacheCreationUSD = uncategorizedCacheCreationInputTokens * pricing.cacheCreationPerToken;
85
+ const cacheCreation5mUSD = cacheCreation5mInputTokens * pricing.cacheCreationPerToken;
86
+ const cacheCreation1hUSD = cacheCreation1hInputTokens * pricing.cacheCreation1hPerToken;
87
+ const webSearchUSD = webSearchRequests * pricing.webSearchPerRequest;
88
+ return {
89
+ freshInputUSD,
90
+ outputUSD,
91
+ cacheReadUSD,
92
+ cacheCreationUSD,
93
+ cacheCreation5mUSD,
94
+ cacheCreation1hUSD,
95
+ webSearchUSD,
96
+ totalUSD: freshInputUSD +
97
+ outputUSD +
98
+ cacheReadUSD +
99
+ cacheCreationUSD +
100
+ cacheCreation5mUSD +
101
+ cacheCreation1hUSD +
102
+ webSearchUSD,
103
+ };
104
+ }
15
105
  /**
16
106
  * Convert Anthropic API usage to our UsageStats format.
17
107
  * Calculates cost from token counts using model pricing.
@@ -22,12 +112,22 @@ const MODEL_PRICING = Object.fromEntries(Object.entries(rawPricing).map(([id, p]
22
112
  * being subsets of that total.
23
113
  */
24
114
  export function apiUsageToStats(model, usage) {
25
- const pricing = MODEL_PRICING[model];
26
115
  const outputTokens = usage.output_tokens;
27
116
  const cacheReadInputTokens = usage.cache_read_input_tokens ?? 0;
28
- const cacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;
117
+ const rawCacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;
118
+ const tieredCacheCreation5mInputTokens = usage.cache_creation?.ephemeral_5m_input_tokens ?? 0;
119
+ const cacheCreation1hInputTokens = usage.cache_creation?.ephemeral_1h_input_tokens ?? 0;
120
+ const hasTieredCacheCreation = usage.cache_creation !== undefined && usage.cache_creation !== null;
121
+ const tieredCacheCreationInputTokens = tieredCacheCreation5mInputTokens + cacheCreation1hInputTokens;
122
+ const cacheCreationInputTokens = Math.max(rawCacheCreationInputTokens, tieredCacheCreationInputTokens);
123
+ const cacheCreation5mInputTokens = hasTieredCacheCreation
124
+ ? tieredCacheCreation5mInputTokens
125
+ : rawCacheCreationInputTokens;
126
+ const uncategorizedCacheCreationInputTokens = Math.max(0, cacheCreationInputTokens - cacheCreation5mInputTokens - cacheCreation1hInputTokens);
127
+ const webSearchRequests = usage.server_tool_use?.web_search_requests ?? 0;
29
128
  // inputTokens is the total: raw API input_tokens + cache subsets.
30
129
  const inputTokens = usage.input_tokens + cacheReadInputTokens + cacheCreationInputTokens;
130
+ const pricing = getModelPricing(model, inputTokens);
31
131
  // Cost: deduct cache subsets from total to get the non-cached portion,
32
132
  // then charge each category at its respective rate.
33
133
  let costUSD = 0;
@@ -37,13 +137,18 @@ export function apiUsageToStats(model, usage) {
37
137
  freshInputTokens * pricing.inputPerToken +
38
138
  outputTokens * pricing.outputPerToken +
39
139
  cacheReadInputTokens * pricing.cacheReadPerToken +
40
- cacheCreationInputTokens * pricing.cacheCreationPerToken;
140
+ (cacheCreation5mInputTokens + uncategorizedCacheCreationInputTokens) * pricing.cacheCreationPerToken +
141
+ cacheCreation1hInputTokens * pricing.cacheCreation1hPerToken +
142
+ webSearchRequests * pricing.webSearchPerRequest;
41
143
  }
42
144
  return {
43
145
  inputTokens,
44
146
  outputTokens,
45
147
  cacheReadInputTokens,
46
148
  cacheCreationInputTokens,
149
+ cacheCreation5mInputTokens: cacheCreation5mInputTokens + uncategorizedCacheCreationInputTokens,
150
+ cacheCreation1hInputTokens,
151
+ webSearchRequests,
47
152
  costUSD,
48
153
  };
49
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,sBAAsB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAcpE;;;GAGG;AACH,MAAM,aAAa,GAAiC,MAAM,CAAC,WAAW,CACpE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1C,EAAE;IACF;QACE,aAAa,EAAE,CAAC,CAAC,YAAY,GAAG,SAAS;QACzC,cAAc,EAAE,CAAC,CAAC,aAAa,GAAG,SAAS;QAC3C,iBAAiB,EAAE,CAAC,CAAC,gBAAgB,GAAG,SAAS;QACjD,qBAAqB,EAAE,CAAC,CAAC,iBAAiB,GAAG,SAAS;KACvD;CACF,CAAC,CACH,CAAC;AAYF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAe;IAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IACzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;IAChE,MAAM,wBAAwB,GAAG,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;IAExE,kEAAkE;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,GAAG,oBAAoB,GAAG,wBAAwB,CAAC;IAEzF,uEAAuE;IACvE,oDAAoD;IACpD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,gBAAgB,GAAG,WAAW,GAAG,oBAAoB,GAAG,wBAAwB,CAAC;QACvF,OAAO;YACL,gBAAgB,GAAG,OAAO,CAAC,aAAa;gBACxC,YAAY,GAAG,OAAO,CAAC,cAAc;gBACrC,oBAAoB,GAAG,OAAO,CAAC,iBAAiB;gBAChD,wBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY;QACZ,oBAAoB;QACpB,wBAAwB;QACxB,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { type Finding } from '../types/index.js';
2
+ export interface PromptPRContext {
3
+ /** All files being changed in the PR */
4
+ changedFiles: string[];
5
+ /** PR title - explains what the change does */
6
+ title?: string;
7
+ /** PR description/body - explains why and provides additional context */
8
+ body?: string | null;
9
+ /** Max number of changed files to list. 0 disables the section. Default: 50. */
10
+ maxContextFiles?: number;
11
+ }
12
+ /**
13
+ * Build a tagged prompt section, omitting empty content.
14
+ */
15
+ export declare function buildTaggedSection(tag: string, content: string | string[]): string | undefined;
16
+ /**
17
+ * Join prompt sections with consistent spacing, skipping omitted sections.
18
+ */
19
+ export declare function joinPromptSections(sections: (string | undefined)[]): string;
20
+ /**
21
+ * Build a tagged JSON-only output contract.
22
+ */
23
+ export declare function buildJsonOutputSection(instructions: string): string;
24
+ /**
25
+ * Build tagged pull request context shared by Warden agents.
26
+ */
27
+ export declare function buildPullRequestContextSection(prContext?: PromptPRContext): string | undefined;
28
+ export interface FileListSectionOptions {
29
+ currentFile?: string;
30
+ maxFiles?: number;
31
+ }
32
+ /**
33
+ * Build a tagged file list section with optional current-file exclusion.
34
+ */
35
+ export declare function buildFileListSection(tag: string, files: string[], options?: FileListSectionOptions): string | undefined;
36
+ /**
37
+ * Build tagged changed-file context shared by Warden agents.
38
+ */
39
+ export declare function buildChangedFilesSection(prContext: PromptPRContext | undefined, currentFile?: string): string | undefined;
40
+ interface PromptFindingFormatOptions {
41
+ includeSeverity?: boolean;
42
+ includeConfidence?: boolean;
43
+ includeVerification?: boolean;
44
+ locationStyle?: 'line' | 'range';
45
+ snippet?: (finding: Finding) => string | undefined;
46
+ }
47
+ /**
48
+ * Format one finding for prompt lists shared by auxiliary agents.
49
+ */
50
+ export declare function formatFindingForPrompt(finding: Finding, options?: PromptFindingFormatOptions): string;
51
+ /**
52
+ * Format findings as a stable 1-based prompt list.
53
+ */
54
+ export declare function formatIndexedFindingsForPrompt(findings: Finding[], options?: PromptFindingFormatOptions): string;
55
+ export {};
56
+ //# sourceMappingURL=prompt-sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-sections.d.ts","sourceRoot":"","sources":["../../src/sdk/prompt-sections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAO9F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAWnE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAa9F;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,sBAA2B,GACnC,MAAM,GAAG,SAAS,CAepB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED,UAAU,0BAA0B;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACpD;AAaD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAqBR;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,0BAA+B,GACvC,MAAM,CAIR"}
@@ -0,0 +1,118 @@
1
+ import { findingLine } from '../types/index.js';
2
+ const MAX_BODY_LENGTH = 1000;
3
+ /**
4
+ * Build a tagged prompt section, omitting empty content.
5
+ */
6
+ export function buildTaggedSection(tag, content) {
7
+ const body = Array.isArray(content) ? content.join('\n') : content;
8
+ if (body.trim().length === 0)
9
+ return undefined;
10
+ return `<${tag}>
11
+ ${body}
12
+ </${tag}>`;
13
+ }
14
+ /**
15
+ * Join prompt sections with consistent spacing, skipping omitted sections.
16
+ */
17
+ export function joinPromptSections(sections) {
18
+ return sections.filter((section) => Boolean(section)).join('\n\n');
19
+ }
20
+ /**
21
+ * Build a tagged JSON-only output contract.
22
+ */
23
+ export function buildJsonOutputSection(instructions) {
24
+ const lines = [
25
+ 'Return only valid JSON. Do not include markdown, prose, code fences, or explanations.',
26
+ ];
27
+ const trimmedInstructions = instructions.trim();
28
+ if (trimmedInstructions.length > 0) {
29
+ lines.push('', trimmedInstructions);
30
+ }
31
+ return `<output_format>
32
+ ${lines.join('\n')}
33
+ </output_format>`;
34
+ }
35
+ /**
36
+ * Build tagged pull request context shared by Warden agents.
37
+ */
38
+ export function buildPullRequestContextSection(prContext) {
39
+ if (!prContext?.title)
40
+ return undefined;
41
+ const lines = [`<title>${prContext.title}</title>`];
42
+ if (prContext.body) {
43
+ const body = prContext.body.length > MAX_BODY_LENGTH
44
+ ? `${prContext.body.slice(0, MAX_BODY_LENGTH)}...`
45
+ : prContext.body;
46
+ lines.push('<body>', body, '</body>');
47
+ }
48
+ return buildTaggedSection('pull_request_context', lines);
49
+ }
50
+ /**
51
+ * Build a tagged file list section with optional current-file exclusion.
52
+ */
53
+ export function buildFileListSection(tag, files, options = {}) {
54
+ const maxFiles = options.maxFiles ?? 50;
55
+ const visibleFiles = options.currentFile
56
+ ? files.filter((f) => f !== options.currentFile)
57
+ : files;
58
+ if (visibleFiles.length === 0 || maxFiles === 0)
59
+ return undefined;
60
+ const displayFiles = visibleFiles.slice(0, maxFiles);
61
+ const remaining = visibleFiles.length - displayFiles.length;
62
+ const lines = displayFiles.map((f) => `- ${f}`);
63
+ if (remaining > 0) {
64
+ lines.push(`- ... and ${remaining} more`);
65
+ }
66
+ return buildTaggedSection(tag, lines);
67
+ }
68
+ /**
69
+ * Build tagged changed-file context shared by Warden agents.
70
+ */
71
+ export function buildChangedFilesSection(prContext, currentFile) {
72
+ if (!prContext)
73
+ return undefined;
74
+ return buildFileListSection('changed_files', prContext.changedFiles, {
75
+ currentFile,
76
+ maxFiles: prContext.maxContextFiles ?? 50,
77
+ });
78
+ }
79
+ function formatFindingLocation(finding, style) {
80
+ const loc = finding.location;
81
+ if (!loc)
82
+ return 'general';
83
+ if (style === 'range' && loc.endLine) {
84
+ return `${loc.path}:${loc.startLine}-${loc.endLine}`;
85
+ }
86
+ return `${loc.path}:${findingLine(finding)}`;
87
+ }
88
+ /**
89
+ * Format one finding for prompt lists shared by auxiliary agents.
90
+ */
91
+ export function formatFindingForPrompt(finding, options = {}) {
92
+ const details = [];
93
+ if (options.includeSeverity)
94
+ details.push(`(${finding.severity})`);
95
+ if (options.includeConfidence && finding.confidence) {
96
+ details.push(`[confidence: ${finding.confidence}]`);
97
+ }
98
+ const prefix = details.length > 0 ? `${details.join(' ')} ` : '';
99
+ const location = formatFindingLocation(finding, options.locationStyle ?? 'line');
100
+ let text = `[${location}] ${prefix}"${finding.title}" - ${finding.description}`;
101
+ if (options.includeVerification && finding.verification) {
102
+ text += ` Verification: ${finding.verification}`;
103
+ }
104
+ const snippet = options.snippet?.(finding);
105
+ if (snippet) {
106
+ text += `\n Code: ${snippet.split('\n').join('\n ')}`;
107
+ }
108
+ return text;
109
+ }
110
+ /**
111
+ * Format findings as a stable 1-based prompt list.
112
+ */
113
+ export function formatIndexedFindingsForPrompt(findings, options = {}) {
114
+ return findings.map((finding, index) => {
115
+ return `${index + 1}. ${formatFindingForPrompt(finding, options)}`;
116
+ }).join('\n');
117
+ }
118
+ //# sourceMappingURL=prompt-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-sections.js","sourceRoot":"","sources":["../../src/sdk/prompt-sections.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,7 @@
1
1
  import type { SkillDefinition } from '../config/schema.js';
2
2
  import { type HunkWithContext } from '../diff/index.js';
3
- /**
4
- * Context about the PR being analyzed, for inclusion in prompts.
5
- *
6
- * The title and body (like a commit message) help explain the _intent_ of the
7
- * changes to the agent, enabling it to better understand what the author was
8
- * trying to accomplish and identify issues that conflict with that intent.
9
- */
10
- export interface PRPromptContext {
11
- /** All files being changed in the PR */
12
- changedFiles: string[];
13
- /** PR title - explains what the change does */
14
- title?: string;
15
- /** PR description/body - explains why and provides additional context */
16
- body?: string | null;
17
- /** Max number of "other files" to list in the prompt. 0 disables the section. Default: 50. */
18
- maxContextFiles?: number;
19
- }
3
+ import { type PromptPRContext } from './prompt-sections.js';
4
+ export type PRPromptContext = PromptPRContext;
20
5
  /**
21
6
  * Builds the system prompt for hunk-based analysis.
22
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8FAA8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA+EpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,eAAe,GAC1B,MAAM,CAyCR"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA6EpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,eAAe,GAC1B,MAAM,CAYR"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { formatHunkForAnalysis } from '../diff/index.js';
4
+ import { buildChangedFilesSection, buildJsonOutputSection, buildPullRequestContextSection, joinPromptSections, } from './prompt-sections.js';
4
5
  /**
5
6
  * Builds the system prompt for hunk-based analysis.
6
7
  *
@@ -26,9 +27,7 @@ The following defines the ONLY criteria you should evaluate. Do not report findi
26
27
 
27
28
  ${skill.prompt}
28
29
  </skill_instructions>`,
29
- `<output_format>
30
- IMPORTANT: Your response must be ONLY a valid JSON object. No markdown, no explanation, no code fences.
31
-
30
+ buildJsonOutputSection(`
32
31
  Example response format:
33
32
  {"findings": [{"id": "example-1", "severity": "medium", "confidence": "high", "title": "Issue title", "description": "Description", "location": {"path": "file.ts", "startLine": 10}}]}
34
33
 
@@ -56,7 +55,7 @@ Full schema:
56
55
  }
57
56
 
58
57
  Requirements:
59
- - Return ONLY valid JSON starting with {"findings":
58
+ - Return valid JSON starting with {"findings":
60
59
  - "findings" array can be empty if no issues found
61
60
  - "location.path" is auto-filled from context - just provide startLine (and optionally endLine). Omit location entirely for general findings not about a specific line.
62
61
  - "location.startLine" MUST be within the hunk line range (shown in the "## Hunk" header). If the issue originates in surrounding code, anchor to the nearest changed line in the hunk and note the actual location in the description.
@@ -66,7 +65,7 @@ Requirements:
66
65
  - The fix requires changes to a different file or a new file (describe the fix in the description field instead)
67
66
  - Keep descriptions concise (2-4 sentences). Start with the root cause, end with the user-visible consequence.
68
67
  - Focus your analysis on the code changes in the hunk. Surrounding context and tool results are for understanding only -- all findings must reference lines within the hunk range.
69
- </output_format>`,
68
+ `),
70
69
  ];
71
70
  const { rootDir } = skill;
72
71
  if (rootDir) {
@@ -85,37 +84,16 @@ You can read files from ${dirList} subdirectories using the Read tool with the f
85
84
  * Builds the user prompt for a single hunk.
86
85
  */
87
86
  export function buildHunkUserPrompt(skill, hunkCtx, prContext) {
88
- const sections = [];
89
- sections.push(`Analyze this code change according to the "${skill.name}" skill criteria.`);
90
- // Include PR title and description for context on intent
91
- if (prContext?.title) {
92
- let prSection = `## Pull Request Context\n**Title:** ${prContext.title}`;
93
- if (prContext.body) {
94
- // Truncate very long PR descriptions to avoid bloating prompts
95
- const maxBodyLength = 1000;
96
- const body = prContext.body.length > maxBodyLength
97
- ? prContext.body.slice(0, maxBodyLength) + '...'
98
- : prContext.body;
99
- prSection += `\n\n**Description:**\n${body}`;
100
- }
101
- sections.push(prSection);
102
- }
103
- // Include list of other files being changed in the PR for context
104
- const maxContextFiles = prContext?.maxContextFiles ?? 50;
105
- const otherFiles = prContext?.changedFiles.filter((f) => f !== hunkCtx.filename) ?? [];
106
- if (otherFiles.length > 0 && maxContextFiles > 0) {
107
- const displayFiles = otherFiles.slice(0, maxContextFiles);
108
- const remaining = otherFiles.length - displayFiles.length;
109
- let fileList = displayFiles.map((f) => `- ${f}`).join('\n');
110
- if (remaining > 0) {
111
- fileList += `\n- ... and ${remaining} more`;
112
- }
113
- sections.push(`## Other Files in This PR
114
- The following files are also being changed in this PR (may provide useful context):
115
- ${fileList}`);
116
- }
117
- sections.push(formatHunkForAnalysis(hunkCtx));
118
- sections.push(`IMPORTANT: Only report findings that are explicitly covered by the skill instructions. Do not report general code quality issues, bugs, or improvements unless the skill specifically asks for them. Return an empty findings array if no issues match the skill's criteria.`);
119
- return sections.join('\n\n');
87
+ return joinPromptSections([
88
+ `<task>
89
+ Analyze this code change according to the "${skill.name}" skill criteria.
90
+ </task>`,
91
+ buildPullRequestContextSection(prContext),
92
+ buildChangedFilesSection(prContext, hunkCtx.filename),
93
+ formatHunkForAnalysis(hunkCtx),
94
+ `<scope_reminder>
95
+ Only report findings that are explicitly covered by the skill instructions. Do not report general code quality issues, bugs, or improvements unless the skill specifically asks for them. Return an empty findings array if no issues match the skill's criteria.
96
+ </scope_reminder>`,
97
+ ]);
120
98
  }
121
99
  //# sourceMappingURL=prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,8BAA8B,EAC9B,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAI9B;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,MAAM,QAAQ,GAAG;QACf;;QAEI;QAEJ;;;;;;;gBAOY;QAEZ;;;EAGF,KAAK,CAAC,MAAM;sBACQ;QAElB,sBAAsB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC1B,CAAC;KACC,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACtE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC;4BACQ,OAAO;0BACT,OAAO;mBACd,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAsB,EACtB,OAAwB,EACxB,SAA2B;IAE3B,OAAO,kBAAkB,CAAC;QACxB;6CACyC,KAAK,CAAC,IAAI;QAC/C;QACJ,8BAA8B,CAAC,SAAS,CAAC;QACzC,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC;QACrD,qBAAqB,CAAC,OAAO,CAAC;QAC9B;;kBAEc;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { FileReport, Finding, UsageStats } from '../types/index.js';
2
+ export interface FileReportInput {
3
+ filename: string;
4
+ durationMs?: number;
5
+ usage?: UsageStats;
6
+ }
7
+ /**
8
+ * Return whether a final finding should be counted against a file.
9
+ */
10
+ export declare function findingAppliesToFile(finding: Finding, filename: string): boolean;
11
+ /**
12
+ * Count final findings per file while preserving timing and usage metadata.
13
+ */
14
+ export declare function buildFileReports(files: FileReportInput[], findings: Finding[]): FileReport[];
15
+ //# sourceMappingURL=report-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-files.d.ts","sourceRoot":"","sources":["../../src/sdk/report-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAO5F"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Return whether a final finding should be counted against a file.
3
+ */
4
+ export function findingAppliesToFile(finding, filename) {
5
+ if (finding.location?.path === filename)
6
+ return true;
7
+ return finding.additionalLocations?.some((location) => location.path === filename) ?? false;
8
+ }
9
+ /**
10
+ * Count final findings per file while preserving timing and usage metadata.
11
+ */
12
+ export function buildFileReports(files, findings) {
13
+ return files.map((file) => ({
14
+ filename: file.filename,
15
+ findings: findings.filter((finding) => findingAppliesToFile(finding, file.filename)).length,
16
+ durationMs: file.durationMs,
17
+ usage: file.usage,
18
+ }));
19
+ }
20
+ //# sourceMappingURL=report-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-files.js","sourceRoot":"","sources":["../../src/sdk/report-files.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,QAAgB;IACrE,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,CAAC;AAC9F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB,EAAE,QAAmB;IAC5E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QAC3F,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -21,7 +21,15 @@ export type { PRPromptContext } from './prompt.js';
21
21
  export { buildHunkSystemPrompt as buildSystemPrompt } from './prompt.js';
22
22
  export { extractFindingsJson, extractBalancedJson, extractFindingsWithLLM, truncateForLLMFallback, deduplicateFindings, mergeGroupLocations, applyMergeGroups, mergeCrossLocationFindings, validateFindings, generateShortId, } from './extract.js';
23
23
  export type { ExtractFindingsResult, MergeResult } from './extract.js';
24
+ export { parseJsonFromOutput } from './json-output.js';
25
+ export type { JsonOutputRepairOptions, ParseJsonFromOutputOptions, ParseJsonFromOutputResult, } from './json-output.js';
24
26
  export { prepareFiles } from './prepare.js';
27
+ export { verifyFindings } from './verify.js';
28
+ export { postProcessFindings } from './post-process.js';
29
+ export type { PostProcessFindingsOptions, PostProcessFindingsResult, } from './post-process.js';
25
30
  export { analyzeFile, runSkill, generateSummary } from './analyze.js';
26
- export type { AuxiliaryUsageEntry, SkillRunnerCallbacks, SkillRunnerOptions, PreparedFile, PrepareFilesOptions, PrepareFilesResult, FileAnalysisCallbacks, FileAnalysisResult, ChunkAnalysisResult, } from './types.js';
31
+ export { claudeRuntime, getRuntimeProviderOptions, getRuntime, } from './runtimes/index.js';
32
+ export type { Runtime, RuntimeName } from './runtimes/index.js';
33
+ export type { AuxiliaryRunRequest, AuxiliaryRunResult, AuxiliaryTask, AuxiliaryTool, SynthesisRunRequest, SynthesisTask, SkillRunOptions, SkillRunRequest, SkillRunResponse, SkillRunResult, SkillRunStatus, } from './runtimes/index.js';
34
+ export type { AuxiliaryUsageEntry, FindingProcessingEvent, SkillRunnerCallbacks, SkillRunnerOptions, PreparedFile, PrepareFilesOptions, PrepareFilesResult, FileAnalysisCallbacks, FileAnalysisResult, ChunkAnalysisResult, } from './types.js';
27
35
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/sdk/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGpK,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1G,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGtE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/sdk/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGpK,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1G,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGtE,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}