@dizzlkheinz/ynab-mcpb 0.18.3 → 0.19.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 (346) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/CLAUDE.md +87 -8
  3. package/bin/ynab-mcp-server.cjs +2 -2
  4. package/bin/ynab-mcp-server.js +3 -3
  5. package/biome.json +39 -0
  6. package/dist/bundle/index.cjs +67 -67
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.js +27 -27
  9. package/dist/server/YNABMCPServer.d.ts +3 -4
  10. package/dist/server/YNABMCPServer.js +111 -116
  11. package/dist/server/budgetResolver.d.ts +6 -5
  12. package/dist/server/budgetResolver.js +46 -36
  13. package/dist/server/cacheKeys.js +6 -6
  14. package/dist/server/cacheManager.js +14 -11
  15. package/dist/server/completions.d.ts +2 -2
  16. package/dist/server/completions.js +20 -15
  17. package/dist/server/config.d.ts +10 -5
  18. package/dist/server/config.js +24 -7
  19. package/dist/server/deltaCache.d.ts +2 -2
  20. package/dist/server/deltaCache.js +22 -16
  21. package/dist/server/deltaCache.merge.d.ts +2 -2
  22. package/dist/server/diagnostics.d.ts +4 -4
  23. package/dist/server/diagnostics.js +38 -32
  24. package/dist/server/errorHandler.d.ts +5 -12
  25. package/dist/server/errorHandler.js +219 -217
  26. package/dist/server/prompts.d.ts +2 -2
  27. package/dist/server/prompts.js +45 -45
  28. package/dist/server/rateLimiter.js +4 -4
  29. package/dist/server/requestLogger.d.ts +1 -1
  30. package/dist/server/requestLogger.js +40 -35
  31. package/dist/server/resources.d.ts +3 -3
  32. package/dist/server/resources.js +55 -52
  33. package/dist/server/responseFormatter.js +6 -6
  34. package/dist/server/securityMiddleware.d.ts +2 -2
  35. package/dist/server/securityMiddleware.js +22 -20
  36. package/dist/server/serverKnowledgeStore.js +1 -1
  37. package/dist/server/toolRegistry.d.ts +3 -3
  38. package/dist/server/toolRegistry.js +47 -40
  39. package/dist/tools/__tests__/deltaTestUtils.d.ts +3 -3
  40. package/dist/tools/__tests__/deltaTestUtils.js +2 -2
  41. package/dist/tools/accountTools.d.ts +9 -8
  42. package/dist/tools/accountTools.js +47 -47
  43. package/dist/tools/adapters.d.ts +13 -8
  44. package/dist/tools/adapters.js +21 -11
  45. package/dist/tools/budgetTools.d.ts +8 -7
  46. package/dist/tools/budgetTools.js +22 -22
  47. package/dist/tools/categoryTools.d.ts +9 -8
  48. package/dist/tools/categoryTools.js +68 -59
  49. package/dist/tools/compareTransactions/formatter.d.ts +3 -3
  50. package/dist/tools/compareTransactions/formatter.js +9 -9
  51. package/dist/tools/compareTransactions/index.d.ts +6 -6
  52. package/dist/tools/compareTransactions/index.js +58 -43
  53. package/dist/tools/compareTransactions/matcher.d.ts +1 -1
  54. package/dist/tools/compareTransactions/matcher.js +28 -15
  55. package/dist/tools/compareTransactions/parser.d.ts +2 -2
  56. package/dist/tools/compareTransactions/parser.js +144 -138
  57. package/dist/tools/compareTransactions/types.d.ts +4 -4
  58. package/dist/tools/compareTransactions.d.ts +1 -1
  59. package/dist/tools/compareTransactions.js +1 -1
  60. package/dist/tools/deltaFetcher.d.ts +2 -2
  61. package/dist/tools/deltaFetcher.js +16 -15
  62. package/dist/tools/deltaSupport.d.ts +4 -4
  63. package/dist/tools/deltaSupport.js +35 -41
  64. package/dist/tools/exportTransactions.d.ts +5 -4
  65. package/dist/tools/exportTransactions.js +61 -59
  66. package/dist/tools/monthTools.d.ts +7 -6
  67. package/dist/tools/monthTools.js +31 -29
  68. package/dist/tools/payeeTools.d.ts +7 -6
  69. package/dist/tools/payeeTools.js +28 -28
  70. package/dist/tools/reconcileAdapter.d.ts +2 -2
  71. package/dist/tools/reconcileAdapter.js +21 -11
  72. package/dist/tools/reconciliation/analyzer.d.ts +4 -4
  73. package/dist/tools/reconciliation/analyzer.js +136 -57
  74. package/dist/tools/reconciliation/csvParser.d.ts +3 -3
  75. package/dist/tools/reconciliation/csvParser.js +128 -104
  76. package/dist/tools/reconciliation/executor.d.ts +4 -4
  77. package/dist/tools/reconciliation/executor.js +148 -109
  78. package/dist/tools/reconciliation/index.d.ts +10 -10
  79. package/dist/tools/reconciliation/index.js +96 -83
  80. package/dist/tools/reconciliation/matcher.d.ts +3 -3
  81. package/dist/tools/reconciliation/matcher.js +17 -16
  82. package/dist/tools/reconciliation/payeeNormalizer.js +19 -8
  83. package/dist/tools/reconciliation/recommendationEngine.d.ts +1 -1
  84. package/dist/tools/reconciliation/recommendationEngine.js +40 -40
  85. package/dist/tools/reconciliation/reportFormatter.d.ts +2 -2
  86. package/dist/tools/reconciliation/reportFormatter.js +79 -54
  87. package/dist/tools/reconciliation/signDetector.d.ts +1 -1
  88. package/dist/tools/reconciliation/types.d.ts +19 -16
  89. package/dist/tools/reconciliation/ynabAdapter.d.ts +2 -2
  90. package/dist/tools/schemas/common.d.ts +1 -1
  91. package/dist/tools/schemas/common.js +1 -1
  92. package/dist/tools/schemas/outputs/accountOutputs.d.ts +1 -1
  93. package/dist/tools/schemas/outputs/accountOutputs.js +24 -18
  94. package/dist/tools/schemas/outputs/budgetOutputs.d.ts +1 -1
  95. package/dist/tools/schemas/outputs/budgetOutputs.js +14 -11
  96. package/dist/tools/schemas/outputs/categoryOutputs.d.ts +1 -1
  97. package/dist/tools/schemas/outputs/categoryOutputs.js +49 -29
  98. package/dist/tools/schemas/outputs/comparisonOutputs.d.ts +1 -1
  99. package/dist/tools/schemas/outputs/comparisonOutputs.js +12 -12
  100. package/dist/tools/schemas/outputs/index.d.ts +14 -14
  101. package/dist/tools/schemas/outputs/index.js +14 -14
  102. package/dist/tools/schemas/outputs/monthOutputs.d.ts +1 -1
  103. package/dist/tools/schemas/outputs/monthOutputs.js +56 -41
  104. package/dist/tools/schemas/outputs/payeeOutputs.d.ts +1 -1
  105. package/dist/tools/schemas/outputs/payeeOutputs.js +10 -10
  106. package/dist/tools/schemas/outputs/reconciliationOutputs.d.ts +2 -2
  107. package/dist/tools/schemas/outputs/reconciliationOutputs.js +45 -45
  108. package/dist/tools/schemas/outputs/transactionMutationOutputs.d.ts +1 -1
  109. package/dist/tools/schemas/outputs/transactionMutationOutputs.js +28 -22
  110. package/dist/tools/schemas/outputs/transactionOutputs.d.ts +1 -1
  111. package/dist/tools/schemas/outputs/transactionOutputs.js +43 -35
  112. package/dist/tools/schemas/outputs/utilityOutputs.d.ts +1 -1
  113. package/dist/tools/schemas/outputs/utilityOutputs.js +5 -3
  114. package/dist/tools/schemas/shared/commonOutputs.d.ts +1 -1
  115. package/dist/tools/schemas/shared/commonOutputs.js +15 -9
  116. package/dist/tools/transactionReadTools.d.ts +11 -0
  117. package/dist/tools/transactionReadTools.js +202 -0
  118. package/dist/tools/transactionSchemas.d.ts +309 -0
  119. package/dist/tools/transactionSchemas.js +235 -0
  120. package/dist/tools/transactionTools.d.ts +6 -302
  121. package/dist/tools/transactionTools.js +7 -2054
  122. package/dist/tools/transactionUtils.d.ts +31 -0
  123. package/dist/tools/transactionUtils.js +364 -0
  124. package/dist/tools/transactionWriteTools.d.ts +20 -0
  125. package/dist/tools/transactionWriteTools.js +1342 -0
  126. package/dist/tools/utilityTools.d.ts +5 -4
  127. package/dist/tools/utilityTools.js +11 -11
  128. package/dist/types/index.d.ts +7 -7
  129. package/dist/types/index.js +6 -6
  130. package/dist/types/reconciliation.d.ts +1 -1
  131. package/dist/types/toolRegistration.d.ts +14 -12
  132. package/dist/utils/amountUtils.js +1 -1
  133. package/dist/utils/dateUtils.js +4 -4
  134. package/dist/utils/errors.d.ts +3 -3
  135. package/dist/utils/errors.js +4 -4
  136. package/dist/utils/money.d.ts +2 -2
  137. package/dist/utils/money.js +8 -8
  138. package/dist/utils/validationError.d.ts +1 -1
  139. package/dist/utils/validationError.js +1 -1
  140. package/docs/assets/examples/reconciliation-with-recommendations.json +66 -66
  141. package/docs/assets/schemas/reconciliation-v2.json +360 -336
  142. package/docs/plans/2025-12-25-transaction-tools-refactor-design.md +211 -0
  143. package/docs/plans/2025-12-25-transaction-tools-refactor.md +905 -0
  144. package/esbuild.config.mjs +53 -50
  145. package/meta.json +12548 -12548
  146. package/package.json +98 -109
  147. package/scripts/analyze-bundle.mjs +33 -30
  148. package/scripts/create-pr-description.js +169 -120
  149. package/scripts/run-all-tests.js +205 -0
  150. package/scripts/run-domain-integration-tests.js +28 -18
  151. package/scripts/run-generate-mcpb.js +19 -17
  152. package/scripts/run-throttled-integration-tests.js +92 -83
  153. package/scripts/test-delta-params.mjs +149 -120
  154. package/scripts/test-recommendations.ts +36 -32
  155. package/scripts/tmpTransaction.ts +80 -43
  156. package/scripts/validate-env.js +98 -91
  157. package/scripts/verify-build.js +78 -76
  158. package/src/__tests__/comprehensive.integration.test.ts +1281 -1154
  159. package/src/__tests__/performance.test.ts +723 -671
  160. package/src/__tests__/setup.ts +442 -395
  161. package/src/__tests__/smoke.e2e.test.ts +41 -39
  162. package/src/__tests__/testRunner.ts +314 -295
  163. package/src/__tests__/testUtils.ts +456 -364
  164. package/src/__tests__/tools/reconciliation/csvParser.integration.test.ts +109 -107
  165. package/src/__tests__/tools/reconciliation/real-world.integration.test.ts +41 -41
  166. package/src/index.ts +68 -59
  167. package/src/server/CLAUDE.md +480 -0
  168. package/src/server/YNABMCPServer.ts +821 -794
  169. package/src/server/__tests__/YNABMCPServer.integration.test.ts +929 -893
  170. package/src/server/__tests__/YNABMCPServer.test.ts +903 -899
  171. package/src/server/__tests__/budgetResolver.test.ts +466 -423
  172. package/src/server/__tests__/cacheManager.test.ts +891 -874
  173. package/src/server/__tests__/completions.integration.test.ts +115 -106
  174. package/src/server/__tests__/completions.test.ts +334 -313
  175. package/src/server/__tests__/config.test.ts +98 -86
  176. package/src/server/__tests__/deltaCache.merge.test.ts +774 -703
  177. package/src/server/__tests__/deltaCache.swr.test.ts +198 -153
  178. package/src/server/__tests__/deltaCache.test.ts +946 -759
  179. package/src/server/__tests__/diagnostics.test.ts +825 -792
  180. package/src/server/__tests__/errorHandler.integration.test.ts +512 -462
  181. package/src/server/__tests__/errorHandler.test.ts +402 -397
  182. package/src/server/__tests__/prompts.test.ts +424 -347
  183. package/src/server/__tests__/rateLimiter.test.ts +313 -309
  184. package/src/server/__tests__/requestLogger.test.ts +443 -403
  185. package/src/server/__tests__/resources.template.test.ts +196 -185
  186. package/src/server/__tests__/resources.test.ts +294 -288
  187. package/src/server/__tests__/security.integration.test.ts +487 -421
  188. package/src/server/__tests__/securityMiddleware.test.ts +519 -444
  189. package/src/server/__tests__/server-startup.integration.test.ts +509 -490
  190. package/src/server/__tests__/serverKnowledgeStore.test.ts +174 -173
  191. package/src/server/__tests__/toolRegistration.test.ts +239 -210
  192. package/src/server/__tests__/toolRegistry.test.ts +907 -845
  193. package/src/server/budgetResolver.ts +221 -181
  194. package/src/server/cacheKeys.ts +6 -6
  195. package/src/server/cacheManager.ts +498 -484
  196. package/src/server/completions.ts +267 -243
  197. package/src/server/config.ts +35 -14
  198. package/src/server/deltaCache.merge.ts +146 -128
  199. package/src/server/deltaCache.ts +352 -309
  200. package/src/server/diagnostics.ts +257 -242
  201. package/src/server/errorHandler.ts +747 -744
  202. package/src/server/prompts.ts +181 -176
  203. package/src/server/rateLimiter.ts +131 -129
  204. package/src/server/requestLogger.ts +350 -322
  205. package/src/server/resources.ts +442 -374
  206. package/src/server/responseFormatter.ts +41 -37
  207. package/src/server/securityMiddleware.ts +223 -205
  208. package/src/server/serverKnowledgeStore.ts +67 -67
  209. package/src/server/toolRegistry.ts +508 -474
  210. package/src/tools/CLAUDE.md +604 -0
  211. package/src/tools/__tests__/accountTools.delta.integration.test.ts +128 -111
  212. package/src/tools/__tests__/accountTools.integration.test.ts +129 -111
  213. package/src/tools/__tests__/accountTools.test.ts +685 -638
  214. package/src/tools/__tests__/adapters.test.ts +142 -108
  215. package/src/tools/__tests__/budgetTools.delta.integration.test.ts +73 -73
  216. package/src/tools/__tests__/budgetTools.integration.test.ts +132 -124
  217. package/src/tools/__tests__/budgetTools.test.ts +442 -413
  218. package/src/tools/__tests__/categoryTools.delta.integration.test.ts +76 -68
  219. package/src/tools/__tests__/categoryTools.integration.test.ts +314 -288
  220. package/src/tools/__tests__/categoryTools.test.ts +656 -625
  221. package/src/tools/__tests__/compareTransactions/formatter.test.ts +535 -462
  222. package/src/tools/__tests__/compareTransactions/index.test.ts +378 -358
  223. package/src/tools/__tests__/compareTransactions/matcher.test.ts +497 -398
  224. package/src/tools/__tests__/compareTransactions/parser.test.ts +765 -747
  225. package/src/tools/__tests__/compareTransactions.test.ts +352 -332
  226. package/src/tools/__tests__/compareTransactions.window.test.ts +150 -146
  227. package/src/tools/__tests__/deltaFetcher.scheduled.integration.test.ts +69 -65
  228. package/src/tools/__tests__/deltaFetcher.test.ts +325 -265
  229. package/src/tools/__tests__/deltaSupport.test.ts +211 -184
  230. package/src/tools/__tests__/deltaTestUtils.ts +37 -33
  231. package/src/tools/__tests__/exportTransactions.test.ts +205 -200
  232. package/src/tools/__tests__/monthTools.delta.integration.test.ts +68 -68
  233. package/src/tools/__tests__/monthTools.integration.test.ts +178 -166
  234. package/src/tools/__tests__/monthTools.test.ts +561 -512
  235. package/src/tools/__tests__/payeeTools.delta.integration.test.ts +68 -68
  236. package/src/tools/__tests__/payeeTools.integration.test.ts +158 -142
  237. package/src/tools/__tests__/payeeTools.test.ts +486 -434
  238. package/src/tools/__tests__/transactionSchemas.test.ts +1204 -0
  239. package/src/tools/__tests__/transactionTools.integration.test.ts +875 -825
  240. package/src/tools/__tests__/transactionTools.test.ts +4923 -4366
  241. package/src/tools/__tests__/transactionUtils.test.ts +1016 -0
  242. package/src/tools/__tests__/utilityTools.integration.test.ts +32 -32
  243. package/src/tools/__tests__/utilityTools.test.ts +68 -58
  244. package/src/tools/accountTools.ts +293 -271
  245. package/src/tools/adapters.ts +120 -63
  246. package/src/tools/budgetTools.ts +121 -116
  247. package/src/tools/categoryTools.ts +379 -339
  248. package/src/tools/compareTransactions/formatter.ts +131 -119
  249. package/src/tools/compareTransactions/index.ts +249 -214
  250. package/src/tools/compareTransactions/matcher.ts +259 -209
  251. package/src/tools/compareTransactions/parser.ts +517 -487
  252. package/src/tools/compareTransactions/types.ts +38 -38
  253. package/src/tools/compareTransactions.ts +1 -1
  254. package/src/tools/deltaFetcher.ts +281 -260
  255. package/src/tools/deltaSupport.ts +264 -259
  256. package/src/tools/exportTransactions.ts +230 -218
  257. package/src/tools/monthTools.ts +180 -165
  258. package/src/tools/payeeTools.ts +152 -140
  259. package/src/tools/reconcileAdapter.ts +297 -246
  260. package/src/tools/reconciliation/CLAUDE.md +506 -0
  261. package/src/tools/reconciliation/__tests__/adapter.causes.test.ts +135 -112
  262. package/src/tools/reconciliation/__tests__/adapter.test.ts +249 -227
  263. package/src/tools/reconciliation/__tests__/analyzer.test.ts +408 -335
  264. package/src/tools/reconciliation/__tests__/csvParser.test.ts +71 -69
  265. package/src/tools/reconciliation/__tests__/executor.integration.test.ts +348 -323
  266. package/src/tools/reconciliation/__tests__/executor.progress.test.ts +503 -457
  267. package/src/tools/reconciliation/__tests__/executor.test.ts +898 -831
  268. package/src/tools/reconciliation/__tests__/matcher.test.ts +667 -663
  269. package/src/tools/reconciliation/__tests__/payeeNormalizer.test.ts +296 -276
  270. package/src/tools/reconciliation/__tests__/recommendationEngine.integration.test.ts +692 -624
  271. package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +1008 -986
  272. package/src/tools/reconciliation/__tests__/reconciliation.delta.integration.test.ts +187 -146
  273. package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +583 -530
  274. package/src/tools/reconciliation/__tests__/scenarios/adapterCurrency.scenario.test.ts +75 -71
  275. package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +70 -58
  276. package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +102 -88
  277. package/src/tools/reconciliation/__tests__/schemaUrl.test.ts +58 -43
  278. package/src/tools/reconciliation/__tests__/signDetector.test.ts +209 -206
  279. package/src/tools/reconciliation/__tests__/ynabAdapter.test.ts +66 -60
  280. package/src/tools/reconciliation/analyzer.ts +582 -406
  281. package/src/tools/reconciliation/csvParser.ts +656 -609
  282. package/src/tools/reconciliation/executor.ts +1290 -1128
  283. package/src/tools/reconciliation/index.ts +580 -528
  284. package/src/tools/reconciliation/matcher.ts +256 -240
  285. package/src/tools/reconciliation/payeeNormalizer.ts +92 -78
  286. package/src/tools/reconciliation/recommendationEngine.ts +357 -345
  287. package/src/tools/reconciliation/reportFormatter.ts +349 -276
  288. package/src/tools/reconciliation/signDetector.ts +89 -83
  289. package/src/tools/reconciliation/types.ts +164 -153
  290. package/src/tools/reconciliation/ynabAdapter.ts +17 -15
  291. package/src/tools/schemas/CLAUDE.md +546 -0
  292. package/src/tools/schemas/common.ts +1 -1
  293. package/src/tools/schemas/outputs/__tests__/accountOutputs.test.ts +410 -409
  294. package/src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts +305 -299
  295. package/src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts +431 -430
  296. package/src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts +510 -495
  297. package/src/tools/schemas/outputs/__tests__/dateValidation.test.ts +179 -153
  298. package/src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts +293 -254
  299. package/src/tools/schemas/outputs/__tests__/monthOutputs.test.ts +457 -457
  300. package/src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts +362 -356
  301. package/src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts +402 -399
  302. package/src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts +225 -211
  303. package/src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts +457 -454
  304. package/src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts +316 -315
  305. package/src/tools/schemas/outputs/accountOutputs.ts +40 -34
  306. package/src/tools/schemas/outputs/budgetOutputs.ts +24 -19
  307. package/src/tools/schemas/outputs/categoryOutputs.ts +76 -56
  308. package/src/tools/schemas/outputs/comparisonOutputs.ts +192 -169
  309. package/src/tools/schemas/outputs/index.ts +163 -163
  310. package/src/tools/schemas/outputs/monthOutputs.ts +95 -80
  311. package/src/tools/schemas/outputs/payeeOutputs.ts +18 -18
  312. package/src/tools/schemas/outputs/reconciliationOutputs.ts +386 -373
  313. package/src/tools/schemas/outputs/transactionMutationOutputs.ts +259 -231
  314. package/src/tools/schemas/outputs/transactionOutputs.ts +81 -71
  315. package/src/tools/schemas/outputs/utilityOutputs.ts +90 -84
  316. package/src/tools/schemas/shared/commonOutputs.ts +27 -19
  317. package/src/tools/toolCategories.ts +114 -114
  318. package/src/tools/transactionReadTools.ts +327 -0
  319. package/src/tools/transactionSchemas.ts +484 -0
  320. package/src/tools/transactionTools.ts +107 -2990
  321. package/src/tools/transactionUtils.ts +621 -0
  322. package/src/tools/transactionWriteTools.ts +2110 -0
  323. package/src/tools/utilityTools.ts +46 -41
  324. package/src/types/CLAUDE.md +477 -0
  325. package/src/types/__tests__/index.test.ts +51 -51
  326. package/src/types/index.ts +43 -39
  327. package/src/types/integration-tests.d.ts +26 -26
  328. package/src/types/reconciliation.ts +29 -29
  329. package/src/types/toolAnnotations.ts +30 -30
  330. package/src/types/toolRegistration.ts +43 -32
  331. package/src/utils/CLAUDE.md +508 -0
  332. package/src/utils/__tests__/dateUtils.test.ts +174 -168
  333. package/src/utils/__tests__/money.test.ts +193 -187
  334. package/src/utils/amountUtils.ts +5 -5
  335. package/src/utils/baseError.ts +5 -5
  336. package/src/utils/dateUtils.ts +29 -26
  337. package/src/utils/errors.ts +14 -14
  338. package/src/utils/money.ts +66 -52
  339. package/src/utils/validationError.ts +1 -1
  340. package/tsconfig.json +29 -29
  341. package/tsconfig.prod.json +16 -16
  342. package/vitest-reporters/split-json-reporter.ts +247 -204
  343. package/vitest.config.ts +99 -95
  344. package/.prettierignore +0 -10
  345. package/.prettierrc.json +0 -10
  346. package/eslint.config.js +0 -49
