@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 +3 -3
- package/package.json +1 -1
- package/release-notes/constructs/1.2.91.md +37 -0
- package/release-notes/fabricator/0.4.3.md +10 -0
- package/release-notes/jaypie/1.2.124.md +9 -0
- package/release-notes/llm/1.3.65.md +18 -0
- package/release-notes/mcp/0.8.191.md +11 -0
- package/release-notes/textract/0.2.7.md +9 -0
- package/skills/cdk.md +1 -1
- package/skills/llm.md +20 -12
- package/skills/waf.md +10 -0
package/dist/assets.js
CHANGED
|
@@ -55,11 +55,11 @@ function getMcpAssetPaths() {
|
|
|
55
55
|
*/
|
|
56
56
|
function getMcpBuildInfo() {
|
|
57
57
|
return {
|
|
58
|
-
commit: "
|
|
58
|
+
commit: "f88048b4"
|
|
59
59
|
,
|
|
60
|
-
version: "0.8.
|
|
60
|
+
version: "0.8.191"
|
|
61
61
|
,
|
|
62
|
-
versionString: "@jaypie/mcp@0.8.
|
|
62
|
+
versionString: "@jaypie/mcp@0.8.191#f88048b4"
|
|
63
63
|
,
|
|
64
64
|
};
|
|
65
65
|
}
|
package/package.json
CHANGED
|
@@ -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,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
|
-
-
|
|
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
|
|
1363
|
-
model's documented maximum output, so long generations do not
|
|
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
|
-
- **
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
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
|
|
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
|
|
1392
|
-
|
|
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
|
|
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" } });
|