@jaypie/mcp 0.3.2 → 0.4.0
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/createMcpServer.d.ts +7 -1
- package/dist/index.js +26 -3135
- package/dist/index.js.map +1 -1
- package/dist/suite.d.ts +1 -0
- package/dist/suite.js +2442 -0
- package/dist/suite.js.map +1 -0
- package/package.json +8 -3
- package/release-notes/constructs/1.2.17.md +11 -0
- package/release-notes/fabric/0.1.2.md +11 -0
- package/release-notes/fabric/0.1.3.md +25 -0
- package/release-notes/fabric/0.1.4.md +42 -0
- package/release-notes/mcp/0.3.3.md +12 -0
- package/release-notes/mcp/0.3.4.md +36 -0
- package/release-notes/mcp/0.4.0.md +27 -0
- package/release-notes/testkit/1.2.15.md +23 -0
- package/skills/agents.md +25 -0
- package/skills/aws.md +107 -0
- package/skills/cdk.md +141 -0
- package/skills/cicd.md +152 -0
- package/skills/datadog.md +129 -0
- package/skills/debugging.md +148 -0
- package/skills/dns.md +134 -0
- package/skills/dynamodb.md +140 -0
- package/skills/errors.md +142 -0
- package/skills/fabric.md +191 -0
- package/skills/index.md +7 -0
- package/skills/jaypie.md +100 -0
- package/skills/legacy.md +97 -0
- package/skills/logs.md +160 -0
- package/skills/mocks.md +174 -0
- package/skills/models.md +195 -0
- package/skills/releasenotes.md +94 -0
- package/skills/secrets.md +155 -0
- package/skills/services.md +175 -0
- package/skills/style.md +190 -0
- package/skills/tests.md +209 -0
- package/skills/tools.md +127 -0
- package/skills/topics.md +116 -0
- package/skills/variables.md +146 -0
- package/skills/writing.md +153 -0
- package/prompts/Branch_Management.md +0 -34
- package/prompts/Development_Process.md +0 -89
- package/prompts/Jaypie_Agent_Rules.md +0 -110
- package/prompts/Jaypie_Auth0_Express_Mongoose.md +0 -736
- package/prompts/Jaypie_Browser_and_Frontend_Web_Packages.md +0 -18
- package/prompts/Jaypie_CDK_Constructs_and_Patterns.md +0 -430
- package/prompts/Jaypie_CICD_with_GitHub_Actions.md +0 -371
- package/prompts/Jaypie_Commander_CLI_Package.md +0 -166
- package/prompts/Jaypie_Core_Errors_and_Logging.md +0 -39
- package/prompts/Jaypie_DynamoDB_Package.md +0 -774
- package/prompts/Jaypie_Eslint_NPM_Package.md +0 -78
- package/prompts/Jaypie_Express_Package.md +0 -630
- package/prompts/Jaypie_Fabric_Commander.md +0 -411
- package/prompts/Jaypie_Fabric_LLM.md +0 -312
- package/prompts/Jaypie_Fabric_Lambda.md +0 -308
- package/prompts/Jaypie_Fabric_MCP.md +0 -316
- package/prompts/Jaypie_Fabric_Package.md +0 -513
- package/prompts/Jaypie_Fabricator.md +0 -617
- package/prompts/Jaypie_Ideal_Project_Structure.md +0 -78
- package/prompts/Jaypie_Init_CICD_with_GitHub_Actions.md +0 -1186
- package/prompts/Jaypie_Init_Express_on_Lambda.md +0 -115
- package/prompts/Jaypie_Init_Jaypie_CDK_Package.md +0 -35
- package/prompts/Jaypie_Init_Lambda_Package.md +0 -505
- package/prompts/Jaypie_Init_Monorepo_Project.md +0 -44
- package/prompts/Jaypie_Init_Project_Subpackage.md +0 -65
- package/prompts/Jaypie_Legacy_Patterns.md +0 -15
- package/prompts/Jaypie_Llm_Calls.md +0 -449
- package/prompts/Jaypie_Llm_Tools.md +0 -155
- package/prompts/Jaypie_MCP_Package.md +0 -281
- package/prompts/Jaypie_Mocks_and_Testkit.md +0 -137
- package/prompts/Jaypie_Repokit.md +0 -103
- package/prompts/Jaypie_Scrub.md +0 -177
- package/prompts/Jaypie_Streaming.md +0 -467
- package/prompts/Templates_CDK_Subpackage.md +0 -115
- package/prompts/Templates_Express_Subpackage.md +0 -187
- package/prompts/Templates_Project_Monorepo.md +0 -326
- package/prompts/Templates_Project_Subpackage.md +0 -93
- package/prompts/Write_Efficient_Prompt_Guides.md +0 -48
- package/prompts/Write_and_Maintain_Engaging_Readme.md +0 -67
package/skills/style.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Code style conventions and patterns
|
|
3
|
+
related: errors, tests
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code Style
|
|
7
|
+
|
|
8
|
+
Jaypie coding conventions and patterns.
|
|
9
|
+
|
|
10
|
+
## General Rules
|
|
11
|
+
|
|
12
|
+
### TypeScript Everywhere
|
|
13
|
+
|
|
14
|
+
Use TypeScript for all code:
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// GOOD
|
|
18
|
+
function greet(name: string): string {
|
|
19
|
+
return `Hello, ${name}!`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// BAD
|
|
23
|
+
function greet(name) {
|
|
24
|
+
return `Hello, ${name}!`;
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### ESM Over CommonJS
|
|
29
|
+
|
|
30
|
+
Use ES modules:
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
// GOOD
|
|
34
|
+
import { log } from "jaypie";
|
|
35
|
+
export function myFunction() {}
|
|
36
|
+
|
|
37
|
+
// BAD
|
|
38
|
+
const { log } = require("jaypie");
|
|
39
|
+
module.exports = { myFunction };
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Alphabetize Everything
|
|
43
|
+
|
|
44
|
+
Alphabetize imports, object keys, exports:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// GOOD
|
|
48
|
+
import { ConfigurationError, log, NotFoundError } from "jaypie";
|
|
49
|
+
|
|
50
|
+
const config = {
|
|
51
|
+
apiKey: "...",
|
|
52
|
+
baseUrl: "...",
|
|
53
|
+
timeout: 5000,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// BAD
|
|
57
|
+
import { NotFoundError, log, ConfigurationError } from "jaypie";
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Function Signatures
|
|
61
|
+
|
|
62
|
+
### Object Parameters
|
|
63
|
+
|
|
64
|
+
Use destructured objects for multiple parameters:
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
// GOOD
|
|
68
|
+
function createUser({ email, name, role }: CreateUserInput) {}
|
|
69
|
+
|
|
70
|
+
// GOOD (single required + optional config)
|
|
71
|
+
function fetchData(url: string, { timeout, retries }: FetchOptions = {}) {}
|
|
72
|
+
|
|
73
|
+
// BAD (multiple positional parameters)
|
|
74
|
+
function createUser(email: string, name: string, role: string) {}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Allow Zero Arguments
|
|
78
|
+
|
|
79
|
+
Functions with optional config should allow no arguments:
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
// GOOD
|
|
83
|
+
function initialize(options: InitOptions = {}) {
|
|
84
|
+
const { timeout = 5000, retries = 3 } = options;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Call with or without args
|
|
88
|
+
initialize();
|
|
89
|
+
initialize({ timeout: 10000 });
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Constants
|
|
93
|
+
|
|
94
|
+
### File-Level Constants
|
|
95
|
+
|
|
96
|
+
Use SCREAMING_SNAKE_CASE for constants:
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
const DEFAULT_TIMEOUT = 5000;
|
|
100
|
+
const DATADOG_SITE = "datadoghq.com";
|
|
101
|
+
const HTTP_STATUS = {
|
|
102
|
+
OK: 200,
|
|
103
|
+
NOT_FOUND: 404,
|
|
104
|
+
} as const;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Magic Numbers
|
|
108
|
+
|
|
109
|
+
Never use magic numbers inline:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// BAD
|
|
113
|
+
if (retries > 3) { ... }
|
|
114
|
+
await sleep(5000);
|
|
115
|
+
|
|
116
|
+
// GOOD
|
|
117
|
+
const MAX_RETRIES = 3;
|
|
118
|
+
const RETRY_DELAY_MS = 5000;
|
|
119
|
+
|
|
120
|
+
if (retries > MAX_RETRIES) { ... }
|
|
121
|
+
await sleep(RETRY_DELAY_MS);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Error Handling
|
|
125
|
+
|
|
126
|
+
### Never Vanilla Error
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// BAD
|
|
130
|
+
throw new Error("Missing config");
|
|
131
|
+
|
|
132
|
+
// GOOD
|
|
133
|
+
import { ConfigurationError } from "jaypie";
|
|
134
|
+
throw new ConfigurationError("Missing config");
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Error Context
|
|
138
|
+
|
|
139
|
+
Include relevant context:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
throw new NotFoundError("User not found", {
|
|
143
|
+
context: { userId, searchedAt: new Date() }
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Avoid Over-Engineering
|
|
148
|
+
|
|
149
|
+
### No Premature Abstraction
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// BAD - Unnecessary abstraction for one use
|
|
153
|
+
const formatName = (name) => name.toUpperCase();
|
|
154
|
+
const processUser = (user) => ({ ...user, name: formatName(user.name) });
|
|
155
|
+
|
|
156
|
+
// GOOD - Simple and direct
|
|
157
|
+
const processUser = (user) => ({ ...user, name: user.name.toUpperCase() });
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Minimal Changes
|
|
161
|
+
|
|
162
|
+
Only modify what's requested:
|
|
163
|
+
|
|
164
|
+
- Bug fix? Fix the bug, nothing else.
|
|
165
|
+
- Add feature? Add only that feature.
|
|
166
|
+
- Don't add docstrings to unchanged code.
|
|
167
|
+
- Don't refactor surrounding code.
|
|
168
|
+
|
|
169
|
+
## Naming Conventions
|
|
170
|
+
|
|
171
|
+
| Type | Convention | Example |
|
|
172
|
+
|------|-----------|---------|
|
|
173
|
+
| Functions | camelCase | `getUser`, `createOrder` |
|
|
174
|
+
| Classes | PascalCase | `UserService`, `OrderModel` |
|
|
175
|
+
| Constants | SCREAMING_SNAKE | `MAX_RETRIES`, `API_URL` |
|
|
176
|
+
| Files | kebab-case | `user-service.ts`, `order-model.ts` |
|
|
177
|
+
| Types/Interfaces | PascalCase | `UserInput`, `IUserService` |
|
|
178
|
+
|
|
179
|
+
## Lint Rules
|
|
180
|
+
|
|
181
|
+
Use `@jaypie/eslint`:
|
|
182
|
+
|
|
183
|
+
```javascript
|
|
184
|
+
// eslint.config.mjs
|
|
185
|
+
import jaypie from "@jaypie/eslint";
|
|
186
|
+
export default [...jaypie];
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Always run `npm run format` before committing.
|
|
190
|
+
|
package/skills/tests.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Testing patterns with Vitest
|
|
3
|
+
related: mocks, errors
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Testing Patterns
|
|
7
|
+
|
|
8
|
+
Jaypie uses Vitest for testing with specific patterns and mocks.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
### vitest.config.ts
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { defineConfig } from "vitest/config";
|
|
16
|
+
|
|
17
|
+
export default defineConfig({
|
|
18
|
+
test: {
|
|
19
|
+
coverage: {
|
|
20
|
+
reporter: ["text", "json", "html"],
|
|
21
|
+
},
|
|
22
|
+
globals: true,
|
|
23
|
+
setupFiles: ["./vitest.setup.ts"],
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### vitest.setup.ts
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { vi } from "vitest";
|
|
32
|
+
|
|
33
|
+
vi.mock("jaypie", async () => {
|
|
34
|
+
const { mockJaypie } = await import("@jaypie/testkit");
|
|
35
|
+
return mockJaypie(vi);
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Test Structure
|
|
40
|
+
|
|
41
|
+
### File Organization
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
src/
|
|
45
|
+
├── services/
|
|
46
|
+
│ └── user.ts
|
|
47
|
+
└── __tests__/
|
|
48
|
+
└── user.spec.ts
|
|
49
|
+
|
|
50
|
+
# Or co-located:
|
|
51
|
+
src/
|
|
52
|
+
└── services/
|
|
53
|
+
├── user.ts
|
|
54
|
+
└── user.spec.ts
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Test File Pattern
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { describe, expect, it, vi, beforeEach } from "vitest";
|
|
61
|
+
|
|
62
|
+
describe("UserService", () => {
|
|
63
|
+
describe("getUser", () => {
|
|
64
|
+
it("returns user when found", async () => {
|
|
65
|
+
// Arrange
|
|
66
|
+
const mockUser = { id: "123", name: "John" };
|
|
67
|
+
vi.mocked(User.findById).mockResolvedValue(mockUser);
|
|
68
|
+
|
|
69
|
+
// Act
|
|
70
|
+
const result = await getUser("123");
|
|
71
|
+
|
|
72
|
+
// Assert
|
|
73
|
+
expect(result).toEqual(mockUser);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Running Tests
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Run all tests (non-watch mode)
|
|
83
|
+
npm test
|
|
84
|
+
|
|
85
|
+
# Run specific package
|
|
86
|
+
npm test -w packages/my-package
|
|
87
|
+
|
|
88
|
+
# Watch mode (development)
|
|
89
|
+
npx vitest
|
|
90
|
+
|
|
91
|
+
# With coverage
|
|
92
|
+
npm test -- --coverage
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Important**: Always use `npm test` or `vitest run`, not bare `vitest` which runs in watch mode.
|
|
96
|
+
|
|
97
|
+
## Mocking
|
|
98
|
+
|
|
99
|
+
### Module Mocks
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
vi.mock("./user-service.js", () => ({
|
|
103
|
+
getUser: vi.fn(),
|
|
104
|
+
createUser: vi.fn(),
|
|
105
|
+
}));
|
|
106
|
+
|
|
107
|
+
// Access mocked functions
|
|
108
|
+
import { getUser } from "./user-service.js";
|
|
109
|
+
|
|
110
|
+
vi.mocked(getUser).mockResolvedValue({ id: "123" });
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Jaypie Mocks
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import { log, getSecret } from "jaypie";
|
|
117
|
+
|
|
118
|
+
it("logs the operation", async () => {
|
|
119
|
+
await myFunction();
|
|
120
|
+
expect(log.info).toHaveBeenCalledWith("Operation started");
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("uses secrets", async () => {
|
|
124
|
+
vi.mocked(getSecret).mockResolvedValue("test-key");
|
|
125
|
+
await myFunction();
|
|
126
|
+
expect(getSecret).toHaveBeenCalledWith("api-key");
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Testing Errors
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import { NotFoundError } from "jaypie";
|
|
134
|
+
|
|
135
|
+
it("throws NotFoundError when user missing", async () => {
|
|
136
|
+
vi.mocked(User.findById).mockResolvedValue(null);
|
|
137
|
+
|
|
138
|
+
await expect(getUser("invalid")).rejects.toThrow(NotFoundError);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("includes error context", async () => {
|
|
142
|
+
vi.mocked(User.findById).mockResolvedValue(null);
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
await getUser("invalid");
|
|
146
|
+
expect.fail("Should have thrown");
|
|
147
|
+
} catch (error) {
|
|
148
|
+
expect(error.context.userId).toBe("invalid");
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Async Testing
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
it("handles async operations", async () => {
|
|
157
|
+
const result = await asyncFunction();
|
|
158
|
+
expect(result).toBeDefined();
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it("handles promises", () => {
|
|
162
|
+
return expect(asyncFunction()).resolves.toBeDefined();
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("handles rejections", () => {
|
|
166
|
+
return expect(failingFunction()).rejects.toThrow();
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Before/After Hooks
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
describe("UserService", () => {
|
|
174
|
+
beforeEach(() => {
|
|
175
|
+
vi.clearAllMocks();
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
afterEach(() => {
|
|
179
|
+
vi.resetAllMocks();
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
beforeAll(async () => {
|
|
183
|
+
// One-time setup
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
afterAll(async () => {
|
|
187
|
+
// One-time cleanup
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Snapshot Testing
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
it("renders expected output", () => {
|
|
196
|
+
const result = buildConfig({ env: "production" });
|
|
197
|
+
expect(result).toMatchSnapshot();
|
|
198
|
+
});
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Test Coverage
|
|
202
|
+
|
|
203
|
+
Aim for meaningful coverage, not 100%:
|
|
204
|
+
|
|
205
|
+
- Test business logic thoroughly
|
|
206
|
+
- Test error paths
|
|
207
|
+
- Skip trivial getters/setters
|
|
208
|
+
- Skip generated code
|
|
209
|
+
|
package/skills/tools.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Available MCP tools reference
|
|
3
|
+
related: aws, datadog, debugging
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MCP Tools Reference
|
|
7
|
+
|
|
8
|
+
Tools available through the Jaypie MCP server.
|
|
9
|
+
|
|
10
|
+
## Documentation Tools
|
|
11
|
+
|
|
12
|
+
| Tool | Description |
|
|
13
|
+
|------|-------------|
|
|
14
|
+
| `skill` | Access Jaypie skill documentation |
|
|
15
|
+
| `list_prompts` | List prompt files (deprecated, use skill) |
|
|
16
|
+
| `read_prompt` | Read prompt file (deprecated, use skill) |
|
|
17
|
+
| `version` | Get MCP server version |
|
|
18
|
+
| `list_release_notes` | List package release notes |
|
|
19
|
+
| `read_release_note` | Read specific release note |
|
|
20
|
+
|
|
21
|
+
### Using Skills
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
skill("index") # List all skills
|
|
25
|
+
skill("jaypie") # Jaypie overview
|
|
26
|
+
skill("tests") # Testing patterns
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## AWS Tools
|
|
30
|
+
|
|
31
|
+
| Tool | Description |
|
|
32
|
+
|------|-------------|
|
|
33
|
+
| `aws_list_profiles` | List AWS profiles from ~/.aws |
|
|
34
|
+
| `aws_lambda_list_functions` | List Lambda functions |
|
|
35
|
+
| `aws_lambda_get_function` | Get Lambda function details |
|
|
36
|
+
| `aws_logs_filter_log_events` | Search CloudWatch Logs |
|
|
37
|
+
| `aws_s3_list_objects` | List S3 bucket objects |
|
|
38
|
+
| `aws_cloudformation_describe_stack` | Get CloudFormation stack details |
|
|
39
|
+
|
|
40
|
+
### DynamoDB
|
|
41
|
+
|
|
42
|
+
| Tool | Description |
|
|
43
|
+
|------|-------------|
|
|
44
|
+
| `aws_dynamodb_describe_table` | Get table metadata |
|
|
45
|
+
| `aws_dynamodb_query` | Query by partition key |
|
|
46
|
+
| `aws_dynamodb_scan` | Full table scan |
|
|
47
|
+
| `aws_dynamodb_get_item` | Get single item |
|
|
48
|
+
|
|
49
|
+
### SQS
|
|
50
|
+
|
|
51
|
+
| Tool | Description |
|
|
52
|
+
|------|-------------|
|
|
53
|
+
| `aws_sqs_list_queues` | List SQS queues |
|
|
54
|
+
| `aws_sqs_get_queue_attributes` | Get queue attributes |
|
|
55
|
+
| `aws_sqs_receive_message` | Peek at messages |
|
|
56
|
+
| `aws_sqs_purge_queue` | Delete all messages |
|
|
57
|
+
|
|
58
|
+
### Step Functions
|
|
59
|
+
|
|
60
|
+
| Tool | Description |
|
|
61
|
+
|------|-------------|
|
|
62
|
+
| `aws_stepfunctions_list_executions` | List state machine executions |
|
|
63
|
+
| `aws_stepfunctions_stop_execution` | Stop running execution |
|
|
64
|
+
|
|
65
|
+
## Datadog Tools
|
|
66
|
+
|
|
67
|
+
| Tool | Description |
|
|
68
|
+
|------|-------------|
|
|
69
|
+
| `datadog_logs` | Search log entries |
|
|
70
|
+
| `datadog_log_analytics` | Aggregate logs with groupBy |
|
|
71
|
+
| `datadog_monitors` | List and check monitors |
|
|
72
|
+
| `datadog_synthetics` | List synthetic tests |
|
|
73
|
+
| `datadog_metrics` | Query timeseries metrics |
|
|
74
|
+
| `datadog_rum` | Search RUM events |
|
|
75
|
+
|
|
76
|
+
## LLM Tools
|
|
77
|
+
|
|
78
|
+
| Tool | Description |
|
|
79
|
+
|------|-------------|
|
|
80
|
+
| `llm_debug_call` | Debug LLM API call |
|
|
81
|
+
| `llm_list_providers` | List available LLM providers |
|
|
82
|
+
|
|
83
|
+
## Environment Variables
|
|
84
|
+
|
|
85
|
+
### AWS Tools
|
|
86
|
+
- `AWS_PROFILE` - Default profile
|
|
87
|
+
- `AWS_REGION` - Default region
|
|
88
|
+
|
|
89
|
+
### Datadog Tools
|
|
90
|
+
- `DATADOG_API_KEY` or `DD_API_KEY` - API key
|
|
91
|
+
- `DATADOG_APP_KEY` or `DD_APP_KEY` - App key
|
|
92
|
+
- `DD_ENV` - Default environment filter
|
|
93
|
+
- `DD_SERVICE` - Default service filter
|
|
94
|
+
- `DD_SOURCE` - Default log source
|
|
95
|
+
|
|
96
|
+
## Common Patterns
|
|
97
|
+
|
|
98
|
+
### Debug Lambda Issues
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
# Check function config
|
|
102
|
+
aws_lambda_get_function --functionName "my-function"
|
|
103
|
+
|
|
104
|
+
# Search recent logs
|
|
105
|
+
aws_logs_filter_log_events --logGroupName "/aws/lambda/my-function" --filterPattern "ERROR"
|
|
106
|
+
|
|
107
|
+
# Or via Datadog
|
|
108
|
+
datadog_logs --query "service:my-function status:error" --from "now-1h"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Check Queue Health
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
# Get queue depth
|
|
115
|
+
aws_sqs_get_queue_attributes --queueUrl "https://..."
|
|
116
|
+
|
|
117
|
+
# Peek at messages
|
|
118
|
+
aws_sqs_receive_message --queueUrl "https://..." --maxNumberOfMessages 5
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Monitor Status
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
# Check alerting monitors
|
|
125
|
+
datadog_monitors --status '["Alert", "Warn"]'
|
|
126
|
+
```
|
|
127
|
+
|
package/skills/topics.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Topic index and cross-reference
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Topic Index
|
|
6
|
+
|
|
7
|
+
Quick reference for finding the right skill for your task.
|
|
8
|
+
|
|
9
|
+
## By Task
|
|
10
|
+
|
|
11
|
+
### Starting a New Project
|
|
12
|
+
- `skill("jaypie")` - Jaypie overview
|
|
13
|
+
- `skill("style")` - Code conventions
|
|
14
|
+
- `skill("cdk")` - Infrastructure setup
|
|
15
|
+
|
|
16
|
+
### Writing Code
|
|
17
|
+
- `skill("style")` - Code style
|
|
18
|
+
- `skill("errors")` - Error handling
|
|
19
|
+
- `skill("services")` - Service patterns
|
|
20
|
+
- `skill("models")` - Data models
|
|
21
|
+
|
|
22
|
+
### Testing
|
|
23
|
+
- `skill("tests")` - Vitest patterns
|
|
24
|
+
- `skill("mocks")` - @jaypie/testkit mocks
|
|
25
|
+
|
|
26
|
+
### Deploying
|
|
27
|
+
- `skill("cdk")` - CDK constructs
|
|
28
|
+
- `skill("cicd")` - GitHub Actions
|
|
29
|
+
- `skill("variables")` - Environment config
|
|
30
|
+
|
|
31
|
+
### Debugging
|
|
32
|
+
- `skill("debugging")` - Debug techniques
|
|
33
|
+
- `skill("logs")` - Log searching
|
|
34
|
+
- `skill("datadog")` - Observability tools
|
|
35
|
+
|
|
36
|
+
### AWS Integration
|
|
37
|
+
- `skill("aws")` - AWS tools overview
|
|
38
|
+
- `skill("dynamodb")` - DynamoDB patterns
|
|
39
|
+
- `skill("secrets")` - Secret management
|
|
40
|
+
|
|
41
|
+
## By Package
|
|
42
|
+
|
|
43
|
+
### jaypie (main package)
|
|
44
|
+
- `skill("jaypie")` - Overview
|
|
45
|
+
- `skill("errors")` - Error types
|
|
46
|
+
- `skill("logs")` - Logging
|
|
47
|
+
- `skill("secrets")` - Secret access
|
|
48
|
+
|
|
49
|
+
### @jaypie/constructs
|
|
50
|
+
- `skill("cdk")` - CDK constructs
|
|
51
|
+
|
|
52
|
+
### @jaypie/testkit
|
|
53
|
+
- `skill("mocks")` - Mock patterns
|
|
54
|
+
- `skill("tests")` - Test patterns
|
|
55
|
+
|
|
56
|
+
### @jaypie/fabric
|
|
57
|
+
- `skill("fabric")` - Service patterns
|
|
58
|
+
- `skill("services")` - Service layer
|
|
59
|
+
|
|
60
|
+
### Legacy Packages
|
|
61
|
+
- `skill("legacy")` - Deprecated patterns
|
|
62
|
+
|
|
63
|
+
## By Concept
|
|
64
|
+
|
|
65
|
+
### Error Handling
|
|
66
|
+
- `skill("errors")` - Error types and usage
|
|
67
|
+
|
|
68
|
+
### Environment Configuration
|
|
69
|
+
- `skill("variables")` - Environment variables
|
|
70
|
+
- `skill("secrets")` - Secret management
|
|
71
|
+
|
|
72
|
+
### Infrastructure
|
|
73
|
+
- `skill("cdk")` - CDK constructs
|
|
74
|
+
- `skill("aws")` - AWS integration
|
|
75
|
+
- `skill("dns")` - Domain configuration
|
|
76
|
+
|
|
77
|
+
### Observability
|
|
78
|
+
- `skill("logs")` - Logging patterns
|
|
79
|
+
- `skill("datadog")` - Datadog integration
|
|
80
|
+
- `skill("debugging")` - Debug techniques
|
|
81
|
+
|
|
82
|
+
### Data
|
|
83
|
+
- `skill("models")` - Data models and types
|
|
84
|
+
- `skill("dynamodb")` - DynamoDB patterns
|
|
85
|
+
|
|
86
|
+
## Quick Answers
|
|
87
|
+
|
|
88
|
+
### "How do I throw an error?"
|
|
89
|
+
```typescript
|
|
90
|
+
import { NotFoundError } from "jaypie";
|
|
91
|
+
throw new NotFoundError("Item not found");
|
|
92
|
+
```
|
|
93
|
+
See: `skill("errors")`
|
|
94
|
+
|
|
95
|
+
### "How do I mock Jaypie in tests?"
|
|
96
|
+
```typescript
|
|
97
|
+
vi.mock("jaypie", async () => {
|
|
98
|
+
const { mockJaypie } = await import("@jaypie/testkit");
|
|
99
|
+
return mockJaypie(vi);
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
See: `skill("mocks")`
|
|
103
|
+
|
|
104
|
+
### "How do I get a secret?"
|
|
105
|
+
```typescript
|
|
106
|
+
import { getSecret } from "jaypie";
|
|
107
|
+
const apiKey = await getSecret("my-api-key");
|
|
108
|
+
```
|
|
109
|
+
See: `skill("secrets")`
|
|
110
|
+
|
|
111
|
+
### "How do I log with context?"
|
|
112
|
+
```typescript
|
|
113
|
+
import { log } from "jaypie";
|
|
114
|
+
log.info("Operation completed", { userId, duration });
|
|
115
|
+
```
|
|
116
|
+
See: `skill("logs")`
|