@@ -37,10 +37,10 @@
37
37
  * }
38
38
  */
39
39
 
40
- import { z } from 'zod';
41
- import { TransactionSchema } from './transactionOutputs.js';
42
- import { AccountSchema } from './accountOutputs.js';
43
- import { CategorySchema } from './categoryOutputs.js';
40
+ import { z } from "zod";
41
+ import { AccountSchema } from "./accountOutputs.js";
42
+ import { CategorySchema } from "./categoryOutputs.js";
43
+ import { TransactionSchema } from "./transactionOutputs.js";
44
44
 
45
45
  // ============================================================================
46
46
  // NESTED SCHEMAS FOR COMPOSITION
@@ -54,17 +54,17 @@ import { CategorySchema } from './categoryOutputs.js';
54
54
  * @see src/tools/transactionTools.ts:1160-1335 - create_receipt_split_transaction handler
55
55
  */
56
56
  export const SubtransactionSchema = z.object({
57
- id: z.string(),
58
- transaction_id: z.string(),
59
- amount: z.number(),
60
- memo: z.string().optional(),
61
- payee_id: z.string().optional(),
62
- payee_name: z.string().optional(),
63
- category_id: z.string().optional(),
64
- category_name: z.string().optional(),
65
- transfer_account_id: z.string().optional(),
66
- transfer_transaction_id: z.string().optional(),
67
- deleted: z.boolean(),
57
+ id: z.string(),
58
+ transaction_id: z.string(),
59
+ amount: z.number(),
60
+ memo: z.string().optional(),
61
+ payee_id: z.string().optional(),
62
+ payee_name: z.string().optional(),
63
+ category_id: z.string().optional(),
64
+ category_name: z.string().optional(),
65
+ transfer_account_id: z.string().optional(),
66
+ transfer_transaction_id: z.string().optional(),
67
+ deleted: z.boolean(),
68
68
  });
