@jaypie/mcp 0.8.190 → 0.8.191

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/assets.js CHANGED
@@ -55,11 +55,11 @@ function getMcpAssetPaths() {
55
55
  */
56
56
  function getMcpBuildInfo() {
57
57
  return {
58
- commit: "c95f849f"
58
+ commit: "f88048b4"
59
59
  ,
60
- version: "0.8.190"
60
+ version: "0.8.191"
61
61
  ,
62
- versionString: "@jaypie/mcp@0.8.190#c95f849f"
62
+ versionString: "@jaypie/mcp@0.8.191#f88048b4"
63
63
  ,
64
64
  };
65
65
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.8.190",
3
+ "version": "0.8.191",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,37 @@
1
+ ---
2
+ version: 1.2.91
3
+ date: 2026-10-14
4
+ summary: WAF rate limit exempt IPs; Agent permission set stops granting code execution under service roles
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`waf.rateLimit`** on `JaypieDistribution` and `JaypieWebDeploymentBucket`
10
+ takes `{ exemptIps, perIp }` (#589). `exemptIps` lists IPv4 and IPv6 CIDRs
11
+ the `RateLimitPerIp` rule neither counts nor blocks. The construct creates
12
+ one `AWS::WAFv2::IPSet` per address family and scopes the rate-based
13
+ statement down to everyone outside them. `rateLimitPerIp` keeps working;
14
+ setting it with `rateLimit.perIp` throws `ConfigurationError`, as does an
15
+ invalid CIDR.
16
+ - **`JaypieSsoPermissions` Agent set** no longer grants actions that run code
17
+ under a service execution role (#570): `iam:PassRole`, Lambda invoke, code,
18
+ configuration, version, alias, and event-source-mapping writes, ECS task
19
+ definition, run, start, and service updates, `ecr:PutImage` and layer
20
+ uploads, `states:StartExecution`, `states:StartSyncExecution`, and
21
+ `pipes:StartPipe`.
22
+ - The Agent set also drops account-wide `secretsmanager:GetSecretValue`,
23
+ `ssm:PutParameter`, and `s3:PutObject`.
24
+ - `AgentDenyPrivilegedPassRole` stays, so a linked policy granting
25
+ `iam:PassRole` still cannot pass the SSO, organization, or CDK roles.
26
+
27
+ ## Upgrade
28
+
29
+ - Agent sessions that invoke or update Lambdas, run ECS tasks, start Step
30
+ Functions executions, read secrets, write parameters, or put objects now
31
+ receive `AccessDenied`. Restore a specific workload with a customer managed
32
+ policy linked to the Agent set, scoped to that workload's ARNs. Nothing
33
+ denies these actions, so such a grant takes effect.
34
+ - Consumers appending a local `DenyAgentExecutionRoleEscalation` statement can
35
+ remove it.
36
+ - `rateLimitPerIp` alone synthesizes the same rule as before; no template
37
+ change without `rateLimit`.
@@ -0,0 +1,10 @@
1
+ ---
2
+ version: 0.4.3
3
+ date: 2026-10-14
4
+ summary: Lint cleanup with no behavior change
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Removes an unused `ConfigurationError` import from `Fabricator`
10
+ - Acknowledges the intentional `console.warn` in `uuidFrom` for lint
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.124
3
+ date: 2026-10-14
4
+ summary: Pulls @jaypie/llm 1.3.65
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`@jaypie/llm` 1.3.65**: `operate()` streams provider transport internally on Anthropic, OpenAI, xAI, Meta, Google, and Mistral, lifting the 16,384 non-streaming output cap.
@@ -0,0 +1,18 @@
1
+ ---
2
+ version: 1.3.65
3
+ date: 2026-10-14
4
+ summary: operate() streams provider transport internally on Anthropic, OpenAI, xAI, Meta, Google, and Mistral, lifting the 16,384 non-streaming output cap
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `operate()` consumes the provider stream internally and still returns one settled `LlmOperateResponse` on Anthropic, OpenAI, xAI, Meta, Google, and Mistral (#603). Each adapter accumulates stream events back into the payload its non-streaming request returns, so parsing, tool calls, history, structured output, and stop reasons are unchanged.
10
+ - Output budgets resolve to the model maximum instead of 16,384. Gemini 2.5/3.x reaches 65,536; Mistral reaches its 32,768 cap, which stays because it bounds degenerate restating.
11
+ - `timeout` becomes an idle timeout on these providers: the deadline resets on every stream event, so a stall fails over sooner and a long active generation is not cut off. Fireworks, OpenRouter, and Bedrock keep the non-streaming request and a whole-attempt deadline.
12
+ - Parameter-rejection retries (temperature, `reasoning_effort`, `response_format`, schema and output-format rejections) behave the same on both transports.
13
+ - A provider error event inside a stream classifies like the matching HTTP status; a stream that closes before settling is retried as a 500.
14
+
15
+ ## Upgrade
16
+
17
+ - Long responses that previously stopped at 16,384 tokens with `MAX_TOKENS` now run to the model maximum. Cost and latency grow with them; set `maxTokens` to keep a ceiling.
18
+ - A `timeout` sized for the slowest whole non-streaming response can shrink to the longest expected pause between events.
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 0.8.191
3
+ date: 2026-10-14
4
+ summary: WAF skills document waf.rateLimit exemptIps; llm skill documents the streamed operate transport
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`waf`**: example for `rateLimit: { exemptIps, perIp }`, exempting known CIDRs from the per-IP rate rule (#589)
10
+ - **`cdk`**: lists `rateLimit` among the WAF configuration props
11
+ - **`llm`**: Default Output Token Limits and timeout notes reflect `operate()` streaming internally on Anthropic, OpenAI, xAI, Meta, Google, and Mistral (#603)
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 0.2.7
3
+ date: 2026-10-14
4
+ summary: Incomplete markdown conversion warns through the logger only
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `MarkdownPage` drops a `console.warn` that duplicated `log.warn` for incomplete JSON-to-markdown conversion; the warning still logs once through the Jaypie logger
package/skills/cdk.md CHANGED
@@ -439,7 +439,7 @@ new JaypieDistribution(this, "Dist", {
439
439
  KnownBadInputsRuleSet, IP rate limiting, and WAF logging to S3 with Datadog
440
440
  forwarding.
441
441
 
442
- See **`skill("waf")`** for configuration: `rateLimitPerIp`, `webAclArn`,
442
+ See **`skill("waf")`** for configuration: `rateLimit` (`perIp`, `exemptIps`), `rateLimitPerIp`, `webAclArn`,
443
443
  `logBucket`, `logRetention`, `managedRuleOverrides`, `managedRuleScopeDowns`,
444
444
  `redactedFields`, `redactedHeaders`, the `allow` path-scoped relaxation prop,
445
445
  and the rule-name ↔ label casing trap.
package/skills/llm.md CHANGED
@@ -916,7 +916,8 @@ const response = await llm.operate(input, {
916
916
  - A timeout is never an `LlmAbortError`: the caller's `signal` still owns cancellation.
917
917
  - An entry's own `timeout` replaces the call's for that entry; `false` disables it.
918
918
  - `stream()` treats `timeout` as an idle timeout: it restarts with every chunk and pauses while the consumer holds one. A stall after partial output yields an error chunk.
919
- - No default applies; unset means no deadline. Size it above the slowest legitimate non-streaming response (long reasoning runs take minutes).
919
+ - `operate()` on Anthropic, Google, Mistral, OpenAI, xAI, and Meta streams its transport internally, so `timeout` is an idle timeout there too: it restarts with every event the provider sends, catching a stall without cutting off a long generation that is still producing. On Bedrock, Fireworks, and OpenRouter `operate()` sends non-streaming requests and `timeout` bounds the whole attempt.
920
+ - No default applies; unset means no deadline. On the non-streaming providers, size it above the slowest legitimate response (long reasoning runs take minutes).
920
921
  - `Llm.ocr` keeps `timeout` as the LlamaParse job deadline.
921
922
  - A timeout that hands off to the next model logs at `debug` (`API call timed out after 60000ms; not retrying`, then `Provider openai failed; failing over`). Only the failure that reaches the caller logs at `warn`. The report tally counts it under `failures` and `fallbacks`.
922
923
 
@@ -1359,14 +1360,21 @@ Google merges them into the generation config.
1359
1360
 
1360
1361
  ### Default Output Token Limits
1361
1362
 
1362
- Anthropic and Google requests resolve a default output-token limit from the
1363
- model's documented maximum output, so long generations do not silently
1364
- truncate:
1363
+ Anthropic, Google, and Mistral requests resolve a default output-token limit
1364
+ from the model's documented maximum output, so long generations do not
1365
+ silently truncate:
1365
1366
 
1366
- - **Non-streaming** (`operate()`, `send()`): capped at 16,384 tokens —
1367
- larger non-streaming responses risk HTTP timeouts (stream instead)
1368
- - **Streaming** (`stream()`): the model maximum — e.g., 128,000 for current
1369
- Claude models (64,000 for Haiku 4.5), 65,536 for Gemini 2.5/3.x
1367
+ - **Streamed transport** (`stream()`, and `operate()` on Anthropic, Google,
1368
+ Mistral, OpenAI, xAI, and Meta): the model maximum — e.g., 128,000 for
1369
+ current Claude models (64,000 for Haiku 4.5), 65,536 for Gemini 2.5/3.x
1370
+ - **Non-streaming**: an adapter request built without the streamed
1371
+ transport is capped at 16,384 (larger non-streaming responses risk HTTP
1372
+ timeouts). The deprecated `send()` on Anthropic sends 16,384 as well
1373
+
1374
+ `operate()` consumes the provider stream internally and still returns one
1375
+ settled response (same `content`, tool calls, history, stop reason, and
1376
+ usage), so streaming there is a transport detail with no caller-facing change.
1377
+ Bedrock, Fireworks, and OpenRouter keep non-streaming `operate()` requests.
1370
1378
 
1371
1379
  Override per model with `modelOptions`:
1372
1380
 
@@ -1383,19 +1391,19 @@ await Llm.operate(input, {
1383
1391
 
1384
1392
  OpenAI, xAI, and Meta leave the limit unset (their defaults do not truncate early).
1385
1393
  A chain that mixes them with Anthropic, Google, or Mistral therefore mixes
1386
- output budgets: a Gemini primary resolves to 16,384 non-streaming while an
1394
+ output budgets: a Gemini primary resolves to its 65,536 model maximum while an
1387
1395
  OpenAI fallback sends no ceiling, so swapping the primary moves the effective
1388
1396
  budget with nothing at the call site changing. Reasoning tokens count against
1389
1397
  the ceiling. Set `maxOutputTokens` (Google) or `max_tokens` (Anthropic,
1390
1398
  Mistral) in `modelOptions` to pin it per model.
1391
- Mistral is capped (32,768 streaming / 16,384 non-streaming) despite publishing
1392
- no low ceiling: a Mistral model can degenerate into restating its answer when
1399
+ Mistral is capped at 32,768 on every transport despite publishing no low
1400
+ ceiling: a Mistral model can degenerate into restating its answer when
1393
1401
  `format` and tools are combined, and an uncapped completion turns that into a
1394
1402
  multi-minute request. Override with `modelOptions: { mistral: { max_tokens } }`.
1395
1403
  OpenRouter varies by routed model; pass `max_tokens` via `modelOptions`
1396
1404
  when needed. A truncated response settles `status: "incomplete"` with
1397
1405
  `stopReason: "max_tokens"` and moves a fallback chain to its next entry;
1398
- raise the limit or switch to `stream()`.
1406
+ raise the limit through `modelOptions`.
1399
1407
 
1400
1408
  ## See Also
1401
1409
 
package/skills/waf.md CHANGED
@@ -26,6 +26,16 @@ new JaypieDistribution(this, "Dist", {
26
26
  waf: { name: "api", rateLimitPerIp: 500 },
27
27
  });
28
28
 
29
+ // Exempt known source CIDRs (a partner's backfill server) from the per-IP
30
+ // rate rule. Everyone else is still limited at perIp per 5 minutes.
31
+ new JaypieDistribution(this, "Dist", {
32
+ handler,
33
+ waf: {
34
+ name: "api",
35
+ rateLimit: { exemptIps: ["203.0.113.10/32", "2001:db8::/48"], perIp: 2000 },
36
+ },
37
+ });
38
+
29
39
  // Multiple distributions in one env — set a unique waf.name on each to
30
40
  // avoid WebACL/S3 bucket name collisions between stacks.
31
41
  new JaypieDistribution(this, "Api", { handler: api, waf: { name: "api" } });