@opentabs-dev/opentabs-plugin-ynab 0.0.85 → 0.0.87
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/dist/adapter.iife.js +1315 -545
- package/dist/adapter.iife.js.map +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -16
- package/dist/index.js.map +1 -1
- package/dist/tools/create-category-group.d.ts +11 -0
- package/dist/tools/create-category-group.d.ts.map +1 -0
- package/dist/tools/create-category-group.js +37 -0
- package/dist/tools/create-category-group.js.map +1 -0
- package/dist/tools/create-category.d.ts +59 -0
- package/dist/tools/create-category.d.ts.map +1 -0
- package/dist/tools/create-category.js +63 -0
- package/dist/tools/create-category.js.map +1 -0
- package/dist/tools/create-transaction.d.ts +2 -2
- package/dist/tools/create-transaction.d.ts.map +1 -1
- package/dist/tools/create-transaction.js +63 -22
- package/dist/tools/create-transaction.js.map +1 -1
- package/dist/tools/delete-category-group.d.ts +8 -0
- package/dist/tools/delete-category-group.d.ts.map +1 -0
- package/dist/tools/delete-category-group.js +33 -0
- package/dist/tools/delete-category-group.js.map +1 -0
- package/dist/tools/delete-category.d.ts +7 -0
- package/dist/tools/delete-category.d.ts.map +1 -0
- package/dist/tools/delete-category.js +28 -0
- package/dist/tools/delete-category.js.map +1 -0
- package/dist/tools/delete-transaction.d.ts.map +1 -1
- package/dist/tools/delete-transaction.js +22 -7
- package/dist/tools/delete-transaction.js.map +1 -1
- package/dist/tools/get-account.d.ts.map +1 -1
- package/dist/tools/get-account.js +3 -3
- package/dist/tools/get-account.js.map +1 -1
- package/dist/tools/get-month.d.ts +2 -1
- package/dist/tools/get-month.d.ts.map +1 -1
- package/dist/tools/get-month.js +10 -33
- package/dist/tools/get-month.js.map +1 -1
- package/dist/tools/get-plan.d.ts.map +1 -1
- package/dist/tools/get-plan.js +12 -5
- package/dist/tools/get-plan.js.map +1 -1
- package/dist/tools/get-transaction.d.ts +2 -2
- package/dist/tools/get-transaction.d.ts.map +1 -1
- package/dist/tools/get-transaction.js +5 -4
- package/dist/tools/get-transaction.js.map +1 -1
- package/dist/tools/list-accounts.d.ts.map +1 -1
- package/dist/tools/list-accounts.js +4 -4
- package/dist/tools/list-accounts.js.map +1 -1
- package/dist/tools/list-categories.d.ts.map +1 -1
- package/dist/tools/list-categories.js +9 -29
- package/dist/tools/list-categories.js.map +1 -1
- package/dist/tools/list-months.d.ts +1 -1
- package/dist/tools/list-months.d.ts.map +1 -1
- package/dist/tools/list-months.js +5 -14
- package/dist/tools/list-months.js.map +1 -1
- package/dist/tools/list-payees.d.ts.map +1 -1
- package/dist/tools/list-payees.js +3 -3
- package/dist/tools/list-payees.js.map +1 -1
- package/dist/tools/list-scheduled-transactions.d.ts.map +1 -1
- package/dist/tools/list-scheduled-transactions.js +7 -5
- package/dist/tools/list-scheduled-transactions.js.map +1 -1
- package/dist/tools/list-transactions.d.ts +4 -2
- package/dist/tools/list-transactions.d.ts.map +1 -1
- package/dist/tools/list-transactions.js +40 -8
- package/dist/tools/list-transactions.js.map +1 -1
- package/dist/tools/move-category-budget.d.ts +24 -0
- package/dist/tools/move-category-budget.d.ts.map +1 -0
- package/dist/tools/move-category-budget.js +100 -0
- package/dist/tools/move-category-budget.js.map +1 -0
- package/dist/tools/schemas.d.ts +185 -28
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +411 -28
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/snooze-category-goal.d.ts +10 -0
- package/dist/tools/snooze-category-goal.d.ts.map +1 -0
- package/dist/tools/snooze-category-goal.js +53 -0
- package/dist/tools/snooze-category-goal.js.map +1 -0
- package/dist/tools/update-category-budget.d.ts.map +1 -1
- package/dist/tools/update-category-budget.js +51 -26
- package/dist/tools/update-category-budget.js.map +1 -1
- package/dist/tools/update-category.d.ts +61 -0
- package/dist/tools/update-category.d.ts.map +1 -0
- package/dist/tools/update-category.js +46 -0
- package/dist/tools/update-category.js.map +1 -0
- package/dist/tools/update-transaction.d.ts +3 -2
- package/dist/tools/update-transaction.d.ts.map +1 -1
- package/dist/tools/update-transaction.js +84 -31
- package/dist/tools/update-transaction.js.map +1 -1
- package/dist/tools.json +965 -43
- package/dist/ynab-api.d.ts +4 -1
- package/dist/ynab-api.d.ts.map +1 -1
- package/dist/ynab-api.js +47 -26
- package/dist/ynab-api.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-account.js","sourceRoot":"","sources":["../../src/tools/get-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"get-account.js","sourceRoot":"","sources":["../../src/tools/get-account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EACT,2HAA2H;IAC7H,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACjE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,aAAa;KACvB,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,CAAC,QAAQ,CAAC,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const getMonth: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
3
|
month: z.ZodString;
|
|
4
|
+
include_hidden: z.ZodOptional<z.ZodBoolean>;
|
|
4
5
|
}, z.core.$strip>, z.ZodObject<{
|
|
5
6
|
month: z.ZodObject<{
|
|
6
7
|
month: z.ZodString;
|
|
@@ -12,7 +13,7 @@ export declare const getMonth: import("@opentabs-dev/plugin-sdk").ToolDefinition
|
|
|
12
13
|
budgeted_milliunits: z.ZodNumber;
|
|
13
14
|
activity_milliunits: z.ZodNumber;
|
|
14
15
|
to_be_budgeted_milliunits: z.ZodNumber;
|
|
15
|
-
age_of_money: z.ZodNumber
|
|
16
|
+
age_of_money: z.ZodNullable<z.ZodNumber>;
|
|
16
17
|
}, z.core.$strip>;
|
|
17
18
|
categories: z.ZodArray<z.ZodObject<{
|
|
18
19
|
id: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-month.d.ts","sourceRoot":"","sources":["../../src/tools/get-month.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-month.d.ts","sourceRoot":"","sources":["../../src/tools/get-month.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4CnB,CAAC"}
|
package/dist/tools/get-month.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool, ToolError } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { categorySchema,
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { buildMonthlyBudgetCalcMap, buildSubcategoryBudgetMap, buildSubcategoryCalcMap, categorySchema, mapCategoryForMonth, mapMonth, monthSchema, notTombstone, toMonthKey, } from './schemas.js';
|
|
5
5
|
export const getMonth = defineTool({
|
|
6
6
|
name: 'get_month',
|
|
7
7
|
displayName: 'Get Month',
|
|
@@ -11,6 +11,7 @@ export const getMonth = defineTool({
|
|
|
11
11
|
group: 'Months',
|
|
12
12
|
input: z.object({
|
|
13
13
|
month: z.string().min(1).describe('Month in YYYY-MM-DD format (first of month, e.g. 2026-03-01)'),
|
|
14
|
+
include_hidden: z.boolean().optional().describe('Include hidden categories (default false)'),
|
|
14
15
|
}),
|
|
15
16
|
output: z.object({
|
|
16
17
|
month: monthSchema,
|
|
@@ -25,37 +26,13 @@ export const getMonth = defineTool({
|
|
|
25
26
|
if (!monthData) {
|
|
26
27
|
throw ToolError.notFound(`Month not found: ${params.month}`);
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
const monthCalc =
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
// Map subcategory budget calculations by category ID
|
|
36
|
-
// entity_id format: mcbc/YYYY-MM/category-id
|
|
37
|
-
const subcatCalcs = entities?.be_monthly_subcategory_budget_calculations ?? [];
|
|
38
|
-
const calcMap = new Map();
|
|
39
|
-
for (const calc of subcatCalcs) {
|
|
40
|
-
const entityId = calc.entities_monthly_subcategory_budget_id;
|
|
41
|
-
if (entityId) {
|
|
42
|
-
const parts = entityId.split('/');
|
|
43
|
-
const categoryId = parts.length >= 3 ? parts.slice(2).join('/') : entityId;
|
|
44
|
-
calcMap.set(categoryId, calc);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
const categories = rawCategories.map(c => {
|
|
48
|
-
const calc = calcMap.get(c.id ?? '');
|
|
49
|
-
return mapCategory({
|
|
50
|
-
...c,
|
|
51
|
-
budgeted: calc?.budgeted ?? c.budgeted,
|
|
52
|
-
activity: calc?.activity ?? c.activity,
|
|
53
|
-
balance: calc?.balance ?? c.balance,
|
|
54
|
-
goal_type: calc?.goal_type ?? c.goal_type,
|
|
55
|
-
goal_target: calc?.goal_target ?? c.goal_target,
|
|
56
|
-
goal_percentage_complete: calc?.goal_percentage_complete ?? c.goal_percentage_complete,
|
|
57
|
-
});
|
|
58
|
-
});
|
|
29
|
+
const monthKey = toMonthKey(params.month);
|
|
30
|
+
const monthCalcMap = buildMonthlyBudgetCalcMap(entities?.be_monthly_budget_calculations ?? []);
|
|
31
|
+
const monthCalc = monthCalcMap.get(monthKey);
|
|
32
|
+
const rawCategories = (entities?.be_subcategories ?? []).filter(c => notTombstone(c) && (params.include_hidden || c.is_hidden !== true));
|
|
33
|
+
const budgetMap = buildSubcategoryBudgetMap(entities?.be_monthly_subcategory_budgets ?? []);
|
|
34
|
+
const calcMap = buildSubcategoryCalcMap(entities?.be_monthly_subcategory_budget_calculations ?? []);
|
|
35
|
+
const categories = rawCategories.map(c => mapCategoryForMonth(c, budgetMap, calcMap, monthKey));
|
|
59
36
|
return {
|
|
60
37
|
month: mapMonth(monthData, monthCalc),
|
|
61
38
|
categories,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-month.js","sourceRoot":"","sources":["../../src/tools/get-month.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"get-month.js","sourceRoot":"","sources":["../../src/tools/get-month.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,WAAW;IACxB,WAAW,EACT,iPAAiP;IACnP,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8DAA8D,CAAC;QACjG,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC7F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,WAAW;QAClB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KAChF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAEnF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,SAAS,CAAC,QAAQ,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,yBAAyB,CAAC,QAAQ,EAAE,8BAA8B,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,CAC7D,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CACxE,CAAC;QACF,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,EAAE,8BAA8B,IAAI,EAAE,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,EAAE,0CAA0C,IAAI,EAAE,CAAC,CAAC;QACpG,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEhG,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;YACrC,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-plan.d.ts","sourceRoot":"","sources":["../../src/tools/get-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-plan.d.ts","sourceRoot":"","sources":["../../src/tools/get-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,OAAO;;;;;;;;;kBAwBlB,CAAC"}
|
package/dist/tools/get-plan.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
1
|
+
import { defineTool, ToolError } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { catalog,
|
|
3
|
+
import { assertAuthenticated, catalog, getDeviceId } from '../ynab-api.js';
|
|
4
4
|
import { mapPlan, planSchema } from './schemas.js';
|
|
5
5
|
export const getPlan = defineTool({
|
|
6
6
|
name: 'get_plan',
|
|
@@ -12,11 +12,18 @@ export const getPlan = defineTool({
|
|
|
12
12
|
input: z.object({}),
|
|
13
13
|
output: z.object({ plan: planSchema }),
|
|
14
14
|
handle: async () => {
|
|
15
|
-
|
|
15
|
+
assertAuthenticated();
|
|
16
|
+
// getInitialUserData returns budget_version at the response root (not under
|
|
17
|
+
// changed_entities), so we read it via the CatalogResponse index signature
|
|
18
|
+
// and narrow it ourselves rather than retyping the whole response.
|
|
16
19
|
const result = await catalog('getInitialUserData', {
|
|
17
|
-
device_info: { id:
|
|
20
|
+
device_info: { id: getDeviceId(), device_os: 'web' },
|
|
18
21
|
});
|
|
19
|
-
|
|
22
|
+
const budgetVersion = result.budget_version;
|
|
23
|
+
if (!budgetVersion) {
|
|
24
|
+
throw ToolError.notFound('No active plan found');
|
|
25
|
+
}
|
|
26
|
+
return { plan: mapPlan(budgetVersion) };
|
|
20
27
|
},
|
|
21
28
|
});
|
|
22
29
|
//# sourceMappingURL=get-plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-plan.js","sourceRoot":"","sources":["../../src/tools/get-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-plan.js","sourceRoot":"","sources":["../../src/tools/get-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,UAAU;IACvB,WAAW,EACT,sJAAsJ;IACxJ,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACtC,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,mBAAmB,EAAE,CAAC;QACtB,4EAA4E;QAC5E,2EAA2E;QAC3E,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE;YACjD,WAAW,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SACrD,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,CAAC,cAAqC,CAAC;QACnE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -11,7 +11,6 @@ export declare const getTransaction: import("@opentabs-dev/plugin-sdk").ToolDefi
|
|
|
11
11
|
cleared: z.ZodString;
|
|
12
12
|
approved: z.ZodBoolean;
|
|
13
13
|
flag_color: z.ZodString;
|
|
14
|
-
flag_name: z.ZodString;
|
|
15
14
|
account_id: z.ZodString;
|
|
16
15
|
account_name: z.ZodString;
|
|
17
16
|
payee_id: z.ZodString;
|
|
@@ -19,7 +18,8 @@ export declare const getTransaction: import("@opentabs-dev/plugin-sdk").ToolDefi
|
|
|
19
18
|
category_id: z.ZodString;
|
|
20
19
|
category_name: z.ZodString;
|
|
21
20
|
transfer_account_id: z.ZodString;
|
|
22
|
-
|
|
21
|
+
imported_payee: z.ZodString;
|
|
22
|
+
original_imported_payee: z.ZodString;
|
|
23
23
|
deleted: z.ZodBoolean;
|
|
24
24
|
}, z.core.$strip>;
|
|
25
25
|
subtransactions: z.ZodArray<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-transaction.d.ts","sourceRoot":"","sources":["../../src/tools/get-transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-transaction.d.ts","sourceRoot":"","sources":["../../src/tools/get-transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsCzB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool, ToolError } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { mapSubtransaction, mapTransaction, subtransactionSchema, transactionSchema } from './schemas.js';
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { buildLookups, mapSubtransaction, mapTransaction, subtransactionSchema, transactionSchema } from './schemas.js';
|
|
5
5
|
export const getTransaction = defineTool({
|
|
6
6
|
name: 'get_transaction',
|
|
7
7
|
displayName: 'Get Transaction',
|
|
@@ -25,12 +25,13 @@ export const getTransaction = defineTool({
|
|
|
25
25
|
if (!tx) {
|
|
26
26
|
throw ToolError.notFound(`Transaction not found: ${params.transaction_id}`);
|
|
27
27
|
}
|
|
28
|
+
const lookups = buildLookups(entities ?? {});
|
|
28
29
|
const allSubs = entities?.be_subtransactions ?? [];
|
|
29
30
|
const subtransactions = allSubs
|
|
30
31
|
.filter(s => s.entities_transaction_id === params.transaction_id && !s.is_tombstone)
|
|
31
|
-
.map(mapSubtransaction);
|
|
32
|
+
.map(s => mapSubtransaction(s, lookups));
|
|
32
33
|
return {
|
|
33
|
-
transaction: mapTransaction(tx),
|
|
34
|
+
transaction: mapTransaction(tx, lookups),
|
|
34
35
|
subtransactions,
|
|
35
36
|
};
|
|
36
37
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-transaction.js","sourceRoot":"","sources":["../../src/tools/get-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"get-transaction.js","sourceRoot":"","sources":["../../src/tools/get-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAExH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EACT,sHAAsH;IACxH,OAAO,EAAE,+BAA+B;IACxC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACzE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,iBAAiB;QAC9B,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KACxG,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,EAAE,eAAe,IAAI,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAE5E,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,SAAS,CAAC,QAAQ,CAAC,0BAA0B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACnD,MAAM,eAAe,GAAG,OAAO;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,KAAK,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;aACnF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAE3C,OAAO;YACL,WAAW,EAAE,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC;YACxC,eAAe;SAChB,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/list-accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/list-accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;kBA8BvB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { accountSchema, mapAccount } from './schemas.js';
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { accountSchema, buildAccountCalcMap, mapAccount, notTombstone } from './schemas.js';
|
|
5
5
|
export const listAccounts = defineTool({
|
|
6
6
|
name: 'list_accounts',
|
|
7
7
|
displayName: 'List Accounts',
|
|
@@ -20,8 +20,8 @@ export const listAccounts = defineTool({
|
|
|
20
20
|
const result = await syncBudget(planId);
|
|
21
21
|
const entities = result.changed_entities;
|
|
22
22
|
const raw = entities?.be_accounts ?? [];
|
|
23
|
-
const calcMap =
|
|
24
|
-
let accounts = raw.filter(
|
|
23
|
+
const calcMap = buildAccountCalcMap(entities ?? {});
|
|
24
|
+
let accounts = raw.filter(notTombstone).map(a => mapAccount(a, calcMap.get(a.id)));
|
|
25
25
|
if (!params.include_closed) {
|
|
26
26
|
accounts = accounts.filter(a => !a.closed);
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-accounts.js","sourceRoot":"","sources":["../../src/tools/list-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-accounts.js","sourceRoot":"","sources":["../../src/tools/list-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5F,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EACT,yKAAyK;IAC3K,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KAC3F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC9D,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAEpD,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnF,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-categories.d.ts","sourceRoot":"","sources":["../../src/tools/list-categories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-categories.d.ts","sourceRoot":"","sources":["../../src/tools/list-categories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;kBAoCzB,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { categoryGroupSchema, categorySchema,
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { buildSubcategoryBudgetMap, buildSubcategoryCalcMap, categoryGroupSchema, categorySchema, currentMonthKey, mapCategoryForMonth, mapCategoryGroup, notTombstone, } from './schemas.js';
|
|
5
5
|
export const listCategories = defineTool({
|
|
6
6
|
name: 'list_categories',
|
|
7
7
|
displayName: 'List Categories',
|
|
8
|
-
description: 'List
|
|
8
|
+
description: 'List category groups and categories in the active YNAB plan. Returns budgeted amounts, activity, and available balances for the current month. Hidden and deleted categories are excluded by default — pass include_hidden=true to also see hidden categories (useful for editing budgets on hidden categories).',
|
|
9
9
|
summary: 'List budget categories with balances',
|
|
10
10
|
icon: 'tags',
|
|
11
11
|
group: 'Categories',
|
|
@@ -20,33 +20,13 @@ export const listCategories = defineTool({
|
|
|
20
20
|
const planId = getPlanId();
|
|
21
21
|
const result = await syncBudget(planId);
|
|
22
22
|
const entities = result.changed_entities;
|
|
23
|
-
const rawGroups = (entities?.be_master_categories ?? []).filter(
|
|
24
|
-
const rawCategories = (entities?.be_subcategories ?? []).filter(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
const calcMap = new Map();
|
|
29
|
-
for (const calc of calcs) {
|
|
30
|
-
const entityId = calc.entities_monthly_subcategory_budget_id;
|
|
31
|
-
if (entityId) {
|
|
32
|
-
const parts = entityId.split('/');
|
|
33
|
-
const categoryId = parts.length >= 3 ? parts.slice(2).join('/') : entityId;
|
|
34
|
-
calcMap.set(categoryId, calc);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
23
|
+
const rawGroups = (entities?.be_master_categories ?? []).filter(notTombstone);
|
|
24
|
+
const rawCategories = (entities?.be_subcategories ?? []).filter(notTombstone);
|
|
25
|
+
const budgetMap = buildSubcategoryBudgetMap(entities?.be_monthly_subcategory_budgets ?? []);
|
|
26
|
+
const calcMap = buildSubcategoryCalcMap(entities?.be_monthly_subcategory_budget_calculations ?? []);
|
|
27
|
+
const currentMonth = currentMonthKey();
|
|
37
28
|
let groups = rawGroups.map(mapCategoryGroup);
|
|
38
|
-
let categories = rawCategories.map(c =>
|
|
39
|
-
const calc = calcMap.get(c.id ?? '');
|
|
40
|
-
return mapCategory({
|
|
41
|
-
...c,
|
|
42
|
-
budgeted: calc?.budgeted ?? c.budgeted,
|
|
43
|
-
activity: calc?.activity ?? c.activity,
|
|
44
|
-
balance: calc?.balance ?? c.balance,
|
|
45
|
-
goal_type: calc?.goal_type ?? c.goal_type,
|
|
46
|
-
goal_target: calc?.goal_target ?? c.goal_target,
|
|
47
|
-
goal_percentage_complete: calc?.goal_percentage_complete ?? c.goal_percentage_complete,
|
|
48
|
-
});
|
|
49
|
-
});
|
|
29
|
+
let categories = rawCategories.map(c => mapCategoryForMonth(c, budgetMap, calcMap, currentMonth));
|
|
50
30
|
if (!params.include_hidden) {
|
|
51
31
|
groups = groups.filter(g => !g.hidden);
|
|
52
32
|
categories = categories.filter(c => !c.hidden);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-categories.js","sourceRoot":"","sources":["../../src/tools/list-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-categories.js","sourceRoot":"","sources":["../../src/tools/list-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EACT,kTAAkT;IACpT,OAAO,EAAE,sCAAsC;IAC/C,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC7F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAChE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC5E,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,EAAE,8BAA8B,IAAI,EAAE,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,EAAE,0CAA0C,IAAI,EAAE,CAAC,CAAC;QACpG,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QAEvC,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAElG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -10,7 +10,7 @@ export declare const listMonths: import("@opentabs-dev/plugin-sdk").ToolDefiniti
|
|
|
10
10
|
budgeted_milliunits: z.ZodNumber;
|
|
11
11
|
activity_milliunits: z.ZodNumber;
|
|
12
12
|
to_be_budgeted_milliunits: z.ZodNumber;
|
|
13
|
-
age_of_money: z.ZodNumber
|
|
13
|
+
age_of_money: z.ZodNullable<z.ZodNumber>;
|
|
14
14
|
}, z.core.$strip>>;
|
|
15
15
|
}, z.core.$strip>>;
|
|
16
16
|
//# sourceMappingURL=list-months.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-months.d.ts","sourceRoot":"","sources":["../../src/tools/list-months.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-months.d.ts","sourceRoot":"","sources":["../../src/tools/list-months.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;kBA2BrB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { mapMonth, monthSchema } from './schemas.js';
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { buildMonthlyBudgetCalcMap, mapMonth, monthSchema, notTombstone } from './schemas.js';
|
|
5
5
|
export const listMonths = defineTool({
|
|
6
6
|
name: 'list_months',
|
|
7
7
|
displayName: 'List Months',
|
|
@@ -18,19 +18,10 @@ export const listMonths = defineTool({
|
|
|
18
18
|
const result = await syncBudget(planId);
|
|
19
19
|
const entities = result.changed_entities;
|
|
20
20
|
const rawMonths = entities?.be_monthly_budgets ?? [];
|
|
21
|
-
const
|
|
22
|
-
// Map calculation data by month (entities_monthly_budget_id format: mb/YYYY-MM-DD)
|
|
23
|
-
const calcMap = new Map();
|
|
24
|
-
for (const calc of rawCalcs) {
|
|
25
|
-
const budgetId = calc.entities_monthly_budget_id;
|
|
26
|
-
if (budgetId) {
|
|
27
|
-
const month = budgetId.replace('mb/', '');
|
|
28
|
-
calcMap.set(month, calc);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
21
|
+
const calcMap = buildMonthlyBudgetCalcMap(entities?.be_monthly_budget_calculations ?? []);
|
|
31
22
|
const months = rawMonths
|
|
32
|
-
.filter(
|
|
33
|
-
.map(m => mapMonth(m, calcMap.get(m.month ?? '')))
|
|
23
|
+
.filter(notTombstone)
|
|
24
|
+
.map(m => mapMonth(m, calcMap.get((m.month ?? '').substring(0, 7))))
|
|
34
25
|
.sort((a, b) => b.month.localeCompare(a.month));
|
|
35
26
|
return { months };
|
|
36
27
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-months.js","sourceRoot":"","sources":["../../src/tools/list-months.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-months.js","sourceRoot":"","sources":["../../src/tools/list-months.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE9F,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EACT,oKAAoK;IACtK,OAAO,EAAE,mCAAmC;IAC5C,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAC/D,CAAC;IACF,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,yBAAyB,CAAC,QAAQ,EAAE,8BAA8B,IAAI,EAAE,CAAC,CAAC;QAE1F,MAAM,MAAM,GAAG,SAAS;aACrB,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACnE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAElD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-payees.d.ts","sourceRoot":"","sources":["../../src/tools/list-payees.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-payees.d.ts","sourceRoot":"","sources":["../../src/tools/list-payees.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;kBAqBrB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { mapPayee, payeeSchema } from './schemas.js';
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { mapPayee, notTombstone, payeeSchema } from './schemas.js';
|
|
5
5
|
export const listPayees = defineTool({
|
|
6
6
|
name: 'list_payees',
|
|
7
7
|
displayName: 'List Payees',
|
|
@@ -17,7 +17,7 @@ export const listPayees = defineTool({
|
|
|
17
17
|
const planId = getPlanId();
|
|
18
18
|
const result = await syncBudget(planId);
|
|
19
19
|
const raw = result.changed_entities?.be_payees ?? [];
|
|
20
|
-
const payees = raw.filter(
|
|
20
|
+
const payees = raw.filter(notTombstone).map(mapPayee);
|
|
21
21
|
return { payees };
|
|
22
22
|
},
|
|
23
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-payees.js","sourceRoot":"","sources":["../../src/tools/list-payees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-payees.js","sourceRoot":"","sources":["../../src/tools/list-payees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EACT,+HAA+H;IACjI,OAAO,EAAE,iBAAiB;IAC1B,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACxD,CAAC;IACF,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,SAAS,IAAI,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-scheduled-transactions.d.ts","sourceRoot":"","sources":["../../src/tools/list-scheduled-transactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-scheduled-transactions.d.ts","sourceRoot":"","sources":["../../src/tools/list-scheduled-transactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;kBA2BpC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { mapScheduledTransaction, scheduledTransactionSchema } from './schemas.js';
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { buildLookups, mapScheduledTransaction, notTombstone, scheduledTransactionSchema } from './schemas.js';
|
|
5
5
|
export const listScheduledTransactions = defineTool({
|
|
6
6
|
name: 'list_scheduled_transactions',
|
|
7
7
|
displayName: 'List Scheduled Transactions',
|
|
@@ -16,10 +16,12 @@ export const listScheduledTransactions = defineTool({
|
|
|
16
16
|
handle: async () => {
|
|
17
17
|
const planId = getPlanId();
|
|
18
18
|
const result = await syncBudget(planId);
|
|
19
|
-
const
|
|
19
|
+
const entities = result.changed_entities;
|
|
20
|
+
const raw = entities?.be_scheduled_transactions ?? [];
|
|
21
|
+
const lookups = buildLookups(entities ?? {});
|
|
20
22
|
const scheduledTransactions = raw
|
|
21
|
-
.filter(
|
|
22
|
-
.map(mapScheduledTransaction)
|
|
23
|
+
.filter(notTombstone)
|
|
24
|
+
.map(s => mapScheduledTransaction(s, lookups))
|
|
23
25
|
.sort((a, b) => a.date_next.localeCompare(b.date_next));
|
|
24
26
|
return { scheduled_transactions: scheduledTransactions };
|
|
25
27
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-scheduled-transactions.js","sourceRoot":"","sources":["../../src/tools/list-scheduled-transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-scheduled-transactions.js","sourceRoot":"","sources":["../../src/tools/list-scheduled-transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/G,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;IAClD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EACT,qJAAqJ;IACvJ,OAAO,EAAE,uCAAuC;IAChD,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,sBAAsB,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KACvG,CAAC;IACF,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAiB,MAAM,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,EAAE,yBAAyB,IAAI,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAE7C,MAAM,qBAAqB,GAAG,GAAG;aAC9B,MAAM,CAAC,YAAY,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;aAC7C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAE1D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const listTransactions: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
3
|
account_id: z.ZodOptional<z.ZodString>;
|
|
4
4
|
since_date: z.ZodOptional<z.ZodString>;
|
|
5
|
+
until_date: z.ZodOptional<z.ZodString>;
|
|
6
|
+
payee_search: z.ZodOptional<z.ZodString>;
|
|
5
7
|
}, z.core.$strip>, z.ZodObject<{
|
|
6
8
|
transactions: z.ZodArray<z.ZodObject<{
|
|
7
9
|
id: z.ZodString;
|
|
@@ -12,7 +14,6 @@ export declare const listTransactions: import("@opentabs-dev/plugin-sdk").ToolDe
|
|
|
12
14
|
cleared: z.ZodString;
|
|
13
15
|
approved: z.ZodBoolean;
|
|
14
16
|
flag_color: z.ZodString;
|
|
15
|
-
flag_name: z.ZodString;
|
|
16
17
|
account_id: z.ZodString;
|
|
17
18
|
account_name: z.ZodString;
|
|
18
19
|
payee_id: z.ZodString;
|
|
@@ -20,7 +21,8 @@ export declare const listTransactions: import("@opentabs-dev/plugin-sdk").ToolDe
|
|
|
20
21
|
category_id: z.ZodString;
|
|
21
22
|
category_name: z.ZodString;
|
|
22
23
|
transfer_account_id: z.ZodString;
|
|
23
|
-
|
|
24
|
+
imported_payee: z.ZodString;
|
|
25
|
+
original_imported_payee: z.ZodString;
|
|
24
26
|
deleted: z.ZodBoolean;
|
|
25
27
|
}, z.core.$strip>>;
|
|
26
28
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-transactions.d.ts","sourceRoot":"","sources":["../../src/tools/list-transactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list-transactions.d.ts","sourceRoot":"","sources":["../../src/tools/list-transactions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0E3B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import {
|
|
4
|
-
import { mapTransaction, transactionSchema } from './schemas.js';
|
|
3
|
+
import { getPlanId, syncBudget } from '../ynab-api.js';
|
|
4
|
+
import { buildLookups, mapTransaction, notTombstone, transactionSchema } from './schemas.js';
|
|
5
5
|
export const listTransactions = defineTool({
|
|
6
6
|
name: 'list_transactions',
|
|
7
7
|
displayName: 'List Transactions',
|
|
@@ -15,6 +15,14 @@ export const listTransactions = defineTool({
|
|
|
15
15
|
.string()
|
|
16
16
|
.optional()
|
|
17
17
|
.describe('Only return transactions on or after this date (YYYY-MM-DD). Omit for all transactions.'),
|
|
18
|
+
until_date: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Only return transactions on or before this date (YYYY-MM-DD). Combine with since_date for a date range.'),
|
|
22
|
+
payee_search: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('Case-insensitive substring match against payee_name, imported_payee, and original_imported_payee. Useful for finding all transactions for a merchant without knowing the exact payee ID.'),
|
|
18
26
|
}),
|
|
19
27
|
output: z.object({
|
|
20
28
|
transactions: z.array(transactionSchema).describe('List of transactions'),
|
|
@@ -22,17 +30,41 @@ export const listTransactions = defineTool({
|
|
|
22
30
|
handle: async (params) => {
|
|
23
31
|
const planId = getPlanId();
|
|
24
32
|
const result = await syncBudget(planId);
|
|
25
|
-
const
|
|
26
|
-
|
|
33
|
+
const entities = result.changed_entities;
|
|
34
|
+
const raw = entities?.be_transactions ?? [];
|
|
35
|
+
const lookups = buildLookups(entities ?? {});
|
|
36
|
+
let filtered = raw.filter(notTombstone);
|
|
27
37
|
if (params.account_id) {
|
|
28
|
-
|
|
38
|
+
filtered = filtered.filter(t => t.entities_account_id === params.account_id);
|
|
29
39
|
}
|
|
30
40
|
if (params.since_date) {
|
|
31
41
|
const sinceDate = params.since_date;
|
|
32
|
-
|
|
42
|
+
filtered = filtered.filter(t => (t.date ?? '') >= sinceDate);
|
|
43
|
+
}
|
|
44
|
+
if (params.until_date) {
|
|
45
|
+
const untilDate = params.until_date;
|
|
46
|
+
filtered = filtered.filter(t => (t.date ?? '') <= untilDate);
|
|
47
|
+
}
|
|
48
|
+
if (params.payee_search) {
|
|
49
|
+
const needle = params.payee_search.toLowerCase();
|
|
50
|
+
// Resolve which payee IDs match the search up front so we only do the
|
|
51
|
+
// string compare once per payee instead of once per transaction.
|
|
52
|
+
const matchingPayeeIds = new Set();
|
|
53
|
+
for (const [id, name] of lookups.payees) {
|
|
54
|
+
if (name.toLowerCase().includes(needle))
|
|
55
|
+
matchingPayeeIds.add(id);
|
|
56
|
+
}
|
|
57
|
+
filtered = filtered.filter(t => {
|
|
58
|
+
if (t.entities_payee_id && matchingPayeeIds.has(t.entities_payee_id))
|
|
59
|
+
return true;
|
|
60
|
+
if (t.imported_payee?.toLowerCase().includes(needle))
|
|
61
|
+
return true;
|
|
62
|
+
if (t.original_imported_payee?.toLowerCase().includes(needle))
|
|
63
|
+
return true;
|
|
64
|
+
return false;
|
|
65
|
+
});
|
|
33
66
|
}
|
|
34
|
-
|
|
35
|
-
transactions.sort((a, b) => b.date.localeCompare(a.date));
|
|
67
|
+
const transactions = filtered.map(t => mapTransaction(t, lookups)).sort((a, b) => b.date.localeCompare(a.date));
|
|
36
68
|
return { transactions };
|
|
37
69
|
},
|
|
38
70
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-transactions.js","sourceRoot":"","sources":["../../src/tools/list-transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-transactions.js","sourceRoot":"","sources":["../../src/tools/list-transactions.ts"],"names":[],"mappings":"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"}
|