69
69
 
70
70
  export type Subtransaction = z.infer<typeof SubtransactionSchema>;
@@ -82,12 +82,14 @@ export type Subtransaction = z.infer<typeof SubtransactionSchema>;
82
82
  * @see src/tools/transactionTools.ts:1336-1530 - update_transaction handler
83
83
  */
84
84
  export const TransactionWithBalanceSchema = TransactionSchema.extend({
85
- account_balance: z.number().optional(), // Raw YNAB milliunits
86
- account_cleared_balance: z.number().optional(), // Raw YNAB milliunits
87
- subtransactions: z.array(SubtransactionSchema).optional(),
85
+ account_balance: z.number().optional(), // Raw YNAB milliunits
86
+ account_cleared_balance: z.number().optional(), // Raw YNAB milliunits
87
+ subtransactions: z.array(SubtransactionSchema).optional(),
88
88
  });
89
89
 
90
- export type TransactionWithBalance = z.infer<typeof TransactionWithBalanceSchema>;
90
+ export type TransactionWithBalance = z.infer<
91
+ typeof TransactionWithBalanceSchema
92
+ >;
91
93
 
92
94
  /**
93
95
  * Individual receipt line item.
@@ -96,10 +98,10 @@ export type TransactionWithBalance = z.infer<typeof TransactionWithBalanceSchema
96
98
  * @see src/tools/transactionTools.ts:1160-1335 - create_receipt_split_transaction handler
97
99
  */
