@mind-your-now/myn 0.7.15 → 0.7.16
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/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/src/client.d.ts +21 -0
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +105 -0
- package/dist/src/client.js.map +1 -1
- package/dist/src/tools/calendar.d.ts.map +1 -1
- package/dist/src/tools/calendar.js +11 -3
- package/dist/src/tools/calendar.js.map +1 -1
- package/dist/src/tools/debrief.d.ts.map +1 -1
- package/dist/src/tools/debrief.js +5 -3
- package/dist/src/tools/debrief.js.map +1 -1
- package/dist/src/tools/household.d.ts.map +1 -1
- package/dist/src/tools/household.js +6 -3
- package/dist/src/tools/household.js.map +1 -1
- package/dist/src/tools/memory.d.ts.map +1 -1
- package/dist/src/tools/memory.js +9 -3
- package/dist/src/tools/memory.js.map +1 -1
- package/dist/src/tools/myn_a2a_pairing.d.ts.map +1 -1
- package/dist/src/tools/myn_a2a_pairing.js +19 -3
- package/dist/src/tools/myn_a2a_pairing.js.map +1 -1
- package/dist/src/tools/planning.js +4 -4
- package/dist/src/tools/planning.js.map +1 -1
- package/dist/src/tools/profile.d.ts.map +1 -1
- package/dist/src/tools/profile.js +11 -8
- package/dist/src/tools/profile.js.map +1 -1
- package/dist/src/tools/syncOnMismatch.d.ts +7 -2
- package/dist/src/tools/syncOnMismatch.d.ts.map +1 -1
- package/dist/src/tools/syncOnMismatch.js +19 -4
- package/dist/src/tools/syncOnMismatch.js.map +1 -1
- package/dist/src/tools/tasks.d.ts.map +1 -1
- package/dist/src/tools/tasks.js +45 -4
- package/dist/src/tools/tasks.js.map +1 -1
- package/dist/src/tools/timers.d.ts.map +1 -1
- package/dist/src/tools/timers.js +5 -3
- package/dist/src/tools/timers.js.map +1 -1
- package/dist/src/tools/ynab.d.ts +1 -1
- package/dist/src/tools/ynab.d.ts.map +1 -1
- package/dist/src/tools/ynab.js +36 -13
- package/dist/src/tools/ynab.js.map +1 -1
- package/dist/src/validation.d.ts +22 -0
- package/dist/src/validation.d.ts.map +1 -0
- package/dist/src/validation.js +44 -0
- package/dist/src/validation.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"myn_a2a_pairing.js","sourceRoot":"","sources":["../../../src/tools/myn_a2a_pairing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;KAC/B,CAAC;IACF,uEAAuE;IACvE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC,CAAC;IAC9F,uBAAuB;IACvB,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CAAC;IACzG,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC,CAAC;IAC7G,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+EAA+E,EAAE,CAAC,CAAC;IAC9I,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,CAAC;IAC3G,sBAAsB;IACtB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CAC7C,CAAC,CAAC;AAeH;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAsB,EAAE,OAAe;IAC5E,GAAG,CAAC,YAAY,CAAC;QACf,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE;;;;;;;;;;4GAU2F;QACxG,WAAW,EAAE,wBAAwB;QACrC,KAAK,CAAC,OAAO,CAAC,KAAc;YAC1B,OAAO,eAAe,CAAC,KAA2B,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAoB;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAyB,EAAE,iBAA0B;IACzF,MAAM,
|
|
1
|
+
{"version":3,"file":"myn_a2a_pairing.js","sourceRoot":"","sources":["../../../src/tools/myn_a2a_pairing.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,16 +68,16 @@ async function createPlan(client, _input) {
|
|
|
68
68
|
async function scheduleAll(client, _input) {
|
|
69
69
|
// Auto-schedules all eligible tasks (today or past start date, not completed,
|
|
70
70
|
// not OVER_THE_HORIZON/PARKING_LOT) for the authenticated user, then triggers planning.
|
|
71
|
-
//
|
|
72
|
-
const data = await client.
|
|
71
|
+
// MIN-740: Changed from GET to POST (read-before-write refactor).
|
|
72
|
+
const data = await client.post('/planning/scheduleAll', {});
|
|
73
73
|
return jsonResult({ result: data });
|
|
74
74
|
}
|
|
75
75
|
async function reschedule(client, input) {
|
|
76
76
|
// "Kick the can" — reschedules overdue/today tasks into the future based on priority.
|
|
77
77
|
// Optionally pass rebalance=true to redistribute all uncompleted tasks evenly.
|
|
78
|
-
//
|
|
78
|
+
// MIN-740: Changed from GET to POST (read-before-write refactor).
|
|
79
79
|
const rebalance = input.spreadOverDays && input.spreadOverDays > 1 ? 'true' : 'false';
|
|
80
|
-
const data = await client.
|
|
80
|
+
const data = await client.post(`/planning/kickTheCan?rebalance=${rebalance}`, {});
|
|
81
81
|
return jsonResult(data);
|
|
82
82
|
}
|
|
83
83
|
export function registerPlanningTool(api, client) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning.js","sourceRoot":"","sources":["../../../src/tools/planning.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"planning.js","sourceRoot":"","sources":["../../../src/tools/planning.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/tools/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/tools/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;EAoC7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC;AAE5D,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAoBlG;AAmHD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAUtF;AAGD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;IACT,MAAM,EAAE;QACN,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* myn_profile tool - User info, goals, and preferences
|
|
3
3
|
*/
|
|
4
4
|
import { Type } from '@sinclair/typebox';
|
|
5
|
-
import { jsonResult, errorResult } from '../client.js';
|
|
5
|
+
import { jsonResult, errorResult, guardedPut } from '../client.js';
|
|
6
|
+
import { escapeMarkdown } from '../validation.js';
|
|
6
7
|
export const ProfileInputSchema = Type.Object({
|
|
7
8
|
action: Type.Union([
|
|
8
9
|
Type.Literal('get_info'),
|
|
@@ -74,20 +75,22 @@ async function updateGoals(client, input) {
|
|
|
74
75
|
if (!input.goals || input.goals.length === 0) {
|
|
75
76
|
return errorResult('goals array is required for update_goals action');
|
|
76
77
|
}
|
|
77
|
-
// Format goals as markdown — the backend stores goals as a single text field
|
|
78
|
+
// Format goals as markdown — the backend stores goals as a single text field.
|
|
79
|
+
// BP4: Escape user-controlled values to prevent markdown injection.
|
|
78
80
|
const markdown = input.goals.map(g => {
|
|
79
|
-
let line = `- **${g.title}**`;
|
|
81
|
+
let line = `- **${escapeMarkdown(g.title)}**`;
|
|
80
82
|
if (g.status)
|
|
81
|
-
line += ` [${g.status}]`;
|
|
83
|
+
line += ` [${escapeMarkdown(String(g.status))}]`;
|
|
82
84
|
if (g.priority)
|
|
83
|
-
line += ` (${g.priority} priority)`;
|
|
85
|
+
line += ` (${escapeMarkdown(String(g.priority))} priority)`;
|
|
84
86
|
if (g.description)
|
|
85
|
-
line += `\n ${g.description}`;
|
|
87
|
+
line += `\n ${escapeMarkdown(g.description)}`;
|
|
86
88
|
if (g.targetDate)
|
|
87
|
-
line += `\n Target: ${g.targetDate}`;
|
|
89
|
+
line += `\n Target: ${escapeMarkdown(String(g.targetDate))}`;
|
|
88
90
|
return line;
|
|
89
91
|
}).join('\n');
|
|
90
|
-
|
|
92
|
+
// MIN-740: read-before-write — reads goals first to get stateHash, retries on 409
|
|
93
|
+
const data = await guardedPut(client, '/api/v1/customers/goals', { goalsAndAmbitions: markdown }, '/api/v1/customers/goals');
|
|
91
94
|
return jsonResult(data);
|
|
92
95
|
}
|
|
93
96
|
// Maps preferenceKey to the actual API endpoint path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/tools/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/tools/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,8 @@ interface CapabilityManifest {
|
|
|
25
25
|
};
|
|
26
26
|
capabilities: unknown[];
|
|
27
27
|
}
|
|
28
|
+
/** Optional logger callback for error reporting */
|
|
29
|
+
type LoggerFn = (message: string) => void;
|
|
28
30
|
/**
|
|
29
31
|
* withSyncOnMismatch — wraps an A2A fetch call with automatic capability re-sync.
|
|
30
32
|
*
|
|
@@ -32,16 +34,19 @@ interface CapabilityManifest {
|
|
|
32
34
|
* @param mynBaseUrl MYN API base URL (e.g. https://api.mindyournow.com).
|
|
33
35
|
* @param agentKey Current X-Agent-Key for authenticated requests.
|
|
34
36
|
* @param manifest Current capability manifest to send if a mismatch is detected.
|
|
37
|
+
* @param onError Optional callback for sync errors (W6: avoid silent suppression).
|
|
35
38
|
* @returns The original response from fetchFn (the sync is a side-effect).
|
|
36
39
|
*/
|
|
37
|
-
export declare function withSyncOnMismatch<T extends A2AResponseWithPending>(fetchFn: () => Promise<T>, mynBaseUrl: string, agentKey: string, manifest: CapabilityManifest): Promise<T>;
|
|
40
|
+
export declare function withSyncOnMismatch<T extends A2AResponseWithPending>(fetchFn: () => Promise<T>, mynBaseUrl: string, agentKey: string, manifest: CapabilityManifest, onError?: LoggerFn): Promise<T>;
|
|
38
41
|
/**
|
|
39
42
|
* checkAndSync — standalone helper to check a response and trigger a sync
|
|
40
43
|
* if capabilityUpdatePending is true. Use this when you already have the
|
|
41
44
|
* response object and want to retrofit sync behaviour without restructuring
|
|
42
45
|
* the call site.
|
|
46
|
+
*
|
|
47
|
+
* @param onError Optional callback for sync errors (W6: avoid silent suppression).
|
|
43
48
|
*/
|
|
44
|
-
export declare function checkAndSync(response: A2AResponseWithPending | null | undefined, mynBaseUrl: string, agentKey: string, manifest: CapabilityManifest): void;
|
|
49
|
+
export declare function checkAndSync(response: A2AResponseWithPending | null | undefined, mynBaseUrl: string, agentKey: string, manifest: CapabilityManifest, onError?: LoggerFn): void;
|
|
45
50
|
/** Exposed for testing only — clears the dedup set between tests */
|
|
46
51
|
export declare function _clearInFlightSyncsForTest(): void;
|
|
47
52
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncOnMismatch.d.ts","sourceRoot":"","sources":["../../../src/tools/syncOnMismatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,oEAAoE;AACpE,UAAU,sBAAsB;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,oEAAoE;AACpE,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,YAAY,EAAE,OAAO,EAAE,CAAC;CACzB;AAuDD
|
|
1
|
+
{"version":3,"file":"syncOnMismatch.d.ts","sourceRoot":"","sources":["../../../src/tools/syncOnMismatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,oEAAoE;AACpE,UAAU,sBAAsB;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,oEAAoE;AACpE,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,YAAY,EAAE,OAAO,EAAE,CAAC;CACzB;AAuDD,mDAAmD;AACnD,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE1C;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,sBAAsB,EACvE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,EACnD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,CAAC,EAAE,QAAQ,GACjB,IAAI,CAWN;AAED,oEAAoE;AACpE,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -62,14 +62,21 @@ async function sendCapabilityUpdate(mynBaseUrl, agentKey, manifest) {
|
|
|
62
62
|
* @param mynBaseUrl MYN API base URL (e.g. https://api.mindyournow.com).
|
|
63
63
|
* @param agentKey Current X-Agent-Key for authenticated requests.
|
|
64
64
|
* @param manifest Current capability manifest to send if a mismatch is detected.
|
|
65
|
+
* @param onError Optional callback for sync errors (W6: avoid silent suppression).
|
|
65
66
|
* @returns The original response from fetchFn (the sync is a side-effect).
|
|
66
67
|
*/
|
|
67
|
-
export async function withSyncOnMismatch(fetchFn, mynBaseUrl, agentKey, manifest) {
|
|
68
|
+
export async function withSyncOnMismatch(fetchFn, mynBaseUrl, agentKey, manifest, onError) {
|
|
68
69
|
const result = await fetchFn();
|
|
69
70
|
if (result?.capabilityUpdatePending === true) {
|
|
70
71
|
// Fire-and-forget: don't block the caller on the sync
|
|
71
72
|
sendCapabilityUpdate(mynBaseUrl, agentKey, manifest).catch((err) => {
|
|
72
|
-
|
|
73
|
+
const errMsg = err?.message ?? err;
|
|
74
|
+
if (onError) {
|
|
75
|
+
onError(`[syncOnMismatch] Capability sync failed: ${errMsg}`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.warn('[syncOnMismatch] Capability sync failed:', errMsg);
|
|
79
|
+
}
|
|
73
80
|
});
|
|
74
81
|
}
|
|
75
82
|
return result;
|
|
@@ -79,11 +86,19 @@ export async function withSyncOnMismatch(fetchFn, mynBaseUrl, agentKey, manifest
|
|
|
79
86
|
* if capabilityUpdatePending is true. Use this when you already have the
|
|
80
87
|
* response object and want to retrofit sync behaviour without restructuring
|
|
81
88
|
* the call site.
|
|
89
|
+
*
|
|
90
|
+
* @param onError Optional callback for sync errors (W6: avoid silent suppression).
|
|
82
91
|
*/
|
|
83
|
-
export function checkAndSync(response, mynBaseUrl, agentKey, manifest) {
|
|
92
|
+
export function checkAndSync(response, mynBaseUrl, agentKey, manifest, onError) {
|
|
84
93
|
if (response?.capabilityUpdatePending === true) {
|
|
85
94
|
sendCapabilityUpdate(mynBaseUrl, agentKey, manifest).catch((err) => {
|
|
86
|
-
|
|
95
|
+
const errMsg = err?.message ?? err;
|
|
96
|
+
if (onError) {
|
|
97
|
+
onError(`[syncOnMismatch] Capability sync failed: ${errMsg}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.warn('[syncOnMismatch] Capability sync failed:', errMsg);
|
|
101
|
+
}
|
|
87
102
|
});
|
|
88
103
|
}
|
|
89
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncOnMismatch.js","sourceRoot":"","sources":["../../../src/tools/syncOnMismatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAe5D;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;AAExC;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CACjC,UAAkB,EAClB,QAAgB,EAChB,QAA4B;IAE5B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;IAEvC,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,mCAAmC;IAC7C,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEvD,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI;YAC7B,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;YACnC,cAAc;YACd,kBAAkB,EAAE,QAAQ;SAC7B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,cAAc,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,QAAQ;aACxB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"syncOnMismatch.js","sourceRoot":"","sources":["../../../src/tools/syncOnMismatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAyBjD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;EAoC3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC;AAExD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA0BlG;AAuKD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAUpF;AAGD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;IACT,MAAM,EAAE;QACN,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC"}
|
package/dist/src/tools/tasks.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* myn_tasks tool - Task CRUD, lifecycle, and search
|
|
3
3
|
*/
|
|
4
4
|
import { Type } from '@sinclair/typebox';
|
|
5
|
-
import { jsonResult, errorResult } from '../client.js';
|
|
5
|
+
import { jsonResult, errorResult, guardedPatch, guardedPost } from '../client.js';
|
|
6
|
+
import { validateUuid } from '../validation.js';
|
|
6
7
|
// Schema definitions
|
|
7
8
|
const PrioritySchema = Type.Union([
|
|
8
9
|
Type.Literal('CRITICAL'),
|
|
@@ -110,6 +111,9 @@ async function getTask(client, input) {
|
|
|
110
111
|
if (!input.taskId) {
|
|
111
112
|
return errorResult('taskId is required for get action');
|
|
112
113
|
}
|
|
114
|
+
const uuidErr = validateUuid(input.taskId, 'taskId');
|
|
115
|
+
if (uuidErr)
|
|
116
|
+
return errorResult(uuidErr);
|
|
113
117
|
const data = await client.get(`/api/v2/unified-tasks/${input.taskId}`);
|
|
114
118
|
return jsonResult(data);
|
|
115
119
|
}
|
|
@@ -157,28 +161,65 @@ async function createTask(client, input) {
|
|
|
157
161
|
const data = await client.post('/api/v2/unified-tasks', body);
|
|
158
162
|
return jsonResult(data);
|
|
159
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* W2: Allowlist of safe fields for task updates.
|
|
166
|
+
* Blocks sensitive fields like ownerId, householdId, createdBy, isLocked.
|
|
167
|
+
*/
|
|
168
|
+
const ALLOWED_UPDATE_FIELDS = new Set([
|
|
169
|
+
'title', 'description', 'priority', 'status', 'startDate', 'endDate',
|
|
170
|
+
'duration', 'projectId', 'recurrenceRule', 'isAutoScheduled', 'autoScheduleEnabled',
|
|
171
|
+
'calendarId', 'location', 'notes', 'tags', 'estimatedMinutes', 'actualMinutes',
|
|
172
|
+
'completedAt', 'archivedAt', 'taskType', 'assignedTo', 'scheduledAt', 'dueDate'
|
|
173
|
+
]);
|
|
160
174
|
async function updateTask(client, input) {
|
|
161
175
|
if (!input.taskId) {
|
|
162
176
|
return errorResult('taskId is required for update action');
|
|
163
177
|
}
|
|
178
|
+
const uuidErr = validateUuid(input.taskId, 'taskId');
|
|
179
|
+
if (uuidErr)
|
|
180
|
+
return errorResult(uuidErr);
|
|
164
181
|
if (!input.updates || Object.keys(input.updates).length === 0) {
|
|
165
182
|
return errorResult('updates object is required for update action');
|
|
166
183
|
}
|
|
167
|
-
|
|
184
|
+
// W2: Filter updates to only allowed fields (mass assignment prevention)
|
|
185
|
+
const filteredUpdates = {};
|
|
186
|
+
const rejectedFields = [];
|
|
187
|
+
for (const [key, value] of Object.entries(input.updates)) {
|
|
188
|
+
if (ALLOWED_UPDATE_FIELDS.has(key)) {
|
|
189
|
+
filteredUpdates[key] = value;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
rejectedFields.push(key);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (Object.keys(filteredUpdates).length === 0) {
|
|
196
|
+
return errorResult(`No valid update fields provided. Rejected fields: ${rejectedFields.join(', ')}. ` +
|
|
197
|
+
`Allowed fields: ${Array.from(ALLOWED_UPDATE_FIELDS).join(', ')}`);
|
|
198
|
+
}
|
|
199
|
+
// MIN-740: read-before-write — automatically reads current stateHash, retries on 409
|
|
200
|
+
const data = await guardedPatch(client, `/api/v2/unified-tasks/${input.taskId}`, filteredUpdates, `/api/v2/unified-tasks/${input.taskId}`);
|
|
168
201
|
return jsonResult(data);
|
|
169
202
|
}
|
|
170
203
|
async function completeTask(client, input) {
|
|
171
204
|
if (!input.taskId) {
|
|
172
205
|
return errorResult('taskId is required for complete action');
|
|
173
206
|
}
|
|
174
|
-
const
|
|
207
|
+
const uuidErr = validateUuid(input.taskId, 'taskId');
|
|
208
|
+
if (uuidErr)
|
|
209
|
+
return errorResult(uuidErr);
|
|
210
|
+
// MIN-740: read-before-write — reads task first to get stateHash
|
|
211
|
+
const data = await guardedPost(client, `/api/v2/unified-tasks/${input.taskId}/complete`, {}, `/api/v2/unified-tasks/${input.taskId}`);
|
|
175
212
|
return jsonResult(data);
|
|
176
213
|
}
|
|
177
214
|
async function archiveTask(client, input) {
|
|
178
215
|
if (!input.taskId) {
|
|
179
216
|
return errorResult('taskId is required for archive action');
|
|
180
217
|
}
|
|
181
|
-
const
|
|
218
|
+
const uuidErr = validateUuid(input.taskId, 'taskId');
|
|
219
|
+
if (uuidErr)
|
|
220
|
+
return errorResult(uuidErr);
|
|
221
|
+
// MIN-740: read-before-write — reads task first to get stateHash
|
|
222
|
+
const data = await guardedPost(client, `/api/v2/unified-tasks/${input.taskId}/archive`, {}, `/api/v2/unified-tasks/${input.taskId}`);
|
|
182
223
|
return jsonResult(data);
|
|
183
224
|
}
|
|
184
225
|
async function searchTasks(client, input) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/tools/timers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EA2B5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC;AAE1D,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAwBlG;
|
|
1
|
+
{"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/tools/timers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EA2B5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC;AAE1D,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAwBlG;AAgJD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAUrF;AAGD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;IACT,MAAM,EAAE;QACN,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC"}
|
package/dist/src/tools/timers.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* myn_timers tool - Countdown, alarm, and pomodoro timers
|
|
3
3
|
*/
|
|
4
4
|
import { Type } from '@sinclair/typebox';
|
|
5
|
-
import { jsonResult, errorResult } from '../client.js';
|
|
5
|
+
import { jsonResult, errorResult, guardedPost } from '../client.js';
|
|
6
6
|
export const TimersInputSchema = Type.Object({
|
|
7
7
|
action: Type.Union([
|
|
8
8
|
Type.Literal('create_countdown'),
|
|
@@ -97,7 +97,8 @@ async function cancelTimer(client, input) {
|
|
|
97
97
|
if (!input.timerId) {
|
|
98
98
|
return errorResult('timerId is required for cancel action');
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
// MIN-740: guardedPost reads state hash from timer before cancelling
|
|
101
|
+
const data = await guardedPost(client, `/api/v2/timers/${input.timerId}/cancel`, undefined, `/api/v2/timers/${input.timerId}`);
|
|
101
102
|
return jsonResult(data);
|
|
102
103
|
}
|
|
103
104
|
async function snoozeTimer(client, input) {
|
|
@@ -107,7 +108,8 @@ async function snoozeTimer(client, input) {
|
|
|
107
108
|
const body = {
|
|
108
109
|
snoozeMinutes: input.snoozeMinutes ?? 5
|
|
109
110
|
};
|
|
110
|
-
|
|
111
|
+
// MIN-740: guardedPost reads state hash from timer before snoozing
|
|
112
|
+
const data = await guardedPost(client, `/api/v2/timers/${input.timerId}/snooze`, body, `/api/v2/timers/${input.timerId}`);
|
|
111
113
|
return jsonResult(data);
|
|
112
114
|
}
|
|
113
115
|
async function createPomodoro(client, input) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/tools/timers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/tools/timers.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools/ynab.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export declare const YnabInputSchema: import("@sinclair/typebox").TObject<{
|
|
|
44
44
|
accountId: import("@sinclair/typebox").TString;
|
|
45
45
|
payeeName: import("@sinclair/typebox").TString;
|
|
46
46
|
amount: import("@sinclair/typebox").TNumber;
|
|
47
|
-
categoryName: import("@sinclair/typebox").
|
|
47
|
+
categoryName: import("@sinclair/typebox").TString;
|
|
48
48
|
date: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
49
49
|
memo: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
50
50
|
}>>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ynab.d.ts","sourceRoot":"","sources":["../../../src/tools/ynab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkG1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC;AAuDtD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAiGlG;
|
|
1
|
+
{"version":3,"file":"ynab.d.ts","sourceRoot":"","sources":["../../../src/tools/ynab.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkG1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC;AAuDtD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAiGlG;AAggBD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;CACV;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAuBnF"}
|
package/dist/src/tools/ynab.js
CHANGED
|
@@ -91,7 +91,7 @@ export const YnabInputSchema = Type.Object({
|
|
|
91
91
|
accountId: Type.String({ description: 'YNAB account ID.' }),
|
|
92
92
|
payeeName: Type.String({ description: 'Payee name.' }),
|
|
93
93
|
amount: Type.Number({ description: 'Amount in dollars. Negative for expenses.' }),
|
|
94
|
-
categoryName: Type.
|
|
94
|
+
categoryName: Type.String({ description: 'Category name (fuzzy match). REQUIRED — use list_categories to find it.' }),
|
|
95
95
|
date: Type.Optional(Type.String({ description: 'Date YYYY-MM-DD. Defaults to today.' })),
|
|
96
96
|
memo: Type.Optional(Type.String({ description: 'Optional memo.' }))
|
|
97
97
|
}), { description: 'Array of transactions for create_transactions_bulk.' }))
|
|
@@ -327,6 +327,13 @@ async function createTransaction(client, input) {
|
|
|
327
327
|
return errorResult('payeeName or transferToAccount is required for create_transaction.');
|
|
328
328
|
}
|
|
329
329
|
const amountMilliunits = Math.round(input.amount * 1000);
|
|
330
|
+
const isTransfer = !!(payeeId || input.transferToAccount);
|
|
331
|
+
// HARD REQUIREMENT: categoryName is mandatory for non-transfer transactions.
|
|
332
|
+
// This prevents uncategorized transactions that show "This needs a category" in YNAB.
|
|
333
|
+
if (!input.categoryName && !isTransfer) {
|
|
334
|
+
return errorResult('categoryName is REQUIRED for create_transaction. Use list_categories to find the right category first. ' +
|
|
335
|
+
'Only transfers (using transferToAccount) are exempt from this requirement.');
|
|
336
|
+
}
|
|
330
337
|
let categoryId;
|
|
331
338
|
if (input.categoryName) {
|
|
332
339
|
const resolved = await resolveCategoryId(client, input.categoryName);
|
|
@@ -335,10 +342,26 @@ async function createTransaction(client, input) {
|
|
|
335
342
|
}
|
|
336
343
|
categoryId = resolved;
|
|
337
344
|
}
|
|
345
|
+
// DUPLICATE DETECTION: Check for existing transactions with the same amount and date
|
|
346
|
+
// to prevent duplicates when bank sync also imports the transaction.
|
|
347
|
+
const txnDate = input.date || today();
|
|
348
|
+
try {
|
|
349
|
+
const existing = await client.get(`/api/v1/ynab/transactions?sinceDate=${txnDate}`);
|
|
350
|
+
const dupes = (existing?.transactions ?? []).filter(t => !t.deleted && t.amount === amountMilliunits && t.date === txnDate);
|
|
351
|
+
if (dupes.length > 0) {
|
|
352
|
+
const dupeInfo = dupes.map(d => `${d.payee_name} ${d.amount / 1000}`).join(', ');
|
|
353
|
+
return errorResult(`DUPLICATE WARNING: ${dupes.length} existing transaction(s) found with the same amount ($${input.amount}) on ${txnDate}: [${dupeInfo}]. ` +
|
|
354
|
+
'The bank may have already imported this transaction. Verify with list_transactions before creating. ' +
|
|
355
|
+
'If you are certain this is not a duplicate, use create_transactions_bulk with a single entry to bypass this check.');
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// Non-fatal: proceed if duplicate check fails
|
|
360
|
+
}
|
|
338
361
|
const body = {
|
|
339
362
|
accountId: input.accountId,
|
|
340
363
|
amountMilliunits,
|
|
341
|
-
date:
|
|
364
|
+
date: txnDate
|
|
342
365
|
};
|
|
343
366
|
if (payeeId)
|
|
344
367
|
body.payeeId = payeeId;
|
|
@@ -360,25 +383,24 @@ async function createTransactionsBulk(client, input) {
|
|
|
360
383
|
// Resolve category names and convert amounts for all transactions
|
|
361
384
|
const resolved = [];
|
|
362
385
|
for (const txn of input.transactions) {
|
|
386
|
+
// HARD REQUIREMENT: categoryName is mandatory for each bulk transaction
|
|
387
|
+
if (!txn.categoryName) {
|
|
388
|
+
return errorResult(`categoryName is REQUIRED for transaction "${txn.payeeName}". Use list_categories to find the right category first.`);
|
|
389
|
+
}
|
|
363
390
|
const amountMilliunits = Math.round(txn.amount * 1000);
|
|
364
|
-
|
|
365
|
-
if (
|
|
366
|
-
|
|
367
|
-
if (!id) {
|
|
368
|
-
return errorResult(`Category '${txn.categoryName}' not found for transaction "${txn.payeeName}". Use list_categories to browse.`);
|
|
369
|
-
}
|
|
370
|
-
categoryId = id;
|
|
391
|
+
const id = await resolveCategoryId(client, txn.categoryName);
|
|
392
|
+
if (!id) {
|
|
393
|
+
return errorResult(`Category '${txn.categoryName}' not found for transaction "${txn.payeeName}". Use list_categories to browse.`);
|
|
371
394
|
}
|
|
372
395
|
const entry = {
|
|
373
396
|
accountId: txn.accountId,
|
|
374
397
|
payeeName: txn.payeeName,
|
|
375
398
|
amount: amountMilliunits,
|
|
376
|
-
date: txn.date || today()
|
|
399
|
+
date: txn.date || today(),
|
|
400
|
+
categoryId: id
|
|
377
401
|
};
|
|
378
402
|
if (txn.memo)
|
|
379
403
|
entry.memo = txn.memo;
|
|
380
|
-
if (categoryId)
|
|
381
|
-
entry.categoryId = categoryId;
|
|
382
404
|
resolved.push(entry);
|
|
383
405
|
}
|
|
384
406
|
const data = await client.post('/api/v1/ynab/transactions/bulk', { transactions: resolved });
|
|
@@ -679,7 +701,8 @@ export function registerYnabTool(api, client) {
|
|
|
679
701
|
'Connection: connection_status.',
|
|
680
702
|
'Category Management: create_category_group, create_category, rename_category, move_category (to different group), rename_category_group.',
|
|
681
703
|
'Amounts in dollars (negative=expense). Categories resolved by name (fuzzy match).',
|
|
682
|
-
'CATEGORIZATION:
|
|
704
|
+
'CATEGORIZATION: categoryName is REQUIRED for all transactions (enforced by code). ALWAYS call list_categories first to find the most relevant category. Do NOT guess common names like "Groceries" — look at what categories actually exist. If no existing category fits well, suggest creating a new one with create_category. Consider the payee and items to pick the right category (e.g., Dollar General selling cigarettes should use "Cigarettes" not "Groceries"). For mixed purchases, consider split_transaction.',
|
|
705
|
+
'DUPLICATE PREVENTION: Bank-connected accounts auto-import transactions. If you manually create a transaction that the bank also imports, it creates a DUPLICATE that throws off the balance. Before creating: (1) check list_transactions to see if it already exists, (2) create_transaction will reject if a same-amount same-date transaction exists. Only create transactions for manual/cash entries or when you are certain the bank will NOT import it.',
|
|
683
706
|
'CREDIT CARD TIPS: Credit card payment categories track "Available for Payment" which accumulates from budgeted spending on those cards. To zero out/remove available balance from a CC payment category, use set_budget_amount with a NEGATIVE amount (e.g., -76.51 to pull $76.51 out). Setting budget to 0 does NOT remove existing available balance. To move money between categories, negative-budget the source and positive-budget the destination. Always just do what the user asks — don\'t ask for confirmation on straightforward budget operations.'
|
|
684
707
|
].join(' '),
|
|
685
708
|
inputSchema: YnabInputSchema,
|