@j0hanz/prompt-tuner-mcp-server 1.0.3 → 1.0.5
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/AGENTS.md +21 -24
- package/README.md +5 -43
- package/dist/config/constants.d.ts +0 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +0 -1
- package/dist/config/constants.js.map +1 -1
- package/dist/config/instructions.d.ts +1 -1
- package/dist/config/instructions.d.ts.map +1 -1
- package/dist/config/instructions.js +21 -43
- package/dist/config/instructions.js.map +1 -1
- package/dist/config/types.d.ts +0 -22
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/typos.d.ts.map +1 -1
- package/dist/config/typos.js +1 -4
- package/dist/config/typos.js.map +1 -1
- package/dist/index.js +78 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/cache.d.ts +0 -1
- package/dist/lib/cache.d.ts.map +1 -1
- package/dist/lib/cache.js +2 -7
- package/dist/lib/cache.js.map +1 -1
- package/dist/lib/errors.d.ts +2 -2
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +85 -32
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/llm-providers.d.ts.map +1 -1
- package/dist/lib/llm-providers.js +6 -5
- package/dist/lib/llm-providers.js.map +1 -1
- package/dist/lib/llm-runtime.d.ts +1 -1
- package/dist/lib/llm-runtime.d.ts.map +1 -1
- package/dist/lib/llm-runtime.js +8 -6
- package/dist/lib/llm-runtime.js.map +1 -1
- package/dist/lib/llm.d.ts +1 -1
- package/dist/lib/llm.d.ts.map +1 -1
- package/dist/lib/llm.js +7 -3
- package/dist/lib/llm.js.map +1 -1
- package/dist/lib/prompt-analysis/scoring.d.ts.map +1 -1
- package/dist/lib/prompt-analysis/scoring.js +7 -3
- package/dist/lib/prompt-analysis/scoring.js.map +1 -1
- package/dist/lib/prompt-analysis.d.ts +0 -2
- package/dist/lib/prompt-analysis.d.ts.map +1 -1
- package/dist/lib/prompt-analysis.js +0 -2
- package/dist/lib/prompt-analysis.js.map +1 -1
- package/dist/lib/prompt-policy.d.ts +5 -0
- package/dist/lib/prompt-policy.d.ts.map +1 -0
- package/dist/lib/prompt-policy.js +16 -0
- package/dist/lib/prompt-policy.js.map +1 -0
- package/dist/lib/retry.d.ts +1 -1
- package/dist/lib/retry.d.ts.map +1 -1
- package/dist/lib/retry.js +25 -8
- package/dist/lib/retry.js.map +1 -1
- package/dist/lib/technique-templates.d.ts.map +1 -1
- package/dist/lib/technique-templates.js +187 -83
- package/dist/lib/technique-templates.js.map +1 -1
- package/dist/lib/tool-context.d.ts +9 -0
- package/dist/lib/tool-context.d.ts.map +1 -0
- package/dist/lib/tool-context.js +7 -0
- package/dist/lib/tool-context.js.map +1 -0
- package/dist/lib/validation.d.ts +1 -1
- package/dist/lib/validation.d.ts.map +1 -1
- package/dist/lib/validation.js +6 -7
- package/dist/lib/validation.js.map +1 -1
- package/dist/prompts/quick-workflows.d.ts.map +1 -1
- package/dist/prompts/quick-workflows.js +130 -170
- package/dist/prompts/quick-workflows.js.map +1 -1
- package/dist/resources/index.d.ts +1 -2
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +2 -3
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/prompt-templates/analysis.d.ts +4 -4
- package/dist/resources/prompt-templates/analysis.d.ts.map +1 -1
- package/dist/resources/prompt-templates/analysis.js +68 -36
- package/dist/resources/prompt-templates/analysis.js.map +1 -1
- package/dist/resources/prompt-templates/coding.d.ts +6 -5
- package/dist/resources/prompt-templates/coding.d.ts.map +1 -1
- package/dist/resources/prompt-templates/coding.js +168 -31
- package/dist/resources/prompt-templates/coding.js.map +1 -1
- package/dist/resources/prompt-templates/data-extraction.d.ts +3 -3
- package/dist/resources/prompt-templates/data-extraction.d.ts.map +1 -1
- package/dist/resources/prompt-templates/data-extraction.js +67 -49
- package/dist/resources/prompt-templates/data-extraction.js.map +1 -1
- package/dist/resources/prompt-templates/system-prompts.d.ts +3 -3
- package/dist/resources/prompt-templates/system-prompts.d.ts.map +1 -1
- package/dist/resources/prompt-templates/system-prompts.js +52 -31
- package/dist/resources/prompt-templates/system-prompts.js.map +1 -1
- package/dist/resources/prompt-templates/writing.d.ts +5 -5
- package/dist/resources/prompt-templates/writing.d.ts.map +1 -1
- package/dist/resources/prompt-templates/writing.js +112 -45
- package/dist/resources/prompt-templates/writing.js.map +1 -1
- package/dist/resources/prompt-templates.d.ts.map +1 -1
- package/dist/resources/prompt-templates.js +3 -12
- package/dist/resources/prompt-templates.js.map +1 -1
- package/dist/schemas/index.d.ts +3 -3
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +3 -3
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/inputs.d.ts +0 -23
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +0 -17
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/schemas/llm-responses.d.ts +16 -121
- package/dist/schemas/llm-responses.d.ts.map +1 -1
- package/dist/schemas/llm-responses.js +5 -16
- package/dist/schemas/llm-responses.js.map +1 -1
- package/dist/schemas/outputs.d.ts +204 -124
- package/dist/schemas/outputs.d.ts.map +1 -1
- package/dist/schemas/outputs.js +122 -91
- package/dist/schemas/outputs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +0 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/analyze-prompt.d.ts.map +1 -1
- package/dist/tools/analyze-prompt.js +91 -51
- package/dist/tools/analyze-prompt.js.map +1 -1
- package/dist/tools/compare-prompts.d.ts.map +1 -1
- package/dist/tools/compare-prompts.js +88 -37
- package/dist/tools/compare-prompts.js.map +1 -1
- package/dist/tools/detect-format.d.ts.map +1 -1
- package/dist/tools/detect-format.js +81 -32
- package/dist/tools/detect-format.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/optimize-prompt.d.ts.map +1 -1
- package/dist/tools/optimize-prompt.js +83 -54
- package/dist/tools/optimize-prompt.js.map +1 -1
- package/dist/tools/refine-prompt.d.ts.map +1 -1
- package/dist/tools/refine-prompt.js +9 -7
- package/dist/tools/refine-prompt.js.map +1 -1
- package/dist/tools/validate-prompt.d.ts.map +1 -1
- package/dist/tools/validate-prompt.js +116 -31
- package/dist/tools/validate-prompt.js.map +1 -1
- package/package.json +1 -3
- package/src/config/constants.ts +0 -1
- package/src/config/instructions.ts +21 -43
- package/src/config/types.ts +0 -26
- package/src/index.ts +92 -10
- package/src/lib/cache.ts +2 -8
- package/src/lib/errors.ts +135 -49
- package/src/lib/llm-providers.ts +23 -15
- package/src/lib/llm-runtime.ts +28 -18
- package/src/lib/llm.ts +9 -3
- package/src/lib/prompt-analysis.ts +0 -5
- package/src/lib/prompt-policy.ts +18 -0
- package/src/lib/retry.ts +36 -8
- package/src/lib/technique-templates.ts +187 -83
- package/src/lib/tool-context.ts +21 -0
- package/src/lib/validation.ts +7 -8
- package/src/prompts/quick-workflows.ts +130 -180
- package/src/resources/index.ts +2 -6
- package/src/schemas/index.ts +0 -5
- package/src/schemas/inputs.ts +0 -19
- package/src/schemas/llm-responses.ts +6 -20
- package/src/schemas/outputs.ts +137 -107
- package/src/server.ts +0 -3
- package/src/tools/analyze-prompt.ts +113 -67
- package/src/tools/index.ts +0 -4
- package/src/tools/optimize-prompt.ts +108 -60
- package/src/tools/refine-prompt.ts +27 -12
- package/src/tools/validate-prompt.ts +138 -36
- package/src/types/regexp-escape.d.ts +3 -0
- package/tests/integration.test.ts +165 -0
- package/tests/quick-workflows.test.ts +1 -34
- package/tsconfig.json +1 -1
- package/src/config/typos.ts +0 -121
- package/src/lib/prompt-analysis/scoring.ts +0 -235
- package/src/lib/prompt-analysis/suggestions.ts +0 -115
- package/src/resources/prompt-templates/analysis.ts +0 -124
- package/src/resources/prompt-templates/coding.ts +0 -164
- package/src/resources/prompt-templates/data-extraction.ts +0 -104
- package/src/resources/prompt-templates/system-prompts.ts +0 -60
- package/src/resources/prompt-templates/writing.ts +0 -109
- package/src/resources/prompt-templates.ts +0 -203
- package/src/tools/compare-prompts.ts +0 -266
- package/src/tools/detect-format.ts +0 -129
package/AGENTS.md
CHANGED
|
@@ -2,41 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
## Project Structure & Module Organization
|
|
4
4
|
|
|
5
|
-
- `src/` contains
|
|
6
|
-
- `tests/` holds Vitest
|
|
7
|
-
- `docs/` contains documentation assets
|
|
8
|
-
- `dist/` is
|
|
5
|
+
- `src/` contains TypeScript source. Key entry points: `src/index.ts` and `src/server.ts`. Feature areas include `src/tools/`, `src/resources/`, `src/prompts/`, `src/schemas/`, `src/config/`, and `src/lib/`.
|
|
6
|
+
- `tests/` holds Vitest suites (for example, `tests/integration.test.ts`).
|
|
7
|
+
- `docs/` contains documentation and assets such as `docs/logo.png`.
|
|
8
|
+
- `dist/` is generated build output; do not edit directly.
|
|
9
9
|
|
|
10
10
|
## Build, Test, and Development Commands
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- `npm
|
|
15
|
-
- `npm run
|
|
16
|
-
- `npm run
|
|
17
|
-
- `npm
|
|
18
|
-
- `npm test` runs Vitest once; `npm run test:watch` watches tests.
|
|
19
|
-
- `npm run lint` runs ESLint; `npm run format` runs Prettier; `npm run type-check` runs `tsc --noEmit`.
|
|
20
|
-
- `npm run inspector` starts the MCP Inspector (use `inspector:http` for HTTP).
|
|
12
|
+
- `npm run build`: compile TypeScript to `dist/` and mark `dist/index.js` executable.
|
|
13
|
+
- `npm run dev` / `npm run dev:http`: run the server from `src/` in watch mode (stdio or HTTP).
|
|
14
|
+
- `npm run start` / `npm run start:http`: run the compiled server from `dist/`.
|
|
15
|
+
- `npm run test`: run Vitest once; `npm run test:watch` for watch mode.
|
|
16
|
+
- `npm run lint`: ESLint checks; `npm run format`: Prettier formatting; `npm run type-check`: TypeScript without emit.
|
|
17
|
+
- `npm run inspector`: launch the MCP inspector against `dist/`.
|
|
21
18
|
|
|
22
19
|
## Coding Style & Naming Conventions
|
|
23
20
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Naming: `camelCase` for variables/functions, `PascalCase` for types/classes, `UPPER_CASE` for constants. Leading `_` is allowed for intentionally unused params.
|
|
21
|
+
- Formatting is enforced by Prettier: 2-space indentation, single quotes, semicolons, 80-char print width.
|
|
22
|
+
- ESLint with typescript-eslint is strict: no unused imports, no `any`, prefer type-only imports, explicit return types.
|
|
23
|
+
- Naming: camelCase for variables/functions, PascalCase for types/classes, UPPER_CASE for constants. Leading underscores are allowed for intentionally unused args.
|
|
28
24
|
|
|
29
25
|
## Testing Guidelines
|
|
30
26
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
27
|
+
- Tests use Vitest and live in `tests/` using `*.test.ts` filenames.
|
|
28
|
+
- Integration tests require an API key (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, or `GOOGLE_API_KEY`) and a built `dist/` (`npm run build`). If no key is set, integration tests are skipped.
|
|
29
|
+
- Keep unit tests fast; add integration coverage for new tools/resources when behavior depends on the running server.
|
|
33
30
|
|
|
34
31
|
## Commit & Pull Request Guidelines
|
|
35
32
|
|
|
36
|
-
- Commit subjects in this repo are short,
|
|
37
|
-
-
|
|
33
|
+
- Commit subjects in this repo are short, descriptive, imperative sentences (for example, "Refactor cache configuration..."). Version bumps may be bare tags like `1.0.4`.
|
|
34
|
+
- Before opening a PR, run `npm run lint`, `npm run type-check`, and `npm run test`.
|
|
35
|
+
- PRs should describe the change, include test commands run, and update `README.md` or `CONFIGURATION.md` when behavior or env vars change.
|
|
38
36
|
|
|
39
|
-
## Security & Configuration
|
|
37
|
+
## Security & Configuration
|
|
40
38
|
|
|
41
|
-
-
|
|
42
|
-
- Be cautious with `INCLUDE_ERROR_CONTEXT=true` since it can include prompt excerpts in errors.
|
|
39
|
+
- Runtime configuration is via environment variables documented in `CONFIGURATION.md`. Never commit API keys; prefer MCP client config or a local `.env` file.
|
package/README.md
CHANGED
|
@@ -15,17 +15,13 @@ An MCP server that helps you write better prompts for AI assistants. It analyzes
|
|
|
15
15
|
| 🔧 **Refine Prompts** | Fix grammar, improve clarity, and apply optimization techniques like Chain-of-Thought. |
|
|
16
16
|
| 📊 **Analyze Quality** | Score prompts (0-100) on clarity, specificity, completeness, structure, and effectiveness. |
|
|
17
17
|
| 🚀 **Optimize** | Apply multiple techniques sequentially for comprehensive improvement. |
|
|
18
|
-
| 🔍 **Detect Format** | Identify if a prompt targets Claude XML, GPT Markdown, or JSON. |
|
|
19
|
-
| ⚖️ **Compare** | A/B test two prompt versions with side-by-side scoring and diffs. |
|
|
20
18
|
| ✅ **Validate** | Pre-flight checks for anti-patterns, token limits, and security risks. |
|
|
21
|
-
| 📚 **Templates** | Access a library of best-practice prompt templates for coding, writing, and analysis. |
|
|
22
19
|
|
|
23
20
|
## 🎯 When to Use
|
|
24
21
|
|
|
25
22
|
- **Before sending a prompt**: Use `refine_prompt` to fix typos and vague language.
|
|
26
23
|
- **When results are poor**: Use `analyze_prompt` to understand why the AI is struggling.
|
|
27
24
|
- **For complex tasks**: Use `optimize_prompt` with "comprehensive" techniques.
|
|
28
|
-
- **For A/B testing**: Use `compare_prompts` to choose the best version.
|
|
29
25
|
- **For security**: Use `validate_prompt` to check for injection risks.
|
|
30
26
|
|
|
31
27
|
## 🚀 Quick Start
|
|
@@ -132,29 +128,6 @@ Apply multiple optimization techniques using AI (e.g., `["basic", "roleBased", "
|
|
|
132
128
|
|
|
133
129
|
**Returns:** Optimized prompt, before/after scores, and list of improvements.
|
|
134
130
|
|
|
135
|
-
### `detect_format`
|
|
136
|
-
|
|
137
|
-
Identify if prompt targets Claude XML, GPT Markdown, or JSON schema using AI analysis. Returns confidence score and recommendations.
|
|
138
|
-
|
|
139
|
-
| Parameter | Type | Required | Default | Description |
|
|
140
|
-
| :-------- | :----- | :------- | :------ | :---------------------- |
|
|
141
|
-
| `prompt` | string | ✅ | - | Prompt text to analyze. |
|
|
142
|
-
|
|
143
|
-
**Returns:** Detected format (`claude`, `gpt`, `json`, `auto`), confidence score, and recommendation.
|
|
144
|
-
|
|
145
|
-
### `compare_prompts`
|
|
146
|
-
|
|
147
|
-
Compare two prompt versions using AI analysis. Returns scores, winner, improvements/regressions, and recommendations.
|
|
148
|
-
|
|
149
|
-
| Parameter | Type | Required | Default | Description |
|
|
150
|
-
| :-------- | :----- | :------- | :----------- | :------------------------ |
|
|
151
|
-
| `promptA` | string | ✅ | - | First prompt to compare. |
|
|
152
|
-
| `promptB` | string | ✅ | - | Second prompt to compare. |
|
|
153
|
-
| `labelA` | string | ❌ | `"Prompt A"` | Label for first prompt. |
|
|
154
|
-
| `labelB` | string | ❌ | `"Prompt B"` | Label for second prompt. |
|
|
155
|
-
|
|
156
|
-
**Returns:** Comparison report with scores, winner, and detailed analysis.
|
|
157
|
-
|
|
158
131
|
### `validate_prompt`
|
|
159
132
|
|
|
160
133
|
Pre-flight validation using AI: checks issues, estimates tokens, detects security risks. Returns isValid boolean and categorized issues.
|
|
@@ -167,24 +140,13 @@ Pre-flight validation using AI: checks issues, estimates tokens, detects securit
|
|
|
167
140
|
|
|
168
141
|
**Returns:** Validation status, token estimate, and list of issues (errors, warnings, info).
|
|
169
142
|
|
|
170
|
-
## 📚 Resources
|
|
171
|
-
|
|
172
|
-
| URI Pattern | Description |
|
|
173
|
-
| :------------------------------ | :----------------------------------------------------------------------- |
|
|
174
|
-
| `templates://catalog` | List of all available prompt templates by category. |
|
|
175
|
-
| `templates://{category}/{name}` | Get a specific prompt template (e.g., `templates://coding/code-review`). |
|
|
176
|
-
|
|
177
143
|
## 💬 Prompts
|
|
178
144
|
|
|
179
|
-
| Name
|
|
180
|
-
|
|
|
181
|
-
| `quick-optimize`
|
|
182
|
-
| `deep-optimize`
|
|
183
|
-
| `analyze`
|
|
184
|
-
| `review` | Check prompt against prompting best practices. |
|
|
185
|
-
| `iterative-refine` | Identify top 3 weaknesses and fix them iteratively. |
|
|
186
|
-
| `recommend-techniques` | Recommend best optimization techniques based on prompt and task type. |
|
|
187
|
-
| `scan-antipatterns` | Detect common prompt anti-patterns and provide corrections. |
|
|
145
|
+
| Name | Description |
|
|
146
|
+
| :--------------- | :------------------------------------------------------ |
|
|
147
|
+
| `quick-optimize` | Fast prompt improvement with grammar and clarity fixes. |
|
|
148
|
+
| `deep-optimize` | Comprehensive optimization with all techniques applied. |
|
|
149
|
+
| `analyze` | Score prompt quality and get improvement suggestions. |
|
|
188
150
|
|
|
189
151
|
## 🔌 Client Configuration
|
|
190
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAEX,eAAO,MAAM,WAAW,oBAAoB,CAAC;AAC7C,eAAO,MAAM,cAAc,QAAsB,CAAC;AASlD,eAAO,MAAM,iBAAiB,QAAwB,CAAC;AACvD,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,eAAO,MAAM,cAAc,QAAqB,CAAC;AACjD,eAAO,MAAM,cAAc,QAAqB,CAAC;AAEjD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAC/C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,eAAO,MAAM,cAAc;;;;CAIjB,CAAC"}
|
package/dist/config/constants.js
CHANGED
|
@@ -2,7 +2,6 @@ import packageJson from '../../package.json' with { type: 'json' };
|
|
|
2
2
|
import { config } from './env.js';
|
|
3
3
|
export { PATTERNS } from './patterns.js';
|
|
4
4
|
export { SERVER_INSTRUCTIONS } from './instructions.js';
|
|
5
|
-
export { TYPO_PATTERNS } from './typos.js';
|
|
6
5
|
export const SCORING_WEIGHTS = {
|
|
7
6
|
clarity: 0.25,
|
|
8
7
|
specificity: 0.25,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,IAAI;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC;AAElD,yCAAyC;AACzC,MAAM,EACJ,iBAAiB,EAAE,qBAAqB,EACxC,cAAc,EAAE,kBAAkB,EAClC,cAAc,EAAE,kBAAkB,GACnC,GAAG,MAAM,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAEzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,4BAA4B;IACvC,MAAM,EAAE,sBAAsB;CACtB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SERVER_INSTRUCTIONS = "# PromptTuner MCP\n\nA
|
|
1
|
+
export declare const SERVER_INSTRUCTIONS = "# PromptTuner MCP\n\nA lean prompt optimization toolkit for refining, analyzing, and validating prompts.\n\n## Quick Start\n\n| Goal | Tool | When to Use |\n|------|------|-------------|\n| Quick fix | `refine_prompt` | Fix typos and clarity issues |\n| Deep optimization | `optimize_prompt` | Apply multiple techniques |\n| Quality check | `analyze_prompt` | Get scores and suggestions |\n| Safety check | `validate_prompt` | Find issues and estimate tokens |\n\n## Tools\n\n### refine_prompt\nImproves a prompt using a single optimization technique.\n\n**Techniques:**\n- `basic` (default) - Fix grammar, spelling, and clarity\n- `chainOfThought` - Add step-by-step reasoning guidance\n- `fewShot` - Add input/output examples\n- `roleBased` - Add expert persona/role context\n- `structured` - Add XML (Claude) or Markdown (GPT) structure\n- `comprehensive` - Apply all techniques intelligently\n\n**Example:**\n```json\n{ \"prompt\": \"help me code\", \"technique\": \"roleBased\", \"targetFormat\": \"claude\" }\n```\n\n### analyze_prompt\nScores your prompt (0-100) across clarity, specificity, completeness, structure, and effectiveness.\n\n### optimize_prompt\nChains multiple techniques for maximum improvement and returns before/after scores plus improvements.\n\n**Example:**\n```json\n{ \"prompt\": \"write code\", \"techniques\": [\"basic\", \"roleBased\", \"structured\"] }\n```\n\n### validate_prompt\nChecks for prompt issues, estimates token usage, and optionally detects injection risks.\n\n## Target Formats\n\n| Format | Best For | Structure |\n|--------|----------|-----------|\n| `claude` | Anthropic Claude | XML tags: `<context>`, `<task>`, `<requirements>` |\n| `gpt` | OpenAI GPT | Markdown: `## Context`, `## Task`, `**bold**` |\n| `json` | Structured output | JSON schema specification |\n| `auto` | Auto-detect | Uses prompt heuristics to pick format |\n\n## Technique Selection Guide\n\n| Task Type | Recommended Techniques |\n|-----------|----------------------|\n| Simple query | `basic` only |\n| Code task | `roleBased` + `structured` |\n| Complex analysis | `roleBased` + `chainOfThought` |\n| Data extraction | `structured` + `fewShot` |\n| Creative writing | `roleBased` + `fewShot` |\n| Maximum quality | `comprehensive` |\n\n## Workflow Prompts\n- `quick-optimize` - Single-step refinement\n- `deep-optimize` - Comprehensive optimization\n- `analyze` - Quality analysis\n\n## Modern Best Practices (2024-2025)\n\n1. **Be Specific** - Replace vague words with concrete terms\n2. **Add Role Context** - Use specific expert personas\n3. **Use Structure** - XML for Claude, Markdown for GPT (never mix)\n4. **Show Examples** - 2-3 diverse examples for pattern tasks\n5. **Add Constraints** - Clear ALWAYS/NEVER rules\n6. **Specify Output** - Define the expected format explicitly\n7. **Enable Reasoning** - Add task-specific reasoning triggers when needed\n8. **Place Key Instructions Twice** - Start and end for long prompts\n\n## Prompt Architecture (Recommended Order)\n```\n1. Role/Identity (if applicable)\n2. Context/Background\n3. Task/Objective\n4. Instructions/Steps\n5. Requirements/Constraints (ALWAYS/NEVER)\n6. Output Format\n7. Examples (if helpful)\n8. Final Reminder (reiterate critical instruction)\n```";
|
|
2
2
|
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/config/instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/config/instructions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,0rGA2FzB,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export const SERVER_INSTRUCTIONS = `# PromptTuner MCP
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A lean prompt optimization toolkit for refining, analyzing, and validating prompts.
|
|
4
4
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
| Goal | Tool | When to Use |
|
|
8
8
|
|------|------|-------------|
|
|
9
|
-
| Quick fix | \`refine_prompt\` | Fix typos
|
|
9
|
+
| Quick fix | \`refine_prompt\` | Fix typos and clarity issues |
|
|
10
10
|
| Deep optimization | \`optimize_prompt\` | Apply multiple techniques |
|
|
11
11
|
| Quality check | \`analyze_prompt\` | Get scores and suggestions |
|
|
12
|
-
|
|
|
12
|
+
| Safety check | \`validate_prompt\` | Find issues and estimate tokens |
|
|
13
13
|
|
|
14
14
|
## Tools
|
|
15
15
|
|
|
@@ -30,25 +30,18 @@ Improves a prompt using a single optimization technique.
|
|
|
30
30
|
\`\`\`
|
|
31
31
|
|
|
32
32
|
### analyze_prompt
|
|
33
|
-
Scores your prompt (0-100) across
|
|
34
|
-
- **Clarity** - Is the intent clear and unambiguous?
|
|
35
|
-
- **Specificity** - Are requirements well-defined?
|
|
36
|
-
- **Completeness** - Is context and output format specified?
|
|
37
|
-
- **Structure** - Is it well-organized?
|
|
38
|
-
- **Effectiveness** - Will it produce good results?
|
|
39
|
-
|
|
40
|
-
Returns actionable suggestions for improvement.
|
|
33
|
+
Scores your prompt (0-100) across clarity, specificity, completeness, structure, and effectiveness.
|
|
41
34
|
|
|
42
35
|
### optimize_prompt
|
|
43
|
-
Chains multiple techniques for maximum improvement
|
|
36
|
+
Chains multiple techniques for maximum improvement and returns before/after scores plus improvements.
|
|
44
37
|
|
|
45
38
|
**Example:**
|
|
46
39
|
\`\`\`json
|
|
47
40
|
{ "prompt": "write code", "techniques": ["basic", "roleBased", "structured"] }
|
|
48
41
|
\`\`\`
|
|
49
42
|
|
|
50
|
-
###
|
|
51
|
-
|
|
43
|
+
### validate_prompt
|
|
44
|
+
Checks for prompt issues, estimates token usage, and optionally detects injection risks.
|
|
52
45
|
|
|
53
46
|
## Target Formats
|
|
54
47
|
|
|
@@ -57,7 +50,7 @@ Identifies the target format (Claude XML, GPT Markdown, or JSON) with confidence
|
|
|
57
50
|
| \`claude\` | Anthropic Claude | XML tags: \`<context>\`, \`<task>\`, \`<requirements>\` |
|
|
58
51
|
| \`gpt\` | OpenAI GPT | Markdown: \`## Context\`, \`## Task\`, \`**bold**\` |
|
|
59
52
|
| \`json\` | Structured output | JSON schema specification |
|
|
60
|
-
| \`auto\` | Auto-detect |
|
|
53
|
+
| \`auto\` | Auto-detect | Uses prompt heuristics to pick format |
|
|
61
54
|
|
|
62
55
|
## Technique Selection Guide
|
|
63
56
|
|
|
@@ -70,38 +63,23 @@ Identifies the target format (Claude XML, GPT Markdown, or JSON) with confidence
|
|
|
70
63
|
| Creative writing | \`roleBased\` + \`fewShot\` |
|
|
71
64
|
| Maximum quality | \`comprehensive\` |
|
|
72
65
|
|
|
73
|
-
## Resources
|
|
74
|
-
- \`templates://catalog\` - Browse all template categories
|
|
75
|
-
- \`templates://{category}/{name}\` - Get specific templates
|
|
76
|
-
|
|
77
|
-
**Categories:** coding, writing, analysis, system-prompts, data-extraction
|
|
78
|
-
|
|
79
66
|
## Workflow Prompts
|
|
80
|
-
- \`quick-optimize\` - Single-step
|
|
81
|
-
- \`
|
|
82
|
-
- \`
|
|
83
|
-
- \`best-practices-review\` - Educational feedback
|
|
84
|
-
- \`iterative-improve\` - Multi-technique enhancement
|
|
67
|
+
- \`quick-optimize\` - Single-step refinement
|
|
68
|
+
- \`deep-optimize\` - Comprehensive optimization
|
|
69
|
+
- \`analyze\` - Quality analysis
|
|
85
70
|
|
|
86
71
|
## Modern Best Practices (2024-2025)
|
|
87
72
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
8. **Place Instructions Twice** - For long prompts, put key instructions at BOTH beginning AND end
|
|
99
|
-
9. **Use Semantic Tags** - Claude: \`<context>\`, \`<task>\`, \`<requirements>\`, \`<output_format>\`
|
|
100
|
-
10. **Be Literal** - Modern models follow instructions more literally; be precise
|
|
101
|
-
11. **Add Quality Checks** - Include verification steps for important outputs
|
|
102
|
-
12. **Avoid Generic Roles** - "Helpful assistant" provides no benefit; use specific expert roles
|
|
103
|
-
|
|
104
|
-
### Prompt Architecture (Recommended Order)
|
|
73
|
+
1. **Be Specific** - Replace vague words with concrete terms
|
|
74
|
+
2. **Add Role Context** - Use specific expert personas
|
|
75
|
+
3. **Use Structure** - XML for Claude, Markdown for GPT (never mix)
|
|
76
|
+
4. **Show Examples** - 2-3 diverse examples for pattern tasks
|
|
77
|
+
5. **Add Constraints** - Clear ALWAYS/NEVER rules
|
|
78
|
+
6. **Specify Output** - Define the expected format explicitly
|
|
79
|
+
7. **Enable Reasoning** - Add task-specific reasoning triggers when needed
|
|
80
|
+
8. **Place Key Instructions Twice** - Start and end for long prompts
|
|
81
|
+
|
|
82
|
+
## Prompt Architecture (Recommended Order)
|
|
105
83
|
\`\`\`
|
|
106
84
|
1. Role/Identity (if applicable)
|
|
107
85
|
2. Context/Background
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/config/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/config/instructions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2F5B,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
export type ToolRegistrar = (server: McpServer) => void;
|
|
3
|
-
export interface RefinedPrompt {
|
|
4
|
-
original: string;
|
|
5
|
-
refined: string;
|
|
6
|
-
corrections: string[];
|
|
7
|
-
}
|
|
8
3
|
export interface ErrorResponse {
|
|
9
4
|
[key: string]: unknown;
|
|
10
5
|
content: {
|
|
@@ -63,10 +58,6 @@ export interface SuggestionContext {
|
|
|
63
58
|
score: PromptScore;
|
|
64
59
|
}
|
|
65
60
|
export type SuggestionGenerator = (ctx: SuggestionContext) => string | null;
|
|
66
|
-
export interface ScoreRule {
|
|
67
|
-
condition: boolean;
|
|
68
|
-
bonus: number;
|
|
69
|
-
}
|
|
70
61
|
export interface PatternCache {
|
|
71
62
|
hasClaudePatterns: boolean;
|
|
72
63
|
hasXmlStructure: boolean;
|
|
@@ -174,14 +165,6 @@ export interface AnalysisResponse {
|
|
|
174
165
|
characteristics: AnalysisCharacteristics;
|
|
175
166
|
suggestions: string[];
|
|
176
167
|
}
|
|
177
|
-
export interface ComparisonResponse {
|
|
178
|
-
winner: 'A' | 'B' | 'tie';
|
|
179
|
-
scoreA: OptimizeScore;
|
|
180
|
-
scoreB: OptimizeScore;
|
|
181
|
-
improvements: string[];
|
|
182
|
-
regressions: string[];
|
|
183
|
-
recommendation: string;
|
|
184
|
-
}
|
|
185
168
|
export interface ValidationIssue {
|
|
186
169
|
type: 'error' | 'warning' | 'info';
|
|
187
170
|
message: string;
|
|
@@ -192,9 +175,4 @@ export interface ValidationResponse {
|
|
|
192
175
|
tokenEstimate: number;
|
|
193
176
|
issues: ValidationIssue[];
|
|
194
177
|
}
|
|
195
|
-
export interface FormatDetectionResponse {
|
|
196
|
-
detectedFormat: 'claude' | 'gpt' | 'json' | 'auto';
|
|
197
|
-
confidence: number;
|
|
198
|
-
recommendation: string;
|
|
199
|
-
}
|
|
200
178
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO;IACP,gBAAgB;IAChB,SAAS;IACT,WAAW;IACX,YAAY;IACZ,eAAe;CAC0C,CAAC;AAI5D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;CACmD,CAAC;AA8G5D,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,eAAe,EAAE,iBAAiB;IAClC,YAAY,EAAE,cAAc;IAC5B,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;CACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typos.d.ts","sourceRoot":"","sources":["../../src/config/typos.ts"],"names":[],"mappings":"AAgFA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAwBA;
|
|
1
|
+
{"version":3,"file":"typos.d.ts","sourceRoot":"","sources":["../../src/config/typos.ts"],"names":[],"mappings":"AAgFA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAwBA;AAGD,eAAO,MAAM,aAAa;;;;GAIvB,CAAC"}
|
package/dist/config/typos.js
CHANGED
|
@@ -94,13 +94,10 @@ export function fixTyposBatch(text) {
|
|
|
94
94
|
return { fixed, corrections };
|
|
95
95
|
}
|
|
96
96
|
// Export precompiled typo patterns for tests and faster per-pattern matching.
|
|
97
|
-
function escapeForRegex(s) {
|
|
98
|
-
return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\$&');
|
|
99
|
-
}
|
|
100
97
|
export const TYPO_PATTERNS = TYPO_WORDS.map((typo) => ({
|
|
101
98
|
typo,
|
|
102
99
|
correction: TYPO_MAP.get(typo) ?? '',
|
|
103
|
-
regex: new RegExp(`\\b(${
|
|
100
|
+
regex: new RegExp(`\\b(${RegExp.escape(typo)})\\b`, 'gi'),
|
|
104
101
|
}));
|
|
105
102
|
// Legacy per-pattern export removed (dead code). Use `fixTyposBatch()` instead for typo corrections.
|
|
106
103
|
//# sourceMappingURL=typos.js.map
|
package/dist/config/typos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typos.js","sourceRoot":"","sources":["../../src/config/typos.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,sEAAsE;AACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiB;IACvC,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,IAAI,EAAE,KAAK,CAAC;IACb,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,YAAY,EAAE,aAAa,CAAC;IAC7B,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,YAAY,EAAE,WAAW,CAAC;IAC3B,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,UAAU,EAAE,SAAS,CAAC;IACvB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,YAAY,EAAE,YAAY,CAAC;CAC7B,CAAC,CAAC;AAEH,gDAAgD;AAChD,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACxC,MAAM,mBAAmB,GAAG,IAAI,MAAM,CACpC,SAAS,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EACrC,IAAI,CACL,CAAC;AAEF,sDAAsD;AACtD,MAAM,UAAU,aAAa,CAAC,IAAY;IAIxC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,UAAU,GAAG,CAAC,CAAC;YACvD,sEAAsE;YACtE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACtC,IACE,SAAS;gBACT,eAAe;gBACf,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE,EACrC,CAAC;gBACD,OAAO,eAAe,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"typos.js","sourceRoot":"","sources":["../../src/config/typos.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,88 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import closeWithGrace from 'close-with-grace';
|
|
3
2
|
import { logger } from './lib/errors.js';
|
|
4
3
|
import { createServer, startServer, validateApiKeys } from './server.js';
|
|
4
|
+
const SHUTDOWN_DELAY_MS = 500;
|
|
5
|
+
const SIGNALS = [
|
|
6
|
+
'SIGHUP',
|
|
7
|
+
'SIGINT',
|
|
8
|
+
'SIGQUIT',
|
|
9
|
+
'SIGILL',
|
|
10
|
+
'SIGTRAP',
|
|
11
|
+
'SIGABRT',
|
|
12
|
+
'SIGBUS',
|
|
13
|
+
'SIGFPE',
|
|
14
|
+
'SIGSEGV',
|
|
15
|
+
'SIGUSR2',
|
|
16
|
+
'SIGTERM',
|
|
17
|
+
];
|
|
18
|
+
const ERROR_EVENTS = ['uncaughtException', 'unhandledRejection'];
|
|
19
|
+
const EXIT_EVENTS = ['beforeExit'];
|
|
20
|
+
let shuttingDown = false;
|
|
21
|
+
let server = null;
|
|
22
|
+
async function beginShutdown(reason) {
|
|
23
|
+
if (shuttingDown) {
|
|
24
|
+
if (reason.signal) {
|
|
25
|
+
logger.error({ signal: reason.signal }, `Second ${reason.signal}, exiting`);
|
|
26
|
+
}
|
|
27
|
+
else if (reason.err) {
|
|
28
|
+
logger.error({ err: reason.err }, 'Second error, exiting');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
logger.error('Second shutdown event, exiting');
|
|
32
|
+
}
|
|
33
|
+
process.exit(1);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
shuttingDown = true;
|
|
37
|
+
if (reason.err) {
|
|
38
|
+
logger.error({ err: reason.err }, 'Server closing due to error');
|
|
39
|
+
}
|
|
40
|
+
if (reason.signal) {
|
|
41
|
+
logger.info({ signal: reason.signal }, 'Server shutting down gracefully');
|
|
42
|
+
}
|
|
43
|
+
if (reason.event) {
|
|
44
|
+
logger.info({ event: reason.event }, 'Server shutting down gracefully');
|
|
45
|
+
}
|
|
46
|
+
let exitCode = reason.err ? 1 : 0;
|
|
47
|
+
const timeout = setTimeout(() => {
|
|
48
|
+
logger.error({ delayMs: SHUTDOWN_DELAY_MS }, 'Forced shutdown due to timeout');
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}, SHUTDOWN_DELAY_MS);
|
|
51
|
+
try {
|
|
52
|
+
if (server?.isConnected()) {
|
|
53
|
+
await server.close();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
exitCode = 1;
|
|
58
|
+
logger.error({ err: error }, 'Error during shutdown');
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
clearTimeout(timeout);
|
|
62
|
+
process.exit(exitCode);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const signal of SIGNALS) {
|
|
66
|
+
process.once(signal, (received) => {
|
|
67
|
+
void beginShutdown({ signal: received });
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
for (const event of ERROR_EVENTS) {
|
|
71
|
+
process.once(event, (err) => {
|
|
72
|
+
void beginShutdown({ err });
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
for (const event of EXIT_EVENTS) {
|
|
76
|
+
process.once(event, () => {
|
|
77
|
+
void beginShutdown({ event });
|
|
78
|
+
});
|
|
79
|
+
}
|
|
5
80
|
async function main() {
|
|
6
81
|
await validateApiKeys();
|
|
7
|
-
|
|
82
|
+
server = createServer();
|
|
8
83
|
await startServer(server);
|
|
9
84
|
}
|
|
10
|
-
closeWithGrace({ delay: 500 }, ({ signal, err }) => {
|
|
11
|
-
if (err)
|
|
12
|
-
logger.error({ err }, 'Server closing due to error');
|
|
13
|
-
logger.info({ signal }, 'Server shutting down gracefully');
|
|
14
|
-
});
|
|
15
85
|
main().catch((error) => {
|
|
16
|
-
|
|
17
|
-
process.exit(1);
|
|
86
|
+
void beginShutdown({ err: error });
|
|
18
87
|
});
|
|
19
88
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/cache.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export declare function getCachedRefinement(prompt: string, technique: string, format: string): string | null;
|
|
2
2
|
export declare function setCachedRefinement(prompt: string, technique: string, format: string, refined: string): void;
|
|
3
|
-
export declare function clearCache(): void;
|
|
4
3
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/lib/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AA0BA,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAKf;AAGD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,IAAI,CAQN"}
|
package/dist/lib/cache.js
CHANGED
|
@@ -3,11 +3,10 @@ import { createHash } from 'node:crypto';
|
|
|
3
3
|
import { LRUCache } from 'lru-cache';
|
|
4
4
|
import { config } from '../config/env.js';
|
|
5
5
|
import { debugCache } from './errors.js';
|
|
6
|
-
const
|
|
6
|
+
const MAX_CACHE_ENTRIES = config.CACHE_MAX_SIZE;
|
|
7
7
|
const CACHE_ENTRY_TTL_MS = 15 * 60 * 1000; // 15 minutes
|
|
8
8
|
const refinementCache = new LRUCache({
|
|
9
|
-
|
|
10
|
-
sizeCalculation: (value) => Buffer.byteLength(value, 'utf8'),
|
|
9
|
+
max: MAX_CACHE_ENTRIES,
|
|
11
10
|
ttl: CACHE_ENTRY_TTL_MS,
|
|
12
11
|
});
|
|
13
12
|
// Generates SHA-256 hash for cache key
|
|
@@ -28,8 +27,4 @@ export function setCachedRefinement(prompt, technique, format, refined) {
|
|
|
28
27
|
refinementCache.set(key, refined);
|
|
29
28
|
debugCache('setCachedRefinement: key=%s size=%d', key.slice(0, 8), refinementCache.size);
|
|
30
29
|
}
|
|
31
|
-
// Clears the refinement cache
|
|
32
|
-
export function clearCache() {
|
|
33
|
-
refinementCache.clear();
|
|
34
|
-
}
|
|
35
30
|
//# sourceMappingURL=cache.js.map
|
package/dist/lib/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC;AAChD,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AACxD,MAAM,eAAe,GAAG,IAAI,QAAQ,CAAiB;IACnD,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,kBAAkB;CACxB,CAAC,CAAC;AAEH,uCAAuC;AACvC,SAAS,gBAAgB,CACvB,MAAc,EACd,SAAiB,EACjB,MAAc;IAEd,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,SAAiB,EACjB,MAAc;IAEd,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAChD,UAAU,CAAC,oCAAoC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,SAAiB,EACjB,MAAc,EACd,OAAe;IAEf,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACxD,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,CACR,qCAAqC,EACrC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACf,eAAe,CAAC,IAAI,CACrB,CAAC;AACJ,CAAC"}
|
package/dist/lib/errors.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { inspect } from 'node:util';
|
|
2
|
+
import { McpError as JsonRpcMcpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
3
|
import pino from 'pino';
|
|
3
4
|
import { ErrorCode, type ErrorCodeType, type ErrorResponse, type McpErrorOptions, type SuccessResponse } from '../config/types.js';
|
|
4
5
|
export declare const logger: pino.Logger<never, boolean>;
|
|
5
|
-
export declare const debugLLM: (msg: string, ...args: unknown[]) => void;
|
|
6
6
|
export declare const debugCache: (msg: string, ...args: unknown[]) => void;
|
|
7
|
-
export declare const debugRetry: (msg: string, ...args: unknown[]) => void;
|
|
8
7
|
export declare class McpError extends Error {
|
|
9
8
|
readonly code: ErrorCodeType;
|
|
10
9
|
readonly context?: string;
|
|
@@ -16,4 +15,5 @@ export declare class McpError extends Error {
|
|
|
16
15
|
export declare function createSuccessResponse<T extends Record<string, unknown>>(text: string, structured: T): SuccessResponse<T>;
|
|
17
16
|
export declare function createErrorResponse(error: unknown, fallbackCode?: ErrorCodeType, context?: string): ErrorResponse;
|
|
18
17
|
export { ErrorCode };
|
|
18
|
+
export declare function toJsonRpcError(error: unknown, fallbackCode?: ErrorCodeType, context?: string): JsonRpcMcpError;
|
|
19
19
|
//# sourceMappingURL=errors.d.ts.map
|