98
100
  export const ReceiptItemSchema = z.object({
99
- name: z.string(),
100
- quantity: z.number().optional(),
101
- amount: z.number(),
102
- memo: z.string().optional(),
101
+ name: z.string(),
102
+ quantity: z.number().optional(),
103
+ amount: z.number(),
104
+ memo: z.string().optional(),
103
105
  });
104
106
 
105
107
  export type ReceiptItem = z.infer<typeof ReceiptItemSchema>;
@@ -111,15 +113,17 @@ export type ReceiptItem = z.infer<typeof ReceiptItemSchema>;
111
113
  * @see src/tools/transactionTools.ts:1160-1335 - create_receipt_split_transaction handler
112
114
  */
113
115
  export const ReceiptCategoryBreakdownSchema = z.object({
114
- category_id: z.string(),
115
- category_name: z.string().optional(),
116
- items: z.array(ReceiptItemSchema),
117
- subtotal: z.number(),
118
- tax: z.number(),
119
- total: z.number(),
116
+ category_id: z.string(),
117
+ category_name: z.string().optional(),
118
+ items: z.array(ReceiptItemSchema),
119
+ subtotal: z.number(),
120
+ tax: z.number(),
121
+ total: z.number(),
120
122
  });
121
123
 
122
- export type ReceiptCategoryBreakdown = z.infer<typeof ReceiptCategoryBreakdownSchema>;
124
+ export type ReceiptCategoryBreakdown = z.infer<
125
+ typeof ReceiptCategoryBreakdownSchema
126
+ >;
123
127
 
