@jaypie/mcp 0.8.55 → 0.8.57

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.55#735a0f6f"
12
+ const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.57#b4f7b221"
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.55",
3
+ "version": "0.8.57",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,21 @@
1
+ ---
2
+ version: 1.2.53
3
+ date: 2026-05-07
4
+ summary: Truncate WAF log bucket names to fit S3's 63-char limit; add JaypieWebDeploymentBucket.exportOutputs()
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - WAF log bucket names created by `JaypieWebDeploymentBucket` and `JaypieDistribution` are now truncated to fit S3's 63-character limit. The `aws-waf-logs-` prefix and `-${PROJECT_NONCE}` suffix are preserved verbatim; the middle is shortened only when the full name would exceed the limit.
10
+ - Adds `constructWafLogBucketName(name?)` helper used by both constructs.
11
+ - Adds `JaypieWebDeploymentBucket.exportOutputs({ prefix?, scope? })` — emits stack-level `CfnOutput`s with stable, hash-free logical IDs (`DestinationBucketName`, `DestinationBucketDeployRoleArn`, `DistributionId`, `CertificateArn`) so consumers can read `cdk-outputs.json` without prefix-matching. Outputs whose underlying resource is absent are skipped. Pass `prefix` to namespace outputs when a stack has multiple instances.
12
+
13
+ ## Motivation
14
+
15
+ WAF log bucket names: in long-named environments (e.g., `PROJECT_ENV=development`, construct id `DocumentationBucket`), the generated bucket name reached 64 characters, blocking CDK synth with `InvalidBucketNameValue`. Shorter environments like `sandbox` were unaffected, masking the regression introduced when WAF logging became default in 1.2.52.
16
+
17
+ `exportOutputs()`: the existing in-construct `CfnOutput`s get CDK-generated logical IDs like `WebDestinationBucketNameB89ADFD6`, forcing every `cdk-outputs.json` consumer to grep by prefix or duplicate outputs by hand. `exportOutputs()` is opt-in so single-bucket stacks get clean names without breaking multi-bucket use.
18
+
19
+ ## Migration
20
+
21
+ No action required for the WAF bucket name fix. To opt into stable output names, call `bucket.exportOutputs()` on each `JaypieWebDeploymentBucket` (or pass `{ prefix }` for multi-instance stacks).
@@ -0,0 +1,19 @@
1
+ ---
2
+ version: 1.2.54
3
+ date: 2026-05-10
4
+ summary: JaypieMigration grants control-plane DynamoDB perms scoped to passed tables (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `JaypieMigration` now grants control-plane DynamoDB actions (`DescribeContinuousBackups`, `DescribeTable`, `DescribeTimeToLive`, `UpdateContinuousBackups`, `UpdateTable`, `UpdateTimeToLive`) on the ARNs of any tables passed via `tables`, scoped to the table ARN and its indexes (`/index/*`). Data-plane access is unchanged.
10
+
11
+ ## Motivation
12
+
13
+ The migration Lambda was previously granted only data-plane access via `grantReadWriteData`. Migrations whose entire purpose is to evolve table shape (add a GSI, change TTL, toggle streams, update backups) `AccessDenied` on the first control-plane call. Combined with `lambdaHandler`'s default soft-fail, the deploy reported `CREATE_COMPLETE` while later migrations silently never ran.
14
+
15
+ Pair this with the new `migrationHandler` in `@jaypie/lambda` (1.2.6) for end-to-end loud-fail behavior.
16
+
17
+ ## Migration
18
+
19
+ No action required. Existing migrations using only data-plane ops keep working; migrations that previously failed with `AccessDeniedException` on `dynamodb:DescribeTable` or `dynamodb:UpdateTable` should now succeed.
@@ -0,0 +1,13 @@
1
+ ---
2
+ version: 1.2.46
3
+ date: 2026-05-10
4
+ summary: Re-export migrationHandler from @jaypie/lambda (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Re-exports `migrationHandler` from `@jaypie/lambda` 1.2.6.
10
+
11
+ ## Motivation
12
+
13
+ Migration Lambdas should fail loudly so a failed migration fails the deploy. Use `migrationHandler` instead of `lambdaHandler` in migration entrypoints — see the migrations skill for usage.
@@ -0,0 +1,27 @@
1
+ ---
2
+ version: 1.2.6
3
+ date: 2026-05-10
4
+ summary: Add migrationHandler that defaults throw: true so failed migrations fail the deploy (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - New `migrationHandler` export. Wraps `lambdaHandler` with `throw: true` defaulted so a thrown error propagates out of the Lambda, causing the CFN custom resource (and the deploy) to fail loudly instead of swallowing the error and reporting `CREATE_COMPLETE`.
10
+ - Re-exported by `jaypie` and mocked by `@jaypie/testkit/mock`.
11
+ - Pass `{ throw: false }` to opt back into the soft-fail behavior.
12
+
13
+ ## Motivation
14
+
15
+ `JaypieMigration` runs its Lambda via a CFN custom resource provider. With `lambdaHandler`'s default `throw: false`, a thrown migration error was caught, logged as `fatal`, and returned as a successful response — CFN saw a 200-shaped response and marked the resource `CREATE_COMPLETE`. The deploy turned green while later migrations silently never ran.
16
+
17
+ ## Migration
18
+
19
+ Update migration entry points from `lambdaHandler` to `migrationHandler`:
20
+
21
+ ```typescript
22
+ import { migrationHandler } from "jaypie";
23
+
24
+ export const handler = migrationHandler(async (event) => {
25
+ // migration logic
26
+ });
27
+ ```
@@ -0,0 +1,14 @@
1
+ ---
2
+ version: 0.8.56
3
+ date: 2026-05-07
4
+ summary: Issues skill references gh CLI; web skill documents JaypieWebDeploymentBucket.exportOutputs()
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `skill("issues")` now instructs agents to use `gh issue create` after user approval. Previous wording referenced `mcp__github__issue_write`, which is not a generally available tool.
10
+ - `skill("web")` documents the new `JaypieWebDeploymentBucket.exportOutputs()` method (constructs 1.2.53) for emitting stable, hash-free output logical IDs.
11
+
12
+ ## Motivation
13
+
14
+ The GitHub CLI (`gh`) is the standard way Claude Code agents create issues in this repo, so the skill should match what's actually available. Surfacing `exportOutputs()` in the web skill helps agents recommend it instead of hand-rolled `overrideLogicalId` workarounds.
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 0.8.57
3
+ date: 2026-05-10
4
+ summary: Migrations skill recommends migrationHandler and documents control-plane perms (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `skill("migrations")` now recommends `migrationHandler` for the Lambda entrypoint and documents the control-plane DynamoDB permissions added by `JaypieMigration` 1.2.54.
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.37
3
+ date: 2026-05-10
4
+ summary: Mock migrationHandler from @jaypie/lambda (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Adds `migrationHandler` mock that mirrors the real handler — defaults `throw: true` so thrown errors surface in tests.
package/skills/issues.md CHANGED
@@ -17,7 +17,7 @@ Before creating an issue:
17
17
  1. Draft the issue title and body
18
18
  2. Present the draft to the user
19
19
  3. Wait for explicit approval ("yes", "submit it", etc.)
20
- 4. Only then use `mcp__github__issue_write` to create the issue
20
+ 4. Only then use `gh issue create` to create the issue
21
21
 
22
22
  ## Issue Format
23
23
 
@@ -44,16 +44,18 @@ new JaypieMigration(this, "SeedData", {
44
44
  - **Role**: Tagged as `CDK.ROLE.PROCESSING`
45
45
  - **Execution**: Runs on every deploy via CloudFormation custom resource (uses a deploy nonce to force re-invocation even when only Lambda code changes)
46
46
  - **Dependencies**: Use `dependencies` to ensure tables and other resources exist before the migration executes
47
+ - **Permissions**: Tables passed via `tables` get data-plane (`grantReadWriteData`) plus control-plane access (`DescribeTable`, `UpdateTable`, `UpdateTimeToLive`, `UpdateContinuousBackups`) scoped to the table ARN and its indexes — migrations that add GSIs, toggle TTL, or change backups work without extra IAM
47
48
 
48
49
  ## Migration Lambda Handler
49
50
 
50
- The migration Lambda receives a CloudFormation custom resource event. Return a result to signal success; throw to signal failure and roll back the stack.
51
+ The migration Lambda receives a CloudFormation custom resource event. Use `migrationHandler` so a thrown error fails the CFN custom resource (and the deploy) — `lambdaHandler`'s default `throw: false` returns a success-shaped response on error and CFN reports `CREATE_COMPLETE` even when the migration failed.
51
52
 
52
53
  ```typescript
53
54
  // src/migrations/seed/index.ts
54
55
  import { initClient, seedEntities, APEX } from "@jaypie/dynamodb";
56
+ import { migrationHandler } from "jaypie";
55
57
 
56
- export const handler = async (event: any) => {
58
+ export const handler = migrationHandler(async (event) => {
57
59
  await initClient();
58
60
 
59
61
  await seedEntities([
@@ -62,9 +64,11 @@ export const handler = async (event: any) => {
62
64
  ]);
63
65
 
64
66
  return { status: "complete" };
65
- };
67
+ });
66
68
  ```
67
69
 
70
+ `migrationHandler` is `lambdaHandler` with `throw: true` defaulted. Pass `{ throw: false }` to opt back into soft-fail behavior.
71
+
68
72
  ## Building Migration Code
69
73
 
70
74
  Bundle migrations separately using esbuild, then reference the output directory:
package/skills/web.md CHANGED
@@ -121,6 +121,21 @@ Exposed as `CfnOutput`s for workflow consumption:
121
121
  | `DistributionId` | CloudFront distribution for `aws cloudfront create-invalidation` |
122
122
  | `CertificateArn` | ACM certificate ARN (when a certificate is created) |
123
123
 
124
+ By default these outputs live inside the construct, so CDK adds the parent path and a hash suffix (e.g., `WebDestinationBucketNameB89ADFD6`). To get stable, hash-free logical IDs in `cdk-outputs.json`, call `exportOutputs()`:
125
+
126
+ ```typescript
127
+ const web = new JaypieWebDeploymentBucket(this, "Web", { host, zone });
128
+ web.exportOutputs();
129
+ // → DestinationBucketName, DestinationBucketDeployRoleArn, DistributionId, CertificateArn
130
+ ```
131
+
132
+ For stacks with multiple `JaypieWebDeploymentBucket` instances, pass a `prefix` to avoid collisions:
133
+
134
+ ```typescript
135
+ appWeb.exportOutputs({ prefix: "App" }); // AppDestinationBucketName, ...
136
+ docsWeb.exportOutputs({ prefix: "Docs" }); // DocsDestinationBucketName, ...
137
+ ```
138
+
124
139
  See `skill("cicd-deploy")` for the workflow pattern that reads these outputs and deploys content.
125
140
 
126
141
  ## JaypieStaticWebBucket