@autodevjapan/godd-mcp-alpha 1.25.19 → 1.25.21
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/README.md +45 -3
- package/dist/godd.cjs +118 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -53,7 +53,20 @@ If `godd-a install` is unavailable, you can edit `~/.cursor/mcp.json` directly.
|
|
|
53
53
|
|
|
54
54
|
After installation, restart Cursor IDE and the GoDD MCP α server will start automatically.
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
**Option 1 — Slash command (recommended):** Type `/` in the Cursor chat input to see GoDD prompts in the dropdown, then select one (e.g., `/dev`, `/review`).
|
|
57
|
+
|
|
58
|
+
**Option 2 — Natural language in Agent mode:** In Cursor's Agent mode, you can ask the AI in plain language (e.g., "run dev", "do a review") and the AI will automatically detect and call the appropriate GoDD tool.
|
|
59
|
+
|
|
60
|
+
### Token Efficiency
|
|
61
|
+
|
|
62
|
+
GoDD MCP delivers prompts **on demand** — only the prompt you call is sent to the AI's context. This is fundamentally different from Cursor Rules, which loads all rules into every conversation from the start.
|
|
63
|
+
|
|
64
|
+
| Approach | How it works | Token cost per call |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| **Cursor Rules** | All rules always in context | ~80,000 tokens × every chat |
|
|
67
|
+
| **GoDD MCP** | Only the called prompt, when called | ~2,000–5,000 tokens per call |
|
|
68
|
+
|
|
69
|
+
Use `/metrics` at any time during a session to see your actual token usage and estimated savings vs. the Cursor Rules baseline.
|
|
57
70
|
|
|
58
71
|
### GoDD Prompts
|
|
59
72
|
|
|
@@ -84,6 +97,7 @@ Available GoDD prompts (MCP tools) in Cursor IDE:
|
|
|
84
97
|
| `diagram` | Auto-update architecture diagrams (maintain living Mermaid docs in sync with code) |
|
|
85
98
|
| `slide` | Generate presentation slides from project docs (Marp Markdown format) |
|
|
86
99
|
| `design` | Generate/update visual designs from codebase (Pencil.dev sync) |
|
|
100
|
+
| `metrics` | Token efficiency report — show prompt tokens delivered this session vs. always-on Cursor Rules baseline |
|
|
87
101
|
|
|
88
102
|
### CLI Commands
|
|
89
103
|
|
|
@@ -195,7 +209,20 @@ godd-a init --auto
|
|
|
195
209
|
|
|
196
210
|
インストール後、Cursor IDE を再起動すると GoDD MCP α サーバーが自動で起動します。
|
|
197
211
|
|
|
198
|
-
|
|
212
|
+
**方法 1 — スラッシュコマンド(推奨):** Cursor のチャット入力欄で `/` を入力するとドロップダウンに GoDD プロンプトが表示されます。選択して実行してください(例:`/dev`、`/review`)。
|
|
213
|
+
|
|
214
|
+
**方法 2 — Agent モードでの自然言語指示:** Cursor の Agent モードでは、自然言語で指示するだけで AI が適切な GoDD ツールを自動的に検出して呼び出します(例:「dev して」「レビューして」)。
|
|
215
|
+
|
|
216
|
+
### トークン効率
|
|
217
|
+
|
|
218
|
+
GoDD MCP はプロンプトを**オンデマンドで配信**します。呼び出したプロンプトだけが AI のコンテキストに送られます。全ルールを毎会話の開始から常時コンテキストに含める Cursor Rules とは根本的に異なります。
|
|
219
|
+
|
|
220
|
+
| 方式 | 仕組み | 1回あたりのトークンコスト |
|
|
221
|
+
|---|---|---|
|
|
222
|
+
| **Cursor Rules** | 全ルールを常時コンテキストに含む | ~80,000 tokens × 毎会話 |
|
|
223
|
+
| **GoDD MCP** | 呼び出したプロンプトだけを必要なときに配信 | ~2,000〜5,000 tokens / 呼び出し |
|
|
224
|
+
|
|
225
|
+
セッション中いつでも `/metrics` を実行すると、実際のトークン使用量と Cursor Rules 方式との節約推定値を確認できます。
|
|
199
226
|
|
|
200
227
|
### GoDD プロンプト一覧
|
|
201
228
|
|
|
@@ -226,6 +253,7 @@ Cursor IDE 上で利用できる GoDD プロンプト(MCP ツール)の一
|
|
|
226
253
|
| `diagram` | アーキテクチャ図の自動更新(コードと同期した Mermaid ドキュメントを維持) |
|
|
227
254
|
| `slide` | プロジェクトドキュメントからプレゼンスライドを生成(Marp Markdown 形式) |
|
|
228
255
|
| `design` | コードベースからビジュアルデザインを生成/更新(Pencil.dev 同期) |
|
|
256
|
+
| `metrics` | トークン効率レポート — このセッションの配信トークン数と Cursor Rules 常時読み込み方式との比較 |
|
|
229
257
|
|
|
230
258
|
### CLI コマンド
|
|
231
259
|
|
|
@@ -337,7 +365,20 @@ godd-a init --auto
|
|
|
337
365
|
|
|
338
366
|
После установки перезапустите Cursor IDE — сервер GoDD MCP α запустится автоматически.
|
|
339
367
|
|
|
340
|
-
|
|
368
|
+
**Способ 1 — Слэш-команда (рекомендуется):** Введите `/` в поле чата Cursor — в выпадающем списке появятся промпты GoDD. Выберите нужный (например, `/dev`, `/review`).
|
|
369
|
+
|
|
370
|
+
**Способ 2 — Естественный язык в режиме Agent:** В режиме Agent Cursor можно просто попросить AI использовать нужный инструмент (например, «запусти dev», «сделай review») — AI автоматически обнаружит и вызовет соответствующий инструмент GoDD.
|
|
371
|
+
|
|
372
|
+
### Эффективность токенов
|
|
373
|
+
|
|
374
|
+
GoDD MCP доставляет промпты **по требованию** — в контекст AI отправляется только вызванный промпт. Это принципиально отличается от Cursor Rules, где все правила загружаются в контекст с самого начала каждого чата.
|
|
375
|
+
|
|
376
|
+
| Подход | Принцип работы | Стоимость токенов за вызов |
|
|
377
|
+
|---|---|---|
|
|
378
|
+
| **Cursor Rules** | Все правила всегда в контексте | ~80 000 токенов × каждый чат |
|
|
379
|
+
| **GoDD MCP** | Только нужный промпт, только когда нужен | ~2 000–5 000 токенов за вызов |
|
|
380
|
+
|
|
381
|
+
В любой момент сессии введите `/metrics`, чтобы увидеть фактическое использование токенов и расчётную экономию по сравнению с подходом Cursor Rules.
|
|
341
382
|
|
|
342
383
|
### Список промптов GoDD
|
|
343
384
|
|
|
@@ -368,6 +409,7 @@ godd-a init --auto
|
|
|
368
409
|
| `diagram` | Автообновление архитектурных диаграмм (поддержка актуальных Mermaid-документов) |
|
|
369
410
|
| `slide` | Генерация презентационных слайдов из документации проекта (формат Marp Markdown) |
|
|
370
411
|
| `design` | Генерация/обновление визуального дизайна из кодовой базы (синхронизация с Pencil.dev) |
|
|
412
|
+
| `metrics` | Отчёт об эффективности токенов — токены этой сессии vs. базовый уровень Cursor Rules |
|
|
371
413
|
|
|
372
414
|
### Команды CLI
|
|
373
415
|
|
package/dist/godd.cjs
CHANGED
|
@@ -35693,7 +35693,7 @@ function formatConfigIssuesForAI(issues, lang = "ja") {
|
|
|
35693
35693
|
}
|
|
35694
35694
|
|
|
35695
35695
|
// src/version.ts
|
|
35696
|
-
var VERSION = true ? "1.25.
|
|
35696
|
+
var VERSION = true ? "1.25.21" : "0.0.0-dev";
|
|
35697
35697
|
|
|
35698
35698
|
// src/tools/base.ts
|
|
35699
35699
|
var PROMPT_DESCRIPTIONS = {
|
|
@@ -35721,7 +35721,8 @@ var PROMPT_DESCRIPTIONS = {
|
|
|
35721
35721
|
learn: "Save/recall project-specific patterns, conventions, and pitfalls",
|
|
35722
35722
|
diagram: "Auto-update architecture diagrams (maintain living Mermaid docs in sync with code)",
|
|
35723
35723
|
slide: "Generate presentation slides from project docs (Marp Markdown format)",
|
|
35724
|
-
design: "Generate/update visual designs from codebase (Pencil.dev sync)"
|
|
35724
|
+
design: "Generate/update visual designs from codebase (Pencil.dev sync)",
|
|
35725
|
+
metrics: "Token efficiency report \u2014 show prompt tokens delivered this session vs. always-on Cursor Rules baseline"
|
|
35725
35726
|
},
|
|
35726
35727
|
ja: {
|
|
35727
35728
|
dev: "\u958B\u767A\uFF08\u6BB5\u968E\u7684\u306B\u8A08\u753B\u2192\u5B9F\u88C5\u2192\u30C6\u30B9\u30C8\u2192\u54C1\u8CEA\u2192\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u5B9F\u884C\uFF09",
|
|
@@ -35747,7 +35748,8 @@ var PROMPT_DESCRIPTIONS = {
|
|
|
35747
35748
|
learn: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u56FA\u6709\u306E\u30D1\u30BF\u30FC\u30F3\u30FB\u6163\u4F8B\u30FB\u843D\u3068\u3057\u7A74\u3092\u4FDD\u5B58/\u53C2\u7167",
|
|
35748
35749
|
diagram: "\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3\u56F3\u306E\u81EA\u52D5\u66F4\u65B0\uFF08\u30B3\u30FC\u30C9\u3068\u540C\u671F\u3057\u305F Mermaid \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u7DAD\u6301\uFF09",
|
|
35749
35750
|
slide: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u304B\u3089\u30D7\u30EC\u30BC\u30F3\u30B9\u30E9\u30A4\u30C9\u3092\u751F\u6210\uFF08Marp Markdown \u5F62\u5F0F\uFF09",
|
|
35750
|
-
design: "\u30B3\u30FC\u30C9\u30D9\u30FC\u30B9\u304B\u3089\u30D3\u30B8\u30E5\u30A2\u30EB\u30C7\u30B6\u30A4\u30F3\u3092\u751F\u6210/\u66F4\u65B0\uFF08Pencil.dev \u540C\u671F\uFF09"
|
|
35751
|
+
design: "\u30B3\u30FC\u30C9\u30D9\u30FC\u30B9\u304B\u3089\u30D3\u30B8\u30E5\u30A2\u30EB\u30C7\u30B6\u30A4\u30F3\u3092\u751F\u6210/\u66F4\u65B0\uFF08Pencil.dev \u540C\u671F\uFF09",
|
|
35752
|
+
metrics: "\u30C8\u30FC\u30AF\u30F3\u52B9\u7387\u30EC\u30DD\u30FC\u30C8 \u2014 \u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u914D\u4FE1\u3057\u305F\u30D7\u30ED\u30F3\u30D7\u30C8\u30C8\u30FC\u30AF\u30F3\u6570\u3068 Cursor Rules \u5E38\u6642\u8AAD\u307F\u8FBC\u307F\u65B9\u5F0F\u3068\u306E\u6BD4\u8F03"
|
|
35751
35753
|
},
|
|
35752
35754
|
ru: {
|
|
35753
35755
|
dev: "\u0420\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0430 (\u043F\u043B\u0430\u043D \u2192 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u2192 \u0442\u0435\u0441\u0442\u044B \u2192 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u2192 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F \u043F\u043E\u044D\u0442\u0430\u043F\u043D\u043E)",
|
|
@@ -35773,7 +35775,8 @@ var PROMPT_DESCRIPTIONS = {
|
|
|
35773
35775
|
learn: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435/\u0432\u044B\u0437\u043E\u0432 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u043D\u044B\u0445 \u0434\u043B\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u043F\u0430\u0442\u0442\u0435\u0440\u043D\u043E\u0432, \u0441\u043E\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0439 \u0438 \u043F\u043E\u0434\u0432\u043E\u0434\u043D\u044B\u0445 \u043A\u0430\u043C\u043D\u0435\u0439",
|
|
35774
35776
|
diagram: "\u0410\u0432\u0442\u043E\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043A\u0442\u0443\u0440\u043D\u044B\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C (\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0445 Mermaid-\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432)",
|
|
35775
35777
|
slide: "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0441\u043B\u0430\u0439\u0434\u043E\u0432 \u0438\u0437 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043F\u0440\u043E\u0435\u043A\u0442\u0430 (\u0444\u043E\u0440\u043C\u0430\u0442 Marp Markdown)",
|
|
35776
|
-
design: "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F/\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0434\u0438\u0437\u0430\u0439\u043D\u0430 \u0438\u0437 \u043A\u043E\u0434\u043E\u0432\u043E\u0439 \u0431\u0430\u0437\u044B (\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F Pencil.dev)"
|
|
35778
|
+
design: "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F/\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0434\u0438\u0437\u0430\u0439\u043D\u0430 \u0438\u0437 \u043A\u043E\u0434\u043E\u0432\u043E\u0439 \u0431\u0430\u0437\u044B (\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F Pencil.dev)",
|
|
35779
|
+
metrics: "\u041E\u0442\u0447\u0451\u0442 \u043E\u0431 \u044D\u0444\u0444\u0435\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u2014 \u0442\u043E\u043A\u0435\u043D\u044B \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432 \u0432 \u044D\u0442\u043E\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 vs. \u0431\u0430\u0437\u043E\u0432\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C Cursor Rules"
|
|
35777
35780
|
}
|
|
35778
35781
|
};
|
|
35779
35782
|
var TOOL_ARG_META = {
|
|
@@ -35814,7 +35817,8 @@ var TOOL_ARG_META = {
|
|
|
35814
35817
|
design: [
|
|
35815
35818
|
{ name: "target", required: false },
|
|
35816
35819
|
{ name: "output", required: false }
|
|
35817
|
-
]
|
|
35820
|
+
],
|
|
35821
|
+
metrics: []
|
|
35818
35822
|
};
|
|
35819
35823
|
var TOOL_ARG_DESCRIPTIONS = {
|
|
35820
35824
|
en: {
|
|
@@ -35922,7 +35926,8 @@ var PUBLIC_PROMPT_ORDER = [
|
|
|
35922
35926
|
"learn",
|
|
35923
35927
|
"diagram",
|
|
35924
35928
|
"slide",
|
|
35925
|
-
"design"
|
|
35929
|
+
"design",
|
|
35930
|
+
"metrics"
|
|
35926
35931
|
];
|
|
35927
35932
|
var COMPOSITE_PROMPTS = {
|
|
35928
35933
|
dev: { slugs: ["common", "dev"] },
|
|
@@ -39988,10 +39993,13 @@ async function validateLicense(registryUrl, licenseKey) {
|
|
|
39988
39993
|
|
|
39989
39994
|
// src/metrics/prompt-metrics.ts
|
|
39990
39995
|
var ESTIMATED_CHARS_PER_TOKEN = 3.5;
|
|
39996
|
+
var CURSOR_RULES_BASELINE_CHARS = 28e4;
|
|
39991
39997
|
var PromptMetrics = class {
|
|
39992
39998
|
calls = [];
|
|
39993
39999
|
totalChars = 0;
|
|
39994
40000
|
commonSize = null;
|
|
40001
|
+
commonSkippedCount = 0;
|
|
40002
|
+
commonSkippedChars = 0;
|
|
39995
40003
|
recordCommonSize(chars) {
|
|
39996
40004
|
this.commonSize = chars;
|
|
39997
40005
|
}
|
|
@@ -40007,6 +40015,13 @@ var PromptMetrics = class {
|
|
|
40007
40015
|
};
|
|
40008
40016
|
this.calls.push(metric);
|
|
40009
40017
|
this.totalChars += contentChars;
|
|
40018
|
+
if (!commonIncluded && !NEEDS_COMMON_SLUGS.has(slug)) {
|
|
40019
|
+
const savedChars = this.commonSize ?? 0;
|
|
40020
|
+
if (savedChars > 0) {
|
|
40021
|
+
this.commonSkippedCount++;
|
|
40022
|
+
this.commonSkippedChars += savedChars;
|
|
40023
|
+
}
|
|
40024
|
+
}
|
|
40010
40025
|
const estimatedTokens = Math.round(contentChars / ESTIMATED_CHARS_PER_TOKEN);
|
|
40011
40026
|
const parts = [
|
|
40012
40027
|
`${slug}: ${contentChars.toLocaleString()} chars (~${estimatedTokens.toLocaleString()} tokens)`,
|
|
@@ -40032,6 +40047,99 @@ var PromptMetrics = class {
|
|
|
40032
40047
|
getCallHistory() {
|
|
40033
40048
|
return this.calls;
|
|
40034
40049
|
}
|
|
40050
|
+
/**
|
|
40051
|
+
* Generate a human-readable token efficiency report in the given language.
|
|
40052
|
+
* Compares actual session usage against the Cursor Rules always-on baseline.
|
|
40053
|
+
*/
|
|
40054
|
+
generateReport(lang = "en") {
|
|
40055
|
+
const sessionTokens = Math.round(this.totalChars / ESTIMATED_CHARS_PER_TOKEN);
|
|
40056
|
+
const baselineTokens = Math.round(CURSOR_RULES_BASELINE_CHARS / ESTIMATED_CHARS_PER_TOKEN);
|
|
40057
|
+
const baselinePerCall = Math.round(baselineTokens / Math.max(this.calls.length, 1));
|
|
40058
|
+
const baselineTotalIfAlwaysOn = baselinePerCall * Math.max(this.calls.length, 1);
|
|
40059
|
+
const savedTokens = Math.max(0, baselineTotalIfAlwaysOn - sessionTokens);
|
|
40060
|
+
const savedPct = baselineTotalIfAlwaysOn > 0 ? Math.round(savedTokens / baselineTotalIfAlwaysOn * 100) : 0;
|
|
40061
|
+
const commonSkippedTokens = Math.round(this.commonSkippedChars / ESTIMATED_CHARS_PER_TOKEN);
|
|
40062
|
+
const callLines = this.calls.map((c) => {
|
|
40063
|
+
const t = Math.round(c.chars / ESTIMATED_CHARS_PER_TOKEN);
|
|
40064
|
+
return ` ${c.slug.padEnd(12)} ~${t.toLocaleString()} tokens [${c.slugsLoaded.join(", ")}]`;
|
|
40065
|
+
}).join("\n") || (lang === "ja" ? " \uFF08\u307E\u3060\u547C\u3073\u51FA\u3057\u306A\u3057\uFF09" : lang === "ru" ? " (\u0432\u044B\u0437\u043E\u0432\u043E\u0432 \u0435\u0449\u0451 \u043D\u0435 \u0431\u044B\u043B\u043E)" : " (no calls yet)");
|
|
40066
|
+
if (lang === "ja") {
|
|
40067
|
+
return [
|
|
40068
|
+
`\u{1F4CA} ${brand.displayName} \u2014 \u30C8\u30FC\u30AF\u30F3\u52B9\u7387\u30EC\u30DD\u30FC\u30C8`,
|
|
40069
|
+
``,
|
|
40070
|
+
`## \u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3`,
|
|
40071
|
+
` \u547C\u3073\u51FA\u3057\u56DE\u6570: ${this.calls.length} \u56DE`,
|
|
40072
|
+
` \u914D\u4FE1\u30C8\u30FC\u30AF\u30F3\u5408\u8A08: ~${sessionTokens.toLocaleString()} tokens`,
|
|
40073
|
+
``,
|
|
40074
|
+
`## Cursor Rules \u65B9\u5F0F\u3068\u306E\u6BD4\u8F03\uFF08\u5168\u30D7\u30ED\u30F3\u30D7\u30C8\u5E38\u6642\u8AAD\u307F\u8FBC\u307F\u60F3\u5B9A\uFF09`,
|
|
40075
|
+
` Cursor Rules \u63A8\u5B9A\u30B3\u30B9\u30C8: ~${baselineTotalIfAlwaysOn.toLocaleString()} tokens`,
|
|
40076
|
+
` GoDD \u5B9F\u969B\u306E\u30B3\u30B9\u30C8: ~${sessionTokens.toLocaleString()} tokens`,
|
|
40077
|
+
` \u7BC0\u7D04\u63A8\u5B9A: ~${savedTokens.toLocaleString()} tokens (${savedPct}%)`,
|
|
40078
|
+
``,
|
|
40079
|
+
`## \u6700\u9069\u5316\u306E\u5185\u8A33`,
|
|
40080
|
+
` common \u30B9\u30AD\u30C3\u30D7\u56DE\u6570: ${this.commonSkippedCount} \u56DE (~${commonSkippedTokens.toLocaleString()} tokens \u7BC0\u7D04)`,
|
|
40081
|
+
` \u203B commit/push \u306A\u3069\u8EFD\u91CF\u30C4\u30FC\u30EB\u306F\u5171\u901A\u30DE\u30A4\u30F3\u30C9\u30BB\u30C3\u30C8\u3092\u8AAD\u307F\u8FBC\u307E\u306A\u3044\u8A2D\u8A08`,
|
|
40082
|
+
``,
|
|
40083
|
+
`## \u547C\u3073\u51FA\u3057\u5C65\u6B74`,
|
|
40084
|
+
callLines,
|
|
40085
|
+
``,
|
|
40086
|
+
`---`,
|
|
40087
|
+
`GoDD MCP \u306F\u30AA\u30F3\u30C7\u30DE\u30F3\u30C9\u914D\u4FE1\u306E\u305F\u3081\u3001\u4F7F\u3063\u305F\u30D7\u30ED\u30F3\u30D7\u30C8\u3060\u3051\u3092\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u9001\u308A\u307E\u3059\u3002`,
|
|
40088
|
+
`Cursor Rules \u306F\u5168\u30EB\u30FC\u30EB\u3092\u6BCE\u4F1A\u8A71\u306E\u958B\u59CB\u6642\u304B\u3089\u5E38\u6642\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u542B\u3081\u307E\u3059\u3002`,
|
|
40089
|
+
`\u203B \u30C8\u30FC\u30AF\u30F3\u6570\u306F\u6587\u5B57\u6570 \xF7 3.5 \u3067\u63A8\u5B9A\u3002\u5B9F\u969B\u306E\u5024\u306F\u4F7F\u7528\u30E2\u30C7\u30EB\u306B\u3088\u308A\u7570\u306A\u308A\u307E\u3059\u3002`
|
|
40090
|
+
].join("\n");
|
|
40091
|
+
}
|
|
40092
|
+
if (lang === "ru") {
|
|
40093
|
+
return [
|
|
40094
|
+
`\u{1F4CA} ${brand.displayName} \u2014 \u041E\u0442\u0447\u0451\u0442 \u044D\u0444\u0444\u0435\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438 \u0442\u043E\u043A\u0435\u043D\u043E\u0432`,
|
|
40095
|
+
``,
|
|
40096
|
+
`## \u042D\u0442\u0430 \u0441\u0435\u0441\u0441\u0438\u044F`,
|
|
40097
|
+
` \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0432\u044B\u0437\u043E\u0432\u043E\u0432: ${this.calls.length}`,
|
|
40098
|
+
` \u0414\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E \u0442\u043E\u043A\u0435\u043D\u043E\u0432: ~${sessionTokens.toLocaleString()} tokens`,
|
|
40099
|
+
``,
|
|
40100
|
+
`## \u0421\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u0435 \u0441 Cursor Rules (\u0432\u0441\u0435 \u043F\u0440\u043E\u043C\u043F\u0442\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B)`,
|
|
40101
|
+
` \u0420\u0430\u0441\u0447\u0451\u0442\u043D\u044B\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044B Cursor Rules: ~${baselineTotalIfAlwaysOn.toLocaleString()} tokens`,
|
|
40102
|
+
` \u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044B GoDD: ~${sessionTokens.toLocaleString()} tokens`,
|
|
40103
|
+
` \u0420\u0430\u0441\u0447\u0451\u0442\u043D\u0430\u044F \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u044F: ~${savedTokens.toLocaleString()} tokens (${savedPct}%)`,
|
|
40104
|
+
``,
|
|
40105
|
+
`## \u0414\u0435\u0442\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u0438`,
|
|
40106
|
+
` \u041F\u0440\u043E\u043F\u0443\u0441\u043A\u043E\u0432 common: ${this.commonSkippedCount} (~${commonSkippedTokens.toLocaleString()} tokens \u0441\u044D\u043A\u043E\u043D\u043E\u043C\u043B\u0435\u043D\u043E)`,
|
|
40107
|
+
` \u203B \u041B\u0451\u0433\u043A\u0438\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B (commit, push) \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044E\u0442 \u043E\u0431\u0449\u0438\u0439 mindset`,
|
|
40108
|
+
``,
|
|
40109
|
+
`## \u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0432\u044B\u0437\u043E\u0432\u043E\u0432`,
|
|
40110
|
+
callLines,
|
|
40111
|
+
``,
|
|
40112
|
+
`---`,
|
|
40113
|
+
`GoDD MCP \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0443\u0436\u043D\u044B\u0435 \u043F\u0440\u043E\u043C\u043F\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443.`,
|
|
40114
|
+
`Cursor Rules \u0432\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0432 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u0441 \u043D\u0430\u0447\u0430\u043B\u0430 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0447\u0430\u0442\u0430.`,
|
|
40115
|
+
`\u203B \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043A\u043E\u043B-\u0432\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \xF7 3,5. \u0420\u0435\u0430\u043B\u044C\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0437\u0430\u0432\u0438\u0441\u044F\u0442 \u043E\u0442 \u043C\u043E\u0434\u0435\u043B\u0438.`
|
|
40116
|
+
].join("\n");
|
|
40117
|
+
}
|
|
40118
|
+
return [
|
|
40119
|
+
`\u{1F4CA} ${brand.displayName} \u2014 Token Efficiency Report`,
|
|
40120
|
+
``,
|
|
40121
|
+
`## This Session`,
|
|
40122
|
+
` Calls made: ${this.calls.length}`,
|
|
40123
|
+
` Tokens delivered: ~${sessionTokens.toLocaleString()} tokens`,
|
|
40124
|
+
``,
|
|
40125
|
+
`## Comparison vs. Cursor Rules (all prompts always loaded)`,
|
|
40126
|
+
` Cursor Rules estimate: ~${baselineTotalIfAlwaysOn.toLocaleString()} tokens`,
|
|
40127
|
+
` GoDD actual: ~${sessionTokens.toLocaleString()} tokens`,
|
|
40128
|
+
` Estimated savings: ~${savedTokens.toLocaleString()} tokens (${savedPct}%)`,
|
|
40129
|
+
``,
|
|
40130
|
+
`## Optimization breakdown`,
|
|
40131
|
+
` common skipped: ${this.commonSkippedCount}x (~${commonSkippedTokens.toLocaleString()} tokens saved)`,
|
|
40132
|
+
` \u203B Lightweight tools (commit, push) skip the heavy common mindset by design`,
|
|
40133
|
+
``,
|
|
40134
|
+
`## Call history`,
|
|
40135
|
+
callLines,
|
|
40136
|
+
``,
|
|
40137
|
+
`---`,
|
|
40138
|
+
`GoDD MCP delivers only the prompts you call, on demand.`,
|
|
40139
|
+
`Cursor Rules loads all rules into context from the start of every chat.`,
|
|
40140
|
+
`\u203B Token counts are estimated at chars \xF7 3.5. Actual values vary by model.`
|
|
40141
|
+
].join("\n");
|
|
40142
|
+
}
|
|
40035
40143
|
};
|
|
40036
40144
|
|
|
40037
40145
|
// src/index.ts
|
|
@@ -40269,6 +40377,10 @@ function startServer() {
|
|
|
40269
40377
|
const slug = toolName.replace(brand.toolPrefix, "");
|
|
40270
40378
|
const rawArgs = request.params.arguments;
|
|
40271
40379
|
const localArgs = rawArgs ? Object.fromEntries(Object.entries(rawArgs).map(([k, v]) => [k, String(v)])) : void 0;
|
|
40380
|
+
if (slug === "metrics") {
|
|
40381
|
+
const report = metrics.generateReport(displayLang);
|
|
40382
|
+
return { content: [{ type: "text", text: report }] };
|
|
40383
|
+
}
|
|
40272
40384
|
const result = await resolveMcpSlugContent(slug, "tool", {
|
|
40273
40385
|
localArgs,
|
|
40274
40386
|
registryClient,
|