124
128
  /**
125
129
  * Complete receipt breakdown summary.
@@ -128,10 +132,10 @@ export type ReceiptCategoryBreakdown = z.infer<typeof ReceiptCategoryBreakdownSc
128
132
  * @see src/tools/transactionTools.ts:1160-1335 - create_receipt_split_transaction handler
129
133
  */
130
134
  export const ReceiptSummarySchema = z.object({
131
- subtotal: z.number(),
132
- tax: z.number(),
133
- total: z.number(),
134
- categories: z.array(ReceiptCategoryBreakdownSchema),
135
+ subtotal: z.number(),
136
+ tax: z.number(),
137
+ total: z.number(),
138
+ categories: z.array(ReceiptCategoryBreakdownSchema),
135
139
  });
136
140
 
137
141
  export type ReceiptSummary = z.infer<typeof ReceiptSummarySchema>;
@@ -144,11 +148,11 @@ export type ReceiptSummary = z.infer<typeof ReceiptSummarySchema>;
144
148
  * @see src/tools/transactionTools.ts:2057-2462 - update_transactions handler
145
149
  */
146
150
  export const BulkOperationSummarySchema = z.object({
147
- total_requested: z.number(),
148
- created: z.number().optional(),
149
- updated: z.number().optional(),
150
- duplicates: z.number().optional(),
151
- failed: z.number(),
151
+ total_requested: z.number(),
152
+ created: z.number().optional(),
153
+ updated: z.number().optional(),
154
+ duplicates: z.number().optional(),
155
+ failed: z.number(),
152
156
  });
153
157
 
154
158
  export type BulkOperationSummary = z.infer<typeof BulkOperationSummarySchema>;
@@ -174,15 +178,15 @@ export type BulkOperationSummary = z.infer<typeof BulkOperationSummarySchema>;
174
178
  * @see src/tools/transactionTools.ts:2057-2462 - update_transactions handler
175
179
  */
176
180
  export const BulkResultSchema = z
177
- .object({
178
- request_index: z.number(),
179
- status: z.enum(['created', 'duplicate', 'updated', 'failed']),
180
- transaction_id: z.string().optional(),
181
- correlation_key: z.string(),
182
- error_code: z.string().optional(),
183
- error: z.string().optional(),
184
- })
185
- .passthrough(); // Allow additional correlation metadata fields
181
+ .object({
182
+ request_index: z.number(),
183
+ status: z.enum(["created", "duplicate", "updated", "failed"]),
184
+ transaction_id: z.string().optional(),
185
+ correlation_key: z.string(),
186
+ error_code: z.string().optional(),
187
+ error: z.string().optional(),
188
+ })
189
+ .passthrough(); // Allow additional correlation metadata fields
186
190
 
187
191
  export type BulkResult = z.infer<typeof BulkResultSchema>;
188
192
 
@@ -193,18 +197,21 @@ export type BulkResult = z.infer<typeof BulkResultSchema>;
193
197
  * @see src/tools/transactionTools.ts:2139-2192 - update_transactions dry-run diff building
194
198
  */
195
199
  export const TransactionDiffFieldsSchema = z.object({
196
- amount: z.number().optional(),
197
- date: z
198
- .string()
199
- .regex(/^\d{4}-\d{2}-\d{2}$/)
200
- .optional(),
201
- memo: z.string().optional(),
202
- payee_id: z.string().nullable().optional(),
203
- payee_name: z.string().nullable().optional(),
204
- category_id: z.string().nullable().optional(),
205
- cleared: z.enum(['cleared', 'uncleared', 'reconciled']).optional(),
206
- approved: z.boolean().optional(),
207
- flag_color: z.enum(['red', 'orange', 'yellow', 'green', 'blue', 'purple']).nullable().optional(),
200
+ amount: z.number().optional(),
201
+ date: z
202
+ .string()
203
+ .regex(/^\d{4}-\d{2}-\d{2}$/)
204
+ .optional(),
205
+ memo: z.string().optional(),
206
+ payee_id: z.string().nullable().optional(),
207
+ payee_name: z.string().nullable().optional(),
208
+ category_id: z.string().nullable().optional(),
209
+ cleared: z.enum(["cleared", "uncleared", "reconciled"]).optional(),
210
+ approved: z.boolean().optional(),
211
+ flag_color: z
212
+ .enum(["red", "orange", "yellow", "green", "blue", "purple"])
213
+ .nullable()
214
+ .optional(),
208
215
  });
209
216
 
210
217
  export type TransactionDiffFields = z.infer<typeof TransactionDiffFieldsSchema>;
@@ -216,9 +223,9 @@ export type TransactionDiffFields = z.infer<typeof TransactionDiffFieldsSchema>;
216
223
  * @see src/tools/transactionTools.ts:2057-2462 - update_transactions handler
217
224
  */
218
225
  export const DryRunPreviewItemSchema = z.object({
219
- transaction_id: z.string(),
220
- before: z.union([z.literal('unavailable'), TransactionDiffFieldsSchema]),
221
- after: TransactionDiffFieldsSchema,
226
+ transaction_id: z.string(),
227
+ before: z.union([z.literal("unavailable"), TransactionDiffFieldsSchema]),
228
+ after: TransactionDiffFieldsSchema,
222
229
  });
