@frihet/mcp-server 1.14.1 → 1.14.2
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/README.md +1 -1
- package/dist/__tests__/contract.test.d.ts +33 -0
- package/dist/__tests__/contract.test.d.ts.map +1 -0
- package/dist/__tests__/contract.test.js +208 -0
- package/dist/__tests__/contract.test.js.map +1 -0
- package/dist/__tests__/einvoice-tools.test.js +70 -107
- package/dist/__tests__/einvoice-tools.test.js.map +1 -1
- package/dist/__tests__/tool-exposure.test.js +4 -1
- package/dist/__tests__/tool-exposure.test.js.map +1 -1
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +42 -2
- package/dist/client.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/observability.d.ts +21 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +79 -4
- package/dist/observability.js.map +1 -1
- package/dist/tools/accountingClose.d.ts.map +1 -1
- package/dist/tools/accountingClose.js +17 -12
- package/dist/tools/accountingClose.js.map +1 -1
- package/dist/tools/audit_gl.d.ts.map +1 -1
- package/dist/tools/audit_gl.js +7 -6
- package/dist/tools/audit_gl.js.map +1 -1
- package/dist/tools/backend-availability.d.ts +73 -0
- package/dist/tools/backend-availability.d.ts.map +1 -0
- package/dist/tools/backend-availability.js +94 -0
- package/dist/tools/backend-availability.js.map +1 -0
- package/dist/tools/bank_rules.d.ts.map +1 -1
- package/dist/tools/bank_rules.js +5 -4
- package/dist/tools/bank_rules.js.map +1 -1
- package/dist/tools/einvoice.d.ts +25 -41
- package/dist/tools/einvoice.d.ts.map +1 -1
- package/dist/tools/einvoice.js +142 -154
- package/dist/tools/einvoice.js.map +1 -1
- package/dist/tools/fiscal.d.ts.map +1 -1
- package/dist/tools/fiscal.js +20 -17
- package/dist/tools/fiscal.js.map +1 -1
- package/dist/tools/gestoria.d.ts.map +1 -1
- package/dist/tools/gestoria.js +11 -10
- package/dist/tools/gestoria.js.map +1 -1
- package/dist/tools/hr.d.ts.map +1 -1
- package/dist/tools/hr.js +19 -18
- package/dist/tools/hr.js.map +1 -1
- package/dist/tools/igic.d.ts.map +1 -1
- package/dist/tools/igic.js +9 -8
- package/dist/tools/igic.js.map +1 -1
- package/dist/tools/impuesto_sociedades.d.ts.map +1 -1
- package/dist/tools/impuesto_sociedades.js +5 -4
- package/dist/tools/impuesto_sociedades.js.map +1 -1
- package/dist/tools/onboard_vies.d.ts.map +1 -1
- package/dist/tools/onboard_vies.js +5 -4
- package/dist/tools/onboard_vies.js.map +1 -1
- package/dist/tools/onboarding.d.ts.map +1 -1
- package/dist/tools/onboarding.js +5 -4
- package/dist/tools/onboarding.js.map +1 -1
- package/dist/tools/payroll.d.ts.map +1 -1
- package/dist/tools/payroll.js +5 -4
- package/dist/tools/payroll.js.map +1 -1
- package/dist/tools/permissions.d.ts.map +1 -1
- package/dist/tools/permissions.js +5 -4
- package/dist/tools/permissions.js.map +1 -1
- package/dist/tools/portal_domain.d.ts.map +1 -1
- package/dist/tools/portal_domain.js +7 -6
- package/dist/tools/portal_domain.js.map +1 -1
- package/dist/tools/shared.d.ts +53 -1
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +68 -2
- package/dist/tools/shared.js.map +1 -1
- package/package.json +2 -2
package/dist/observability.js
CHANGED
|
@@ -72,6 +72,48 @@ function newId() {
|
|
|
72
72
|
// crypto.randomUUID() available in Node.js ≥18 and all Workers
|
|
73
73
|
return crypto.randomUUID();
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Inspect a resolved tool output for stub / not-implemented / unavailable
|
|
77
|
+
* markers and return them if present, else null.
|
|
78
|
+
*
|
|
79
|
+
* A tool that catches its own 404 (or is a forward-compat stub) RETURNS a
|
|
80
|
+
* fabricated body instead of throwing — so the try/catch in traceMCPTool never
|
|
81
|
+
* runs and the call looks successful. These markers are the structural signal
|
|
82
|
+
* that the "success" is fabricated:
|
|
83
|
+
* - `_stub: true` → 404 → fallback stub body
|
|
84
|
+
* - `_notImplemented: true` → forward-compat stub (endpoint not yet shipped)
|
|
85
|
+
* - `_unavailable: true` → honest "backend endpoint not yet available"
|
|
86
|
+
* - `_plannedEndpoint` → present on any of the above
|
|
87
|
+
*
|
|
88
|
+
* Checks both the top-level MCP tool result and its `structuredContent`, since
|
|
89
|
+
* tools place the markers inside `structuredContent`.
|
|
90
|
+
*/
|
|
91
|
+
export function inspectStubMarker(output) {
|
|
92
|
+
if (!output || typeof output !== "object")
|
|
93
|
+
return null;
|
|
94
|
+
const candidates = [];
|
|
95
|
+
const top = output;
|
|
96
|
+
candidates.push(top);
|
|
97
|
+
const sc = top["structuredContent"];
|
|
98
|
+
if (sc && typeof sc === "object")
|
|
99
|
+
candidates.push(sc);
|
|
100
|
+
for (const obj of candidates) {
|
|
101
|
+
if (obj["_stub"] === true || obj["_notImplemented"] === true || obj["_unavailable"] === true) {
|
|
102
|
+
return {
|
|
103
|
+
plannedEndpoint: typeof obj["_plannedEndpoint"] === "string" ? obj["_plannedEndpoint"] : undefined,
|
|
104
|
+
note: typeof obj["_note"] === "string" ? obj["_note"] : undefined,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// A bare _plannedEndpoint (without an explicit flag) is also a stub signal.
|
|
108
|
+
if (typeof obj["_plannedEndpoint"] === "string") {
|
|
109
|
+
return {
|
|
110
|
+
plannedEndpoint: obj["_plannedEndpoint"],
|
|
111
|
+
note: typeof obj["_note"] === "string" ? obj["_note"] : undefined,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
75
117
|
// ── HTTP send ────────────────────────────────────────────────────────────────
|
|
76
118
|
async function sendBatch(config, batch) {
|
|
77
119
|
const credentials = btoa(`${config.publicKey}:${config.secretKey}`);
|
|
@@ -141,6 +183,23 @@ export async function traceMCPTool(toolName, input, fn) {
|
|
|
141
183
|
}
|
|
142
184
|
finally {
|
|
143
185
|
const endTime = new Date();
|
|
186
|
+
// ── Fabricated-success detection ──────────────────────────────────────────
|
|
187
|
+
// A tool that catches its own 404 and RETURNS a stub / unavailable body never
|
|
188
|
+
// throws, so `isError` stays false and the trace would otherwise be logged as
|
|
189
|
+
// a SUCCESSFUL call whose output is a fabricated payload. Inspect the resolved
|
|
190
|
+
// output for the markers the e-invoice tools (and any future stub branch) set
|
|
191
|
+
// — `_stub`, `_notImplemented`, `_unavailable`, `_plannedEndpoint` — and
|
|
192
|
+
// downgrade the trace so observability is NOT structurally blind to fabricated
|
|
193
|
+
// success. This is the central fix: it covers every stub branch regardless of
|
|
194
|
+
// which tool produced it, because the stub path never reaches the catch above.
|
|
195
|
+
const stub = isError ? null : inspectStubMarker(output);
|
|
196
|
+
const stubbed = stub !== null;
|
|
197
|
+
// success: false whenever the call threw OR returned a fabricated stub body.
|
|
198
|
+
const success = !isError && !stubbed;
|
|
199
|
+
const stubNote = stub?.note ??
|
|
200
|
+
(stub?.plannedEndpoint
|
|
201
|
+
? `Backend endpoint not yet available: ${stub.plannedEndpoint}`
|
|
202
|
+
: undefined);
|
|
144
203
|
// Fire-and-forget — build and send async, never awaited
|
|
145
204
|
void (async () => {
|
|
146
205
|
try {
|
|
@@ -157,9 +216,17 @@ export async function traceMCPTool(toolName, input, fn) {
|
|
|
157
216
|
tool: toolName,
|
|
158
217
|
clientName: _sessionContext.clientName,
|
|
159
218
|
mcpVersion: _sessionContext.mcpVersion,
|
|
160
|
-
|
|
219
|
+
// FALSE on a thrown error AND on a fabricated-stub fallback.
|
|
220
|
+
success,
|
|
221
|
+
...(stubbed
|
|
222
|
+
? {
|
|
223
|
+
stub: true,
|
|
224
|
+
...(stub?.plannedEndpoint ? { plannedEndpoint: stub.plannedEndpoint } : {}),
|
|
225
|
+
...(stubNote ? { note: stubNote } : {}),
|
|
226
|
+
}
|
|
227
|
+
: {}),
|
|
161
228
|
},
|
|
162
|
-
tags: [`mcp.tool.${toolName}
|
|
229
|
+
tags: [`mcp.tool.${toolName}`, ...(stubbed ? ["mcp.stub"] : [])],
|
|
163
230
|
...(userIdHashed ? { userId: userIdHashed } : {}),
|
|
164
231
|
};
|
|
165
232
|
const spanBody = {
|
|
@@ -174,9 +241,17 @@ export async function traceMCPTool(toolName, input, fn) {
|
|
|
174
241
|
durationMs: endTime.getTime() - startTime.getTime(),
|
|
175
242
|
clientName: _sessionContext.clientName,
|
|
176
243
|
mcpVersion: _sessionContext.mcpVersion,
|
|
244
|
+
...(stubbed ? { stub: true } : {}),
|
|
177
245
|
},
|
|
178
|
-
|
|
179
|
-
|
|
246
|
+
// ERROR on a thrown error; WARNING on a fabricated-stub fallback (the
|
|
247
|
+
// call "succeeded" mechanically but returned no real backend data);
|
|
248
|
+
// DEFAULT only on a genuine success.
|
|
249
|
+
level: isError ? "ERROR" : stubbed ? "WARNING" : "DEFAULT",
|
|
250
|
+
...(isError && errorMessage
|
|
251
|
+
? { statusMessage: errorMessage }
|
|
252
|
+
: stubbed && stubNote
|
|
253
|
+
? { statusMessage: stubNote }
|
|
254
|
+
: {}),
|
|
180
255
|
};
|
|
181
256
|
const batch = {
|
|
182
257
|
batch: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAaH,SAAS,SAAS;IAChB,IAAI,SAA6B,CAAC;IAClC,IAAI,SAA6B,CAAC;IAClC,IAAI,OAA2B,CAAC;IAEhC,UAAU;IACV,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACnD,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC5C,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEtD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,+EAA+E;AAE/E,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAI5B;IACC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3D,SAAS,GAAG;YACV,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,SAAS,IAAI,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,KAAK,UAAU,OAAO,CAAC,KAAa;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAiCD,gFAAgF;AAEhF,SAAS,KAAK;IACZ,+DAA+D;IAC/D,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,SAAS,CAAC,MAAsB,EAAE,KAAqB;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,uBAAuB,EAAE;QACjE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,SAAS,WAAW,EAAE;SACxC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC3B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,kCAAkC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,8BAA8B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YAC1E,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAaD,qFAAqF;AACrF,IAAI,eAAe,GAAiB,EAAE,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,eAAe,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,KAAc,EACd,EAAoB;IAEpB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,oCAAoC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,IAAI,MAAS,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,YAAgC,CAAC;IACrC,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,CAAC;QACf,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,wDAAwD;QACxD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,kBAAkB;gBAClB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC;gBACzC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEtE,MAAM,SAAS,GAAsB;oBACnC,EAAE,EAAE,OAAO;oBACX,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;oBAClC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;oBACtC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM;oBAClD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,eAAe,CAAC,UAAU;wBACtC,UAAU,EAAE,eAAe,CAAC,UAAU;wBACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAaH,SAAS,SAAS;IAChB,IAAI,SAA6B,CAAC;IAClC,IAAI,SAA6B,CAAC;IAClC,IAAI,OAA2B,CAAC;IAEhC,UAAU;IACV,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACnD,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC5C,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEtD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,+EAA+E;AAE/E,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAI5B;IACC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3D,SAAS,GAAG;YACV,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,SAAS,IAAI,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,KAAK,UAAU,OAAO,CAAC,KAAa;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAiCD,gFAAgF;AAEhF,SAAS,KAAK;IACZ,+DAA+D;IAC/D,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AASD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,UAAU,CAAC,IAAI,CAAC,EAA6B,CAAC,CAAC;IAEjF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7F,OAAO;gBACL,eAAe,EAAE,OAAO,GAAG,CAAC,kBAAkB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,kBAAkB,CAAY,CAAC,CAAC,CAAC,SAAS;gBAC9G,IAAI,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,SAAS;aAC9E,CAAC;QACJ,CAAC;QACD,4EAA4E;QAC5E,IAAI,OAAO,GAAG,CAAC,kBAAkB,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO;gBACL,eAAe,EAAE,GAAG,CAAC,kBAAkB,CAAW;gBAClD,IAAI,EAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,SAAS;aAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,SAAS,CAAC,MAAsB,EAAE,KAAqB;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,uBAAuB,EAAE;QACjE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,SAAS,WAAW,EAAE;SACxC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC3B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,kCAAkC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,8BAA8B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YAC1E,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAaD,qFAAqF;AACrF,IAAI,eAAe,GAAiB,EAAE,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,eAAe,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,GAAG,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,KAAc,EACd,EAAoB;IAEpB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,oCAAoC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAE7B,IAAI,MAAS,CAAC;IACd,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,YAAgC,CAAC;IACrC,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,IAAI,CAAC;QACf,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,+EAA+E;QAC/E,8EAA8E;QAC9E,yEAAyE;QACzE,+EAA+E;QAC/E,8EAA8E;QAC9E,+EAA+E;QAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;QAC9B,6EAA6E;QAC7E,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC;QACrC,MAAM,QAAQ,GACZ,IAAI,EAAE,IAAI;YACV,CAAC,IAAI,EAAE,eAAe;gBACpB,CAAC,CAAC,uCAAuC,IAAI,CAAC,eAAe,EAAE;gBAC/D,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjB,wDAAwD;QACxD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,kBAAkB;gBAClB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC;gBACzC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEtE,MAAM,SAAS,GAAsB;oBACnC,EAAE,EAAE,OAAO;oBACX,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;oBAClC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;oBACtC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM;oBAClD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,eAAe,CAAC,UAAU;wBACtC,UAAU,EAAE,eAAe,CAAC,UAAU;wBACtC,6DAA6D;wBAC7D,OAAO;wBACP,GAAG,CAAC,OAAO;4BACT,CAAC,CAAC;gCACE,IAAI,EAAE,IAAI;gCACV,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC3E,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BACxC;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;oBACD,IAAI,EAAE,CAAC,YAAY,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClD,CAAC;gBAEF,MAAM,QAAQ,GAAqB;oBACjC,EAAE,EAAE,MAAM;oBACV,OAAO;oBACP,IAAI,EAAE,QAAQ,QAAQ,EAAE;oBACxB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;oBAClC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;oBAC9B,KAAK;oBACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM;oBAClD,QAAQ,EAAE;wBACR,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;wBACnD,UAAU,EAAE,eAAe,CAAC,UAAU;wBACtC,UAAU,EAAE,eAAe,CAAC,UAAU;wBACtC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACnC;oBACD,sEAAsE;oBACtE,oEAAoE;oBACpE,qCAAqC;oBACrC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oBAC1D,GAAG,CAAC,OAAO,IAAI,YAAY;wBACzB,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE;wBACjC,CAAC,CAAC,OAAO,IAAI,QAAQ;4BACnB,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE;4BAC7B,CAAC,CAAC,EAAE,CAAC;iBACV,CAAC;gBAEF,MAAM,KAAK,GAAmB;oBAC5B,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,cAAc;4BACpB,EAAE,EAAE,KAAK,EAAE;4BACX,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;4BAClC,IAAI,EAAE,SAAS;yBAChB;wBACD;4BACE,IAAI,EAAE,aAAa;4BACnB,EAAE,EAAE,KAAK,EAAE;4BACX,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;4BAClC,IAAI,EAAE,QAAQ;yBACf;qBACF;iBACF,CAAC;gBAEF,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,2BAA2B;gBAC3B,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CAAC;oBACb,OAAO,EAAE,YAAY;oBACrB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,yCAAyC,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;oBAC5H,SAAS,EAAE,gBAAgB;oBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountingClose.d.ts","sourceRoot":"","sources":["../../src/tools/accountingClose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"accountingClose.d.ts","sourceRoot":"","sources":["../../src/tools/accountingClose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAW5D,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA6H3F"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { z } from "zod/v4";
|
|
18
18
|
import { withToolLogging, formatRecord, getContent, mutateContent, READ_ONLY_ANNOTATIONS, periodStatusOutput, } from "./shared.js";
|
|
19
|
+
import { withBackendGuard } from "./backend-availability.js";
|
|
19
20
|
export function registerAccountingCloseTools(server, client) {
|
|
20
21
|
// -- period_close_status --
|
|
21
22
|
server.registerTool("period_close_status", {
|
|
@@ -28,13 +29,13 @@ export function registerAccountingCloseTools(server, client) {
|
|
|
28
29
|
periodId: z.string().optional().describe("Specific period ID (default: current) / ID periodo especifico"),
|
|
29
30
|
},
|
|
30
31
|
outputSchema: periodStatusOutput,
|
|
31
|
-
}, async ({ periodId }) => withToolLogging("period_close_status", async () => {
|
|
32
|
+
}, async ({ periodId }) => withToolLogging("period_close_status", () => withBackendGuard("period_close_status", "/v1/periods/current", async () => {
|
|
32
33
|
const result = await client.getCurrentPeriod({ periodId });
|
|
33
34
|
return {
|
|
34
35
|
content: [getContent(formatRecord("Period status", result))],
|
|
35
36
|
structuredContent: result,
|
|
36
37
|
};
|
|
37
|
-
}));
|
|
38
|
+
})));
|
|
38
39
|
// -- period_close --
|
|
39
40
|
server.registerTool("period_close", {
|
|
40
41
|
title: "Close Accounting Period",
|
|
@@ -69,11 +70,13 @@ export function registerAccountingCloseTools(server, client) {
|
|
|
69
70
|
isError: true,
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
return withBackendGuard("period_close", "/v1/periods/close", async () => {
|
|
74
|
+
const result = await client.closePeriod({ type });
|
|
75
|
+
return {
|
|
76
|
+
content: [mutateContent(formatRecord("Period closed", result))],
|
|
77
|
+
structuredContent: result,
|
|
78
|
+
};
|
|
79
|
+
});
|
|
77
80
|
}));
|
|
78
81
|
// -- period_reopen --
|
|
79
82
|
server.registerTool("period_reopen", {
|
|
@@ -109,11 +112,13 @@ export function registerAccountingCloseTools(server, client) {
|
|
|
109
112
|
isError: true,
|
|
110
113
|
};
|
|
111
114
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
return withBackendGuard("period_reopen", "/v1/periods/reopen", async () => {
|
|
116
|
+
const result = await client.reopenPeriod({ periodId, reason });
|
|
117
|
+
return {
|
|
118
|
+
content: [mutateContent(formatRecord("Period reopened", result))],
|
|
119
|
+
structuredContent: result,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
117
122
|
}));
|
|
118
123
|
}
|
|
119
124
|
//# sourceMappingURL=accountingClose.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountingClose.js","sourceRoot":"","sources":["../../src/tools/accountingClose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"accountingClose.js","sourceRoot":"","sources":["../../src/tools/accountingClose.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit_gl.d.ts","sourceRoot":"","sources":["../../src/tools/audit_gl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"audit_gl.d.ts","sourceRoot":"","sources":["../../src/tools/audit_gl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAW5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAiGnF"}
|
package/dist/tools/audit_gl.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { z } from "zod/v4";
|
|
17
17
|
import { withToolLogging, formatRecord, getContent, mutateContent, READ_ONLY_ANNOTATIONS, UPDATE_ANNOTATIONS, } from "./shared.js";
|
|
18
|
+
import { withBackendGuard } from "./backend-availability.js";
|
|
18
19
|
export function registerAuditGLTools(server, client) {
|
|
19
20
|
// -- frihet_gl_entry_approve -----------------------------------------------
|
|
20
21
|
server.registerTool("frihet_gl_entry_approve", {
|
|
@@ -30,7 +31,7 @@ export function registerAuditGLTools(server, client) {
|
|
|
30
31
|
entryId: z.string().describe("GL entry ID to approve / ID del asiento contable a aprobar"),
|
|
31
32
|
notes: z.string().optional().describe("Optional approval notes / Notas de aprobacion opcionales"),
|
|
32
33
|
},
|
|
33
|
-
}, async ({ entryId, notes }) => withToolLogging("frihet_gl_entry_approve", async () => {
|
|
34
|
+
}, async ({ entryId, notes }) => withToolLogging("frihet_gl_entry_approve", () => withBackendGuard("frihet_gl_entry_approve", "/v1/gl/entries/approve", async () => {
|
|
34
35
|
const result = await client.approveGLEntry(entryId, notes);
|
|
35
36
|
return {
|
|
36
37
|
content: [
|
|
@@ -38,7 +39,7 @@ export function registerAuditGLTools(server, client) {
|
|
|
38
39
|
],
|
|
39
40
|
structuredContent: result,
|
|
40
41
|
};
|
|
41
|
-
}));
|
|
42
|
+
})));
|
|
42
43
|
// -- frihet_gl_entry_reject ------------------------------------------------
|
|
43
44
|
server.registerTool("frihet_gl_entry_reject", {
|
|
44
45
|
title: "Reject GL Entry",
|
|
@@ -53,7 +54,7 @@ export function registerAuditGLTools(server, client) {
|
|
|
53
54
|
entryId: z.string().describe("GL entry ID to reject / ID del asiento contable a rechazar"),
|
|
54
55
|
reason: z.string().describe("Mandatory rejection reason (visible to submitter) / Razon del rechazo (obligatoria, visible al emisor)"),
|
|
55
56
|
},
|
|
56
|
-
}, async ({ entryId, reason }) => withToolLogging("frihet_gl_entry_reject", async () => {
|
|
57
|
+
}, async ({ entryId, reason }) => withToolLogging("frihet_gl_entry_reject", () => withBackendGuard("frihet_gl_entry_reject", "/v1/gl/entries/reject", async () => {
|
|
57
58
|
const result = await client.rejectGLEntry(entryId, reason);
|
|
58
59
|
return {
|
|
59
60
|
content: [
|
|
@@ -61,7 +62,7 @@ export function registerAuditGLTools(server, client) {
|
|
|
61
62
|
],
|
|
62
63
|
structuredContent: result,
|
|
63
64
|
};
|
|
64
|
-
}));
|
|
65
|
+
})));
|
|
65
66
|
// -- frihet_gl_entry_audit_log ---------------------------------------------
|
|
66
67
|
server.registerTool("frihet_gl_entry_audit_log", {
|
|
67
68
|
title: "Get GL Entry Audit Log",
|
|
@@ -75,12 +76,12 @@ export function registerAuditGLTools(server, client) {
|
|
|
75
76
|
inputSchema: {
|
|
76
77
|
entryId: z.string().describe("GL entry ID / ID del asiento contable"),
|
|
77
78
|
},
|
|
78
|
-
}, async ({ entryId }) => withToolLogging("frihet_gl_entry_audit_log", async () => {
|
|
79
|
+
}, async ({ entryId }) => withToolLogging("frihet_gl_entry_audit_log", () => withBackendGuard("frihet_gl_entry_audit_log", "/v1/gl/entries/audit-log", async () => {
|
|
79
80
|
const result = await client.getGLEntryAuditLog(entryId);
|
|
80
81
|
return {
|
|
81
82
|
content: [getContent(formatRecord(`Audit Log for GL Entry ${entryId}`, result))],
|
|
82
83
|
structuredContent: result,
|
|
83
84
|
};
|
|
84
|
-
}));
|
|
85
|
+
})));
|
|
85
86
|
}
|
|
86
87
|
//# sourceMappingURL=audit_gl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit_gl.js","sourceRoot":"","sources":["../../src/tools/audit_gl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"audit_gl.js","sourceRoot":"","sources":["../../src/tools/audit_gl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend-availability guard for MCP tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* PROBLEM (the bug this prevents): several tool families are wired here AHEAD of
|
|
5
|
+
* their Frihet-ERP backend Cloud Functions shipping (fiscal `/v1/fiscal/*`, bank
|
|
6
|
+
* rules `/v1/banking/rules`, gestoria `/v1/gestoria/*`, GL audit `/v1/gl/*`,
|
|
7
|
+
* portal domain/onboard, IGIC, IS, VIES onboarding, payroll prep, permissions,
|
|
8
|
+
* HR leaves/anomalies, accounting periods, webhook test). Until the CF deploys,
|
|
9
|
+
* the API returns a genuine HTTP 404.
|
|
10
|
+
*
|
|
11
|
+
* If that raw 404 reaches `handleToolError` it is mapped to the generic message
|
|
12
|
+
* "Resource not found. / Recurso no encontrado." — which an LLM reads as "the
|
|
13
|
+
* thing you asked about does not exist" and then HALLUCINATES a confident answer
|
|
14
|
+
* ("you have no Modelo 303 to file", "this workspace has no permissions matrix").
|
|
15
|
+
* That is a Trust-Area failure: the model invents fiscal/compliance facts.
|
|
16
|
+
*
|
|
17
|
+
* FIX: wrap the client call in `withBackendGuard`. A genuine 404 is converted into
|
|
18
|
+
* an explicit STRUCTURED tool error that names the tool and states the backend is
|
|
19
|
+
* not available yet — never a value the LLM can mistake for real business data.
|
|
20
|
+
* Any other error (401/403/429/5xx/network) is RE-THROWN unchanged so the normal
|
|
21
|
+
* `withToolLogging` → `handleToolError` path still surfaces it.
|
|
22
|
+
*
|
|
23
|
+
* NOTE: this is intentionally a SEPARATE module from `shared.ts` (owned elsewhere)
|
|
24
|
+
* and `client.ts`. It only depends on the public content-block shape.
|
|
25
|
+
*/
|
|
26
|
+
import { type AnnotatedTextContent } from "./shared.js";
|
|
27
|
+
/** Structured-content payload returned alongside a backend-unavailable error. */
|
|
28
|
+
export interface BackendUnavailableStructured {
|
|
29
|
+
error: "backend_unavailable";
|
|
30
|
+
tool: string;
|
|
31
|
+
message: string;
|
|
32
|
+
/** The planned REST endpoint, if known — aids ops/debugging, not the LLM. */
|
|
33
|
+
endpoint?: string;
|
|
34
|
+
/** Machine flag so downstream agents can branch without parsing prose. */
|
|
35
|
+
_backendUnavailable: true;
|
|
36
|
+
}
|
|
37
|
+
export interface BackendGuardErrorResult {
|
|
38
|
+
/** Index signature mirrors the MCP `ToolResult` shape so this is assignable to it. */
|
|
39
|
+
[x: string]: unknown;
|
|
40
|
+
content: AnnotatedTextContent[];
|
|
41
|
+
structuredContent: Record<string, unknown>;
|
|
42
|
+
isError: true;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* True when an error is a genuine HTTP 404 (FrihetApiError-like or fetch-shaped).
|
|
46
|
+
* Duck-typed so it works regardless of which client implementation threw.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isBackendNotFound(error: unknown): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Builds the explicit, LLM-safe "backend not available" tool error.
|
|
51
|
+
*/
|
|
52
|
+
export declare function backendUnavailableError(toolName: string, endpoint?: string): BackendGuardErrorResult;
|
|
53
|
+
/**
|
|
54
|
+
* Wraps a tool's client call. On a genuine 404 (backend not deployed) returns a
|
|
55
|
+
* structured backend-unavailable error instead of letting the raw 404 surface as
|
|
56
|
+
* a generic "resource not found" that the LLM would treat as real data. Any other
|
|
57
|
+
* error is re-thrown so `withToolLogging`/`handleToolError` handle it normally.
|
|
58
|
+
*
|
|
59
|
+
* Usage:
|
|
60
|
+
* ```ts
|
|
61
|
+
* async ({ period }) => withToolLogging("get_modelo_303_summary", () =>
|
|
62
|
+
* withBackendGuard("get_modelo_303_summary", "/v1/fiscal/303", async () => {
|
|
63
|
+
* const result = await client.getFiscalModeloSummary("303", period);
|
|
64
|
+
* return { content: [getContent(formatRecord("Modelo 303 Summary", result))],
|
|
65
|
+
* structuredContent: result as unknown as Record<string, unknown> };
|
|
66
|
+
* }),
|
|
67
|
+
* )
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function withBackendGuard<T extends {
|
|
71
|
+
content: unknown[];
|
|
72
|
+
}>(toolName: string, endpoint: string | undefined, fn: () => Promise<T>): Promise<T | BackendGuardErrorResult>;
|
|
73
|
+
//# sourceMappingURL=backend-availability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-availability.d.ts","sourceRoot":"","sources":["../../src/tools/backend-availability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAA6B,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnF,iFAAiF;AACjF,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,qBAAqB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,mBAAmB,EAAE,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,sFAAsF;IACtF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOzD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,uBAAuB,CAwBzB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,EACrE,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAStC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend-availability guard for MCP tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* PROBLEM (the bug this prevents): several tool families are wired here AHEAD of
|
|
5
|
+
* their Frihet-ERP backend Cloud Functions shipping (fiscal `/v1/fiscal/*`, bank
|
|
6
|
+
* rules `/v1/banking/rules`, gestoria `/v1/gestoria/*`, GL audit `/v1/gl/*`,
|
|
7
|
+
* portal domain/onboard, IGIC, IS, VIES onboarding, payroll prep, permissions,
|
|
8
|
+
* HR leaves/anomalies, accounting periods, webhook test). Until the CF deploys,
|
|
9
|
+
* the API returns a genuine HTTP 404.
|
|
10
|
+
*
|
|
11
|
+
* If that raw 404 reaches `handleToolError` it is mapped to the generic message
|
|
12
|
+
* "Resource not found. / Recurso no encontrado." — which an LLM reads as "the
|
|
13
|
+
* thing you asked about does not exist" and then HALLUCINATES a confident answer
|
|
14
|
+
* ("you have no Modelo 303 to file", "this workspace has no permissions matrix").
|
|
15
|
+
* That is a Trust-Area failure: the model invents fiscal/compliance facts.
|
|
16
|
+
*
|
|
17
|
+
* FIX: wrap the client call in `withBackendGuard`. A genuine 404 is converted into
|
|
18
|
+
* an explicit STRUCTURED tool error that names the tool and states the backend is
|
|
19
|
+
* not available yet — never a value the LLM can mistake for real business data.
|
|
20
|
+
* Any other error (401/403/429/5xx/network) is RE-THROWN unchanged so the normal
|
|
21
|
+
* `withToolLogging` → `handleToolError` path still surfaces it.
|
|
22
|
+
*
|
|
23
|
+
* NOTE: this is intentionally a SEPARATE module from `shared.ts` (owned elsewhere)
|
|
24
|
+
* and `client.ts`. It only depends on the public content-block shape.
|
|
25
|
+
*/
|
|
26
|
+
import { ERROR_CONTENT_ANNOTATIONS } from "./shared.js";
|
|
27
|
+
/**
|
|
28
|
+
* True when an error is a genuine HTTP 404 (FrihetApiError-like or fetch-shaped).
|
|
29
|
+
* Duck-typed so it works regardless of which client implementation threw.
|
|
30
|
+
*/
|
|
31
|
+
export function isBackendNotFound(error) {
|
|
32
|
+
if (error && typeof error === "object") {
|
|
33
|
+
const e = error;
|
|
34
|
+
if (e["statusCode"] === 404)
|
|
35
|
+
return true;
|
|
36
|
+
if (e["status"] === 404)
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds the explicit, LLM-safe "backend not available" tool error.
|
|
43
|
+
*/
|
|
44
|
+
export function backendUnavailableError(toolName, endpoint) {
|
|
45
|
+
const message = `The backend for "${toolName}" is not available yet, so no data could be retrieved. ` +
|
|
46
|
+
`This is NOT an empty or zero result — the underlying Frihet ERP endpoint ` +
|
|
47
|
+
(endpoint ? `(${endpoint}) ` : "") +
|
|
48
|
+
`is not deployed in your workspace. ` +
|
|
49
|
+
`Do NOT infer or invent a value (e.g. "no records", "0 due", "no permissions"). ` +
|
|
50
|
+
`Tell the user this feature is not enabled yet and to contact Frihet support / check feature availability. ` +
|
|
51
|
+
`/ El backend de "${toolName}" aun no esta disponible: el endpoint de Frihet ERP no esta desplegado en este workspace. ` +
|
|
52
|
+
`NO es un resultado vacio ni cero — no inventes un valor. Indica al usuario que la funcion aun no esta activa.`;
|
|
53
|
+
const structured = {
|
|
54
|
+
error: "backend_unavailable",
|
|
55
|
+
tool: toolName,
|
|
56
|
+
message,
|
|
57
|
+
...(endpoint ? { endpoint } : {}),
|
|
58
|
+
_backendUnavailable: true,
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: `Error: ${message}`, annotations: ERROR_CONTENT_ANNOTATIONS }],
|
|
62
|
+
structuredContent: structured,
|
|
63
|
+
isError: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Wraps a tool's client call. On a genuine 404 (backend not deployed) returns a
|
|
68
|
+
* structured backend-unavailable error instead of letting the raw 404 surface as
|
|
69
|
+
* a generic "resource not found" that the LLM would treat as real data. Any other
|
|
70
|
+
* error is re-thrown so `withToolLogging`/`handleToolError` handle it normally.
|
|
71
|
+
*
|
|
72
|
+
* Usage:
|
|
73
|
+
* ```ts
|
|
74
|
+
* async ({ period }) => withToolLogging("get_modelo_303_summary", () =>
|
|
75
|
+
* withBackendGuard("get_modelo_303_summary", "/v1/fiscal/303", async () => {
|
|
76
|
+
* const result = await client.getFiscalModeloSummary("303", period);
|
|
77
|
+
* return { content: [getContent(formatRecord("Modelo 303 Summary", result))],
|
|
78
|
+
* structuredContent: result as unknown as Record<string, unknown> };
|
|
79
|
+
* }),
|
|
80
|
+
* )
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export async function withBackendGuard(toolName, endpoint, fn) {
|
|
84
|
+
try {
|
|
85
|
+
return await fn();
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
if (isBackendNotFound(err)) {
|
|
89
|
+
return backendUnavailableError(toolName, endpoint);
|
|
90
|
+
}
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=backend-availability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-availability.js","sourceRoot":"","sources":["../../src/tools/backend-availability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,yBAAyB,EAA6B,MAAM,aAAa,CAAC;AAqBnF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,QAAiB;IAEjB,MAAM,OAAO,GACX,oBAAoB,QAAQ,yDAAyD;QACrF,2EAA2E;QAC3E,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,qCAAqC;QACrC,iFAAiF;QACjF,4GAA4G;QAC5G,oBAAoB,QAAQ,4FAA4F;QACxH,+GAA+G,CAAC;IAElH,MAAM,UAAU,GAAiC;QAC/C,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,mBAAmB,EAAE,IAAI;KAC1B,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;QAC9F,iBAAiB,EAAE,UAAgD;QACnE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,QAA4B,EAC5B,EAAoB;IAEpB,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank_rules.d.ts","sourceRoot":"","sources":["../../src/tools/bank_rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"bank_rules.d.ts","sourceRoot":"","sources":["../../src/tools/bank_rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAgC5D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+ErF"}
|
package/dist/tools/bank_rules.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { z } from "zod/v4";
|
|
21
21
|
import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, paginatedOutput, } from "./shared.js";
|
|
22
|
+
import { withBackendGuard } from "./backend-availability.js";
|
|
22
23
|
const bankRuleItemOutput = z.object({
|
|
23
24
|
id: z.string(),
|
|
24
25
|
name: z.string(),
|
|
@@ -52,13 +53,13 @@ export function registerBankRulesTools(server, client) {
|
|
|
52
53
|
offset: z.number().int().min(0).optional().describe("Offset / Desplazamiento"),
|
|
53
54
|
},
|
|
54
55
|
outputSchema: paginatedOutput(bankRuleItemOutput),
|
|
55
|
-
}, async ({ isActive, limit, offset }) => withToolLogging("frihet_bank_rules_list", async () => {
|
|
56
|
+
}, async ({ isActive, limit, offset }) => withToolLogging("frihet_bank_rules_list", () => withBackendGuard("frihet_bank_rules_list", "/v1/banking/rules", async () => {
|
|
56
57
|
const result = await client.listBankRules({ isActive, limit, offset });
|
|
57
58
|
return {
|
|
58
59
|
content: [listContent(formatPaginatedResponse("bank_rules", result))],
|
|
59
60
|
structuredContent: result,
|
|
60
61
|
};
|
|
61
|
-
}));
|
|
62
|
+
})));
|
|
62
63
|
// -- frihet_bank_rule_create ----------------------------------------------
|
|
63
64
|
server.registerTool("frihet_bank_rule_create", {
|
|
64
65
|
title: "Create Bank Categorization Rule",
|
|
@@ -83,7 +84,7 @@ export function registerBankRulesTools(server, client) {
|
|
|
83
84
|
})).min(1).describe("Actions to apply when rule matches / Acciones a aplicar cuando la regla se cumple"),
|
|
84
85
|
isActive: z.boolean().optional().describe("Whether the rule is active (default true) / Si la regla esta activa (por defecto true)"),
|
|
85
86
|
},
|
|
86
|
-
}, async ({ name, conditions, actions, isActive }) => withToolLogging("frihet_bank_rule_create", async () => {
|
|
87
|
+
}, async ({ name, conditions, actions, isActive }) => withToolLogging("frihet_bank_rule_create", () => withBackendGuard("frihet_bank_rule_create", "/v1/banking/rules", async () => {
|
|
87
88
|
const result = await client.createBankRule({ name, conditions, actions, isActive });
|
|
88
89
|
return {
|
|
89
90
|
content: [
|
|
@@ -91,6 +92,6 @@ export function registerBankRulesTools(server, client) {
|
|
|
91
92
|
],
|
|
92
93
|
structuredContent: result,
|
|
93
94
|
};
|
|
94
|
-
}));
|
|
95
|
+
})));
|
|
95
96
|
}
|
|
96
97
|
//# sourceMappingURL=bank_rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bank_rules.js","sourceRoot":"","sources":["../../src/tools/bank_rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"bank_rules.js","sourceRoot":"","sources":["../../src/tools/bank_rules.ts"],"names":[],"mappings":"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"}
|