@jaypie/mcp 0.8.87 → 0.8.89

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.87#9846ff69"
12
+ const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.89#aa6c226c"
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.87",
3
+ "version": "0.8.89",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,28 @@
1
+ ---
2
+ version: 1.2.27
3
+ date: 2026-07-03
4
+ summary: Express 5 support — dual-compatible EXPRESS.PATH.ANY, optional express peer, dev harness on Express 5
5
+ ---
6
+
7
+ # @jaypie/express 1.2.27
8
+
9
+ ## Features
10
+
11
+ - **Express 5 support**: The package is now developed and tested against Express `^5.1.0`. Express is type-only at runtime, so both Express 4 and Express 5 apps are supported.
12
+ - **Optional peer dependency**: Declares `express >=4.0.0` as an optional peer dependency to document the supported range.
13
+
14
+ ## Changes
15
+
16
+ - **`EXPRESS.PATH.ANY` is now a RegExp**: Previously `"*"`, which throws at route registration under Express 5 (path-to-regexp 8 requires named wildcards). The constant is now a RegExp that matches all paths in both Express 4 and Express 5. Code such as `app.all(EXPRESS.PATH.ANY, notFoundRoute)` continues to work unchanged on either major.
17
+
18
+ ## Technical Details
19
+
20
+ - All runtime `req`/`res` API usage (`res.status().json()`, `res.send()`, `res.set()`, `res.vary()`, read-only `req.query`) is identical across Express 4 and 5.
21
+ - The Lambda adapter (`LambdaRequest`, `LambdaResponseBuffered`, `LambdaResponseStreaming`) is validated against Express 5 internals via the adapter integration suite and docker harness.
22
+ - Supertest coverage added for the `app.all(EXPRESS.PATH.ANY, ...)` catch-all pattern.
23
+
24
+ ## Migration
25
+
26
+ - No action required for Express 4 clients.
27
+ - Express 5 clients should not use bare `"*"` route paths (an Express 5 restriction); `EXPRESS.PATH.ANY` now works on both majors.
28
+ - Code depending on `EXPRESS.PATH.ANY` being the literal string `"*"` (e.g., string comparison) must compare against the RegExp instead.
@@ -0,0 +1,13 @@
1
+ ---
2
+ version: 1.2.59
3
+ date: 2026-07-02
4
+ summary: Bump optional @jaypie/llm peer to ^1.3.6
5
+ ---
6
+
7
+ ## Dependencies
8
+
9
+ - Bump the optional `@jaypie/llm` peer dependency floor to `^1.3.6` — default
10
+ `max_tokens` now resolves to the model's maximum output (capped at 16,384
11
+ for non-streaming requests) instead of Anthropic's hardcoded 4,096 or
12
+ Google's 8,192 provider default, so long generations no longer silently
13
+ truncate (issue #402).
@@ -0,0 +1,12 @@
1
+ ---
2
+ version: 1.2.60
3
+ date: 2026-07-03
4
+ summary: Bump @jaypie/express to ^1.2.27 with Express 5 support
5
+ ---
6
+
7
+ ## Dependencies
8
+
9
+ - Bump `@jaypie/express` to `^1.2.27` — the package is now developed and
10
+ tested against Express 5 while remaining compatible with Express 4, and
11
+ `EXPRESS.PATH.ANY` is a RegExp valid on both majors (bare `"*"` route
12
+ paths throw on Express 5).
@@ -0,0 +1,31 @@
1
+ ---
2
+ version: 1.3.6
3
+ date: 2026-07-02
4
+ summary: Resolve default max_tokens to model max output instead of hardcoded 4096 (Anthropic) / provider default (Google)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Default output-token limits now resolve from the model's documented maximum
10
+ output instead of Anthropic's hardcoded 4,096 or Google's low 8,192 provider
11
+ default, which silently truncated long generations (issue #402):
12
+ - **Non-streaming** (`operate()`, `send()`): capped at 16,384 tokens —
13
+ larger non-streaming responses risk HTTP timeouts
14
+ - **Streaming** (`stream()`): the model maximum output — 128,000 for current
15
+ Claude models (64,000 for Haiku 4.5; lower legacy caps respected), 65,536
16
+ for Gemini 2.5/3.x
17
+ - New internal utility `resolveMaxOutputTokens(model, { stream })` with a
18
+ maintained per-model output-cap table (`src/util/maxOutputTokens.ts`)
19
+ - `PROVIDER.ANTHROPIC.MAX_TOKENS.DEFAULT` raised from 4,096 to 16,384
20
+ - Google requests now set `maxOutputTokens` explicitly; Anthropic requests
21
+ resolve `max_tokens` per model and transport
22
+ - OpenAI and xAI remain unset (their defaults do not truncate early);
23
+ OpenRouter remains unset (limit varies by routed model)
24
+ - Caller overrides via `providerOptions` (`max_tokens` for Anthropic,
25
+ `maxOutputTokens` for Google) continue to take precedence
26
+
27
+ ## Migration
28
+
29
+ No changes required. Callers who previously worked around truncation with
30
+ `providerOptions: { max_tokens: ... }` can remove the override unless they
31
+ want a limit other than the resolved default.
@@ -0,0 +1,20 @@
1
+ ---
2
+ version: 0.8.88
3
+ date: 2026-07-02
4
+ summary: Document the fabric context parameter; reserve plan/case/scenario vocabulary
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Add a "Parameters vs Context" section to the `services` skill explaining
10
+ Fabric's `ServiceFunction` second argument (`context?: ServiceContext`) —
11
+ error/fatal callbacks, progress messaging, and `fabricHttp` auth/request
12
+ metadata — distinct from validated domain `input`/`parameters`. Previously
13
+ only `fabric`, `vocabulary`, and `packages/fabric/CLAUDE.md` documented this;
14
+ `services` had no mention of it.
15
+ - Reserve `plan`, `case`, and `scenario` as Fabric Models in the `vocabulary`
16
+ skill, generalizing across agentic applications (events open cases; cases
17
+ fall into scenarios; scenarios prescribe plans; jobs run plans against
18
+ cases). Vocabulary reservation only — no `FabricPlan`/`FabricCase`/
19
+ `FabricScenario` interfaces yet. Also add `kind => category, tags` to
20
+ discouraged words, same rationale as `type`. (#404)
@@ -0,0 +1,10 @@
1
+ ---
2
+ version: 0.8.89
3
+ date: 2026-07-03
4
+ summary: Publish release notes for @jaypie/express 1.2.27, @jaypie/testkit 1.2.50, and jaypie 1.2.60
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Add release notes for `@jaypie/express` 1.2.27 (Express 5 support),
10
+ `@jaypie/testkit` 1.2.50, and `jaypie` 1.2.60.
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 1.2.50
3
+ date: 2026-07-03
4
+ summary: Develop and test against Express 5
5
+ ---
6
+
7
+ # @jaypie/testkit 1.2.50
8
+
9
+ ## Changes
10
+
11
+ - **Express 5 dev dependency**: Supertest coverage of the `expressHandler` mock now runs against Express `^5.1.0`, certifying testkit mocks under Express 5. No runtime or API changes.
package/skills/llm.md CHANGED
@@ -496,6 +496,7 @@ interface LlmOperateOptions {
496
496
  hooks?: LlmHooks; // Lifecycle callbacks
497
497
  instructions?: string; // Additional instructions
498
498
  model?: string; // Model override
499
+ providerOptions?: JsonObject; // Provider-specific request fields (passthrough)
499
500
  system?: string; // System prompt
500
501
  temperature?: number; // Sampling temperature (0-2)
501
502
  tools?: LlmTool[] | Toolkit; // Available tools
@@ -510,6 +511,44 @@ interface LlmFallbackConfig {
510
511
  }
511
512
  ```
512
513
 
514
+ ## Provider Options and Output Limits
515
+
516
+ `providerOptions` passes provider-specific request fields straight through to
517
+ the underlying API: Anthropic merges them into the Messages request body;
518
+ Google merges them into the generation config.
519
+
520
+ ### Default Output Token Limits
521
+
522
+ Anthropic and Google requests resolve a default output-token limit from the
523
+ model's documented maximum output, so long generations do not silently
524
+ truncate:
525
+
526
+ - **Non-streaming** (`operate()`, `send()`): capped at 16,384 tokens —
527
+ larger non-streaming responses risk HTTP timeouts (stream instead)
528
+ - **Streaming** (`stream()`): the model maximum — e.g., 128,000 for current
529
+ Claude models (64,000 for Haiku), 65,536 for Gemini 2.5/3.x
530
+
531
+ Override per call with `providerOptions`:
532
+
533
+ ```typescript
534
+ // Anthropic: max_tokens
535
+ await Llm.operate(input, {
536
+ model: "claude-sonnet-4-6",
537
+ providerOptions: { max_tokens: 32000 },
538
+ });
539
+
540
+ // Google: maxOutputTokens
541
+ await Llm.operate(input, {
542
+ model: "gemini-3.1-pro-preview",
543
+ providerOptions: { maxOutputTokens: 32000 },
544
+ });
545
+ ```
546
+
547
+ OpenAI and xAI leave the limit unset (their defaults do not truncate early).
548
+ OpenRouter varies by routed model; pass `max_tokens` via `providerOptions`
549
+ when needed. A truncated response surfaces `stop_reason: "max_tokens"` —
550
+ raise the limit or switch to `stream()`.
551
+
513
552
  ## See Also
514
553
 
515
554
  - **`skill("streaming")`** - Streaming LLM responses to Lambda and Express with `createLambdaStream`
@@ -173,9 +173,23 @@ describe("getUser", () => {
173
173
  });
174
174
  ```
175
175
 
176
+ ## Parameters vs Context
177
+
178
+ Plain service functions above take only domain input (`userId`, `input`). Fabric's `ServiceFunction` type adds a second, optional argument:
179
+
180
+ ```typescript
181
+ type ServiceFunction<TInput, TOutput> = (
182
+ input: TInput,
183
+ context?: ServiceContext,
184
+ ) => TOutput | Promise<TOutput>;
185
+ ```
186
+
187
+ `parameters`/`input` is validated domain input; `context` is the surrounding scope the service runs within — error/fatal callbacks, progress messaging, and (via `fabricHttp`) auth results and raw HTTP request metadata. See `skill("fabric")` and `skill("vocabulary")` (`Context: scope in which propositions hold`) for the full pattern.
188
+
176
189
  ## See Also
177
190
 
178
191
  - **`skill("fabric")`** - Fabric service pattern for multi-platform deployment
179
192
  - **`skill("handlers")`** - Handler lifecycle and integration with services
180
193
  - **`skill("models")`** - Data model and type definitions
194
+ - **`skill("vocabulary")`** - Reserved terms including `context` as a Fabric Service Attribute
181
195
 
@@ -26,6 +26,7 @@ Arguably identity, instance, and relation would form a more complete vocabulary.
26
26
  ### Further Postulates
27
27
 
28
28
  - "Events" trigger "actions"
29
+ - Events open cases; cases fall into scenarios; scenarios prescribe plans; jobs run plans against cases
29
30
 
30
31
  ## Attribute Definitions
31
32
 
@@ -65,6 +66,7 @@ Arguably identity, instance, and relation would form a more complete vocabulary.
65
66
  - data => input, state; `data` is a parameter passed for interpolation or response field signaling success
66
67
  - jaypie; reserved
67
68
  - key => alias; make api or secret keys explicit in name
69
+ - kind => category, tags; same rationale as `type`
68
70
  - ou => scope
69
71
  - output => state
70
72
  - type => category, tags; reserved (exception: `indexModelType` GSI exists in DynamoDB as a legacy pattern; prefer `category` for new work)
@@ -75,6 +77,15 @@ Avoid words defined elsewhere (services, terminology)
75
77
 
76
78
  - job
77
79
  - message
80
+ - plan
81
+ - case
82
+ - scenario
83
+
84
+ ### Model Definitions
85
+
86
+ - plan: a persisted definition an executor runs; what a job executes. plan : job :: definition : run. A composition projected into data is a plan. Suggested attributes: `alias`, `name`, `description`, `category` (a vocabulary under the model — e.g. composition plans use `workflow` | `agent`), optional `definitionHash` (content hash gating idempotent reseeds), optional `source` (provenance)
87
+ - case: the subject entity a job operates on; long-lived, accretes jobs and messages over time. Jobs reference their case via `job.case` (optional — jobs usually operate on a case; system jobs may not). Neither model requires the other: a case exists before any job runs on it, and a case never stores a job list (query jobs by case)
88
+ - scenario: a named category of cases (see Category in Ontological Grounding). `case.category` holds the scenario alias; the scenario model defines the category itself: `alias`, `name`, `description`, and `plans` (references) — scenarios prescribe which plans respond to them
78
89
 
79
90
  ### Implied Attributes
80
91