223
230
 
224
231
  export type DryRunPreviewItem = z.infer<typeof DryRunPreviewItemSchema>;
@@ -230,10 +237,10 @@ export type DryRunPreviewItem = z.infer<typeof DryRunPreviewItemSchema>;
230
237
  * @see src/tools/transactionTools.ts:2057-2462 - update_transactions handler
231
238
  */
232
239
  export const DryRunWarningSchema = z.object({
233
- code: z.string(),
234
- count: z.number(),
235
- message: z.string(),
236
- sample_ids: z.array(z.string()).optional(),
240
+ code: z.string(),
241
+ count: z.number(),
242
+ message: z.string(),
243
+ sample_ids: z.array(z.string()).optional(),
237
244
  });
238
245
 
239
246
  export type DryRunWarning = z.infer<typeof DryRunWarningSchema>;
@@ -269,17 +276,19 @@ export type DryRunWarning = z.infer<typeof DryRunWarningSchema>;
269
276
  * }
270
277
  */
271
278
  export const CreateTransactionOutputSchema = z.union([
272
- z.object({
273
- dry_run: z.literal(true),
274
- action: z.literal('create_transaction'),
275
- request: z.record(z.string(), z.unknown()),
276
- }),
277
- z.object({
278
- transaction: TransactionWithBalanceSchema,
279
- }),
279
+ z.object({
280
+ dry_run: z.literal(true),
281
+ action: z.literal("create_transaction"),
282
+ request: z.record(z.string(), z.unknown()),
283
+ }),
284
+ z.object({
285
+ transaction: TransactionWithBalanceSchema,
286
+ }),
280
287
  ]);
281
288
 
282
- export type CreateTransactionOutput = z.infer<typeof CreateTransactionOutputSchema>;
289
+ export type CreateTransactionOutput = z.infer<
290
+ typeof CreateTransactionOutputSchema
291
+ >;
283
292
 
284
293
  /**
285
294
  * Transaction preview item for bulk create dry-run.
@@ -288,18 +297,20 @@ export type CreateTransactionOutput = z.infer<typeof CreateTransactionOutputSche
288
297
  * @see src/tools/transactionTools.ts:1742-1752 - create_transactions dry-run preview
289
298
  */
290
299
  export const CreateTransactionPreviewSchema = z.object({
291
- request_index: z.number(),
292
- account_id: z.string(),
293
- date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
294
- amount: z.number(),
295
- memo: z.string().optional(),
296
- payee_id: z.string().optional(),
297
- payee_name: z.string().optional(),
298
- category_id: z.string().optional(),
299
- import_id: z.string().optional(),
300
+ request_index: z.number(),
301
+ account_id: z.string(),
302
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
303
+ amount: z.number(),
304
+ memo: z.string().optional(),
305
+ payee_id: z.string().optional(),
306
+ payee_name: z.string().optional(),
307
+ category_id: z.string().optional(),
308
+ import_id: z.string().optional(),
300
309
  });
301
310
 
302
- export type CreateTransactionPreview = z.infer<typeof CreateTransactionPreviewSchema>;
311
+ export type CreateTransactionPreview = z.infer<
312
+ typeof CreateTransactionPreviewSchema
313
+ >;
303
314
 
304
315
  /**
305
316
  * Bulk transaction creation output.
@@ -340,44 +351,46 @@ export type CreateTransactionPreview = z.infer<typeof CreateTransactionPreviewSc
340
351
  * }
341
352
  */
342
353
  export const CreateTransactionsOutputSchema = z.union([
343
- // Dry-run mode: Strict schema for preview validation
344
- z
345
- .object({
346
- dry_run: z.literal(true),
347
- action: z.literal('create_transactions'),
348
- validation: z.literal('passed'),
349
- summary: z.object({
350
- total_transactions: z.number(),
351
- total_amount: z.number(),
352
- accounts_affected: z.array(z.string()),
353
- date_range: z
354
- .object({
355
- earliest: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
356
- latest: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
357
- })
358
- .optional(),
359
- categories_affected: z.array(z.string()),
360
- }),
361
- transactions_preview: z.array(CreateTransactionPreviewSchema),
362
- note: z.string(),
363
- })
364
- .strict(), // Strict for dry-run to prevent malformed previews
365
- // Execution mode: Allow passthrough for correlation metadata extension
366
- z
367
- .object({
368
- success: z.boolean(),
369
- server_knowledge: z.number().optional(),
370
- summary: BulkOperationSummarySchema,
371
- results: z.array(BulkResultSchema),
372
- transactions: z.array(TransactionSchema).optional(),
373
- duplicate_import_ids: z.array(z.string()).optional(),
374
- message: z.string().optional(),
375
- mode: z.enum(['full', 'summary', 'ids_only']).optional(),
376
- })
377
- .passthrough(), // Allow top-level metadata like batch_id, execution_id
354
+ // Dry-run mode: Strict schema for preview validation
355
+ z
356
+ .object({
357
+ dry_run: z.literal(true),
358
+ action: z.literal("create_transactions"),
359
+ validation: z.literal("passed"),
360
+ summary: z.object({
361
+ total_transactions: z.number(),
362
+ total_amount: z.number(),
363
+ accounts_affected: z.array(z.string()),
364
+ date_range: z
365
+ .object({
366
+ earliest: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
367
+ latest: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
368
+ })
369
+ .optional(),
370
+ categories_affected: z.array(z.string()),
371
+ }),
372
+ transactions_preview: z.array(CreateTransactionPreviewSchema),
373
+ note: z.string(),
374
+ })
375
+ .strict(), // Strict for dry-run to prevent malformed previews
376
+ // Execution mode: Allow passthrough for correlation metadata extension
377
+ z
378
+ .object({
379
+ success: z.boolean(),
380
+ server_knowledge: z.number().optional(),
381
+ summary: BulkOperationSummarySchema,
382
+ results: z.array(BulkResultSchema),
383
+ transactions: z.array(TransactionSchema).optional(),
384
+ duplicate_import_ids: z.array(z.string()).optional(),
385
+ message: z.string().optional(),
386
+ mode: z.enum(["full", "summary", "ids_only"]).optional(),
387
+ })
388
+ .passthrough(), // Allow top-level metadata like batch_id, execution_id
378
389
  ]);
379
390
 
380
- export type CreateTransactionsOutput = z.infer<typeof CreateTransactionsOutputSchema>;
391
+ export type CreateTransactionsOutput = z.infer<
392
+ typeof CreateTransactionsOutputSchema
393
+ >;
381
394
 
382
395
  /**
383
396
  * Single transaction update output.
@@ -402,19 +415,21 @@ export type CreateTransactionsOutput = z.infer<typeof CreateTransactionsOutputSc
402
415
  * }
403
416
  */
