@dizzlkheinz/ynab-mcpb 0.18.4 → 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.
- package/CLAUDE.md +87 -8
- package/bin/ynab-mcp-server.cjs +2 -2
- package/bin/ynab-mcp-server.js +3 -3
- package/biome.json +39 -0
- package/dist/bundle/index.cjs +67 -67
- package/dist/index.d.ts +1 -1
- package/dist/index.js +27 -27
- package/dist/server/YNABMCPServer.d.ts +3 -4
- package/dist/server/YNABMCPServer.js +111 -116
- package/dist/server/budgetResolver.d.ts +6 -5
- package/dist/server/budgetResolver.js +46 -36
- package/dist/server/cacheKeys.js +6 -6
- package/dist/server/cacheManager.js +14 -11
- package/dist/server/completions.d.ts +2 -2
- package/dist/server/completions.js +20 -15
- package/dist/server/config.d.ts +10 -5
- package/dist/server/config.js +24 -7
- package/dist/server/deltaCache.d.ts +2 -2
- package/dist/server/deltaCache.js +22 -16
- package/dist/server/deltaCache.merge.d.ts +2 -2
- package/dist/server/diagnostics.d.ts +4 -4
- package/dist/server/diagnostics.js +38 -32
- package/dist/server/errorHandler.d.ts +5 -12
- package/dist/server/errorHandler.js +219 -217
- package/dist/server/prompts.d.ts +2 -2
- package/dist/server/prompts.js +45 -45
- package/dist/server/rateLimiter.js +4 -4
- package/dist/server/requestLogger.d.ts +1 -1
- package/dist/server/requestLogger.js +40 -35
- package/dist/server/resources.d.ts +3 -3
- package/dist/server/resources.js +55 -52
- package/dist/server/responseFormatter.js +6 -6
- package/dist/server/securityMiddleware.d.ts +2 -2
- package/dist/server/securityMiddleware.js +22 -20
- package/dist/server/serverKnowledgeStore.js +1 -1
- package/dist/server/toolRegistry.d.ts +3 -3
- package/dist/server/toolRegistry.js +47 -40
- package/dist/tools/__tests__/deltaTestUtils.d.ts +3 -3
- package/dist/tools/__tests__/deltaTestUtils.js +2 -2
- package/dist/tools/accountTools.d.ts +9 -8
- package/dist/tools/accountTools.js +47 -47
- package/dist/tools/adapters.d.ts +13 -8
- package/dist/tools/adapters.js +21 -11
- package/dist/tools/budgetTools.d.ts +8 -7
- package/dist/tools/budgetTools.js +22 -22
- package/dist/tools/categoryTools.d.ts +9 -8
- package/dist/tools/categoryTools.js +68 -59
- package/dist/tools/compareTransactions/formatter.d.ts +3 -3
- package/dist/tools/compareTransactions/formatter.js +9 -9
- package/dist/tools/compareTransactions/index.d.ts +6 -6
- package/dist/tools/compareTransactions/index.js +58 -43
- package/dist/tools/compareTransactions/matcher.d.ts +1 -1
- package/dist/tools/compareTransactions/matcher.js +28 -15
- package/dist/tools/compareTransactions/parser.d.ts +2 -2
- package/dist/tools/compareTransactions/parser.js +144 -138
- package/dist/tools/compareTransactions/types.d.ts +4 -4
- package/dist/tools/compareTransactions.d.ts +1 -1
- package/dist/tools/compareTransactions.js +1 -1
- package/dist/tools/deltaFetcher.d.ts +2 -2
- package/dist/tools/deltaFetcher.js +16 -15
- package/dist/tools/deltaSupport.d.ts +4 -4
- package/dist/tools/deltaSupport.js +35 -41
- package/dist/tools/exportTransactions.d.ts +5 -4
- package/dist/tools/exportTransactions.js +61 -59
- package/dist/tools/monthTools.d.ts +7 -6
- package/dist/tools/monthTools.js +31 -29
- package/dist/tools/payeeTools.d.ts +7 -6
- package/dist/tools/payeeTools.js +28 -28
- package/dist/tools/reconcileAdapter.d.ts +2 -2
- package/dist/tools/reconcileAdapter.js +19 -12
- package/dist/tools/reconciliation/analyzer.d.ts +4 -4
- package/dist/tools/reconciliation/analyzer.js +73 -59
- package/dist/tools/reconciliation/csvParser.d.ts +3 -3
- package/dist/tools/reconciliation/csvParser.js +128 -104
- package/dist/tools/reconciliation/executor.d.ts +4 -4
- package/dist/tools/reconciliation/executor.js +148 -109
- package/dist/tools/reconciliation/index.d.ts +10 -10
- package/dist/tools/reconciliation/index.js +96 -83
- package/dist/tools/reconciliation/matcher.d.ts +3 -3
- package/dist/tools/reconciliation/matcher.js +17 -16
- package/dist/tools/reconciliation/payeeNormalizer.js +19 -8
- package/dist/tools/reconciliation/recommendationEngine.d.ts +1 -1
- package/dist/tools/reconciliation/recommendationEngine.js +40 -40
- package/dist/tools/reconciliation/reportFormatter.d.ts +2 -2
- package/dist/tools/reconciliation/reportFormatter.js +59 -58
- package/dist/tools/reconciliation/signDetector.d.ts +1 -1
- package/dist/tools/reconciliation/types.d.ts +16 -16
- package/dist/tools/reconciliation/ynabAdapter.d.ts +2 -2
- package/dist/tools/schemas/common.d.ts +1 -1
- package/dist/tools/schemas/common.js +1 -1
- package/dist/tools/schemas/outputs/accountOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/accountOutputs.js +24 -18
- package/dist/tools/schemas/outputs/budgetOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/budgetOutputs.js +14 -11
- package/dist/tools/schemas/outputs/categoryOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/categoryOutputs.js +49 -29
- package/dist/tools/schemas/outputs/comparisonOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/comparisonOutputs.js +12 -12
- package/dist/tools/schemas/outputs/index.d.ts +14 -14
- package/dist/tools/schemas/outputs/index.js +14 -14
- package/dist/tools/schemas/outputs/monthOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/monthOutputs.js +56 -41
- package/dist/tools/schemas/outputs/payeeOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/payeeOutputs.js +10 -10
- package/dist/tools/schemas/outputs/reconciliationOutputs.d.ts +2 -2
- package/dist/tools/schemas/outputs/reconciliationOutputs.js +45 -45
- package/dist/tools/schemas/outputs/transactionMutationOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/transactionMutationOutputs.js +28 -22
- package/dist/tools/schemas/outputs/transactionOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/transactionOutputs.js +43 -35
- package/dist/tools/schemas/outputs/utilityOutputs.d.ts +1 -1
- package/dist/tools/schemas/outputs/utilityOutputs.js +5 -3
- package/dist/tools/schemas/shared/commonOutputs.d.ts +1 -1
- package/dist/tools/schemas/shared/commonOutputs.js +15 -9
- package/dist/tools/transactionReadTools.d.ts +11 -0
- package/dist/tools/transactionReadTools.js +202 -0
- package/dist/tools/transactionSchemas.d.ts +7 -7
- package/dist/tools/transactionSchemas.js +77 -57
- package/dist/tools/transactionTools.d.ts +6 -24
- package/dist/tools/transactionTools.js +7 -1499
- package/dist/tools/transactionUtils.d.ts +6 -6
- package/dist/tools/transactionUtils.js +78 -63
- package/dist/tools/transactionWriteTools.d.ts +20 -0
- package/dist/tools/transactionWriteTools.js +1342 -0
- package/dist/tools/utilityTools.d.ts +5 -4
- package/dist/tools/utilityTools.js +11 -11
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.js +6 -6
- package/dist/types/reconciliation.d.ts +1 -1
- package/dist/types/toolRegistration.d.ts +14 -12
- package/dist/utils/amountUtils.js +1 -1
- package/dist/utils/dateUtils.js +4 -4
- package/dist/utils/errors.d.ts +3 -3
- package/dist/utils/errors.js +4 -4
- package/dist/utils/money.d.ts +2 -2
- package/dist/utils/money.js +8 -8
- package/dist/utils/validationError.d.ts +1 -1
- package/dist/utils/validationError.js +1 -1
- package/docs/assets/examples/reconciliation-with-recommendations.json +66 -66
- package/docs/assets/schemas/reconciliation-v2.json +360 -336
- package/esbuild.config.mjs +53 -50
- package/meta.json +12548 -12548
- package/package.json +98 -111
- package/scripts/analyze-bundle.mjs +33 -30
- package/scripts/create-pr-description.js +169 -120
- package/scripts/run-all-tests.js +178 -169
- package/scripts/run-domain-integration-tests.js +28 -18
- package/scripts/run-generate-mcpb.js +19 -17
- package/scripts/run-throttled-integration-tests.js +92 -83
- package/scripts/test-delta-params.mjs +149 -120
- package/scripts/test-recommendations.ts +36 -32
- package/scripts/tmpTransaction.ts +80 -43
- package/scripts/validate-env.js +98 -91
- package/scripts/verify-build.js +78 -76
- package/src/__tests__/comprehensive.integration.test.ts +1281 -1154
- package/src/__tests__/performance.test.ts +723 -671
- package/src/__tests__/setup.ts +442 -395
- package/src/__tests__/smoke.e2e.test.ts +41 -39
- package/src/__tests__/testRunner.ts +314 -295
- package/src/__tests__/testUtils.ts +456 -364
- package/src/__tests__/tools/reconciliation/csvParser.integration.test.ts +109 -107
- package/src/__tests__/tools/reconciliation/real-world.integration.test.ts +41 -41
- package/src/index.ts +68 -59
- package/src/server/CLAUDE.md +480 -0
- package/src/server/YNABMCPServer.ts +821 -794
- package/src/server/__tests__/YNABMCPServer.integration.test.ts +929 -893
- package/src/server/__tests__/YNABMCPServer.test.ts +903 -899
- package/src/server/__tests__/budgetResolver.test.ts +466 -423
- package/src/server/__tests__/cacheManager.test.ts +891 -874
- package/src/server/__tests__/completions.integration.test.ts +115 -106
- package/src/server/__tests__/completions.test.ts +334 -313
- package/src/server/__tests__/config.test.ts +98 -86
- package/src/server/__tests__/deltaCache.merge.test.ts +774 -703
- package/src/server/__tests__/deltaCache.swr.test.ts +198 -153
- package/src/server/__tests__/deltaCache.test.ts +946 -759
- package/src/server/__tests__/diagnostics.test.ts +825 -792
- package/src/server/__tests__/errorHandler.integration.test.ts +512 -462
- package/src/server/__tests__/errorHandler.test.ts +402 -397
- package/src/server/__tests__/prompts.test.ts +424 -347
- package/src/server/__tests__/rateLimiter.test.ts +313 -309
- package/src/server/__tests__/requestLogger.test.ts +443 -403
- package/src/server/__tests__/resources.template.test.ts +196 -185
- package/src/server/__tests__/resources.test.ts +294 -288
- package/src/server/__tests__/security.integration.test.ts +487 -421
- package/src/server/__tests__/securityMiddleware.test.ts +519 -444
- package/src/server/__tests__/server-startup.integration.test.ts +509 -490
- package/src/server/__tests__/serverKnowledgeStore.test.ts +174 -173
- package/src/server/__tests__/toolRegistration.test.ts +239 -210
- package/src/server/__tests__/toolRegistry.test.ts +907 -845
- package/src/server/budgetResolver.ts +221 -181
- package/src/server/cacheKeys.ts +6 -6
- package/src/server/cacheManager.ts +498 -484
- package/src/server/completions.ts +267 -243
- package/src/server/config.ts +35 -14
- package/src/server/deltaCache.merge.ts +146 -128
- package/src/server/deltaCache.ts +352 -309
- package/src/server/diagnostics.ts +257 -242
- package/src/server/errorHandler.ts +747 -744
- package/src/server/prompts.ts +181 -176
- package/src/server/rateLimiter.ts +131 -129
- package/src/server/requestLogger.ts +350 -322
- package/src/server/resources.ts +442 -374
- package/src/server/responseFormatter.ts +41 -37
- package/src/server/securityMiddleware.ts +223 -205
- package/src/server/serverKnowledgeStore.ts +67 -67
- package/src/server/toolRegistry.ts +508 -474
- package/src/tools/CLAUDE.md +604 -0
- package/src/tools/__tests__/accountTools.delta.integration.test.ts +128 -111
- package/src/tools/__tests__/accountTools.integration.test.ts +129 -111
- package/src/tools/__tests__/accountTools.test.ts +685 -638
- package/src/tools/__tests__/adapters.test.ts +142 -108
- package/src/tools/__tests__/budgetTools.delta.integration.test.ts +73 -73
- package/src/tools/__tests__/budgetTools.integration.test.ts +132 -124
- package/src/tools/__tests__/budgetTools.test.ts +442 -413
- package/src/tools/__tests__/categoryTools.delta.integration.test.ts +76 -68
- package/src/tools/__tests__/categoryTools.integration.test.ts +314 -288
- package/src/tools/__tests__/categoryTools.test.ts +656 -625
- package/src/tools/__tests__/compareTransactions/formatter.test.ts +535 -462
- package/src/tools/__tests__/compareTransactions/index.test.ts +378 -358
- package/src/tools/__tests__/compareTransactions/matcher.test.ts +497 -398
- package/src/tools/__tests__/compareTransactions/parser.test.ts +765 -747
- package/src/tools/__tests__/compareTransactions.test.ts +352 -332
- package/src/tools/__tests__/compareTransactions.window.test.ts +150 -146
- package/src/tools/__tests__/deltaFetcher.scheduled.integration.test.ts +69 -65
- package/src/tools/__tests__/deltaFetcher.test.ts +325 -265
- package/src/tools/__tests__/deltaSupport.test.ts +211 -184
- package/src/tools/__tests__/deltaTestUtils.ts +37 -33
- package/src/tools/__tests__/exportTransactions.test.ts +205 -200
- package/src/tools/__tests__/monthTools.delta.integration.test.ts +68 -68
- package/src/tools/__tests__/monthTools.integration.test.ts +178 -166
- package/src/tools/__tests__/monthTools.test.ts +561 -512
- package/src/tools/__tests__/payeeTools.delta.integration.test.ts +68 -68
- package/src/tools/__tests__/payeeTools.integration.test.ts +158 -142
- package/src/tools/__tests__/payeeTools.test.ts +486 -434
- package/src/tools/__tests__/transactionSchemas.test.ts +1202 -1186
- package/src/tools/__tests__/transactionTools.integration.test.ts +875 -825
- package/src/tools/__tests__/transactionTools.test.ts +4923 -4366
- package/src/tools/__tests__/transactionUtils.test.ts +1004 -977
- package/src/tools/__tests__/utilityTools.integration.test.ts +32 -32
- package/src/tools/__tests__/utilityTools.test.ts +68 -58
- package/src/tools/accountTools.ts +293 -271
- package/src/tools/adapters.ts +120 -63
- package/src/tools/budgetTools.ts +121 -116
- package/src/tools/categoryTools.ts +379 -339
- package/src/tools/compareTransactions/formatter.ts +131 -119
- package/src/tools/compareTransactions/index.ts +249 -214
- package/src/tools/compareTransactions/matcher.ts +259 -209
- package/src/tools/compareTransactions/parser.ts +517 -487
- package/src/tools/compareTransactions/types.ts +38 -38
- package/src/tools/compareTransactions.ts +1 -1
- package/src/tools/deltaFetcher.ts +281 -260
- package/src/tools/deltaSupport.ts +264 -259
- package/src/tools/exportTransactions.ts +230 -218
- package/src/tools/monthTools.ts +180 -165
- package/src/tools/payeeTools.ts +152 -140
- package/src/tools/reconcileAdapter.ts +297 -252
- package/src/tools/reconciliation/CLAUDE.md +506 -0
- package/src/tools/reconciliation/__tests__/adapter.causes.test.ts +133 -124
- package/src/tools/reconciliation/__tests__/adapter.test.ts +249 -230
- package/src/tools/reconciliation/__tests__/analyzer.test.ts +408 -400
- package/src/tools/reconciliation/__tests__/csvParser.test.ts +71 -69
- package/src/tools/reconciliation/__tests__/executor.integration.test.ts +348 -323
- package/src/tools/reconciliation/__tests__/executor.progress.test.ts +503 -457
- package/src/tools/reconciliation/__tests__/executor.test.ts +898 -831
- package/src/tools/reconciliation/__tests__/matcher.test.ts +667 -663
- package/src/tools/reconciliation/__tests__/payeeNormalizer.test.ts +296 -276
- package/src/tools/reconciliation/__tests__/recommendationEngine.integration.test.ts +692 -624
- package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +1008 -989
- package/src/tools/reconciliation/__tests__/reconciliation.delta.integration.test.ts +187 -146
- package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +583 -533
- package/src/tools/reconciliation/__tests__/scenarios/adapterCurrency.scenario.test.ts +75 -74
- package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +70 -62
- package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +102 -88
- package/src/tools/reconciliation/__tests__/schemaUrl.test.ts +56 -55
- package/src/tools/reconciliation/__tests__/signDetector.test.ts +209 -206
- package/src/tools/reconciliation/__tests__/ynabAdapter.test.ts +66 -60
- package/src/tools/reconciliation/analyzer.ts +564 -504
- package/src/tools/reconciliation/csvParser.ts +656 -609
- package/src/tools/reconciliation/executor.ts +1290 -1128
- package/src/tools/reconciliation/index.ts +580 -528
- package/src/tools/reconciliation/matcher.ts +256 -240
- package/src/tools/reconciliation/payeeNormalizer.ts +92 -78
- package/src/tools/reconciliation/recommendationEngine.ts +357 -345
- package/src/tools/reconciliation/reportFormatter.ts +343 -307
- package/src/tools/reconciliation/signDetector.ts +89 -83
- package/src/tools/reconciliation/types.ts +164 -159
- package/src/tools/reconciliation/ynabAdapter.ts +17 -15
- package/src/tools/schemas/CLAUDE.md +546 -0
- package/src/tools/schemas/common.ts +1 -1
- package/src/tools/schemas/outputs/__tests__/accountOutputs.test.ts +410 -409
- package/src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts +305 -299
- package/src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts +431 -430
- package/src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts +510 -495
- package/src/tools/schemas/outputs/__tests__/dateValidation.test.ts +179 -153
- package/src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts +293 -254
- package/src/tools/schemas/outputs/__tests__/monthOutputs.test.ts +457 -457
- package/src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts +362 -356
- package/src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts +402 -399
- package/src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts +225 -211
- package/src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts +457 -454
- package/src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts +316 -315
- package/src/tools/schemas/outputs/accountOutputs.ts +40 -34
- package/src/tools/schemas/outputs/budgetOutputs.ts +24 -19
- package/src/tools/schemas/outputs/categoryOutputs.ts +76 -56
- package/src/tools/schemas/outputs/comparisonOutputs.ts +192 -169
- package/src/tools/schemas/outputs/index.ts +163 -163
- package/src/tools/schemas/outputs/monthOutputs.ts +95 -80
- package/src/tools/schemas/outputs/payeeOutputs.ts +18 -18
- package/src/tools/schemas/outputs/reconciliationOutputs.ts +386 -373
- package/src/tools/schemas/outputs/transactionMutationOutputs.ts +259 -231
- package/src/tools/schemas/outputs/transactionOutputs.ts +81 -71
- package/src/tools/schemas/outputs/utilityOutputs.ts +90 -84
- package/src/tools/schemas/shared/commonOutputs.ts +27 -19
- package/src/tools/toolCategories.ts +114 -114
- package/src/tools/transactionReadTools.ts +327 -0
- package/src/tools/transactionSchemas.ts +322 -291
- package/src/tools/transactionTools.ts +84 -2246
- package/src/tools/transactionUtils.ts +507 -422
- package/src/tools/transactionWriteTools.ts +2110 -0
- package/src/tools/utilityTools.ts +46 -41
- package/src/types/CLAUDE.md +477 -0
- package/src/types/__tests__/index.test.ts +51 -51
- package/src/types/index.ts +43 -39
- package/src/types/integration-tests.d.ts +26 -26
- package/src/types/reconciliation.ts +29 -29
- package/src/types/toolAnnotations.ts +30 -30
- package/src/types/toolRegistration.ts +43 -32
- package/src/utils/CLAUDE.md +508 -0
- package/src/utils/__tests__/dateUtils.test.ts +174 -168
- package/src/utils/__tests__/money.test.ts +193 -187
- package/src/utils/amountUtils.ts +5 -5
- package/src/utils/baseError.ts +5 -5
- package/src/utils/dateUtils.ts +29 -26
- package/src/utils/errors.ts +14 -14
- package/src/utils/money.ts +66 -52
- package/src/utils/validationError.ts +1 -1
- package/tsconfig.json +29 -29
- package/tsconfig.prod.json +16 -16
- package/vitest-reporters/split-json-reporter.ts +247 -204
- package/vitest.config.ts +99 -95
- package/.prettierignore +0 -10
- package/.prettierrc.json +0 -10
- package/eslint.config.js +0 -49
|
@@ -4,351 +4,428 @@
|
|
|
4
4
|
* Tests prompt management functionality.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import { PromptManager } from
|
|
9
|
-
|
|
10
|
-
describe(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
7
|
+
import { beforeEach, describe, expect, it } from "vitest";
|
|
8
|
+
import { PromptManager } from "../prompts.js";
|
|
9
|
+
|
|
10
|
+
describe("prompts module", () => {
|
|
11
|
+
let promptManager: PromptManager;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
promptManager = new PromptManager();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
describe("PromptManager", () => {
|
|
18
|
+
describe("constructor", () => {
|
|
19
|
+
it("should initialize without dependencies", () => {
|
|
20
|
+
expect(promptManager).toBeInstanceOf(PromptManager);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe("listPrompts", () => {
|
|
25
|
+
it("should return list of available prompts", () => {
|
|
26
|
+
const result = promptManager.listPrompts();
|
|
27
|
+
|
|
28
|
+
expect(result).toEqual({
|
|
29
|
+
prompts: [
|
|
30
|
+
{
|
|
31
|
+
name: "create-transaction",
|
|
32
|
+
description: "Create a new transaction in YNAB",
|
|
33
|
+
arguments: [
|
|
34
|
+
{
|
|
35
|
+
name: "budget_name",
|
|
36
|
+
description:
|
|
37
|
+
"Name of the budget (optional, uses first budget if not specified)",
|
|
38
|
+
required: false,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: "account_name",
|
|
42
|
+
description: "Name of the account",
|
|
43
|
+
required: true,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "amount",
|
|
47
|
+
description:
|
|
48
|
+
"Transaction amount (negative for expenses, positive for income)",
|
|
49
|
+
required: true,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "payee",
|
|
53
|
+
description: "Who you paid or received money from",
|
|
54
|
+
required: true,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "category",
|
|
58
|
+
description: "Budget category (optional)",
|
|
59
|
+
required: false,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "memo",
|
|
63
|
+
description: "Additional notes (optional)",
|
|
64
|
+
required: false,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "budget-summary",
|
|
70
|
+
description: "Get a summary of your budget status",
|
|
71
|
+
arguments: [
|
|
72
|
+
{
|
|
73
|
+
name: "budget_name",
|
|
74
|
+
description:
|
|
75
|
+
"Name of the budget (optional, uses first budget if not specified)",
|
|
76
|
+
required: false,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "month",
|
|
80
|
+
description:
|
|
81
|
+
"Month to analyze (YYYY-MM format, optional, uses current month if not specified)",
|
|
82
|
+
required: false,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "account-balances",
|
|
88
|
+
description: "Check balances across all accounts",
|
|
89
|
+
arguments: [
|
|
90
|
+
{
|
|
91
|
+
name: "budget_name",
|
|
92
|
+
description:
|
|
93
|
+
"Name of the budget (optional, uses first budget if not specified)",
|
|
94
|
+
required: false,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: "account_type",
|
|
98
|
+
description:
|
|
99
|
+
"Filter by account type (checking, savings, creditCard, etc.)",
|
|
100
|
+
required: false,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("should return consistent prompt list", () => {
|
|
109
|
+
const result1 = promptManager.listPrompts();
|
|
110
|
+
const result2 = promptManager.listPrompts();
|
|
111
|
+
|
|
112
|
+
expect(result1).toEqual(result2);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe("getPrompt", () => {
|
|
117
|
+
describe("create-transaction", () => {
|
|
118
|
+
it("should generate transaction creation prompt with default values", async () => {
|
|
119
|
+
const result = await promptManager.getPrompt(
|
|
120
|
+
"create-transaction",
|
|
121
|
+
{},
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
expect(result.description).toBe(
|
|
125
|
+
"Create a transaction for [PAYEE] in [ACCOUNT_NAME]",
|
|
126
|
+
);
|
|
127
|
+
expect(result.messages).toHaveLength(1);
|
|
128
|
+
expect(result.messages[0].role).toBe("user");
|
|
129
|
+
expect(result.messages[0].content.type).toBe("text");
|
|
130
|
+
expect(result.messages[0].content.text).toContain(
|
|
131
|
+
"first available budget",
|
|
132
|
+
);
|
|
133
|
+
expect(result.messages[0].content.text).toContain("[ACCOUNT_NAME]");
|
|
134
|
+
expect(result.messages[0].content.text).toContain("[AMOUNT]");
|
|
135
|
+
expect(result.messages[0].content.text).toContain("[PAYEE]");
|
|
136
|
+
expect(result.messages[0].content.text).toContain("[CATEGORY]");
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it("should generate transaction creation prompt with provided arguments", async () => {
|
|
140
|
+
const args = {
|
|
141
|
+
budget_name: "Personal Budget",
|
|
142
|
+
account_name: "Checking Account",
|
|
143
|
+
amount: "25.50",
|
|
144
|
+
payee: "Grocery Store",
|
|
145
|
+
category: "Groceries",
|
|
146
|
+
memo: "Weekly shopping",
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const result = await promptManager.getPrompt(
|
|
150
|
+
"create-transaction",
|
|
151
|
+
args,
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
expect(result.description).toBe(
|
|
155
|
+
"Create a transaction for Grocery Store in Checking Account",
|
|
156
|
+
);
|
|
157
|
+
expect(result.messages[0].content.text).toContain("Personal Budget");
|
|
158
|
+
expect(result.messages[0].content.text).toContain("Checking Account");
|
|
159
|
+
expect(result.messages[0].content.text).toContain("$25.50");
|
|
160
|
+
expect(result.messages[0].content.text).toContain("Grocery Store");
|
|
161
|
+
expect(result.messages[0].content.text).toContain("Groceries");
|
|
162
|
+
expect(result.messages[0].content.text).toContain("Weekly shopping");
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("should handle partial arguments", async () => {
|
|
166
|
+
const args = {
|
|
167
|
+
account_name: "Savings Account",
|
|
168
|
+
payee: "Transfer",
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const result = await promptManager.getPrompt(
|
|
172
|
+
"create-transaction",
|
|
173
|
+
args,
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
expect(result.description).toBe(
|
|
177
|
+
"Create a transaction for Transfer in Savings Account",
|
|
178
|
+
);
|
|
179
|
+
expect(result.messages[0].content.text).toContain(
|
|
180
|
+
"first available budget",
|
|
181
|
+
);
|
|
182
|
+
expect(result.messages[0].content.text).toContain("Savings Account");
|
|
183
|
+
expect(result.messages[0].content.text).toContain("[AMOUNT]");
|
|
184
|
+
expect(result.messages[0].content.text).toContain("Transfer");
|
|
185
|
+
expect(result.messages[0].content.text).toContain("[CATEGORY]");
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("should include proper workflow instructions", async () => {
|
|
189
|
+
const result = await promptManager.getPrompt(
|
|
190
|
+
"create-transaction",
|
|
191
|
+
{},
|
|
192
|
+
);
|
|
193
|
+
|
|
194
|
+
const text = result.messages[0].content.text;
|
|
195
|
+
expect(text).toContain("list budgets to find the budget ID");
|
|
196
|
+
expect(text).toContain(
|
|
197
|
+
"List accounts for that budget to find the account ID",
|
|
198
|
+
);
|
|
199
|
+
expect(text).toContain("list categories to find the category ID");
|
|
200
|
+
expect(text).toContain(
|
|
201
|
+
"Create the transaction with the correct amount in milliunits",
|
|
202
|
+
);
|
|
203
|
+
expect(text).toContain("multiply by 1000");
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
describe("budget-summary", () => {
|
|
208
|
+
it("should generate budget summary prompt with default values", async () => {
|
|
209
|
+
const result = await promptManager.getPrompt("budget-summary", {});
|
|
210
|
+
|
|
211
|
+
expect(result.description).toBe(
|
|
212
|
+
"Get budget summary for first available budget",
|
|
213
|
+
);
|
|
214
|
+
expect(result.messages).toHaveLength(1);
|
|
215
|
+
expect(result.messages[0].role).toBe("user");
|
|
216
|
+
expect(result.messages[0].content.text).toContain(
|
|
217
|
+
"first available budget",
|
|
218
|
+
);
|
|
219
|
+
expect(result.messages[0].content.text).toContain("current month");
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it("should generate budget summary prompt with provided arguments", async () => {
|
|
223
|
+
const args = {
|
|
224
|
+
budget_name: "Family Budget",
|
|
225
|
+
month: "2024-03",
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
const result = await promptManager.getPrompt("budget-summary", args);
|
|
229
|
+
|
|
230
|
+
expect(result.description).toBe(
|
|
231
|
+
"Get budget summary for Family Budget",
|
|
232
|
+
);
|
|
233
|
+
expect(result.messages[0].content.text).toContain(
|
|
234
|
+
"Family Budget (2024-03)",
|
|
235
|
+
);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it("should include YNAB-specific guidance", async () => {
|
|
239
|
+
const result = await promptManager.getPrompt("budget-summary", {});
|
|
240
|
+
|
|
241
|
+
const text = result.messages[0].content.text;
|
|
242
|
+
expect(text).toContain("budgeted: Amount assigned to the category");
|
|
243
|
+
expect(text).toContain("activity: Spending/income in the category");
|
|
244
|
+
expect(text).toContain("balance: Available amount in the category");
|
|
245
|
+
expect(text).toContain("OVERSPENDING occurs when balance < 0");
|
|
246
|
+
expect(text).toContain("SPENDING TRENDS");
|
|
247
|
+
expect(text).toContain("BUDGET OPTIMIZATION");
|
|
248
|
+
expect(text).toContain("reliability_score");
|
|
249
|
+
expect(text).toContain("Consistently Under-Spent Categories");
|
|
250
|
+
expect(text).toContain("Categories Over Monthly Assignment");
|
|
251
|
+
expect(text).toContain("Large Unused Category Balances");
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
describe("account-balances", () => {
|
|
256
|
+
it("should generate account balances prompt with default values", async () => {
|
|
257
|
+
const result = await promptManager.getPrompt("account-balances", {});
|
|
258
|
+
|
|
259
|
+
expect(result.description).toBe(
|
|
260
|
+
"Check account balances for all accounts",
|
|
261
|
+
);
|
|
262
|
+
expect(result.messages).toHaveLength(1);
|
|
263
|
+
expect(result.messages[0].role).toBe("user");
|
|
264
|
+
expect(result.messages[0].content.text).toContain(
|
|
265
|
+
"first available budget",
|
|
266
|
+
);
|
|
267
|
+
expect(result.messages[0].content.text).toContain("all accounts");
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it("should generate account balances prompt with provided arguments", async () => {
|
|
271
|
+
const args = {
|
|
272
|
+
budget_name: "Business Budget",
|
|
273
|
+
account_type: "checking",
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
const result = await promptManager.getPrompt(
|
|
277
|
+
"account-balances",
|
|
278
|
+
args,
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
expect(result.description).toBe(
|
|
282
|
+
"Check account balances for checking",
|
|
283
|
+
);
|
|
284
|
+
expect(result.messages[0].content.text).toContain("Business Budget");
|
|
285
|
+
expect(result.messages[0].content.text).toContain("checking");
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
it("should include proper balance display instructions", async () => {
|
|
289
|
+
const result = await promptManager.getPrompt("account-balances", {});
|
|
290
|
+
|
|
291
|
+
const text = result.messages[0].content.text;
|
|
292
|
+
expect(text).toContain("Account name and type");
|
|
293
|
+
expect(text).toContain("Current balance");
|
|
294
|
+
expect(text).toContain("Cleared vs uncleared amounts");
|
|
295
|
+
expect(text).toContain("Total by account type");
|
|
296
|
+
expect(text).toContain("Net worth summary");
|
|
297
|
+
expect(text).toContain("Convert milliunits to dollars");
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
describe("unknown prompts", () => {
|
|
302
|
+
it("should throw error for unknown prompt names", async () => {
|
|
303
|
+
await expect(
|
|
304
|
+
promptManager.getPrompt("unknown-prompt", {}),
|
|
305
|
+
).rejects.toThrow("Unknown prompt: unknown-prompt");
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
it("should throw error for empty prompt name", async () => {
|
|
309
|
+
await expect(promptManager.getPrompt("", {})).rejects.toThrow(
|
|
310
|
+
"Unknown prompt: ",
|
|
311
|
+
);
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
describe("argument handling", () => {
|
|
316
|
+
it("should handle undefined arguments", async () => {
|
|
317
|
+
const result = await promptManager.getPrompt(
|
|
318
|
+
"create-transaction",
|
|
319
|
+
undefined,
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
expect(result.description).toBe(
|
|
323
|
+
"Create a transaction for [PAYEE] in [ACCOUNT_NAME]",
|
|
324
|
+
);
|
|
325
|
+
expect(result.messages[0].content.text).toContain(
|
|
326
|
+
"first available budget",
|
|
327
|
+
);
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
it("should handle null arguments", async () => {
|
|
331
|
+
const result = await promptManager.getPrompt(
|
|
332
|
+
"budget-summary",
|
|
333
|
+
null as any,
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
expect(result.description).toBe(
|
|
337
|
+
"Get budget summary for first available budget",
|
|
338
|
+
);
|
|
339
|
+
expect(result.messages[0].content.text).toContain("current month");
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it("should handle empty arguments object", async () => {
|
|
343
|
+
const result = await promptManager.getPrompt("account-balances", {});
|
|
344
|
+
|
|
345
|
+
expect(result.description).toBe(
|
|
346
|
+
"Check account balances for all accounts",
|
|
347
|
+
);
|
|
348
|
+
expect(result.messages[0].content.text).toContain("all accounts");
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
it("should handle arguments with null/undefined values", async () => {
|
|
352
|
+
const args = {
|
|
353
|
+
budget_name: null,
|
|
354
|
+
account_name: undefined,
|
|
355
|
+
amount: "",
|
|
356
|
+
payee: "Test Payee",
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
const result = await promptManager.getPrompt(
|
|
360
|
+
"create-transaction",
|
|
361
|
+
args,
|
|
362
|
+
);
|
|
363
|
+
|
|
364
|
+
expect(result.messages[0].content.text).toContain(
|
|
365
|
+
"first available budget",
|
|
366
|
+
);
|
|
367
|
+
expect(result.messages[0].content.text).toContain("[ACCOUNT_NAME]");
|
|
368
|
+
expect(result.messages[0].content.text).toContain("[AMOUNT]");
|
|
369
|
+
expect(result.messages[0].content.text).toContain("Test Payee");
|
|
370
|
+
});
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
describe("edge cases", () => {
|
|
374
|
+
it("should handle very long argument values", async () => {
|
|
375
|
+
const longValue = "a".repeat(1000);
|
|
376
|
+
const args = {
|
|
377
|
+
budget_name: longValue,
|
|
378
|
+
memo: longValue,
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
const result = await promptManager.getPrompt(
|
|
382
|
+
"create-transaction",
|
|
383
|
+
args,
|
|
384
|
+
);
|
|
385
|
+
|
|
386
|
+
expect(result.messages[0].content.text).toContain(longValue);
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
it("should handle special characters in arguments", async () => {
|
|
390
|
+
const args = {
|
|
391
|
+
payee: "McDonald's & Co. (special chars: !@#$%^&*)",
|
|
392
|
+
category: "Dining/Restaurants",
|
|
393
|
+
memo: 'Quote: "Great food!"',
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
const result = await promptManager.getPrompt(
|
|
397
|
+
"create-transaction",
|
|
398
|
+
args,
|
|
399
|
+
);
|
|
400
|
+
|
|
401
|
+
expect(result.messages[0].content.text).toContain(args.payee);
|
|
402
|
+
expect(result.messages[0].content.text).toContain(args.category);
|
|
403
|
+
expect(result.messages[0].content.text).toContain(args.memo);
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
it("should maintain consistent message structure across all prompts", async () => {
|
|
407
|
+
const prompts = [
|
|
408
|
+
"create-transaction",
|
|
409
|
+
"budget-summary",
|
|
410
|
+
"account-balances",
|
|
411
|
+
];
|
|
412
|
+
|
|
413
|
+
for (const promptName of prompts) {
|
|
414
|
+
const result = await promptManager.getPrompt(promptName, {});
|
|
415
|
+
|
|
416
|
+
expect(result).toHaveProperty("description");
|
|
417
|
+
expect(result).toHaveProperty("messages");
|
|
418
|
+
expect(Array.isArray(result.messages)).toBe(true);
|
|
419
|
+
expect(result.messages).toHaveLength(1);
|
|
420
|
+
expect(result.messages[0]).toHaveProperty("role", "user");
|
|
421
|
+
expect(result.messages[0]).toHaveProperty("content");
|
|
422
|
+
expect(result.messages[0].content).toHaveProperty("type", "text");
|
|
423
|
+
expect(result.messages[0].content).toHaveProperty("text");
|
|
424
|
+
expect(typeof result.messages[0].content.text).toBe("string");
|
|
425
|
+
expect(result.messages[0].content.text.length).toBeGreaterThan(0);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
});
|
|
354
431
|
});
|