@jaypie/mcp 0.7.0 → 0.7.2
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/suites/docs/index.js +1 -1
- package/package.json +1 -1
- package/release-notes/constructs/1.2.25.md +11 -0
- package/release-notes/mcp/0.7.1.md +10 -0
- package/release-notes/mcp/0.7.2.md +18 -0
- package/release-notes/testkit/1.2.20.md +12 -0
- package/release-notes/tildeskill/0.2.0.md +28 -0
- package/skills/cdk.md +18 -1
- package/skills/skills.md +1 -1
- package/skills/streaming.md +36 -0
- package/skills/tildeskill.md +172 -0
|
@@ -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.7.
|
|
12
|
+
const BUILD_VERSION_STRING = "@jaypie/mcp@0.7.2#5d947297"
|
|
13
13
|
;
|
|
14
14
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
15
15
|
const __dirname$1 = path.dirname(__filename$1);
|
package/package.json
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.25
|
|
3
|
+
date: 2025-01-28
|
|
4
|
+
summary: Add streaming support to JaypieNextJs construct
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Add `streaming` prop to `JaypieNextJs` construct for Lambda response streaming
|
|
10
|
+
- When `streaming: true`, enables faster Time To First Byte (TTFB) via Lambda response streaming
|
|
11
|
+
- Passes through to underlying `cdk-nextjs-standalone` Nextjs construct
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.7.2
|
|
3
|
+
date: 2026-01-30
|
|
4
|
+
summary: Document JaypieNextJs streaming configuration requirements
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Documentation
|
|
8
|
+
|
|
9
|
+
- Added JaypieNextJs streaming documentation to `streaming.md` skill
|
|
10
|
+
- Added JaypieNextJs construct to `cdk.md` skill
|
|
11
|
+
- Clarified that `streaming: true` requires `open-next.config.ts` with `aws-lambda-streaming` wrapper
|
|
12
|
+
|
|
13
|
+
## Context
|
|
14
|
+
|
|
15
|
+
Issue #171 reported that `JaypieNextJs` with `streaming: true` returns a JSON envelope instead of streamed HTML. This is expected behavior - Lambda response streaming requires both:
|
|
16
|
+
|
|
17
|
+
1. CDK: `streaming: true` (configures `InvokeMode: RESPONSE_STREAM`)
|
|
18
|
+
2. Next.js: `open-next.config.ts` with `wrapper: "aws-lambda-streaming"`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.20
|
|
3
|
+
date: 2025-01-28
|
|
4
|
+
summary: Updated tildeskill mocks for extended schema
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Updated `createMemoryStore` and `createMarkdownStore` mocks with new methods:
|
|
10
|
+
- `getByNickname`: Returns `null` by default
|
|
11
|
+
- `search`: Returns empty array by default
|
|
12
|
+
- Added `expandIncludes` mock that returns `record.content` by default
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.2.0
|
|
3
|
+
date: 2025-01-28
|
|
4
|
+
summary: Extended schema with nicknames, tags, includes and enhanced store interface
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## New Features
|
|
8
|
+
|
|
9
|
+
### Extended SkillRecord Schema
|
|
10
|
+
|
|
11
|
+
- `name`: Display title for the skill
|
|
12
|
+
- `nicknames`: Alternate lookup keys for `getByNickname()`
|
|
13
|
+
- `tags`: Categorization tags for filtering
|
|
14
|
+
- `includes`: Auto-expand other skill content on lookup
|
|
15
|
+
|
|
16
|
+
### Enhanced SkillStore Interface
|
|
17
|
+
|
|
18
|
+
- `getByNickname(nickname)`: Look up skills by alternate names
|
|
19
|
+
- `list(filter)`: Filter by namespace prefix or tag
|
|
20
|
+
- `search(term)`: Search across alias, name, description, content, and tags
|
|
21
|
+
|
|
22
|
+
### Include Expansion
|
|
23
|
+
|
|
24
|
+
New `expandIncludes(store, record)` utility that:
|
|
25
|
+
- Prepends included skills' content before the record's content
|
|
26
|
+
- Recursively expands nested includes
|
|
27
|
+
- Prevents circular references
|
|
28
|
+
- Skips missing includes silently
|
package/skills/cdk.md
CHANGED
|
@@ -139,7 +139,24 @@ const handler = new JaypieLambda(this, "Handler", {
|
|
|
139
139
|
});
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
## JaypieNextJs
|
|
143
|
+
|
|
144
|
+
Deploy Next.js applications:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
import { JaypieNextJs } from "@jaypie/constructs";
|
|
148
|
+
|
|
149
|
+
new JaypieNextJs(this, "App", {
|
|
150
|
+
nextjsPath: "../nextjs",
|
|
151
|
+
domainName: "app.example.com",
|
|
152
|
+
hostedZone: "example.com",
|
|
153
|
+
streaming: true, // Optional: enables response streaming
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Streaming Note:** When `streaming: true`, also create `open-next.config.ts` in your Next.js app with `wrapper: "aws-lambda-streaming"`. See `skill("streaming")` for details.
|
|
158
|
+
|
|
142
159
|
## See Also
|
|
143
160
|
|
|
144
|
-
- **`skill("streaming")`** - JaypieDistribution
|
|
161
|
+
- **`skill("streaming")`** - JaypieDistribution and JaypieNextJs streaming configuration
|
|
145
162
|
- **`skill("websockets")`** - JaypieWebSocket and JaypieWebSocketTable constructs
|
package/skills/skills.md
CHANGED
package/skills/streaming.md
CHANGED
|
@@ -76,6 +76,8 @@ export const handler = lambdaStreamHandler(async (event, context) => {
|
|
|
76
76
|
|
|
77
77
|
## CDK Configuration
|
|
78
78
|
|
|
79
|
+
### JaypieDistribution
|
|
80
|
+
|
|
79
81
|
```typescript
|
|
80
82
|
import { JaypieLambda, JaypieDistribution } from "@jaypie/constructs";
|
|
81
83
|
|
|
@@ -90,6 +92,40 @@ new JaypieDistribution(this, "Api", {
|
|
|
90
92
|
});
|
|
91
93
|
```
|
|
92
94
|
|
|
95
|
+
### JaypieNextJs Streaming
|
|
96
|
+
|
|
97
|
+
For Next.js applications with `JaypieNextJs`, streaming requires **two** configurations:
|
|
98
|
+
|
|
99
|
+
1. **CDK** - Set `streaming: true` in the construct
|
|
100
|
+
2. **Next.js App** - Create `open-next.config.ts` with the streaming wrapper
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// CDK Stack
|
|
104
|
+
import { JaypieNextJs } from "@jaypie/constructs";
|
|
105
|
+
|
|
106
|
+
new JaypieNextJs(this, "App", {
|
|
107
|
+
nextjsPath: "../nextjs",
|
|
108
|
+
streaming: true,
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// nextjs/open-next.config.ts (required for streaming)
|
|
114
|
+
import type { OpenNextConfig } from "@opennextjs/aws/types/open-next.js";
|
|
115
|
+
|
|
116
|
+
const config = {
|
|
117
|
+
default: {
|
|
118
|
+
override: {
|
|
119
|
+
wrapper: "aws-lambda-streaming",
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
} satisfies OpenNextConfig;
|
|
123
|
+
|
|
124
|
+
export default config;
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Important:** Without `open-next.config.ts`, the Lambda returns a JSON envelope `{ statusCode, headers, body }` instead of streaming HTML. This is because `cdk-nextjs-standalone` configures the Lambda Function URL with `RESPONSE_STREAM` invoke mode, but OpenNext also needs to be configured to use the streaming wrapper.
|
|
128
|
+
|
|
93
129
|
## Error Handling
|
|
94
130
|
|
|
95
131
|
Errors are written to the stream in the configured format:
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Skill/vocabulary storage with pluggable backends (pre-1.0)
|
|
3
|
+
related: fabric, mcp, tools
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# @jaypie/tildeskill
|
|
7
|
+
|
|
8
|
+
Skill/vocabulary management with pluggable storage backends for AI assistants and documentation systems.
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
This package provides a storage abstraction for skill/vocabulary documents with markdown frontmatter support. It enables:
|
|
13
|
+
- Loading skills from markdown files with YAML frontmatter
|
|
14
|
+
- In-memory storage for testing
|
|
15
|
+
- Consistent alias normalization and validation
|
|
16
|
+
- Filtering by namespace and tags
|
|
17
|
+
- Searching across alias, name, description, content, and tags
|
|
18
|
+
- Include expansion for composable skills
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install @jaypie/tildeskill
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Core Types
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
interface SkillRecord {
|
|
30
|
+
alias: string; // Lookup key (normalized lowercase)
|
|
31
|
+
content: string; // Markdown body
|
|
32
|
+
description?: string; // Brief description from frontmatter
|
|
33
|
+
includes?: string[]; // Auto-expand these skill aliases on lookup
|
|
34
|
+
name?: string; // Display title for the skill
|
|
35
|
+
nicknames?: string[]; // Alternate lookup keys for getByNickname
|
|
36
|
+
related?: string[]; // Related skill aliases
|
|
37
|
+
tags?: string[]; // Categorization tags
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface ListFilter {
|
|
41
|
+
namespace?: string; // Namespace prefix matching (e.g., "kit:*")
|
|
42
|
+
tag?: string; // Filter by tag
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface SkillStore {
|
|
46
|
+
get(alias: string): Promise<SkillRecord | null>;
|
|
47
|
+
getByNickname(nickname: string): Promise<SkillRecord | null>;
|
|
48
|
+
list(filter?: ListFilter): Promise<SkillRecord[]>;
|
|
49
|
+
put(record: SkillRecord): Promise<SkillRecord>;
|
|
50
|
+
search(term: string): Promise<SkillRecord[]>;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Store Factories
|
|
55
|
+
|
|
56
|
+
### Markdown Store (File-based)
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { createMarkdownStore } from "@jaypie/tildeskill";
|
|
60
|
+
|
|
61
|
+
const store = createMarkdownStore({ path: "./skills" });
|
|
62
|
+
|
|
63
|
+
// Get a specific skill
|
|
64
|
+
const skill = await store.get("aws");
|
|
65
|
+
if (skill) {
|
|
66
|
+
console.log(skill.content);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// List all skills
|
|
70
|
+
const skills = await store.list();
|
|
71
|
+
skills.forEach(s => console.log(`${s.alias}: ${s.description}`));
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Memory Store (Testing)
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import { createMemoryStore } from "@jaypie/tildeskill";
|
|
78
|
+
|
|
79
|
+
const store = createMemoryStore([
|
|
80
|
+
{ alias: "test", content: "# Test\n\nContent", description: "Test skill" }
|
|
81
|
+
]);
|
|
82
|
+
|
|
83
|
+
const skill = await store.get("test");
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Include Expansion
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { expandIncludes, createMemoryStore } from "@jaypie/tildeskill";
|
|
90
|
+
|
|
91
|
+
const store = createMemoryStore([
|
|
92
|
+
{ alias: "base", content: "Base content" },
|
|
93
|
+
{ alias: "main", content: "Main content", includes: ["base"] },
|
|
94
|
+
]);
|
|
95
|
+
|
|
96
|
+
const record = await store.get("main");
|
|
97
|
+
const expanded = await expandIncludes(store, record);
|
|
98
|
+
// expanded = "Base content\n\nMain content"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Filtering and Search
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// Filter by namespace prefix
|
|
105
|
+
const kitSkills = await store.list({ namespace: "kit:" });
|
|
106
|
+
|
|
107
|
+
// Filter by tag
|
|
108
|
+
const cloudSkills = await store.list({ tag: "cloud" });
|
|
109
|
+
|
|
110
|
+
// Search across alias, name, description, content, and tags
|
|
111
|
+
const results = await store.search("lambda");
|
|
112
|
+
|
|
113
|
+
// Lookup by nickname
|
|
114
|
+
const skill = await store.getByNickname("amazon");
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Validation Utilities
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
import { isValidAlias, validateAlias, normalizeAlias } from "@jaypie/tildeskill";
|
|
121
|
+
|
|
122
|
+
// Check validity
|
|
123
|
+
isValidAlias("my-skill"); // true
|
|
124
|
+
isValidAlias("../../etc"); // false (path traversal)
|
|
125
|
+
|
|
126
|
+
// Normalize to lowercase
|
|
127
|
+
normalizeAlias("MY-Skill"); // "my-skill"
|
|
128
|
+
|
|
129
|
+
// Validate and normalize (throws on invalid)
|
|
130
|
+
validateAlias("valid"); // returns "valid"
|
|
131
|
+
validateAlias("../bad"); // throws BadRequestError
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Skill File Format
|
|
135
|
+
|
|
136
|
+
Skill files use YAML frontmatter:
|
|
137
|
+
|
|
138
|
+
```yaml
|
|
139
|
+
---
|
|
140
|
+
description: Brief description shown in listings
|
|
141
|
+
includes: base-skill, common-utils
|
|
142
|
+
name: Display Title
|
|
143
|
+
nicknames: alt-name, another-alias
|
|
144
|
+
related: alias1, alias2, alias3
|
|
145
|
+
tags: category1, category2
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
# Skill Title
|
|
149
|
+
|
|
150
|
+
Markdown content...
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
All frontmatter fields accept either comma-separated strings or YAML arrays.
|
|
154
|
+
|
|
155
|
+
## Testing with Mocks
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { mockTildeskill, restoreTildeskill } from "@jaypie/testkit";
|
|
159
|
+
|
|
160
|
+
beforeEach(() => {
|
|
161
|
+
mockTildeskill();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
afterEach(() => {
|
|
165
|
+
restoreTildeskill();
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## See Also
|
|
170
|
+
|
|
171
|
+
- **`skill("fabric")`** - Service patterns that use tildeskill
|
|
172
|
+
- **`skill("mcp")`** - MCP server that uses tildeskill for skill storage
|