404
417
  export const UpdateTransactionOutputSchema = z.union([
405
- z.object({
406
- dry_run: z.literal(true),
407
- action: z.literal('update_transaction'),
408
- request: z.record(z.string(), z.unknown()),
409
- }),
410
- z.object({
411
- transaction: TransactionWithBalanceSchema,
412
- updated_balance: z.number(), // Raw YNAB milliunits
413
- updated_cleared_balance: z.number(), // Raw YNAB milliunits
414
- }),
418
+ z.object({
419
+ dry_run: z.literal(true),
420
+ action: z.literal("update_transaction"),
421
+ request: z.record(z.string(), z.unknown()),
422
+ }),
423
+ z.object({
424
+ transaction: TransactionWithBalanceSchema,
425
+ updated_balance: z.number(), // Raw YNAB milliunits
426
+ updated_cleared_balance: z.number(), // Raw YNAB milliunits
427
+ }),
415
428
  ]);
416
429
 
417
- export type UpdateTransactionOutput = z.infer<typeof UpdateTransactionOutputSchema>;
430
+ export type UpdateTransactionOutput = z.infer<
431
+ typeof UpdateTransactionOutputSchema
432
+ >;
418
433
 
419
434
  /**
420
435
  * Bulk transaction update output.
@@ -459,37 +474,39 @@ export type UpdateTransactionOutput = z.infer<typeof UpdateTransactionOutputSche
459
474
  * }
460
475
  */
461
476
  export const UpdateTransactionsOutputSchema = z.union([
462
- // Dry-run mode: Strict schema for preview validation
463
- z
464
- .object({
465
- dry_run: z.literal(true),
466
- action: z.literal('update_transactions'),
467
- validation: z.literal('passed'),
468
- summary: z.object({
469
- total_transactions: z.number(),
470
- accounts_affected: z.number(),
471
- fields_to_update: z.array(z.string()),
472
- }),
473
- transactions_preview: z.array(DryRunPreviewItemSchema),
474
- warnings: z.array(DryRunWarningSchema).optional(),
475
- note: z.string(),
476
- })
477
- .strict(), // Strict for dry-run to prevent malformed previews
478
- // Execution mode: Allow passthrough for correlation metadata extension
479
- z
480
- .object({
481
- success: z.boolean(),
482
- server_knowledge: z.number().optional(),
483
- summary: BulkOperationSummarySchema,
484
- results: z.array(BulkResultSchema),
485
- transactions: z.array(TransactionSchema).optional(),
486
- message: z.string().optional(),
487
- mode: z.enum(['full', 'summary', 'ids_only']).optional(),
488
- })
489
- .passthrough(), // Allow top-level metadata like batch_id, execution_id
477
+ // Dry-run mode: Strict schema for preview validation
478
+ z
479
+ .object({
480
+ dry_run: z.literal(true),
481
+ action: z.literal("update_transactions"),
482
+ validation: z.literal("passed"),
483
+ summary: z.object({
484
+ total_transactions: z.number(),
485
+ accounts_affected: z.number(),
486
+ fields_to_update: z.array(z.string()),
487
+ }),
488
+ transactions_preview: z.array(DryRunPreviewItemSchema),
489
+ warnings: z.array(DryRunWarningSchema).optional(),
490
+ note: z.string(),
491
+ })
492
+ .strict(), // Strict for dry-run to prevent malformed previews
493
+ // Execution mode: Allow passthrough for correlation metadata extension
494
+ z
495
+ .object({
496
+ success: z.boolean(),
497
+ server_knowledge: z.number().optional(),
498
+ summary: BulkOperationSummarySchema,
499
+ results: z.array(BulkResultSchema),
500
+ transactions: z.array(TransactionSchema).optional(),
501
+ message: z.string().optional(),
502
+ mode: z.enum(["full", "summary", "ids_only"]).optional(),
503
+ })
504
+ .passthrough(), // Allow top-level metadata like batch_id, execution_id
490
505
  ]);
491
506
 
492
- export type UpdateTransactionsOutput = z.infer<typeof UpdateTransactionsOutputSchema>;
507
+ export type UpdateTransactionsOutput = z.infer<
508
+ typeof UpdateTransactionsOutputSchema
509
+ >;
493
510
 
494
511
  /**
495
512
  * Transaction deletion output.
@@ -515,23 +532,25 @@ export type UpdateTransactionsOutput = z.infer<typeof UpdateTransactionsOutputSc
515
532
  * }
516
533
  */
517
534
  export const DeleteTransactionOutputSchema = z.union([
518
- z.object({
519
- dry_run: z.literal(true),
520
- action: z.literal('delete_transaction'),
521
- request: z.record(z.string(), z.unknown()),
522
- }),
523
- z.object({
524
- message: z.string(),
525
- transaction: z.object({
526
- id: z.string(),
527
- deleted: z.boolean(),
528
- }),
529
- updated_balance: z.number(), // Raw YNAB milliunits
530
- updated_cleared_balance: z.number(), // Raw YNAB milliunits
531
- }),
535
+ z.object({
536
+ dry_run: z.literal(true),
537
+ action: z.literal("delete_transaction"),
538
+ request: z.record(z.string(), z.unknown()),
539
+ }),
540
+ z.object({
541
+ message: z.string(),
542
+ transaction: z.object({
543
+ id: z.string(),
544
+ deleted: z.boolean(),
545
+ }),
546
+ updated_balance: z.number(), // Raw YNAB milliunits
547
+ updated_cleared_balance: z.number(), // Raw YNAB milliunits
548
+ }),
532
549
  ]);
533
550
 
534
- export type DeleteTransactionOutput = z.infer<typeof DeleteTransactionOutputSchema>;
551
+ export type DeleteTransactionOutput = z.infer<
552
+ typeof DeleteTransactionOutputSchema
553
+ >;
535
554
 
536
555
  /**
537
556
  * Transaction preview schema for dry-run responses.
@@ -549,20 +568,25 @@ export type DeleteTransactionOutput = z.infer<typeof DeleteTransactionOutputSche
549
568
  * @see CreateReceiptSplitTransactionOutputSchema - Used in dry-run branch for transaction preview
550
569
  */
551
570
  export const TransactionDryRunPreviewSchema = z.object({
552
- account_id: z.string(),
553
- date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
554
- amount: z.number(),
555
- memo: z.string().optional().nullable(),
556
- cleared: z.enum(['cleared', 'uncleared', 'reconciled']).optional(),
557
- approved: z.boolean().optional(),
558
- flag_color: z.enum(['red', 'orange', 'yellow', 'green', 'blue', 'purple']).optional().nullable(),
559
- payee_id: z.string().optional().nullable(),
560
- payee_name: z.string().optional().nullable(),
561
- category_id: z.string().optional().nullable(),
562
- import_id: z.string().optional().nullable(),
571
+ account_id: z.string(),
572
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
573
+ amount: z.number(),
574
+ memo: z.string().optional().nullable(),
575
+ cleared: z.enum(["cleared", "uncleared", "reconciled"]).optional(),
576
+ approved: z.boolean().optional(),
577
+ flag_color: z
578
+ .enum(["red", "orange", "yellow", "green", "blue", "purple"])
579
+ .optional()
580
+ .nullable(),
581
+ payee_id: z.string().optional().nullable(),
582
+ payee_name: z.string().optional().nullable(),
583
+ category_id: z.string().optional().nullable(),
584
+ import_id: z.string().optional().nullable(),
563
585
  });
