@shuji-bonji/pdf-reader-mcp 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.ja.md +45 -0
  3. package/README.md +45 -0
  4. package/dist/errors.d.ts +83 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/errors.js +75 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/schemas/tier1.d.ts +1 -1
  9. package/dist/tools/tier1/get-metadata.d.ts.map +1 -1
  10. package/dist/tools/tier1/get-metadata.js +4 -2
  11. package/dist/tools/tier1/get-metadata.js.map +1 -1
  12. package/dist/tools/tier1/get-page-count.d.ts.map +1 -1
  13. package/dist/tools/tier1/get-page-count.js +4 -2
  14. package/dist/tools/tier1/get-page-count.js.map +1 -1
  15. package/dist/tools/tier1/read-images.d.ts.map +1 -1
  16. package/dist/tools/tier1/read-images.js +4 -2
  17. package/dist/tools/tier1/read-images.js.map +1 -1
  18. package/dist/tools/tier1/read-text.d.ts.map +1 -1
  19. package/dist/tools/tier1/read-text.js +4 -2
  20. package/dist/tools/tier1/read-text.js.map +1 -1
  21. package/dist/tools/tier1/read-url.d.ts.map +1 -1
  22. package/dist/tools/tier1/read-url.js +4 -2
  23. package/dist/tools/tier1/read-url.js.map +1 -1
  24. package/dist/tools/tier1/search-text.d.ts.map +1 -1
  25. package/dist/tools/tier1/search-text.js +4 -2
  26. package/dist/tools/tier1/search-text.js.map +1 -1
  27. package/dist/tools/tier1/summarize.d.ts.map +1 -1
  28. package/dist/tools/tier1/summarize.js +4 -2
  29. package/dist/tools/tier1/summarize.js.map +1 -1
  30. package/dist/tools/tier2/extract-tables.d.ts.map +1 -1
  31. package/dist/tools/tier2/extract-tables.js +6 -2
  32. package/dist/tools/tier2/extract-tables.js.map +1 -1
  33. package/dist/tools/tier2/inspect-annotations.d.ts.map +1 -1
  34. package/dist/tools/tier2/inspect-annotations.js +6 -2
  35. package/dist/tools/tier2/inspect-annotations.js.map +1 -1
  36. package/dist/tools/tier2/inspect-fonts.d.ts.map +1 -1
  37. package/dist/tools/tier2/inspect-fonts.js +6 -2
  38. package/dist/tools/tier2/inspect-fonts.js.map +1 -1
  39. package/dist/tools/tier2/inspect-signatures.d.ts.map +1 -1
  40. package/dist/tools/tier2/inspect-signatures.js +6 -2
  41. package/dist/tools/tier2/inspect-signatures.js.map +1 -1
  42. package/dist/tools/tier2/inspect-structure.d.ts.map +1 -1
  43. package/dist/tools/tier2/inspect-structure.js +6 -2
  44. package/dist/tools/tier2/inspect-structure.js.map +1 -1
  45. package/dist/tools/tier2/inspect-tags.d.ts.map +1 -1
  46. package/dist/tools/tier2/inspect-tags.js +6 -2
  47. package/dist/tools/tier2/inspect-tags.js.map +1 -1
  48. package/dist/tools/tier3/compare-structure.d.ts.map +1 -1
  49. package/dist/tools/tier3/compare-structure.js +6 -2
  50. package/dist/tools/tier3/compare-structure.js.map +1 -1
  51. package/dist/tools/tier3/validate-metadata.d.ts.map +1 -1
  52. package/dist/tools/tier3/validate-metadata.js +6 -2
  53. package/dist/tools/tier3/validate-metadata.js.map +1 -1
  54. package/dist/tools/tier3/validate-tagged.d.ts.map +1 -1
  55. package/dist/tools/tier3/validate-tagged.js +6 -2
  56. package/dist/tools/tier3/validate-tagged.js.map +1 -1
  57. package/dist/utils/error-handler.d.ts +40 -3
  58. package/dist/utils/error-handler.d.ts.map +1 -1
  59. package/dist/utils/error-handler.js +210 -31
  60. package/dist/utils/error-handler.js.map +1 -1
  61. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,27 @@ 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.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.6.0] - 2026-05-07
