@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.
- package/CHANGELOG.md +21 -0
- package/README.ja.md +45 -0
- package/README.md +45 -0
- package/dist/errors.d.ts +83 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +75 -0
- package/dist/errors.js.map +1 -0
- package/dist/schemas/tier1.d.ts +1 -1
- package/dist/tools/tier1/get-metadata.d.ts.map +1 -1
- package/dist/tools/tier1/get-metadata.js +4 -2
- package/dist/tools/tier1/get-metadata.js.map +1 -1
- package/dist/tools/tier1/get-page-count.d.ts.map +1 -1
- package/dist/tools/tier1/get-page-count.js +4 -2
- package/dist/tools/tier1/get-page-count.js.map +1 -1
- package/dist/tools/tier1/read-images.d.ts.map +1 -1
- package/dist/tools/tier1/read-images.js +4 -2
- package/dist/tools/tier1/read-images.js.map +1 -1
- package/dist/tools/tier1/read-text.d.ts.map +1 -1
- package/dist/tools/tier1/read-text.js +4 -2
- package/dist/tools/tier1/read-text.js.map +1 -1
- package/dist/tools/tier1/read-url.d.ts.map +1 -1
- package/dist/tools/tier1/read-url.js +4 -2
- package/dist/tools/tier1/read-url.js.map +1 -1
- package/dist/tools/tier1/search-text.d.ts.map +1 -1
- package/dist/tools/tier1/search-text.js +4 -2
- package/dist/tools/tier1/search-text.js.map +1 -1
- package/dist/tools/tier1/summarize.d.ts.map +1 -1
- package/dist/tools/tier1/summarize.js +4 -2
- package/dist/tools/tier1/summarize.js.map +1 -1
- package/dist/tools/tier2/extract-tables.d.ts.map +1 -1
- package/dist/tools/tier2/extract-tables.js +6 -2
- package/dist/tools/tier2/extract-tables.js.map +1 -1
- package/dist/tools/tier2/inspect-annotations.d.ts.map +1 -1
- package/dist/tools/tier2/inspect-annotations.js +6 -2
- package/dist/tools/tier2/inspect-annotations.js.map +1 -1
- package/dist/tools/tier2/inspect-fonts.d.ts.map +1 -1
- package/dist/tools/tier2/inspect-fonts.js +6 -2
- package/dist/tools/tier2/inspect-fonts.js.map +1 -1
- package/dist/tools/tier2/inspect-signatures.d.ts.map +1 -1
- package/dist/tools/tier2/inspect-signatures.js +6 -2
- package/dist/tools/tier2/inspect-signatures.js.map +1 -1
- package/dist/tools/tier2/inspect-structure.d.ts.map +1 -1
- package/dist/tools/tier2/inspect-structure.js +6 -2
- package/dist/tools/tier2/inspect-structure.js.map +1 -1
- package/dist/tools/tier2/inspect-tags.d.ts.map +1 -1
- package/dist/tools/tier2/inspect-tags.js +6 -2
- package/dist/tools/tier2/inspect-tags.js.map +1 -1
- package/dist/tools/tier3/compare-structure.d.ts.map +1 -1
- package/dist/tools/tier3/compare-structure.js +6 -2
- package/dist/tools/tier3/compare-structure.js.map +1 -1
- package/dist/tools/tier3/validate-metadata.d.ts.map +1 -1
- package/dist/tools/tier3/validate-metadata.js +6 -2
- package/dist/tools/tier3/validate-metadata.js.map +1 -1
- package/dist/tools/tier3/validate-tagged.d.ts.map +1 -1
- package/dist/tools/tier3/validate-tagged.js +6 -2
- package/dist/tools/tier3/validate-tagged.js.map +1 -1
- package/dist/utils/error-handler.d.ts +40 -3
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +210 -31
- package/dist/utils/error-handler.js.map +1 -1
- 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:
|
package/dist/errors.d.ts
ADDED
|
@@ -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"}
|
package/dist/schemas/tier1.d.ts
CHANGED
|
@@ -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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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,
|
|
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 {
|
|
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
|
-
|
|
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
|
}
|