564
586
 
565
- export type TransactionDryRunPreview = z.infer<typeof TransactionDryRunPreviewSchema>;
587
+ export type TransactionDryRunPreview = z.infer<
588
+ typeof TransactionDryRunPreviewSchema
589
+ >;
566
590
 
567
591
  /**
568
592
  * Subtransaction preview schema for dry-run responses.
@@ -577,9 +601,9 @@ export type TransactionDryRunPreview = z.infer<typeof TransactionDryRunPreviewSc
577
601
  * @see CreateReceiptSplitTransactionOutputSchema - Used in dry-run branch for subtransactions preview
578
602
  */
579
603
  export const SubtransactionPreviewSchema = SubtransactionSchema.omit({
580
- id: true,
581
- transaction_id: true,
582
- deleted: true,
604
+ id: true,
605
+ transaction_id: true,
606
+ deleted: true,
583
607
  });
584
608
 
585
609
  export type SubtransactionPreview = z.infer<typeof SubtransactionPreviewSchema>;
@@ -630,21 +654,21 @@ export type SubtransactionPreview = z.infer<typeof SubtransactionPreviewSchema>;
630
654
  * }
631
655
  */
632
656
  export const CreateReceiptSplitTransactionOutputSchema = z.union([
633
- z.object({
634
- dry_run: z.literal(true),
635
- action: z.literal('create_receipt_split_transaction'),
636
- transaction_preview: TransactionDryRunPreviewSchema,
637
- receipt_summary: ReceiptSummarySchema,
638
- subtransactions: z.array(SubtransactionPreviewSchema),
639
- }),
640
- z.object({
641
- transaction: TransactionWithBalanceSchema,
642
- receipt_summary: ReceiptSummarySchema,
643
- }),
657
+ z.object({
658
+ dry_run: z.literal(true),
659
+ action: z.literal("create_receipt_split_transaction"),
660
+ transaction_preview: TransactionDryRunPreviewSchema,
661
+ receipt_summary: ReceiptSummarySchema,
662
+ subtransactions: z.array(SubtransactionPreviewSchema),
663
+ }),
664
+ z.object({
665
+ transaction: TransactionWithBalanceSchema,
666
+ receipt_summary: ReceiptSummarySchema,
667
+ }),
644
668
  ]);
645
669
 
646
670
  export type CreateReceiptSplitTransactionOutput = z.infer<
647
- typeof CreateReceiptSplitTransactionOutputSchema
671
+ typeof CreateReceiptSplitTransactionOutputSchema
648
672
  >;
649
673
 
650
674
  /**
@@ -654,13 +678,15 @@ export type CreateReceiptSplitTransactionOutput = z.infer<
654
678
  * @see src/tools/accountTools.ts:218-233 - create_account dry-run response construction
655
679
  */
656
680
  export const CreateAccountDryRunRequestSchema = z.object({
657
- budget_id: z.string(),
658
- name: z.string(),
659
- type: z.string(),
660
- balance: z.number(),
681
+ budget_id: z.string(),
682
+ name: z.string(),
683
+ type: z.string(),
684
+ balance: z.number(),
661
685
  });
662
686
 
663
- export type CreateAccountDryRunRequest = z.infer<typeof CreateAccountDryRunRequestSchema>;
687
+ export type CreateAccountDryRunRequest = z.infer<
688
+ typeof CreateAccountDryRunRequestSchema
689
+ >;
664
690
 
665
691
  /**
666
692
  * Account creation output.
@@ -689,14 +715,14 @@ export type CreateAccountDryRunRequest = z.infer<typeof CreateAccountDryRunReque
689
715
  * }
690
716
  */
691
717
  export const CreateAccountOutputSchema = z.union([
692
- z.object({
693
- dry_run: z.literal(true),
694
- action: z.literal('create_account'),
695
- request: CreateAccountDryRunRequestSchema,
696
- }),
697
- z.object({
698
- account: AccountSchema,
699
- }),
718
+ z.object({
719
+ dry_run: z.literal(true),
720
+ action: z.literal("create_account"),
721
+ request: CreateAccountDryRunRequestSchema,
722
+ }),
723
+ z.object({
724
+ account: AccountSchema,
725
+ }),
700
726
  ]);
701
727
 
702
728
  export type CreateAccountOutput = z.infer<typeof CreateAccountOutputSchema>;
@@ -708,13 +734,15 @@ export type CreateAccountOutput = z.infer<typeof CreateAccountOutputSchema>;
708
734
  * @see src/tools/categoryTools.ts:237-256 - update_category dry-run response construction
709
735
  */
710
736
  export const UpdateCategoryDryRunRequestSchema = z.object({
711
- budget_id: z.string(),
712
- category_id: z.string(),
713
- budgeted: z.number(),
714
- month: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
737
+ budget_id: z.string(),
738
+ category_id: z.string(),
739
+ budgeted: z.number(),
740
+ month: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
715
741
  });
716
742
 
717
- export type UpdateCategoryDryRunRequest = z.infer<typeof UpdateCategoryDryRunRequestSchema>;
743
+ export type UpdateCategoryDryRunRequest = z.infer<
744
+ typeof UpdateCategoryDryRunRequestSchema
745
+ >;
718
746
 
719
747
  /**
720
748
  * Category budget update output.
@@ -744,15 +772,15 @@ export type UpdateCategoryDryRunRequest = z.infer<typeof UpdateCategoryDryRunReq
744
772
  * }
745
773
  */
746
774
  export const UpdateCategoryOutputSchema = z.union([
747
- z.object({
748
- dry_run: z.literal(true),
749
- action: z.literal('update_category'),
750
- request: UpdateCategoryDryRunRequestSchema,
751
- }),
752
- z.object({
753
- category: CategorySchema,
754
- updated_month: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
755
- }),
775
+ z.object({
776
+ dry_run: z.literal(true),
777
+ action: z.literal("update_category"),
778
+ request: UpdateCategoryDryRunRequestSchema,
779
+ }),
780
+ z.object({
781
+ category: CategorySchema,
782
+ updated_month: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
783
+ }),
756
784
  ]);
757
785
 
758
786
  export type UpdateCategoryOutput = z.infer<typeof UpdateCategoryOutputSchema>;