9
+
10
+ ### Added
11
+
12
+ - **houki-hub family-compatible 構造化エラー応答** (Issue #9): すべての tool がエラー時に `LawServiceError` を JSON 文字列化したものを `content[0].text` に入れ、`isError: true` を立てて返すように変更しました。`code` 文字列は houki-hub family (houki-egov-mcp / houki-nta-mcp) と語彙を共有するため、LLM や Skill 層が一貫した解釈ロジックでエラーを処理できます。
13
+ - 新規 `src/errors.ts`: `LawErrorCode` / `LawServiceError` / `makeError` / `isLawServiceError` / `NEXT_ACTIONS` を定義 (houki-egov-mcp の `src/errors.ts` をリファレンスとし、`houki-abbreviations` 等への依存はなし)。
14
+ - 新規 `handleStructuredError(error)`: `unknown` を `LawServiceError` に正規化。`PdfReaderError` の legacy `code` を family 語彙にマッピング、汎用 `Error` のメッセージから `DOC_NOT_FOUND` / `INVALID_PDF` / `ENCRYPTED_PDF` / `FILE_TOO_LARGE` / `SOURCE_*` を推定。
15
+ - 採用 `code` 一覧: `INVALID_ARGUMENT` / `DOC_NOT_FOUND` / `INVALID_PDF` / `ENCRYPTED_PDF` / `UNSUPPORTED_PDF_FEATURE` / `FILE_TOO_LARGE` / `SOURCE_API_ERROR` / `SOURCE_TIMEOUT` / `SOURCE_UNAVAILABLE` / `INTERNAL_ERROR`。
16
+ - `PdfReaderError` を拡張: 直接 `familyCode` / `nextActions` / `retryable` / `detail` を渡せる第 4〜7 引数を追加 (既存呼び出しは変更なし、後方互換)。
17
+ - **`tests/tier1/errors.test.ts`**: makeError / isLawServiceError / NEXT_ACTIONS / handleStructuredError の単体テストを追加 (28 ケース)。
18
+
19
+ ### Changed
20
+
21
+ - **全 16 tool のエラーパス**: tier1 (7) / tier2 (6) / tier3 (3) すべてが `handleStructuredError(error)` を呼び、JSON 文字列 + `isError: true` を返す形に統一。`content[0].text` は人間可読文字列ではなく **JSON** になります。
22
+ - **README.md / README.ja.md** の Error Contract セクション: 「方針」記述を「v0.6.0 で実装済み」に更新し、`code` 一覧テーブル / 移行ノート (v0.5.x → v0.6.0) を追記。
23
+ - **`handleError(error)` (deprecated)**: 後方互換のため引き続き人間可読な文字列を返しますが、内部実装は `formatStructuredErrorForHumans(handleStructuredError(error))` に置き換わりました。新規 tool では `handleStructuredError()` を直接利用してください。
24
+
25
+ ### Migration
26
+
27
+ LLM クライアントや Skill 層で `content[0].text` を文字列として解釈していた場合、v0.6.0 以降は `JSON.parse(content[0].text)` で `LawServiceError` として解釈してください。`isError: true` フラグで構造化エラーかどうかを判定できます。詳細は README の「Error Contract (houki-hub family)」セクションを参照。
28
+
8
29
  ## [0.5.0] - 2026-05-07
9
30
 
10
31
  ### Added
package/README.ja.md CHANGED
@@ -238,6 +238,51 @@ pdf-reader-mcp/
238
238
  └── e2e/ # E2E tests (9 suites, 132 tests)
239
239
  ```
240
240
 
241
+ ## エラー応答 (houki-hub family contract)
242
+
243
+ **v0.6.0** より、本 MCP のエラー応答は **houki-hub family 共通契約**に従う構造化レスポンスを返します。`code` 文字列は family 全体で統一された語彙を使用するため、`houki-egov-mcp` / `houki-nta-mcp` と併用しても LLM・Skill 層は一貫したロジックで解釈できます。
244
+
245
+ - [`docs/ERROR-CODES.md`](https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-CODES.md) — エラーコード語彙の正典 (houki-research-skill)
246
+ - [`docs/ERROR-HANDLING.md`](https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-HANDLING.md) — 解釈ポリシー / next_actions テンプレ
247
+
248
+ 実装は **完全に独立** しており、`houki-abbreviations` 等の family パッケージに依存しません。リファレンス実装は [`houki-egov-mcp/src/errors.ts`](https://github.com/shuji-bonji/houki-egov-mcp/blob/main/src/errors.ts)、本 MCP のローカル定義は [`src/errors.ts`](./src/errors.ts) を参照してください。
249
+
250
+ エラー時は全 tool が `isError: true` を立て、`content[0].text` に `LawServiceError` を JSON 文字列化したものを入れて返します:
251
+
252
+ ```json
253
+ {
254
+ "error": "The file does not appear to be a valid PDF.",
255
+ "code": "INVALID_PDF",
256
+ "hint": "ファイルが破損していないか確認してください。",
257
+ "next_actions": [
258
+ {
259
+ "action": "inspect_structure",
260
+ "reason": "PDF が壊れている可能性があります。Catalog / Pages 等の構造を確認してください"
261
+ }
262
+ ],
263
+ "detail": { "cause": "Invalid PDF structure" }
264
+ }
265
+ ```
266
+
267
+ ### 本 MCP で使用するコード
268
+
269
+ | code | 用途 |
270
+ |---|---|
271
+ | `INVALID_ARGUMENT` | パス・URL・ページ範囲などクライアント側引数の不正 |
272
+ | `DOC_NOT_FOUND` | ファイル未存在 (ENOENT) |
273
+ | `INVALID_PDF` | PDF として不正・破損 |
274
+ | `ENCRYPTED_PDF` | 暗号化 PDF (現状未対応) |
275
+ | `UNSUPPORTED_PDF_FEATURE` | サポート外の PDF 機能 |
276
+ | `FILE_TOO_LARGE` | 50MB 上限超過 (pdf-reader 固有) |
277
+ | `SOURCE_API_ERROR` | URL fetch の HTTP エラー (4xx/5xx) |
278
+ | `SOURCE_TIMEOUT` | リモート取得タイムアウト |
279
+ | `SOURCE_UNAVAILABLE` | DNS / 接続失敗 |
280
+ | `INTERNAL_ERROR` | パーミッション拒否を含むその他バグ |
281
+
282
+ ### 移行ノート (v0.5.x → v0.6.0)
283
+
284
+ 旧 v0.5.x までは `content[0].text` に `Error: ...\n\nSuggestion: ...` という人間可読な文字列を入れていました。v0.6.0 では同じ場所に **JSON 文字列** が入ります。LLM 側でテキスト解釈に依存していた場合は `JSON.parse(content[0].text)` での解釈に切り替えてください。`isError: true` フラグで構造化エラーかどうかを判定できます。
285
+
241
286
  ## pdf-spec-mcp との連携
242
287
 
243
288
  [pdf-spec-mcp](https://github.com/shuji-bonji/pdf-spec-mcp) は PDF 仕様(ISO 32000-2 等)の知識を提供する MCP サーバーです。両方を有効にすることで、LLM は以下のような仕様知識ベースのワークフローを実行できます:
package/README.md CHANGED
@@ -238,6 +238,51 @@ pdf-reader-mcp/
238
238
  └── e2e/ # E2E tests (9 suites, 132 tests)
239
239
  ```
240
240
 
241
+ ## Error Contract (houki-hub family)
242
+
243
+ Since **v0.6.0**, this MCP returns structured errors that follow the **houki-hub family error contract**, sharing a unified `code` vocabulary across the family. Combined with `houki-egov-mcp` / `houki-nta-mcp`, an LLM or Skill layer can interpret errors with consistent logic.
244
+
245
+ - [`docs/ERROR-CODES.md`](https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-CODES.md) — error code vocabulary (houki-research-skill)
246
+ - [`docs/ERROR-HANDLING.md`](https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-HANDLING.md) — handling policy / next_actions templates
247
+
248
+ Implementation is **independent** — no dependency on `houki-abbreviations` or other family packages. The reference implementation is [`houki-egov-mcp/src/errors.ts`](https://github.com/shuji-bonji/houki-egov-mcp/blob/main/src/errors.ts); pdf-reader-mcp's local definition is in [`src/errors.ts`](./src/errors.ts).
249
+
250
+ On error, every tool returns `isError: true` and the JSON-stringified `LawServiceError` in `content[0].text`:
251
+
252
+ ```json
253
+ {
254
+ "error": "The file does not appear to be a valid PDF.",
255
+ "code": "INVALID_PDF",
256
+ "hint": "ファイルが破損していないか確認してください。",
257
+ "next_actions": [
258
+ {
259
+ "action": "inspect_structure",
260
+ "reason": "PDF が壊れている可能性があります。Catalog / Pages 等の構造を確認してください"
261
+ }
262
+ ],
263
+ "detail": { "cause": "Invalid PDF structure" }
264
+ }
265
+ ```
266
+
267
+ ### Codes used by pdf-reader-mcp
268
+
269
+ | code | 用途 |
270
+ |---|---|
271
+ | `INVALID_ARGUMENT` | パス・URL・ページ範囲などクライアント側引数の不正 |
272
+ | `DOC_NOT_FOUND` | ファイル未存在 (ENOENT) |
273
+ | `INVALID_PDF` | PDF として不正・破損 |
274
+ | `ENCRYPTED_PDF` | 暗号化 PDF (現状未対応) |
275
+ | `UNSUPPORTED_PDF_FEATURE` | サポート外の PDF 機能 |
276
+ | `FILE_TOO_LARGE` | 50MB 上限超過 (pdf-reader 固有) |
277
+ | `SOURCE_API_ERROR` | URL fetch の HTTP エラー (4xx/5xx) |
278
+ | `SOURCE_TIMEOUT` | リモート取得タイムアウト |
279
+ | `SOURCE_UNAVAILABLE` | DNS / 接続失敗 |
280
+ | `INTERNAL_ERROR` | パーミッション拒否を含むその他バグ |
281
+
282
+ ### Migration note (v0.5.x → v0.6.0)
283
+
284
+ 旧 v0.5.x までは `content[0].text` に `Error: ...\n\nSuggestion: ...` という人間可読文字列を入れていました。v0.6.0 では同じ場所に **JSON 文字列** が入ります。LLM 側でテキスト解釈に依存していた場合は、`JSON.parse(content[0].text)` での解釈に切り替えてください。`isError: true` フラグで構造化エラーかどうかを判定できます。
285
+
241
286
  ## Pairing with pdf-spec-mcp
242
287
 
243
288
  [pdf-spec-mcp](https://github.com/shuji-bonji/pdf-spec-mcp) provides PDF specification knowledge (ISO 32000-2, etc.). With both servers enabled, an LLM can perform specification-aware workflows:
@@ -0,0 +1,83 @@
1
+ /**
2
+ * houki-hub family-compatible 構造化エラー応答 — pdf-reader-mcp 独自実装
3
+ *
4
+ * 設計指針:
5
+ * - houki-hub family の error contract に準拠 (`code` 文字列を共有)
6
+ * - 共通パッケージ依存を持たず独立実装 (pdf-reader-mcp は汎用 PDF ツールであり、
7
+ * houki-abbreviations 等の家族専用パッケージへ依存させない)
8
+ * - houki-egov-mcp / houki-nta-mcp の `src/errors.ts` をリファレンスとし、
9
+ * PDF 固有のコード (INVALID_PDF / ENCRYPTED_PDF 等) を追加
10
+ *
11
+ * family contract 仕様:
12
+ * @see https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-CODES.md
13
+ * @see https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-HANDLING.md
14
+ */
15
+ /**
16
+ * family 共通エラーコード — pdf-reader-mcp で使用する部分集合 + PDF 固有拡張。
17
+ *
18
+ * - 引数・入力 (クライアント側責任): `INVALID_ARGUMENT`
19
+ * - リソース未発見: `DOC_NOT_FOUND`
20
+ * - PDF コンテンツ: `INVALID_PDF` / `ENCRYPTED_PDF` / `UNSUPPORTED_PDF_FEATURE`
21
+ * - 外部ソース由来: `SOURCE_API_ERROR` / `SOURCE_TIMEOUT` / `SOURCE_UNAVAILABLE`
22
+ * - PDF 固有: `FILE_TOO_LARGE` (50MB 制限超過)
23
+ * - システム: `INTERNAL_ERROR`
24
+ */
25
+ export type LawErrorCode = 'INVALID_ARGUMENT' | 'DOC_NOT_FOUND' | 'INVALID_PDF' | 'ENCRYPTED_PDF' | 'UNSUPPORTED_PDF_FEATURE' | 'SOURCE_API_ERROR' | 'SOURCE_TIMEOUT' | 'SOURCE_UNAVAILABLE' | 'FILE_TOO_LARGE' | 'INTERNAL_ERROR';
26
+ /**
27
+ * 次に取るべきアクションの提案。
28
+ * LLM がこれを読んで自律的に次のツールを呼ぶことを想定。
29
+ */
30
+ export interface NextAction {
31
+ /** 推奨アクション (tool 名 or 自然言語) */
32
+ action: string;
33
+ /** どんなときに有効か */
34
+ reason: string;
35
+ /** 具体的な引数例 (任意) */
36
+ example?: Record<string, unknown>;
37
+ }
38
+ /**
39
+ * family-compatible 共通エラー応答。
40
+ */
41
+ export interface LawServiceError {
42
+ /** 1文の人間可読メッセージ (LLM もここを読む) */
43
+ error: string;
44
+ /** プログラム判定用の安定したコード */
45
+ code: LawErrorCode;
46
+ /** 追加情報 (任意) */
47
+ hint?: string;
48
+ /** LLM が次に呼ぶべき tool / 取るべき手段の候補 */
49
+ next_actions?: NextAction[];
50
+ /** 一時的エラーかどうか (true なら時間をおいて再試行可) */
51
+ retryable?: boolean;
52
+ /** 元のエラー詳細 (debug 用) */
53
+ detail?: {
54
+ status?: number;
55
+ url?: string;
56
+ cause?: string;
57
+ };
58
+ }
59
+ /**
60
+ * エラーレスポンスを構築するヘルパー。
61
+ * 必須フィールド (error, code) と任意フィールドを安全に組み立てる。
62
+ */
63
+ export declare function makeError(code: LawErrorCode, message: string, options?: {
64
+ hint?: string;
65
+ next_actions?: NextAction[];
66
+ retryable?: boolean;
67
+ detail?: LawServiceError['detail'];
68
+ }): LawServiceError;
69
+ /** オブジェクトが LawServiceError かどうかの type guard */
70
+ export declare function isLawServiceError(value: unknown): value is LawServiceError;
71
+ /**
72
+ * よく使う next_actions のプリセット。
73
+ * pdf-reader-mcp 固有の tool 名を含む。
74
+ */
75
+ export declare const NEXT_ACTIONS: {
76
+ readonly checkFilePath: (filePath?: string) => NextAction;
77
+ readonly useGetPageCount: (filePath?: string) => NextAction;
78
+ readonly useInspectStructure: (filePath?: string) => NextAction;
79
+ readonly splitPdf: () => NextAction;
80
+ readonly retryLater: () => NextAction;
81
+ readonly checkUrl: (url?: string) => NextAction;
82
+ };
83
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAEpB,kBAAkB,GAElB,eAAe,GAEf,aAAa,GACb,eAAe,GACf,yBAAyB,GAEzB,kBAAkB,GAClB,gBAAgB,GAChB,oBAAoB,GAEpB,gBAAgB,GAEhB,gBAAgB,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,qCAAqC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wBAAwB;IACxB,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;CAC/B,GACL,eAAe,CASjB;AAED,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAS1E;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;wCACI,MAAM,KAAG,UAAU;0CAKjB,MAAM,KAAG,UAAU;8CAKf,MAAM,KAAG,UAAU;6BAKtC,UAAU;+BAIR,UAAU;8BAIT,MAAM,KAAG,UAAU;CAK5B,CAAC"}
package/dist/errors.js ADDED
@@ -0,0 +1,75 @@
1
+ /**
2
+ * houki-hub family-compatible 構造化エラー応答 — pdf-reader-mcp 独自実装
3
+ *
4
+ * 設計指針:
5
+ * - houki-hub family の error contract に準拠 (`code` 文字列を共有)
6
+ * - 共通パッケージ依存を持たず独立実装 (pdf-reader-mcp は汎用 PDF ツールであり、
7
+ * houki-abbreviations 等の家族専用パッケージへ依存させない)
8
+ * - houki-egov-mcp / houki-nta-mcp の `src/errors.ts` をリファレンスとし、
9
+ * PDF 固有のコード (INVALID_PDF / ENCRYPTED_PDF 等) を追加
10
+ *
11
+ * family contract 仕様:
12
+ * @see https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-CODES.md
13
+ * @see https://github.com/shuji-bonji/houki-research-skill/blob/main/docs/ERROR-HANDLING.md
14
+ */
15
+ /**
16
+ * エラーレスポンスを構築するヘルパー。
17
+ * 必須フィールド (error, code) と任意フィールドを安全に組み立てる。
18
+ */
19
+ export function makeError(code, message, options = {}) {
20
+ const err = { error: message, code };
21
+ if (options.hint)
22
+ err.hint = options.hint;
23
+ if (options.next_actions && options.next_actions.length > 0) {
24
+ err.next_actions = options.next_actions;
25
+ }
26
+ if (options.retryable !== undefined)
27
+ err.retryable = options.retryable;
28
+ if (options.detail)
29
+ err.detail = options.detail;
30
+ return err;
31
+ }
32
+ /** オブジェクトが LawServiceError かどうかの type guard */
33
+ export function isLawServiceError(value) {
34
+ return (typeof value === 'object' &&
35
+ value !== null &&
36
+ 'error' in value &&
37
+ 'code' in value &&
38
+ typeof value.error === 'string' &&
39
+ typeof value.code === 'string');
40
+ }
41
+ /**
42
+ * よく使う next_actions のプリセット。
43
+ * pdf-reader-mcp 固有の tool 名を含む。
44
+ */
45
+ export const NEXT_ACTIONS = {
46
+ checkFilePath: (filePath) => ({
47
+ action: 'verify_file_path',
48
+ reason: 'ファイルパスが正しいか、絶対パスで指定されているか確認してください',
49
+ example: filePath ? { file_path: filePath } : undefined,
50
+ }),
51
+ useGetPageCount: (filePath) => ({
52
+ action: 'get_page_count',
53
+ reason: '総ページ数を確認してから pages を指定してください',
54
+ example: filePath ? { file_path: filePath } : undefined,
55
+ }),
56
+ useInspectStructure: (filePath) => ({
57
+ action: 'inspect_structure',
58
+ reason: 'PDF が壊れている可能性があります。Catalog / Pages 等の構造を確認してください',
59
+ example: filePath ? { file_path: filePath } : undefined,
60
+ }),
61
+ splitPdf: () => ({
62
+ action: 'split_pdf',
63
+ reason: 'ファイルサイズが 50MB を超えています。分割してから再試行してください',
64
+ }),
65
+ retryLater: () => ({
66
+ action: 'retry_later',
67
+ reason: '一時的なネットワークエラーの可能性があります。30秒〜数分後に再試行してください',
68
+ }),
69
+ checkUrl: (url) => ({
70
+ action: 'verify_url',
71
+ reason: 'URL が正しいか・HTTP/HTTPS であるか確認してください',
72
+ example: url ? { url } : undefined,
73
+ }),
74
+ };
75
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,IAAkB,EAClB,OAAe,EACf,UAKI,EAAE;IAEN,MAAM,GAAG,GAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtD,IAAI,OAAO,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1C,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,IAAI,KAAK;QAChB,MAAM,IAAI,KAAK;QACf,OAAQ,KAA4B,CAAC,KAAK,KAAK,QAAQ;QACvD,OAAQ,KAA2B,CAAC,IAAI,KAAK,QAAQ,CACtD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa,EAAE,CAAC,QAAiB,EAAc,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC;IACF,eAAe,EAAE,CAAC,QAAiB,EAAc,EAAE,CAAC,CAAC;QACnD,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,8BAA8B;QACtC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC;IACF,mBAAmB,EAAE,CAAC,QAAiB,EAAc,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,kDAAkD;QAC1D,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC;IACF,QAAQ,EAAE,GAAe,EAAE,CAAC,CAAC;QAC3B,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,uCAAuC;KAChD,CAAC;IACF,UAAU,EAAE,GAAe,EAAE,CAAC,CAAC;QAC7B,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,0CAA0C;KACnD,CAAC;IACF,QAAQ,EAAE,CAAC,GAAY,EAAc,EAAE,CAAC,CAAC;QACvC,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;KACnC,CAAC;CACM,CAAC"}
@@ -106,8 +106,8 @@ export declare const ReadUrlSchema: z.ZodObject<{
106
106
  split_columns: z.ZodOptional<z.ZodNumber>;
107
107
  compact_whitespace: z.ZodOptional<z.ZodBoolean>;
108
108
  }, "strict", z.ZodTypeAny, {
109
- response_format: import("../constants.js").ResponseFormat;
110
109
  url: string;
110
+ response_format: import("../constants.js").ResponseFormat;
111
111
  pages?: string | undefined;
112
112
  split_columns?: number | undefined;
113
113
  compact_whitespace?: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"get-metadata.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/get-metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6C3D"}
1
+ {"version":3,"file":"get-metadata.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/get-metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+C3D"}
@@ -4,7 +4,7 @@
4
4
  import { ResponseFormat } from '../../constants.js';
5
5
  import { GetMetadataSchema } from '../../schemas/tier1.js';
6
6
  import { getMetadata } from '../../services/pdfjs-service.js';
7
- import { handleError } from '../../utils/error-handler.js';
7
+ import { handleStructuredError } from '../../utils/error-handler.js';
8
8
  import { formatMetadataMarkdown } from '../../utils/formatter.js';
9
9
  export function registerGetMetadata(server) {
10
10
  server.registerTool('get_metadata', {
@@ -40,8 +40,10 @@ Examples:
40
40
  };
41
41
  }
42
42
  catch (error) {
43
+ const err = handleStructuredError(error);
43
44
  return {
44
- content: [{ type: 'text', text: handleError(error) }],
45
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
46
+ isError: true,
45
47
  };
46
48
  }
47
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get-metadata.js","sourceRoot":"","sources":["../../../src/tools/tier1/get-metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAyB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE;;;;;;;;;;;;qCAYkB;QAC/B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAwB,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAErD,MAAM,IAAI,GACR,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI;gBAC5C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAEvC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-metadata.js","sourceRoot":"","sources":["../../../src/tools/tier1/get-metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAyB,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE;;;;;;;;;;;;qCAYkB;QAC/B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAwB,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAErD,MAAM,IAAI,GACR,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI;gBAC5C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAEvC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-page-count.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/get-page-count.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4C5D"}
1
+ {"version":3,"file":"get-page-count.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/get-page-count.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8C5D"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { GetPageCountSchema } from '../../schemas/tier1.js';
5
5
  import { loadDocument } from '../../services/pdfjs-service.js';
6
- import { handleError } from '../../utils/error-handler.js';
6
+ import { handleStructuredError } from '../../utils/error-handler.js';
7
7
  export function registerGetPageCount(server) {
8
8
  server.registerTool('get_page_count', {
9
9
  title: 'Get PDF Page Count',
@@ -41,8 +41,10 @@ Examples:
41
41
  }
42
42
  }
43
43
  catch (error) {
44
+ const err = handleStructuredError(error);
44
45
  return {
45
- content: [{ type: 'text', text: handleError(error) }],
46
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
47
+ isError: true,
46
48
  };
47
49
  }
48
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get-page-count.js","sourceRoot":"","sources":["../../../src/tools/tier1/get-page-count.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA0B,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE;;;;;;;;;;;;oCAYiB;QAC9B,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAyB,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC1D,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-page-count.js","sourceRoot":"","sources":["../../../src/tools/tier1/get-page-count.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA0B,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE;;;;;;;;;;;;oCAYiB;QAC9B,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAyB,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC1D,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-images.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/read-images.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+E1D"}
1
+ {"version":3,"file":"read-images.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/read-images.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiF1D"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { ReadImagesSchema } from '../../schemas/tier1.js';
5
5
  import { extractImages } from '../../services/pdfjs-service.js';
6
- import { handleError } from '../../utils/error-handler.js';
6
+ import { handleStructuredError } from '../../utils/error-handler.js';
7
7
  export function registerReadImages(server) {
8
8
  server.registerTool('read_images', {
9
9
  title: 'Read PDF Images',
@@ -70,8 +70,10 @@ Examples:
70
70
  };
71
71
  }
72
72
  catch (error) {
73
+ const err = handleStructuredError(error);
73
74
  return {
74
- content: [{ type: 'text', text: handleError(error) }],
75
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
76
+ isError: true,
75
77
  };
76
78
  }
77
79
  });
@@ -1 +1 @@
1
- {"version":3,"file":"read-images.js","sourceRoot":"","sources":["../../../src/tools/tier1/read-images.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE;;;;;;;;;;;;;;;uEAeoD;QACjE,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAuB,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAEnE,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;gBAChC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EACF,GAAG,MAAM,CAAC,aAAa,iCAAiC;oCACxD,+BAA+B;oCAC/B,wEAAwE;6BAC3E;yBACF;qBACF,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC;iBACtF,CAAC;YACJ,CAAC;YAED,uDAAuD;YACvD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;gBACtC,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC,CAAC,CAAC;YAEJ,IAAI,IAAI,GAAG,SAAS,MAAM,CAAC,cAAc,YAAY,CAAC;YACtD,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,IAAI,KAAK,MAAM,CAAC,YAAY,8CAA8C,CAAC;YACjF,CAAC;YACD,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-images.js","sourceRoot":"","sources":["../../../src/tools/tier1/read-images.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE;;;;;;;;;;;;;;;uEAeoD;QACjE,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAuB,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAEnE,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;gBAChC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EACF,GAAG,MAAM,CAAC,aAAa,iCAAiC;oCACxD,+BAA+B;oCAC/B,wEAAwE;6BAC3E;yBACF;qBACF,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC;iBACtF,CAAC;YACJ,CAAC;YAED,uDAAuD;YACvD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;gBACtC,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC,CAAC,CAAC;YAEJ,IAAI,IAAI,GAAG,SAAS,MAAM,CAAC,cAAc,YAAY,CAAC;YACtD,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,IAAI,KAAK,MAAM,CAAC,YAAY,8CAA8C,CAAC;YACjF,CAAC;YACD,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-text.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/read-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6DxD"}
1
+ {"version":3,"file":"read-text.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/read-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+DxD"}
@@ -4,7 +4,7 @@
4
4
  import { ResponseFormat } from '../../constants.js';
5
5
  import { ReadTextSchema } from '../../schemas/tier1.js';
6
6
  import { extractText } from '../../services/pdfjs-service.js';
7
- import { handleError } from '../../utils/error-handler.js';
7
+ import { handleStructuredError } from '../../utils/error-handler.js';
8
8
  import { formatPageTextsMarkdown, truncateIfNeeded } from '../../utils/formatter.js';
9
9
  export function registerReadText(server) {
10
10
  server.registerTool('read_text', {
@@ -57,8 +57,10 @@ Examples:
57
57
  };
58
58
  }
59
59
  catch (error) {
60
+ const err = handleStructuredError(error);
60
61
  return {
61
- content: [{ type: 'text', text: handleError(error) }],
62
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
63
+ isError: true,
62
64
  };
63
65
  }
64
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"read-text.js","sourceRoot":"","sources":["../../../src/tools/tier1/read-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAsB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;yFAqBsE;QACnF,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAqB,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE;gBAC9D,YAAY,EAAE,MAAM,CAAC,aAAa;gBAClC,iBAAiB,EAAE,MAAM,CAAC,kBAAkB;aAC7C,CAAC,CAAC;YAEH,IAAI,IAAY,CAAC;YACjB,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEnD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-text.js","sourceRoot":"","sources":["../../../src/tools/tier1/read-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAsB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;yFAqBsE;QACnF,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAqB,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE;gBAC9D,YAAY,EAAE,MAAM,CAAC,aAAa;gBAClC,iBAAiB,EAAE,MAAM,CAAC,kBAAkB;aAC7C,CAAC,CAAC;YAEH,IAAI,IAAY,CAAC;YACjB,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEnD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-url.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/read-url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiEvD"}
1
+ {"version":3,"file":"read-url.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/read-url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmEvD"}
@@ -5,7 +5,7 @@ import { ResponseFormat } from '../../constants.js';
5
5
  import { ReadUrlSchema } from '../../schemas/tier1.js';
6
6
  import { extractTextFromDoc, loadDocumentFromData } from '../../services/pdfjs-service.js';
7
7
  import { fetchPdfFromUrl } from '../../services/url-fetcher.js';
8
- import { handleError } from '../../utils/error-handler.js';
8
+ import { handleStructuredError } from '../../utils/error-handler.js';
9
9
  import { formatPageTextsMarkdown, truncateIfNeeded } from '../../utils/formatter.js';
10
10
  export function registerReadUrl(server) {
11
11
  server.registerTool('read_url', {
@@ -63,8 +63,10 @@ Examples:
63
63
  }
64
64
  }
65
65
  catch (error) {
66
+ const err = handleStructuredError(error);
66
67
  return {
67
- content: [{ type: 'text', text: handleError(error) }],
68
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
69
+ isError: true,
68
70
  };
69
71
  }
70
72
  });
@@ -1 +1 @@
1
- {"version":3,"file":"read-url.js","sourceRoot":"","sources":["../../../src/tools/tier1/read-url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAqB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;oEAmBiD;QAC9D,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAoB,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE;oBAC1D,YAAY,EAAE,MAAM,CAAC,aAAa;oBAClC,iBAAiB,EAAE,MAAM,CAAC,kBAAkB;iBAC7C,CAAC,CAAC;gBAEH,IAAI,IAAY,CAAC;gBACjB,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;oBACnD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBACtD,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-url.js","sourceRoot":"","sources":["../../../src/tools/tier1/read-url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAqB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;oEAmBiD;QAC9D,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAoB,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE;oBAC1D,YAAY,EAAE,MAAM,CAAC,aAAa;oBAClC,iBAAiB,EAAE,MAAM,CAAC,kBAAkB;iBAC7C,CAAC,CAAC;gBAEH,IAAI,IAAY,CAAC;gBACjB,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;oBACnD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBACtD,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-text.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/search-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiE1D"}
1
+ {"version":3,"file":"search-text.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/search-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmE1D"}
@@ -4,7 +4,7 @@
4
4
  import { ResponseFormat } from '../../constants.js';
5
5
  import { SearchTextSchema } from '../../schemas/tier1.js';
6
6
  import { searchText } from '../../services/pdfjs-service.js';
7
- import { handleError } from '../../utils/error-handler.js';
7
+ import { handleStructuredError } from '../../utils/error-handler.js';
8
8
  import { formatSearchResultMarkdown } from '../../utils/formatter.js';
9
9
  export function registerSearchText(server) {
10
10
  server.registerTool('search_text', {
@@ -53,8 +53,10 @@ Examples:
53
53
  };
54
54
  }
55
55
  catch (error) {
56
+ const err = handleStructuredError(error);
56
57
  return {
57
- content: [{ type: 'text', text: handleError(error) }],
58
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
59
+ isError: true,
58
60
  };
59
61
  }
60
62
  });
@@ -1 +1 @@
1
- {"version":3,"file":"search-text.js","sourceRoot":"","sources":["../../../src/tools/tier1/search-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE;;;;;;;;;;;;;;;;;4FAiByE;QACtF,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAuB,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,KAAK,CACb,CAAC;YAEF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;YACzD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAExD,MAAM,MAAM,GAAiB;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,YAAY,EAAE,UAAU,CAAC,MAAM;gBAC/B,OAAO;gBACP,SAAS;aACV,CAAC;YAEF,MAAM,IAAI,GACR,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI;gBAC5C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"search-text.js","sourceRoot":"","sources":["../../../src/tools/tier1/search-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAwB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE;;;;;;;;;;;;;;;;;4FAiByE;QACtF,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAuB,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,UAAU,CACjC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,KAAK,CACb,CAAC;YAEF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;YACzD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAExD,MAAM,MAAM,GAAiB;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,YAAY,EAAE,UAAU,CAAC,MAAM;gBAC/B,OAAO;gBACP,SAAS;aACV,CAAC;YAEF,MAAM,IAAI,GACR,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI;gBAC5C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoEzD"}
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/tools/tier1/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsEzD"}
@@ -4,7 +4,7 @@
4
4
  import { ResponseFormat } from '../../constants.js';
5
5
  import { SummarizeSchema } from '../../schemas/tier1.js';
6
6
  import { countImagesFromDoc, extractTextFromDoc, getMetadataFromDoc, loadDocument, } from '../../services/pdfjs-service.js';
7
- import { handleError } from '../../utils/error-handler.js';
7
+ import { handleStructuredError } from '../../utils/error-handler.js';
8
8
  import { formatSummaryMarkdown } from '../../utils/formatter.js';
9
9
  export function registerSummarize(server) {
10
10
  server.registerTool('summarize', {
@@ -61,8 +61,10 @@ Examples:
61
61
  }
62
62
  }
63
63
  catch (error) {
64
+ const err = handleStructuredError(error);
64
65
  return {
65
- content: [{ type: 'text', text: handleError(error) }],
66
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
67
+ isError: true,
66
68
  };
67
69
  }
68
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../src/tools/tier1/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAuB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE;;;;;;;;;;;;;iFAa8D;QAC3E,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAsB,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC/D,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;oBACzC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC5B,kBAAkB,CAAC,GAAG,CAAC;iBACxB,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBAE9C,MAAM,OAAO,GAAe;oBAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,QAAQ;oBACR,WAAW;oBACX,UAAU;oBACV,OAAO;iBACR,CAAC;gBAEF,MAAM,IAAI,GACR,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI;oBAC5C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAErC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;iBAC3C,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../src/tools/tier1/summarize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAuB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE;;;;;;;;;;;;;iFAa8D;QAC3E,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAsB,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC/D,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;oBACzC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC5B,kBAAkB,CAAC,GAAG,CAAC;iBACxB,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBAE9C,MAAM,OAAO,GAAe;oBAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,QAAQ;oBACR,WAAW;oBACX,UAAU;oBACV,OAAO;iBACR,CAAC;gBAEF,MAAM,IAAI,GACR,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,IAAI;oBAC5C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAErC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;iBAC3C,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract-tables.d.ts","sourceRoot":"","sources":["../../../src/tools/tier2/extract-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwD7D"}
1
+ {"version":3,"file":"extract-tables.d.ts","sourceRoot":"","sources":["../../../src/tools/tier2/extract-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4D7D"}
@@ -9,7 +9,7 @@
9
9
  import { ResponseFormat } from '../../constants.js';
10
10
  import { ExtractTablesSchema } from '../../schemas/tier2.js';
11
11
  import { extractTables } from '../../services/pdfjs-service.js';
12
- import { handleError } from '../../utils/error-handler.js';
12
+ import { handleStructuredError } from '../../utils/error-handler.js';
13
13
  import { formatTablesMarkdown, truncateIfNeeded } from '../../utils/formatter.js';
14
14
  export function registerExtractTables(server) {
15
15
  server.registerTool('extract_tables', {
@@ -59,7 +59,11 @@ Examples:
59
59
  return { content: [{ type: 'text', text }] };
60
60
  }
61
61
  catch (error) {
62
- return { content: [{ type: 'text', text: handleError(error) }] };
62
+ const err = handleStructuredError(error);
63
+ return {
64
+ content: [{ type: 'text', text: JSON.stringify(err, null, 2) }],
65
+ isError: true,
66
+ };
63
67
  }
64
68
  });
65
69
  }