@shuji-bonji/rxjs-mcp 0.4.1 → 0.5.1
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/CHANGELOG.md +53 -0
- package/README.ja.md +11 -0
- package/README.md +12 -0
- package/dist/data/patterns.d.ts +9 -1
- package/dist/data/patterns.d.ts.map +1 -1
- package/dist/data/patterns.js +121 -21
- package/dist/data/patterns.js.map +1 -1
- package/dist/index.js +34 -89
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +67 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/subscription-analysis.d.ts +26 -0
- package/dist/shared/subscription-analysis.d.ts.map +1 -1
- package/dist/shared/subscription-analysis.js +34 -3
- package/dist/shared/subscription-analysis.js.map +1 -1
- package/dist/tools/analyze-operators.d.ts.map +1 -1
- package/dist/tools/analyze-operators.js +18 -5
- package/dist/tools/analyze-operators.js.map +1 -1
- package/dist/tools/marble-diagram.d.ts.map +1 -1
- package/dist/tools/marble-diagram.js +55 -26
- package/dist/tools/marble-diagram.js.map +1 -1
- package/dist/types.d.ts +2 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,59 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.1] - 2026-09-02
|
|
9
|
+
|
|
10
|
+
v0.5.0 をプラグイン経由で実際に呼んで見つかった 3 件の修正。ツールの入出力の形は変わらない。
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`suggest_pattern` が構文として通らないコードを返していた** — framework 適応は、フレームワーク非依存のパターン本体を文字列としてクラス本体やフックの中に差し込んでいた。パターン本体の先頭には `import` 文があり、続くのは `const` 宣言と実行文なので、クラス本体に置けば宣言として解釈できず、関数本体に置けば `import` が module のトップレベル以外に来る。測ると、**21 通り (7 パターン × 3 framework) すべてで import が wrapper より後ろにあり、うち Angular の 7 件は `ts.transpileModule` が `Unexpected token. A constructor, method, accessor, or property was expected.` で落ちた**。React / Vue は構文解析は通るが、型検査が `TS1232: An import declaration can only be used at the top level of a namespace or module.` を返す。
|
|
15
|
+
- `import` 文を本体から分離して wrapper の上に出し、同じ module への import は 1 行にまとめる(パターンが `'rxjs'` から複数回 import しており、wrapper 側の import と合わせると重複するため)。
|
|
16
|
+
- 本体は Angular なら `start()` メソッド、React なら `useEffect`、Vue なら composable の関数本体に入れる。宣言と実行文はいずれの位置でも合法になる。
|
|
17
|
+
- React / Vue の wrapper にあった `stream$.subscribe(setData)` を削除した。`stream$` はどのパターンにも存在しない名前で、コード上に定義のない識別子を書いていた。購読を書く位置はコメントで示す。
|
|
18
|
+
- **本体そのものは書き換えない**。`document.getElementById` や `ajax` はラップ後も残る。出力の冒頭コメントで、DOM アクセスをテンプレート束縛に、`ajax` を HttpClient に置き換えるよう名指しする。パターンごとに framework 別の実装を持つまでは、Angular として完成しているように読めて通らないコードを返すより、どこを直すか書いてある方が使える。
|
|
19
|
+
- **`analyze_operators` の `shareReplay` の指摘が引数を見ていなかった** — `operators.includes('shareReplay')` が真なら常に「`shareReplay()` without buffer limit may cause memory issues」を出していた。`shareReplay(1)` にも `shareReplay({ bufferSize: 1, refCount: true })` にも同じ文が出る。バッファ上限の有無と refCount の有無は別の性質で、結果も別(前者は全発行値を保持し続ける、後者は購読者が 0 になっても元のソースの購読が残る)。`shareReplay(1)` は前者を満たし後者を満たさないので、この文は事実と食い違っていた。同じ対象について `detect_memory_leak` は refCount を、`lint_rxjs` の `no-sharereplay` は引数の形を見ており、3 つのツールが違うことを言う状態だった。
|
|
20
|
+
- `src/shared/subscription-analysis.ts` に `analyzeShareReplay()` を追加し、括弧の対応を数えて最初の `shareReplay(...)` の引数を読む(正規表現だと入れ子の config object で切れる)。`{ present, bounded, refCount }` を返し、欠けている方だけを指摘する。
|
|
21
|
+
- 既存の `hasUnsafeShareReplay()` はこの関数に委譲する形にした(`present && !refCount`)。判定は 1 箇所になる。
|
|
22
|
+
- **`generate_marble` が `a` を飛ばし、自明な凡例を出していた** — 記号の割り当てが `97 + Object.keys(valueMap).length` で、その `valueMap` には数字で描いた値も入る。`0` から始まるストリームは次の値が `b` になり、凡例には `0 = 0` という行が出た。
|
|
23
|
+
- 割り当て済みの英字を数える専用のカウンタに変え、同じ値には同じ記号を割り当てる(同じ値が 2 回出ても凡例は 1 行)。
|
|
24
|
+
- 記号が値をそのまま示している場合(`0`、`"a"`)は凡例に出さない。
|
|
25
|
+
- `-` `|` `#` と空白は図が使う文字なので、1 文字の文字列値でもこれらは記号にせず英字を割り当てる。値 `'|'` が完了記号として描かれることが無くなる。
|
|
26
|
+
- 既に使われている文字は英字割り当てでも飛ばす。値 `'a'` と複雑な値が同じ図にあっても衝突しない。
|
|
27
|
+
- **`generate_marble` の図が完了記号の後ろに 1 フレーム余っていた** — 図の長さが常に `maxTime + scale * 2` だったため、最後のイベントが `complete` / `error` のとき `|` や `#` の後ろに `-` が残った。終端するストリームは記号の 1 フレームだけを足すようにした。あわせて `duration || ...` を `duration !== undefined && duration > 0 ? ... : ...` に変え、`duration: 0` が既定値に落ちる経路をなくした。
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **`src/data/patterns.test.ts`** — framework 適応が出す TypeScript を `ts.transpileModule` に通し、21 通りすべてで構文エラーが 0 件であることを見る 6 ケース。既存のテストはすべて部分文字列の照合だったため、45 行のコードが 1 行も parse できない状態を誰も見ていなかった。**この検査は v0.5.0 の実装に対して 7/21 で落ちる**ことを確認済み。import の位置と 1 module 1 行も同時に検査する。
|
|
32
|
+
- `analyze_operators` の shareReplay について 4 ケース(引数なし / `shareReplay(1)` / `{ bufferSize, refCount }` / `{ refCount }` のみ)、`generate_marble` の記号割り当てと図の長さについて 7 ケースを追加。テストは 239 件から 255 件になった。
|
|
33
|
+
|
|
34
|
+
## [0.5.0] - 2026-09-02
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- **MCP TypeScript SDK を v1 から v2 へ移行** — 依存を `@modelcontextprotocol/sdk@^1.25.0` から `@modelcontextprotocol/server@^2.0.0` に差し替えた。v1 の単一パッケージは v2 で `server` / `client` / `core` / フレームワーク別アダプタに分割され、`@modelcontextprotocol/sdk/server/index.js` のような深いパスは解決しなくなった。本サーバーは stdio 専用なので `@modelcontextprotocol/server` 1 つで足りる。
|
|
39
|
+
- **stdio の起動を `serveStdio(factory)` に変更** — `new Server(...)` + `new StdioServerTransport()` + `server.connect(transport)` の手組みをやめた。`serveStdio` は transport とプロトコル世代の決定を持ち、接続ごとに factory から 1 インスタンスを固定する。返る `StdioServerHandle.close()` を SIGINT / SIGTERM のハンドラに置いた。
|
|
40
|
+
- **ツール登録を `registerTool()` に変更** — `setRequestHandler(ListToolsRequestSchema, ...)` と `setRequestHandler(CallToolRequestSchema, ...)` の 2 本立て、および `toolHandlers` の表引きを廃止し、6 ツールを `server.registerTool(name, config, handler)` で登録する。未知のツール名の判定と入力スキーマの検証は SDK 側が行うため、`McpError` / `ErrorCode` の使用箇所は無くなった。
|
|
41
|
+
- **`zod` を `^3.23.0` から `^4.2.0` へ** — v2 は zod 3 を受け付けない。zod 3 のままでも `npm install` も `tsc` も通り、サーバーは起動して接続まで成功するが、最初の `tools/list` が `fromJsonSchema()` を指すエラーを返す。型検査でもユニットテストでも捕まらない経路のため、宣言レンジごと更新した。4.0〜4.1 では変換に SDK 内蔵の zod が使われ、`.describe()` の説明文が JSON Schema から消えるため、下限は 4.2.0 以上が必要。
|
|
42
|
+
- **`zod-to-json-schema` を削除** — v2 は `inputSchema` に渡された zod オブジェクト(Standard Schema)から JSON Schema を生成する。`zodToJsonSchema(schema, { target: 'openApi3' })` の呼び出しは不要になった。実行時依存は 4 個から 2 個 (`@modelcontextprotocol/server`, `rxjs`, `zod`) に減った。
|
|
43
|
+
- **`ToolResponse` を interface から型エイリアスへ** — v2 のツール結果型は `_meta` の通過のために `[x: string]: unknown` を持つ。暗黙のインデックスシグネチャが付くのは型エイリアスだけで、interface のままでは `registerTool` のコールバック型に一致しない。
|
|
44
|
+
- **`ToolDefinition.outputSchema` を削除** — どのツールも宣言しておらず、v1 では `tools/list` に `undefined` が乗っているだけだった。v2 では登録側から渡さないため、残すと「書いても効かないフィールド」になる。`structuredContent` を返すかどうかは別途決める。
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- **`src/server.ts`** — `createServer(): McpServer` を `src/index.ts` から切り出して export した。stdio の入口が `serveStdio` に渡す factory であると同時に、プロトコルテストが `createMcpHandler` 経由でプロセス内から叩く対象でもある。`src/index.ts` は stdio の起動とシャットダウンだけになった。
|
|
49
|
+
- **`instructions`** — `initialize` の応答としてクライアントへ返す射程の宣言を追加した。README はモデルが読まず、ツールの `description` はそのツールを検討する時点まで読まれない。`instructions` はツールを 1 つも呼ばないうちにクライアントのシステムコンテキストに載る。書いたのは「しないこと」で、(1) `execute_stream` は RxJS 以外のモジュールを持たない worker で動くため呼び出し元のプロジェクトのコードは動かない、(2) `lint_rxjs` と `detect_memory_leak` は型情報を持たない正規表現照合であり、指摘が 0 件であることはコードが正しいことの証拠にならない、(3) `analyze_operators` / `suggest_pattern` が参照するのは RxJS 7.8.2 に固定した同梱データで、報告されないオペレーターは「データに無い」であって「RxJS に無い」ではない、の 3 点。
|
|
50
|
+
- **`src/server.test.ts`** — 実物の `Client` を in-process で繋いで検証する 6 ケース。`tools/list` が 6 ツールを JSON Schema 付きで返すこと、`.describe()` の説明文が残ること、`annotations` が届くこと、`instructions` が `initialize` の応答に載ること、`z.enum` が拒否する引数がハンドラ到達前に `isError: true` で返ること、`tools/call` で実際にストリームが動くことを見る。zod 変換の失敗は `tsc` でも既存のユニットテストでも検出できないため、このファイルが移行の合格基準を担う。
|
|
51
|
+
- **`@modelcontextprotocol/client`** を devDependencies に追加(上記テスト用。実行時依存ではない)。
|
|
52
|
+
- **`.claude-plugin/plugin.json`** — shuji-bonji marketplace から `/plugin install` できるようにした。`mcpServers` のキーは `rxjs` で、`npx -y @shuji-bonji/rxjs-mcp@latest` を起動する。`claude_desktop_config.json` に手で書いていた設定と同じキー名なので、プラグイン経由に切り替えてもツール名は変わらない。
|
|
53
|
+
|
|
54
|
+
### Compatibility
|
|
55
|
+
|
|
56
|
+
- MCP クライアントから見た挙動は変わらない。ツール名 6 つ、入力スキーマ、`annotations`、返すテキストのいずれも変更なし。
|
|
57
|
+
- `serveStdio` は既定で 2025 世代のプロトコル改訂を話すクライアントも同じ factory から serve する(`legacy: 'serve'`)。`protocolVersion: '2024-11-05'` で `initialize` する既存の統合テスト(`src/tools/mcp-integration.test.ts` の 8 件、`test-mcp-server.mjs` の 7 件)は、いずれも `dist/index.js` を実際に spawn したまま無修正で通る。
|
|
58
|
+
- Node.js 要件は `>=22.0.0` のまま(v2 の下限は 20)。CI の Node 22 / 24 のマトリクスも変更なし。
|
|
59
|
+
- 各ツールのハンドラ内に残っている `inputSchema.parse(args)` は、SDK 側の検証と二重になる。ユニットテストがハンドラを直接呼び、`takeCount` や `timeout` の既定値をこの `parse` から得ているため残した。
|
|
60
|
+
|
|
8
61
|
## [0.4.1] - 2026-05-17
|
|
9
62
|
|
|
10
63
|
### Changed
|
package/README.ja.md
CHANGED
|
@@ -70,6 +70,11 @@ ClaudeなどのAIアシスタントから直接RxJSストリームを実行、
|
|
|
70
70
|
|
|
71
71
|
## インストール
|
|
72
72
|
|
|
73
|
+
### 必要環境
|
|
74
|
+
|
|
75
|
+
- **Node.js >= 22**(`engines.node`)。本サーバーが使う MCP TypeScript SDK v2 の
|
|
76
|
+
要件は Node.js >= 20 だが、メンテナンス中の LTS に揃えるため上限側に寄せている。
|
|
77
|
+
|
|
73
78
|
```bash
|
|
74
79
|
# グローバルインストール
|
|
75
80
|
npm install -g @shuji-bonji/rxjs-mcp
|
|
@@ -335,6 +340,12 @@ RxJS MCP Serverは以下と組み合わせて使用できます:
|
|
|
335
340
|
└─────────────────┘
|
|
336
341
|
```
|
|
337
342
|
|
|
343
|
+
本サーバーは **MCP TypeScript SDK v2**
|
|
344
|
+
(`@modelcontextprotocol/server@^2.0.0`、プロトコル改訂 2026-07-28) の上に構築している。
|
|
345
|
+
トランスポートは stdio のみで、`src/index.ts` が `src/server.ts` の `createServer()`
|
|
346
|
+
ファクトリを `serveStdio()` に渡す。`serveStdio()` は 2025 世代のプロトコル改訂を話す
|
|
347
|
+
クライアントも同じファクトリから serve する。
|
|
348
|
+
|
|
338
349
|
## コントリビューション
|
|
339
350
|
|
|
340
351
|
コントリビューションを歓迎します!お気軽にPRを送ってください。
|
package/README.md
CHANGED
|
@@ -71,6 +71,12 @@ Execute, debug, and visualize RxJS streams directly from AI assistants like Clau
|
|
|
71
71
|
|
|
72
72
|
## Installation
|
|
73
73
|
|
|
74
|
+
### Requirements
|
|
75
|
+
|
|
76
|
+
- **Node.js >= 22** (`engines.node`). The MCP TypeScript SDK v2 this server is
|
|
77
|
+
built on requires Node.js >= 20; this package sets the higher floor to stay on
|
|
78
|
+
a maintained LTS line.
|
|
79
|
+
|
|
74
80
|
```bash
|
|
75
81
|
# Install globally
|
|
76
82
|
npm install -g @shuji-bonji/rxjs-mcp
|
|
@@ -358,6 +364,12 @@ Future Meta-MCP integration will allow seamless coordination between these tools
|
|
|
358
364
|
└─────────────────┘
|
|
359
365
|
```
|
|
360
366
|
|
|
367
|
+
The server is built on the **MCP TypeScript SDK v2**
|
|
368
|
+
(`@modelcontextprotocol/server@^2.0.0`, protocol revision 2026-07-28). It speaks
|
|
369
|
+
stdio only: `src/index.ts` hands the `createServer()` factory in `src/server.ts`
|
|
370
|
+
to `serveStdio()`, which also serves clients that still speak the 2025 protocol
|
|
371
|
+
revisions.
|
|
372
|
+
|
|
361
373
|
## Documentation Reference System
|
|
362
374
|
|
|
363
375
|
Since v0.3.0, `analyze_operators` outputs three-tier documentation links for each operator and creation function:
|
package/dist/data/patterns.d.ts
CHANGED
|
@@ -4,7 +4,15 @@ import { PatternSuggestion } from '../types.js';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare const patterns: Record<string, PatternSuggestion>;
|
|
6
6
|
/**
|
|
7
|
-
* Adapt pattern for specific framework
|
|
7
|
+
* Adapt a pattern for a specific framework.
|
|
8
|
+
*
|
|
9
|
+
* The framework-neutral body is moved into a service method or a hook, and its
|
|
10
|
+
* imports are hoisted above the wrapper. What this does NOT do is rewrite the
|
|
11
|
+
* body: a pattern that reaches the DOM with `document.getElementById` or calls
|
|
12
|
+
* `ajax` still does so after wrapping, and the comment in the output names that
|
|
13
|
+
* as the part to replace. Until each pattern carries a per-framework
|
|
14
|
+
* implementation, saying so is more use than a wrapper that reads as finished
|
|
15
|
+
* Angular but does not compile.
|
|
8
16
|
*/
|
|
9
17
|
export declare function adaptPatternForFramework(pattern: PatternSuggestion, framework: string): PatternSuggestion;
|
|
10
18
|
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/data/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA4YtD,CAAC;
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/data/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA4YtD,CAAC;AAqFF;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,GAChB,iBAAiB,CA0GnB"}
|
package/dist/data/patterns.js
CHANGED
|
@@ -393,19 +393,109 @@ class CachedDataService {
|
|
|
393
393
|
},
|
|
394
394
|
};
|
|
395
395
|
/**
|
|
396
|
-
*
|
|
396
|
+
* Separate the import lines of a pattern from the statements that follow.
|
|
397
|
+
*
|
|
398
|
+
* The framework wrappers put the body inside a class method or a hook, and an
|
|
399
|
+
* `import` is a module-level declaration — leaving them mixed produces code
|
|
400
|
+
* that does not parse. Blank lines left where the imports were are dropped so
|
|
401
|
+
* the body does not start with a gap.
|
|
402
|
+
*/
|
|
403
|
+
function splitImports(code) {
|
|
404
|
+
const imports = [];
|
|
405
|
+
const bodyLines = [];
|
|
406
|
+
for (const line of code.split('\n')) {
|
|
407
|
+
const named = /^\s*import\s*\{([^}]*)\}\s*from\s*['"]([^'"]+)['"]\s*;?\s*$/.exec(line);
|
|
408
|
+
if (named) {
|
|
409
|
+
imports.push({
|
|
410
|
+
names: named[1].split(',').map(n => n.trim()).filter(Boolean),
|
|
411
|
+
from: named[2],
|
|
412
|
+
raw: line.trim(),
|
|
413
|
+
});
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
if (/^\s*import\s/.test(line)) {
|
|
417
|
+
imports.push({ names: [], from: '', raw: line.trim() });
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
420
|
+
bodyLines.push(line);
|
|
421
|
+
}
|
|
422
|
+
while (bodyLines.length > 0 && bodyLines[0].trim() === '')
|
|
423
|
+
bodyLines.shift();
|
|
424
|
+
while (bodyLines.length > 0 && bodyLines[bodyLines.length - 1].trim() === '')
|
|
425
|
+
bodyLines.pop();
|
|
426
|
+
return { imports, body: bodyLines.join('\n') };
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Render import lines with one line per module specifier.
|
|
430
|
+
*
|
|
431
|
+
* A pattern often imports from `'rxjs'` more than once, and the wrapper adds
|
|
432
|
+
* its own imports on top. Emitting them unmerged gives duplicate bindings.
|
|
433
|
+
*/
|
|
434
|
+
function renderImports(imports) {
|
|
435
|
+
const byModule = new Map();
|
|
436
|
+
const verbatim = [];
|
|
437
|
+
for (const entry of imports) {
|
|
438
|
+
if (entry.names.length === 0) {
|
|
439
|
+
if (!verbatim.includes(entry.raw))
|
|
440
|
+
verbatim.push(entry.raw);
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
const existing = byModule.get(entry.from) ?? [];
|
|
444
|
+
for (const name of entry.names) {
|
|
445
|
+
if (!existing.includes(name))
|
|
446
|
+
existing.push(name);
|
|
447
|
+
}
|
|
448
|
+
byModule.set(entry.from, existing);
|
|
449
|
+
}
|
|
450
|
+
const lines = [...verbatim];
|
|
451
|
+
byModule.forEach((names, from) => {
|
|
452
|
+
lines.push(`import { ${names.join(', ')} } from '${from}';`);
|
|
453
|
+
});
|
|
454
|
+
return lines.join('\n');
|
|
455
|
+
}
|
|
456
|
+
/** Indent every non-empty line of a block. */
|
|
457
|
+
function indent(code, spaces) {
|
|
458
|
+
const pad = ' '.repeat(spaces);
|
|
459
|
+
return code
|
|
460
|
+
.split('\n')
|
|
461
|
+
.map(line => (line.trim() === '' ? '' : pad + line))
|
|
462
|
+
.join('\n');
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Adapt a pattern for a specific framework.
|
|
466
|
+
*
|
|
467
|
+
* The framework-neutral body is moved into a service method or a hook, and its
|
|
468
|
+
* imports are hoisted above the wrapper. What this does NOT do is rewrite the
|
|
469
|
+
* body: a pattern that reaches the DOM with `document.getElementById` or calls
|
|
470
|
+
* `ajax` still does so after wrapping, and the comment in the output names that
|
|
471
|
+
* as the part to replace. Until each pattern carries a per-framework
|
|
472
|
+
* implementation, saying so is more use than a wrapper that reads as finished
|
|
473
|
+
* Angular but does not compile.
|
|
397
474
|
*/
|
|
398
475
|
export function adaptPatternForFramework(pattern, framework) {
|
|
399
476
|
const adapted = { ...pattern };
|
|
477
|
+
const { imports, body } = splitImports(pattern.code);
|
|
400
478
|
if (framework === 'angular') {
|
|
401
|
-
|
|
479
|
+
const header = renderImports([
|
|
480
|
+
{ names: ['Injectable', 'OnDestroy'], from: '@angular/core', raw: '' },
|
|
481
|
+
{ names: ['Subject'], from: 'rxjs', raw: '' },
|
|
482
|
+
...imports,
|
|
483
|
+
]);
|
|
484
|
+
adapted.code = `// Angular — the framework-neutral pattern, moved into a service.
|
|
485
|
+
// Replace the DOM access with a template binding or a signal, and \`ajax\` with
|
|
486
|
+
// HttpClient. End each pipe with \`takeUntil(this.destroy$)\` so it stops with
|
|
487
|
+
// the service.
|
|
488
|
+
${header}
|
|
489
|
+
|
|
402
490
|
@Injectable({ providedIn: 'root' })
|
|
403
491
|
export class RxJSPatternService implements OnDestroy {
|
|
404
|
-
private destroy$ = new Subject<void>();
|
|
492
|
+
private readonly destroy$ = new Subject<void>();
|
|
405
493
|
|
|
406
|
-
|
|
494
|
+
start(): void {
|
|
495
|
+
${indent(body, 4)}
|
|
496
|
+
}
|
|
407
497
|
|
|
408
|
-
ngOnDestroy() {
|
|
498
|
+
ngOnDestroy(): void {
|
|
409
499
|
this.destroy$.next();
|
|
410
500
|
this.destroy$.complete();
|
|
411
501
|
}
|
|
@@ -418,18 +508,25 @@ ${pattern.code}
|
|
|
418
508
|
];
|
|
419
509
|
}
|
|
420
510
|
else if (framework === 'react') {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
511
|
+
const header = renderImports([
|
|
512
|
+
{ names: ['useEffect', 'useState', 'useRef'], from: 'react', raw: '' },
|
|
513
|
+
{ names: ['Subscription'], from: 'rxjs', raw: '' },
|
|
514
|
+
...imports,
|
|
515
|
+
]);
|
|
516
|
+
adapted.code = `// React — the framework-neutral pattern, moved into a hook.
|
|
517
|
+
// Replace the DOM access with a ref or controlled input, and \`ajax\` with your
|
|
518
|
+
// data-fetching layer. Subscribe the stream the body builds where the comment
|
|
519
|
+
// below says so, and the cleanup will tear it down.
|
|
520
|
+
${header}
|
|
424
521
|
|
|
425
522
|
export function useRxJSPattern() {
|
|
426
523
|
const [data, setData] = useState(null);
|
|
427
524
|
const subscription = useRef<Subscription>();
|
|
428
525
|
|
|
429
526
|
useEffect(() => {
|
|
430
|
-
${
|
|
527
|
+
${indent(body, 4)}
|
|
431
528
|
|
|
432
|
-
subscription.current = stream
|
|
529
|
+
// subscription.current = <the stream built above>.subscribe(setData);
|
|
433
530
|
|
|
434
531
|
return () => {
|
|
435
532
|
subscription.current?.unsubscribe();
|
|
@@ -446,22 +543,25 @@ ${pattern.code.split('\n').map(line => ' ' + line).join('\n')}
|
|
|
446
543
|
];
|
|
447
544
|
}
|
|
448
545
|
else if (framework === 'vue') {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
546
|
+
const header = renderImports([
|
|
547
|
+
{ names: ['ref', 'onBeforeUnmount'], from: 'vue', raw: '' },
|
|
548
|
+
{ names: ['Subject', 'takeUntil'], from: 'rxjs', raw: '' },
|
|
549
|
+
...imports,
|
|
550
|
+
]);
|
|
551
|
+
adapted.code = `// Vue 3 Composition API — the framework-neutral pattern, moved into a composable.
|
|
552
|
+
// Replace the DOM access with a template ref, and \`ajax\` with your data-fetching
|
|
553
|
+
// layer. End each pipe with \`takeUntil(destroy$)\` so it stops with the component.
|
|
554
|
+
${header}
|
|
453
555
|
|
|
454
556
|
export function useRxJSPattern() {
|
|
455
|
-
const destroy$ = new Subject();
|
|
557
|
+
const destroy$ = new Subject<void>();
|
|
456
558
|
const data = ref(null);
|
|
457
559
|
|
|
458
|
-
${
|
|
560
|
+
${indent(body, 2)}
|
|
459
561
|
|
|
460
|
-
stream
|
|
461
|
-
|
|
462
|
-
)
|
|
463
|
-
data.value = value;
|
|
464
|
-
});
|
|
562
|
+
// <the stream built above>.pipe(takeUntil(destroy$)).subscribe(value => {
|
|
563
|
+
// data.value = value;
|
|
564
|
+
// });
|
|
465
565
|
|
|
466
566
|
onBeforeUnmount(() => {
|
|
467
567
|
destroy$.next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/data/patterns.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/data/patterns.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,102 +1,47 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const tools = [
|
|
27
|
-
executeStreamTool.definition,
|
|
28
|
-
generateMarbleTool.definition,
|
|
29
|
-
analyzeOperatorsTool.definition,
|
|
30
|
-
detectMemoryLeakTool.definition,
|
|
31
|
-
suggestPatternTool.definition,
|
|
32
|
-
lintRxjsTool.definition,
|
|
33
|
-
];
|
|
34
|
-
// Tool handlers mapping
|
|
35
|
-
const toolHandlers = {
|
|
36
|
-
'execute_stream': executeStreamTool.handler,
|
|
37
|
-
'generate_marble': generateMarbleTool.handler,
|
|
38
|
-
'analyze_operators': analyzeOperatorsTool.handler,
|
|
39
|
-
'detect_memory_leak': detectMemoryLeakTool.handler,
|
|
40
|
-
'suggest_pattern': suggestPatternTool.handler,
|
|
41
|
-
'lint_rxjs': lintRxjsTool.handler,
|
|
42
|
-
};
|
|
43
|
-
// Handle list tools request
|
|
44
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
45
|
-
return {
|
|
46
|
-
tools: tools.map(tool => ({
|
|
47
|
-
name: tool.name,
|
|
48
|
-
description: tool.description,
|
|
49
|
-
inputSchema: zodToJsonSchema(tool.inputSchema, { target: 'openApi3' }),
|
|
50
|
-
outputSchema: tool.outputSchema,
|
|
51
|
-
annotations: tool.annotations,
|
|
52
|
-
})),
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
// Handle tool execution request
|
|
56
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
57
|
-
const { name, arguments: args } = request.params;
|
|
58
|
-
const handler = toolHandlers[name];
|
|
59
|
-
if (!handler) {
|
|
60
|
-
throw new McpError(ErrorCode.MethodNotFound, `Tool "${name}" not found. Available tools: ${Object.keys(toolHandlers).join(', ')}`);
|
|
61
|
-
}
|
|
2
|
+
import { serveStdio } from '@modelcontextprotocol/server/stdio';
|
|
3
|
+
import { createServer, SERVER_NAME, SERVER_VERSION } from './server.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handle returned by `serveStdio`. Closed on shutdown so the transport is torn
|
|
6
|
+
* down before the process exits.
|
|
7
|
+
*/
|
|
8
|
+
let stdioHandle;
|
|
9
|
+
/**
|
|
10
|
+
* Start the server on stdio.
|
|
11
|
+
*
|
|
12
|
+
* `serveStdio` owns the transport and the protocol era decision: the opening
|
|
13
|
+
* exchange selects the era, one instance from the factory is pinned for the
|
|
14
|
+
* lifetime of the connection, and clients speaking the 2025 revisions are
|
|
15
|
+
* served from the same factory (`legacy: 'serve'` is the default).
|
|
16
|
+
*/
|
|
17
|
+
function runStdio() {
|
|
18
|
+
stdioHandle = serveStdio(() => createServer(), {
|
|
19
|
+
onerror: (error) => console.error(`stdio transport error: ${error.message}`),
|
|
20
|
+
});
|
|
21
|
+
// stdout is the JSON-RPC channel, so every log line goes to stderr.
|
|
22
|
+
console.error(`${SERVER_NAME} v${SERVER_VERSION} running on stdio`);
|
|
23
|
+
}
|
|
24
|
+
async function gracefulShutdown(signal) {
|
|
25
|
+
console.error(`Received ${signal}, shutting down RxJS MCP Server...`);
|
|
62
26
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
content: result.content,
|
|
66
|
-
};
|
|
27
|
+
await stdioHandle?.close();
|
|
28
|
+
process.exit(0);
|
|
67
29
|
}
|
|
68
30
|
catch (error) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
73
|
-
throw new McpError(ErrorCode.InternalError, `Tool "${name}" failed: ${errorMessage}`);
|
|
31
|
+
console.error('Shutdown error:', error);
|
|
32
|
+
process.exit(1);
|
|
74
33
|
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
34
|
+
}
|
|
35
|
+
function main() {
|
|
36
|
+
process.on('SIGINT', () => void gracefulShutdown('SIGINT'));
|
|
37
|
+
process.on('SIGTERM', () => void gracefulShutdown('SIGTERM'));
|
|
79
38
|
try {
|
|
80
|
-
|
|
81
|
-
console.error('RxJS MCP Server started successfully');
|
|
39
|
+
runStdio();
|
|
82
40
|
}
|
|
83
41
|
catch (error) {
|
|
84
42
|
console.error('Failed to start RxJS MCP Server:', error);
|
|
85
43
|
process.exit(1);
|
|
86
44
|
}
|
|
87
45
|
}
|
|
88
|
-
|
|
89
|
-
process.on('SIGINT', async () => {
|
|
90
|
-
console.error('Shutting down RxJS MCP Server...');
|
|
91
|
-
process.exit(0);
|
|
92
|
-
});
|
|
93
|
-
process.on('SIGTERM', async () => {
|
|
94
|
-
console.error('Shutting down RxJS MCP Server...');
|
|
95
|
-
process.exit(0);
|
|
96
|
-
});
|
|
97
|
-
// Run the server
|
|
98
|
-
main().catch((error) => {
|
|
99
|
-
console.error('Fatal error:', error);
|
|
100
|
-
process.exit(1);
|
|
101
|
-
});
|
|
46
|
+
main();
|
|
102
47
|
//# 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,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAA0B,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE;;;GAGG;AACH,IAAI,WAA0C,CAAC;AAE/C;;;;;;;GAOG;AACH,SAAS,QAAQ;IACf,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE;QAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;KAC7E,CAAC,CAAC;IAEH,oEAAoE;IACpE,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,KAAK,cAAc,mBAAmB,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAc;IAC5C,OAAO,CAAC,KAAK,CAAC,YAAY,MAAM,oCAAoC,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,QAAQ,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
2
|
+
export declare const SERVER_NAME = "rxjs-mcp";
|
|
3
|
+
export declare const SERVER_VERSION: string;
|
|
4
|
+
/**
|
|
5
|
+
* Create and configure the MCP server.
|
|
6
|
+
*
|
|
7
|
+
* This is the factory the stdio entry point hands to `serveStdio`, and the
|
|
8
|
+
* same factory the protocol tests drive in-process through `createMcpHandler`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createServer(): McpServer;
|
|
11
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAczD,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,cAAc,QAAU,CAAC;AAoCtC;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAsBxC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { executeStreamTool } from './tools/execute-stream.js';
|
|
4
|
+
import { generateMarbleTool } from './tools/marble-diagram.js';
|
|
5
|
+
import { analyzeOperatorsTool } from './tools/analyze-operators.js';
|
|
6
|
+
import { detectMemoryLeakTool } from './tools/memory-leak.js';
|
|
7
|
+
import { suggestPatternTool } from './tools/suggest-pattern.js';
|
|
8
|
+
import { lintRxjsTool } from './tools/lint-rxjs.js';
|
|
9
|
+
import { RXJS_VERSION_TAG } from './types.js';
|
|
10
|
+
// Read version from package.json (single source of truth)
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const { version } = require('../package.json');
|
|
13
|
+
export const SERVER_NAME = 'rxjs-mcp';
|
|
14
|
+
export const SERVER_VERSION = version;
|
|
15
|
+
/**
|
|
16
|
+
* Returned to the client in the `initialize` response, so it is read before
|
|
17
|
+
* any tool is chosen — earlier than the README and earlier than any tool
|
|
18
|
+
* description. What it has to prevent is this server being read as an
|
|
19
|
+
* authority on the caller's project: `execute_stream` runs a snippet in a
|
|
20
|
+
* worker that has RxJS and nothing else, `lint_rxjs` and `detect_memory_leak`
|
|
21
|
+
* match text rather than types, and the operator data is a bundled snapshot
|
|
22
|
+
* rather than a live view of rxjs.dev. Each of those reads as a general
|
|
23
|
+
* capability when only the tool names are seen.
|
|
24
|
+
*/
|
|
25
|
+
const INSTRUCTIONS = [
|
|
26
|
+
'This server executes and inspects RxJS snippets in isolation. It does NOT run the caller\'s project.',
|
|
27
|
+
'',
|
|
28
|
+
'What it does NOT do:',
|
|
29
|
+
`- It does not read, write, or import files from the caller's workspace. execute_stream evaluates the snippet in a worker thread whose only module is RxJS ${RXJS_VERSION_TAG} — no DOM, no network, no project dependencies. A snippet that imports from the project will not run here.`,
|
|
30
|
+
'- lint_rxjs and detect_memory_leak match source text with regular expressions. They have no type information, so they do not replace running eslint-plugin-rxjs-x in the project, and a result with no findings is not evidence that the code is correct.',
|
|
31
|
+
`- analyze_operators and suggest_pattern read a bundled dataset pinned to RxJS ${RXJS_VERSION_TAG}. An operator this server does not report is an operator the dataset does not carry, NOT an operator that does not exist in RxJS.`,
|
|
32
|
+
'- It does not fetch rxjs.dev at call time. The Official / Source / Guide links in the output are built from the operator name.',
|
|
33
|
+
'',
|
|
34
|
+
'Tool results carry links to rxjs.dev (authoritative, for humans), the pinned GitHub source (JSDoc and implementation, readable by a model), and a bilingual guide. Follow the source link when the exact semantics of an operator decide the answer.',
|
|
35
|
+
].join('\n');
|
|
36
|
+
/**
|
|
37
|
+
* Every tool this server exposes, in the order they are advertised.
|
|
38
|
+
*/
|
|
39
|
+
const tools = [
|
|
40
|
+
executeStreamTool,
|
|
41
|
+
generateMarbleTool,
|
|
42
|
+
analyzeOperatorsTool,
|
|
43
|
+
detectMemoryLeakTool,
|
|
44
|
+
suggestPatternTool,
|
|
45
|
+
lintRxjsTool,
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Create and configure the MCP server.
|
|
49
|
+
*
|
|
50
|
+
* This is the factory the stdio entry point hands to `serveStdio`, and the
|
|
51
|
+
* same factory the protocol tests drive in-process through `createMcpHandler`.
|
|
52
|
+
*/
|
|
53
|
+
export function createServer() {
|
|
54
|
+
const server = new McpServer({
|
|
55
|
+
name: SERVER_NAME,
|
|
56
|
+
version: SERVER_VERSION,
|
|
57
|
+
}, { instructions: INSTRUCTIONS });
|
|
58
|
+
for (const { definition, handler } of tools) {
|
|
59
|
+
server.registerTool(definition.name, {
|
|
60
|
+
description: definition.description,
|
|
61
|
+
inputSchema: definition.inputSchema,
|
|
62
|
+
annotations: definition.annotations,
|
|
63
|
+
}, async (args) => handler(args));
|
|
64
|
+
}
|
|
65
|
+
return server;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAsB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElE,0DAA0D;AAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC;;;;;;;;;GASG;AACH,MAAM,YAAY,GAAG;IACnB,sGAAsG;IACtG,EAAE;IACF,sBAAsB;IACtB,6JAA6J,gBAAgB,4GAA4G;IACzR,2PAA2P;IAC3P,iFAAiF,gBAAgB,mIAAmI;IACpO,gIAAgI;IAChI,EAAE;IACF,sPAAsP;CACvP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb;;GAEG;AACH,MAAM,KAAK,GAAyB;IAClC,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,kBAAkB;IAClB,YAAY;CACb,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,EACD,EAAE,YAAY,EAAE,YAAY,EAAE,CAC/B,CAAC;IAEF,KAAK,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CACjB,UAAU,CAAC,IAAI,EACf;YACE,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAC9B,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -71,6 +71,32 @@ export interface SubscriptionSafetyReport {
|
|
|
71
71
|
* over-report on modern, idiomatic code.
|
|
72
72
|
*/
|
|
73
73
|
export declare function analyzeSubscriptionSafety(code: string, framework?: Framework): SubscriptionSafetyReport;
|
|
74
|
+
/**
|
|
75
|
+
* What a `shareReplay(...)` call in the code actually declares.
|
|
76
|
+
*
|
|
77
|
+
* The two properties are independent and have different consequences, so they
|
|
78
|
+
* are reported separately rather than folded into one "unsafe" flag:
|
|
79
|
+
*
|
|
80
|
+
* - `bounded: false` — no buffer size given, so every emission is retained for
|
|
81
|
+
* the lifetime of the shared subscription.
|
|
82
|
+
* - `refCount: false` — the subscription to the source stays open after the
|
|
83
|
+
* last subscriber leaves. `shareReplay(1)` is bounded but still has this.
|
|
84
|
+
*/
|
|
85
|
+
export interface ShareReplayReport {
|
|
86
|
+
/** A `shareReplay(` call appears in the code. */
|
|
87
|
+
present: boolean;
|
|
88
|
+
/** A buffer size is given, as `shareReplay(N)` or `{ bufferSize: N }`. */
|
|
89
|
+
bounded: boolean;
|
|
90
|
+
/** `{ refCount: true }` is given. */
|
|
91
|
+
refCount: boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Read the arguments of the first `shareReplay(...)` in the code.
|
|
95
|
+
*
|
|
96
|
+
* Argument scanning is bracket-counting rather than a regular expression, so a
|
|
97
|
+
* config object nested inside the call does not truncate the match.
|
|
98
|
+
*/
|
|
99
|
+
export declare function analyzeShareReplay(code: string): ShareReplayReport;
|
|
74
100
|
/** `shareReplay` without explicit `refCount: true`. Memory-leak risk. */
|
|
75
101
|
export declare function hasUnsafeShareReplay(code: string): boolean;
|
|
76
102
|
/** `fromEvent(...)` — DOM listener that requires explicit cleanup. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-analysis.d.ts","sourceRoot":"","sources":["../../src/shared/subscription-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAO3D;AAMD,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED,qCAAqC;AACrC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAMD,MAAM,WAAW,wBAAwB;IACvC,4FAA4F;IAC5F,cAAc,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,SAAkB,GAC5B,wBAAwB,CAqC1B;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
1
|
+
{"version":3,"file":"subscription-analysis.d.ts","sourceRoot":"","sources":["../../src/shared/subscription-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAO3D;AAMD,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED,qCAAqC;AACrC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAMD,MAAM,WAAW,wBAAwB;IACvC,4FAA4F;IAC5F,cAAc,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,SAAkB,GAC5B,wBAAwB,CAqC1B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CA0BlE;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
|
|
@@ -122,11 +122,42 @@ export function analyzeSubscriptionSafety(code, framework = 'none') {
|
|
|
122
122
|
frameworkPattern,
|
|
123
123
|
};
|
|
124
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Read the arguments of the first `shareReplay(...)` in the code.
|
|
127
|
+
*
|
|
128
|
+
* Argument scanning is bracket-counting rather than a regular expression, so a
|
|
129
|
+
* config object nested inside the call does not truncate the match.
|
|
130
|
+
*/
|
|
131
|
+
export function analyzeShareReplay(code) {
|
|
132
|
+
const match = /shareReplay\s*\(/.exec(code);
|
|
133
|
+
if (!match) {
|
|
134
|
+
return { present: false, bounded: false, refCount: false };
|
|
135
|
+
}
|
|
136
|
+
let depth = 0;
|
|
137
|
+
let end = -1;
|
|
138
|
+
const start = match.index + match[0].length;
|
|
139
|
+
for (let i = start - 1; i < code.length; i++) {
|
|
140
|
+
if (code[i] === '(')
|
|
141
|
+
depth++;
|
|
142
|
+
else if (code[i] === ')') {
|
|
143
|
+
depth--;
|
|
144
|
+
if (depth === 0) {
|
|
145
|
+
end = i;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const args = (end === -1 ? code.slice(start) : code.slice(start, end)).trim();
|
|
151
|
+
return {
|
|
152
|
+
present: true,
|
|
153
|
+
bounded: /^\d+/.test(args) || /bufferSize\s*:\s*\d+/.test(args),
|
|
154
|
+
refCount: /refCount\s*:\s*true/.test(args),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
125
157
|
/** `shareReplay` without explicit `refCount: true`. Memory-leak risk. */
|
|
126
158
|
export function hasUnsafeShareReplay(code) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return !/refCount\s*:\s*true/.test(code);
|
|
159
|
+
const report = analyzeShareReplay(code);
|
|
160
|
+
return report.present && !report.refCount;
|
|
130
161
|
}
|
|
131
162
|
/** `fromEvent(...)` — DOM listener that requires explicit cleanup. */
|
|
132
163
|
export function countFromEvent(code) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-analysis.js","sourceRoot":"","sources":["../../src/shared/subscription-analysis.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subscription-analysis.js","sourceRoot":"","sources":["../../src/shared/subscription-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-operators.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-operators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAoD,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"analyze-operators.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-operators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAoD,MAAM,aAAa,CAAC;AAgPnG,eAAO,MAAM,oBAAoB,EAAE,kBA4IlC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { creationFunctionDatabase } from '../data/creation-functions.js';
|
|
3
3
|
import { operatorDatabase } from '../data/operators.js';
|
|
4
|
+
import { analyzeShareReplay } from '../shared/subscription-analysis.js';
|
|
4
5
|
// Input schema
|
|
5
6
|
const inputSchema = z.object({
|
|
6
7
|
code: z.string().describe('RxJS operator chain code to analyze'),
|
|
@@ -121,7 +122,7 @@ function analyzeCreationFunctions(functions) {
|
|
|
121
122
|
});
|
|
122
123
|
}
|
|
123
124
|
// Analyze operator chain
|
|
124
|
-
function analyzeOperatorChain(operators, checkPerformance) {
|
|
125
|
+
function analyzeOperatorChain(operators, checkPerformance, code) {
|
|
125
126
|
const analysis = {
|
|
126
127
|
operators: operators.map(op => {
|
|
127
128
|
const info = operatorDatabase[op];
|
|
@@ -167,9 +168,21 @@ function analyzeOperatorChain(operators, checkPerformance) {
|
|
|
167
168
|
if (!hasErrorHandling && operators.some(op => ['switchMap', 'mergeMap', 'concatMap'].includes(op))) {
|
|
168
169
|
analysis.suggestions.push('Consider adding error handling with `catchError()` or `retry()`');
|
|
169
170
|
}
|
|
170
|
-
// Check for potential memory leaks
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
// Check for potential memory leaks.
|
|
172
|
+
//
|
|
173
|
+
// The two properties of shareReplay are independent: `shareReplay(1)` gives
|
|
174
|
+
// a buffer size but no refCount, and `shareReplay({ refCount: true })` gives
|
|
175
|
+
// refCount but no buffer size. Reporting whichever is missing — instead of
|
|
176
|
+
// one fixed sentence for every call — is what keeps this from contradicting
|
|
177
|
+
// detect_memory_leak and the no-sharereplay rule in lint_rxjs.
|
|
178
|
+
const shareReplay = analyzeShareReplay(code);
|
|
179
|
+
if (shareReplay.present) {
|
|
180
|
+
if (!shareReplay.bounded) {
|
|
181
|
+
analysis.performance.push('⚠️ `shareReplay()` without a buffer size retains every emission for the lifetime of the shared subscription');
|
|
182
|
+
}
|
|
183
|
+
if (!shareReplay.refCount) {
|
|
184
|
+
analysis.performance.push('⚠️ `shareReplay()` without `refCount: true` keeps the source subscribed after the last subscriber leaves — use `shareReplay({ bufferSize: 1, refCount: true })`');
|
|
185
|
+
}
|
|
173
186
|
}
|
|
174
187
|
// Check for missing takeUntil
|
|
175
188
|
if (!operators.some(op => op.startsWith('take')) && operators.length > 3) {
|
|
@@ -216,7 +229,7 @@ export const analyzeOperatorsTool = {
|
|
|
216
229
|
};
|
|
217
230
|
}
|
|
218
231
|
const creationAnalysis = analyzeCreationFunctions(creationFunctions);
|
|
219
|
-
const operatorAnalysis = analyzeOperatorChain(operators, input.checkPerformance);
|
|
232
|
+
const operatorAnalysis = analyzeOperatorChain(operators, input.checkPerformance, input.code);
|
|
220
233
|
const alternatives = input.includeAlternatives ? suggestAlternatives(operators) : [];
|
|
221
234
|
const parts = [
|
|
222
235
|
'## RxJS Code Analysis',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-operators.js","sourceRoot":"","sources":["../../src/tools/analyze-operators.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analyze-operators.js","sourceRoot":"","sources":["../../src/tools/analyze-operators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marble-diagram.d.ts","sourceRoot":"","sources":["../../src/tools/marble-diagram.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAqC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"marble-diagram.d.ts","sourceRoot":"","sources":["../../src/tools/marble-diagram.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAqC,MAAM,aAAa,CAAC;AA8LpF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCvD;AAGD,eAAO,MAAM,kBAAkB,EAAE,kBAsDhC,CAAC"}
|
|
@@ -14,16 +14,64 @@ const inputSchema = z.object({
|
|
|
14
14
|
function generateMarbleDiagram(events, duration, scale = 50, showValues = true) {
|
|
15
15
|
// Sort events by time
|
|
16
16
|
const sortedEvents = [...events].sort((a, b) => a.time - b.time);
|
|
17
|
-
// Determine diagram duration
|
|
17
|
+
// Determine diagram duration.
|
|
18
|
+
//
|
|
19
|
+
// A stream that ends with `complete` or `error` needs one frame for that
|
|
20
|
+
// marker and nothing after it; anything else gets two frames of tail so the
|
|
21
|
+
// last emission is not flush against the edge.
|
|
18
22
|
const maxTime = sortedEvents.length > 0
|
|
19
23
|
? Math.max(...sortedEvents.map(e => e.time))
|
|
20
24
|
: 0;
|
|
21
|
-
const
|
|
25
|
+
const lastEvent = sortedEvents[sortedEvents.length - 1];
|
|
26
|
+
const terminates = lastEvent?.type === 'complete' || lastEvent?.type === 'error';
|
|
27
|
+
const diagramDuration = duration !== undefined && duration > 0
|
|
28
|
+
? duration
|
|
29
|
+
: maxTime + scale * (terminates ? 1 : 2);
|
|
22
30
|
// Calculate diagram width
|
|
23
31
|
const width = Math.floor(diagramDuration / scale);
|
|
24
32
|
// Build the timeline
|
|
25
33
|
let timeline = '-'.repeat(width);
|
|
26
|
-
|
|
34
|
+
/** Characters the diagram itself owns — never handed out as a value marker. */
|
|
35
|
+
const RESERVED = new Set(['-', '|', '#', ' ']);
|
|
36
|
+
/** Serialized value → marker, so the same value always draws the same character. */
|
|
37
|
+
const markerForValue = new Map();
|
|
38
|
+
/** Every marker already placed, so a letter is never handed out twice. */
|
|
39
|
+
const usedMarkers = new Set();
|
|
40
|
+
/** Marker → serialized value, in the order the markers were allocated. Only
|
|
41
|
+
* markers that do not show their own value get an entry: `0` needs no legend
|
|
42
|
+
* line saying `0 = 0`, but `a = {"id":1}` does. */
|
|
43
|
+
const legend = new Map();
|
|
44
|
+
let letterIndex = 0;
|
|
45
|
+
/** Next unused letter a–z, wrapping. */
|
|
46
|
+
function nextLetter() {
|
|
47
|
+
for (let attempt = 0; attempt < 26; attempt++) {
|
|
48
|
+
const letter = String.fromCharCode(97 + (letterIndex++ % 26));
|
|
49
|
+
if (!usedMarkers.has(letter))
|
|
50
|
+
return letter;
|
|
51
|
+
}
|
|
52
|
+
return '?';
|
|
53
|
+
}
|
|
54
|
+
/** The character that stands for this value on the timeline. */
|
|
55
|
+
function markerFor(value) {
|
|
56
|
+
const serialized = JSON.stringify(value);
|
|
57
|
+
const existing = markerForValue.get(serialized);
|
|
58
|
+
if (existing)
|
|
59
|
+
return existing;
|
|
60
|
+
let marker;
|
|
61
|
+
if (typeof value === 'string' && value.length === 1 && !RESERVED.has(value) && !usedMarkers.has(value)) {
|
|
62
|
+
marker = value;
|
|
63
|
+
}
|
|
64
|
+
else if (typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= 9 && !usedMarkers.has(String(value))) {
|
|
65
|
+
marker = value.toString();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
marker = nextLetter();
|
|
69
|
+
legend.set(marker, serialized);
|
|
70
|
+
}
|
|
71
|
+
markerForValue.set(serialized, marker);
|
|
72
|
+
usedMarkers.add(marker);
|
|
73
|
+
return marker;
|
|
74
|
+
}
|
|
27
75
|
// Place events on timeline
|
|
28
76
|
sortedEvents.forEach(event => {
|
|
29
77
|
const position = Math.floor(event.time / scale);
|
|
@@ -37,26 +85,11 @@ function generateMarbleDiagram(events, duration, scale = 50, showValues = true)
|
|
|
37
85
|
marker = '|';
|
|
38
86
|
break;
|
|
39
87
|
default:
|
|
40
|
-
|
|
41
|
-
if (typeof event.value === 'string' && event.value.length === 1) {
|
|
42
|
-
marker = event.value;
|
|
43
|
-
}
|
|
44
|
-
else if (typeof event.value === 'number' && event.value >= 0 && event.value <= 9) {
|
|
45
|
-
marker = event.value.toString();
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
// Use letters a-z for complex values
|
|
49
|
-
const charCode = 97 + (Object.keys(valueMap).length % 26);
|
|
50
|
-
marker = String.fromCharCode(charCode);
|
|
51
|
-
valueMap[position] = JSON.stringify(event.value);
|
|
52
|
-
}
|
|
88
|
+
marker = markerFor(event.value);
|
|
53
89
|
break;
|
|
54
90
|
}
|
|
55
91
|
// Replace character at position
|
|
56
92
|
timeline = timeline.substring(0, position) + marker + timeline.substring(position + 1);
|
|
57
|
-
if (event.type === 'next' && !valueMap[position]) {
|
|
58
|
-
valueMap[position] = JSON.stringify(event.value);
|
|
59
|
-
}
|
|
60
93
|
}
|
|
61
94
|
});
|
|
62
95
|
// Build the complete diagram
|
|
@@ -64,15 +97,11 @@ function generateMarbleDiagram(events, duration, scale = 50, showValues = true)
|
|
|
64
97
|
// Add timeline
|
|
65
98
|
parts.push(timeline);
|
|
66
99
|
// Add value references if needed
|
|
67
|
-
if (showValues &&
|
|
100
|
+
if (showValues && legend.size > 0) {
|
|
68
101
|
parts.push('');
|
|
69
102
|
parts.push('Values:');
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const marker = timeline[position];
|
|
73
|
-
if (marker && marker !== '-' && marker !== '|' && marker !== '#') {
|
|
74
|
-
parts.push(` ${marker} = ${value}`);
|
|
75
|
-
}
|
|
103
|
+
legend.forEach((value, marker) => {
|
|
104
|
+
parts.push(` ${marker} = ${value}`);
|
|
76
105
|
});
|
|
77
106
|
}
|
|
78
107
|
// Generate explanation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marble-diagram.js","sourceRoot":"","sources":["../../src/tools/marble-diagram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAe;AACf,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QACvE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;KACvE,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACzF,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACvG,CAAC,CAAC;AAEH,gCAAgC;AAChC,SAAS,qBAAqB,CAC5B,MAA0D,EAC1D,QAAiB,EACjB,QAAgB,EAAE,EAClB,aAAsB,IAAI;IAE1B,sBAAsB;IACtB,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAEjE,
|
|
1
|
+
{"version":3,"file":"marble-diagram.js","sourceRoot":"","sources":["../../src/tools/marble-diagram.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export
|
|
2
|
+
export type ToolResponse = {
|
|
3
3
|
content: Array<{
|
|
4
4
|
type: 'text';
|
|
5
5
|
text: string;
|
|
6
6
|
}>;
|
|
7
|
-
}
|
|
7
|
+
};
|
|
8
8
|
export type ToolHandler = (args: unknown) => Promise<ToolResponse>;
|
|
9
9
|
export interface ToolDefinition {
|
|
10
10
|
name: string;
|
|
11
11
|
description: string;
|
|
12
12
|
inputSchema: z.ZodType<any>;
|
|
13
|
-
outputSchema?: any;
|
|
14
13
|
annotations?: {
|
|
15
14
|
readOnlyHint?: boolean;
|
|
16
15
|
destructiveHint?: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA0DA,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,6EAA6E,CAAC;AAE5G,wFAAwF;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD,wFAAwF;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,0CAA0C,gBAAgB,eAAe,CAAC;AAGzG,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,IAA6B,EAAE,IAAY;IAC1E,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,GAAG,iBAAiB,uBAAuB,IAAI,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,GAAG,iBAAiB,kBAAkB,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,GAAG,eAAe,IAAI,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,cAAc,IAAI,IAAI,KAAK,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shuji-bonji/rxjs-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "RxJS MCP Server - Execute, debug, and visualize RxJS streams for AI assistants",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -52,13 +52,13 @@
|
|
|
52
52
|
"prepare": "npm run build"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@modelcontextprotocol/
|
|
55
|
+
"@modelcontextprotocol/server": "^2.0.0",
|
|
56
56
|
"rxjs": "^7.8.2",
|
|
57
|
-
"zod": "^
|
|
58
|
-
"zod-to-json-schema": "^3.25.0"
|
|
57
|
+
"zod": "^4.2.0"
|
|
59
58
|
},
|
|
60
59
|
"devDependencies": {
|
|
61
60
|
"@eslint/js": "^9.0.0",
|
|
61
|
+
"@modelcontextprotocol/client": "^2.0.0",
|
|
62
62
|
"@types/node": "^20.19.27",
|
|
63
63
|
"eslint": "^9.0.0",
|
|
64
64
|
"eslint-plugin-rxjs-x": "^0.7.0",
|