@jaypie/mcp 0.8.80 → 0.8.81

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.
@@ -9,7 +9,7 @@ import { gt } from 'semver';
9
9
  /**
10
10
  * Docs Suite - Documentation services (skill, version, release_notes)
11
11
  */
12
- const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.80#ee3430bf"
12
+ const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.81#90b85696"
13
13
  ;
14
14
  const __filename$1 = fileURLToPath(import.meta.url);
15
15
  const __dirname$1 = path.dirname(__filename$1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.8.80",
3
+ "version": "0.8.81",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,43 @@
1
+ ---
2
+ version: 1.3.3
3
+ date: 2026-06-22
4
+ summary: operate() reconciles structured-output keys against the declared format contract
5
+ ---
6
+
7
+ ## Fixes
8
+
9
+ - `operate()` no longer surfaces structured-output keys wrapped in literal
10
+ double quotes (e.g. `"Merchant Request"` as a key), which made those fields
11
+ unreachable by their declared name (#393).
12
+ - Root cause is provider-side, in Gemini's fallback path — **not** OpenAI,
13
+ despite the original report. When `format` is combined with `tools` on a model
14
+ that does not support Gemini's native `responseJsonSchema` + tools combo
15
+ (observed on `gemini-3.5-flash`), `GoogleAdapter` falls back to the legacy
16
+ `structured_output` fake-tool emulation. That path is a system-prompt nudge,
17
+ **not** grammar-constrained generation, so the model fills the synthetic
18
+ tool's arguments freely — wrapping multi-word property names in quotes and
19
+ omitting empty arrays. The corrupted `functionCall.args` then reach the caller
20
+ verbatim. (Single-word keys such as `Confidence` are unaffected, matching the
21
+ report.)
22
+
23
+ ## Changes
24
+
25
+ - New util `repairFormatKeys` walks the declared `format` contract and renames
26
+ any returned key whose de-quoted form matches a declared key. Wired into
27
+ `OperateLoop` ahead of `fillFormatArrays` (repair keys → backfill arrays), so
28
+ any unconstrained provider path is reconciled back to the declared shape.
29
+ Verified against the exact production payload: corrupted keys → exact match.
30
+ - `OpenAiAdapter.formatOutputSchema` now strips zod v4's draft-2020-12 `$schema`
31
+ keyword and the non-enumerable `~standard` marker before sending, matching the
32
+ OpenRouter and Anthropic adapters. This is schema hygiene — empirically it does
33
+ **not** affect OpenAI strict enforcement (verified clean across gpt-5.4,
34
+ gpt-5.4-mini, gpt-5.4-nano, gpt-5.5, gpt-4o, gpt-4o-mini, gpt-4.1-mini, with
35
+ and without `$schema`) — and is unrelated to #393's Gemini root cause.
36
+ - Added `test/format.ts`, a real-API smoke test exercising mixed single/multi-
37
+ word `format` keys with declared arrays. Verified green across openai,
38
+ anthropic, google, openrouter, and xai.
39
+
40
+ ## Migration
41
+
42
+ No changes required. Consumers that defensively de-quoted corrupted keys or
43
+ normalized missing array fields can drop those workarounds.
@@ -0,0 +1,12 @@
1
+ ---
2
+ version: 0.8.81
3
+ date: 2026-06-22
4
+ summary: Publish @jaypie/llm 1.3.3 release notes
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added release notes for `@jaypie/llm@1.3.3` (multi-word `format` key fidelity
10
+ in `operate()`; see issue #393).
11
+
12
+ No runtime behavior changes.