reportflow-mcp 1.1.3 → 1.2.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 (49) hide show
  1. package/dist/auth-context.d.ts +10 -0
  2. package/dist/auth-context.d.ts.map +1 -0
  3. package/dist/auth-context.js +10 -0
  4. package/dist/auth-context.js.map +1 -0
  5. package/dist/auth.d.ts +1 -1
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +27 -3
  8. package/dist/auth.js.map +1 -1
  9. package/dist/client.d.ts +43 -3
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +30 -4
  12. package/dist/client.js.map +1 -1
  13. package/dist/config.d.ts +23 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +62 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/http-server.d.ts +16 -0
  18. package/dist/http-server.d.ts.map +1 -0
  19. package/dist/http-server.js +267 -0
  20. package/dist/http-server.js.map +1 -0
  21. package/dist/http.d.ts +14 -0
  22. package/dist/http.d.ts.map +1 -1
  23. package/dist/http.js +15 -1
  24. package/dist/http.js.map +1 -1
  25. package/dist/index-http.d.ts +2 -0
  26. package/dist/index-http.d.ts.map +1 -0
  27. package/dist/index-http.js +14 -0
  28. package/dist/index-http.js.map +1 -0
  29. package/dist/server.d.ts +41 -0
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +110 -53
  32. package/dist/server.js.map +1 -1
  33. package/dist/telemetry/client.d.ts +30 -0
  34. package/dist/telemetry/client.d.ts.map +1 -0
  35. package/dist/telemetry/client.js +85 -0
  36. package/dist/telemetry/client.js.map +1 -0
  37. package/dist/telemetry/index.d.ts +4 -0
  38. package/dist/telemetry/index.d.ts.map +1 -0
  39. package/dist/telemetry/index.js +11 -0
  40. package/dist/telemetry/index.js.map +1 -0
  41. package/dist/telemetry/interceptor.d.ts +9 -0
  42. package/dist/telemetry/interceptor.d.ts.map +1 -0
  43. package/dist/telemetry/interceptor.js +72 -0
  44. package/dist/telemetry/interceptor.js.map +1 -0
  45. package/dist/tools/generate-pdf-sync.d.ts +32 -8
  46. package/dist/tools/generate-pdf-sync.d.ts.map +1 -1
  47. package/dist/tools/generate-pdf-sync.js +118 -10
  48. package/dist/tools/generate-pdf-sync.js.map +1 -1
  49. package/package.json +10 -1
package/dist/server.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startServer = void 0;
3
+ exports.startServer = exports.createMcpServer = exports.contentDtoSchema = void 0;
4
4
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
5
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
6
  const zod_1 = require("zod");
@@ -17,17 +17,28 @@ const suggest_params_js_1 = require("./tools/suggest-params.js");
17
17
  const index_js_1 = require("./prompts/index.js");
18
18
  const index_js_2 = require("./resources/index.js");
19
19
  const index_js_3 = require("./roots/index.js");
20
+ const index_js_4 = require("./telemetry/index.js");
20
21
  // eslint-disable-next-line @typescript-eslint/no-require-imports
21
22
  const pkg = require('../package.json');
22
23
  // ─── Common Zod Schemas ───────────────────────────────────
23
24
  const designIdSchema = zod_1.z.string().describe('デザインID(UUID形式)');
24
25
  const versionSchema = zod_1.z.number().int().describe('デザインバージョン番号');
25
- const contentDtoSchema = zod_1.z.object({
26
+ exports.contentDtoSchema = zod_1.z.object({
26
27
  fileName: zod_1.z.string().describe('出力ファイル名(例: invoice.pdf)'),
27
28
  shareType: zod_1.z
28
- .enum(['private', 'public'])
29
- .optional()
30
- .describe('共有タイプ(省略時はprivate)'),
29
+ .union([
30
+ zod_1.z
31
+ .literal('01')
32
+ .describe('ワークスペース内共有: 同一ワークスペースのメンバーのみアクセス可能(デフォルト)'),
33
+ zod_1.z
34
+ .literal('02')
35
+ .describe('招待者共有: 招待されたメールアドレスを持つユーザーのみアクセス可能'),
36
+ zod_1.z
37
+ .literal('03')
38
+ .describe('公開URL共有: URL を知る誰でもアクセス可能(オプションでパスコード保護)'),
39
+ ])
40
+ .default('01')
41
+ .describe("共有タイプ(数値コード)。省略時は '01'。レスポンスの share.shareType は 'workspace'/'invited'/'public' で返る。"),
31
42
  passcodeEnabled: zod_1.z.boolean().optional().describe('パスコード保護の有効化'),
32
43
  params: zod_1.z
33
44
  .record(zod_1.z.unknown())
@@ -37,22 +48,31 @@ const outputDirSchema = zod_1.z
37
48
  .string()
38
49
  .optional()
39
50
  .describe('出力先ディレクトリ (相対/絶対)。未指定時はクライアントのワークスペース (Roots) または現在の作業ディレクトリに保存。ユーザーが場所を指定した場合のみセットすること。');
51
+ const includePreviewSchema = zod_1.z
52
+ .boolean()
53
+ .optional()
54
+ .describe('true 指定時のみ EmbeddedResource (application/pdf, base64 blob) を応答に含める。claude.ai は現状 PDF resource を inline 表示しないため、通常は省略 (false) で fileUrl のみを利用するのが効率的。');
40
55
  const singlePdfSchema = {
41
56
  designId: designIdSchema,
42
57
  version: versionSchema,
43
- content: contentDtoSchema.describe('PDF生成コンテンツ'),
58
+ content: exports.contentDtoSchema.describe('PDF生成コンテンツ'),
59
+ };
60
+ const singlePdfSyncHttpSchema = {
61
+ ...singlePdfSchema,
62
+ includePreview: includePreviewSchema,
44
63
  };
45
64
  const multiplePdfSchema = {
46
65
  designId: designIdSchema,
47
66
  version: versionSchema,
48
67
  contents: zod_1.z
49
- .array(contentDtoSchema)
68
+ .array(exports.contentDtoSchema)
50
69
  .min(1)
51
70
  .describe('PDF生成コンテンツの配列(複数ファイル)'),
52
71
  };
53
72
  const singlePdfSyncSchema = {
54
73
  ...singlePdfSchema,
55
74
  outputDir: outputDirSchema,
75
+ includePreview: includePreviewSchema,
56
76
  };
57
77
  const multiplePdfSyncSchema = {
58
78
  ...multiplePdfSchema,
@@ -62,62 +82,90 @@ const multiplePdfSyncSchema = {
62
82
  .optional()
63
83
  .describe('出力 ZIP のファイル名 (省略時は download.zip)'),
64
84
  };
65
- const startServer = async () => {
85
+ /**
86
+ * 全ツール / Prompts / Resources を登録した McpServer を生成して返す。
87
+ * Transport への接続は呼び出し側で行う(stdio: index.ts、HTTP: http-server.ts)。
88
+ */
89
+ const createMcpServer = (opts = {}) => {
90
+ const mode = opts.mode ?? 'stdio';
91
+ const telemetry = opts.telemetry ?? (0, index_js_4.telemetryClientFromEnv)();
66
92
  const server = new mcp_js_1.McpServer({
67
93
  name: pkg.name,
68
94
  version: pkg.version,
69
95
  });
70
- // authenticate (OAuth2 PKCE flow — call this first or when other tools error with auth)
71
- server.tool(authenticate_js_1.authenticateTool.name, authenticate_js_1.authenticateTool.description, {
72
- force: zod_1.z
73
- .boolean()
74
- .optional()
75
- .describe('既存トークンを破棄して再認証する場合 true'),
76
- }, async (input) => (0, authenticate_js_1.handleAuthenticate)(input));
96
+ // authenticate (OAuth2 PKCE flow — stdio モードのみ提供)
97
+ if (mode === 'stdio') {
98
+ server.tool(authenticate_js_1.authenticateTool.name, authenticate_js_1.authenticateTool.description, {
99
+ force: zod_1.z
100
+ .boolean()
101
+ .optional()
102
+ .describe('既存トークンを破棄して再認証する場合 true'),
103
+ }, (0, index_js_4.withTelemetry)(telemetry, authenticate_js_1.authenticateTool.name, async (input) => (0, authenticate_js_1.handleAuthenticate)(input)));
104
+ }
77
105
  // get_design_parameters
78
106
  server.tool(get_design_parameters_js_1.getDesignParametersTool.name, get_design_parameters_js_1.getDesignParametersTool.description, {
79
107
  designId: designIdSchema,
80
108
  version: versionSchema
81
109
  .optional()
82
110
  .describe('バージョン番号(省略時は最新版)'),
83
- }, async (input) => (0, get_design_parameters_js_1.handleGetDesignParameters)(input));
111
+ }, (0, index_js_4.withTelemetry)(telemetry, get_design_parameters_js_1.getDesignParametersTool.name, async (input) => (0, get_design_parameters_js_1.handleGetDesignParameters)(input)));
84
112
  // list_templates
85
- server.tool(list_templates_js_1.listTemplatesTool.name, list_templates_js_1.listTemplatesTool.description, {}, async (input) => (0, list_templates_js_1.handleListTemplates)(input));
86
- // generate_pdf_sync (Roots-aware)
87
- server.tool(generate_pdf_sync_js_1.generatePdfSyncTool.name, generate_pdf_sync_js_1.generatePdfSyncTool.description, singlePdfSyncSchema, async (input) => (0, generate_pdf_sync_js_1.handleGeneratePdfSync)(input, {
88
- resolveOutputDir: () => (0, index_js_3.resolveDefaultOutputDir)(server),
89
- }));
90
- // generate_pdf_async
91
- server.tool(generate_pdf_async_js_1.generatePdfAsyncTool.name, generate_pdf_async_js_1.generatePdfAsyncTool.description, singlePdfSchema, async (input) => (0, generate_pdf_async_js_1.handleGeneratePdfAsync)(input));
92
- // generate_pdfs_sync (Roots-aware)
93
- server.tool(generate_pdfs_sync_js_1.generatePdfsSyncTool.name, generate_pdfs_sync_js_1.generatePdfsSyncTool.description, multiplePdfSyncSchema, async (input) => (0, generate_pdfs_sync_js_1.handleGeneratePdfsSync)(input, {
94
- resolveOutputDir: () => (0, index_js_3.resolveDefaultOutputDir)(server),
95
- }));
96
- // generate_pdfs_async
97
- server.tool(generate_pdfs_async_js_1.generatePdfsAsyncTool.name, generate_pdfs_async_js_1.generatePdfsAsyncTool.description, multiplePdfSchema, async (input) => (0, generate_pdfs_async_js_1.handleGeneratePdfsAsync)(input));
98
- // download_file
99
- server.tool(download_file_js_1.downloadFileTool.name, download_file_js_1.downloadFileTool.description, {
100
- requestId: zod_1.z
101
- .string()
102
- .describe('generate_pdf_asyncで返されたrequestId(UUID)'),
103
- fileId: zod_1.z.string().describe('generate_pdf_asyncのfiles[].fileId'),
104
- fileName: zod_1.z
105
- .string()
106
- .optional()
107
- .describe('保存ファイル名(省略時はfileId.pdf)'),
108
- outputDir: outputDirSchema,
109
- }, async (input) => (0, download_file_js_1.handleDownloadFile)(input));
110
- // download_zip
111
- server.tool(download_zip_js_1.downloadZipTool.name, download_zip_js_1.downloadZipTool.description, {
112
- requestId: zod_1.z
113
- .string()
114
- .describe('generate_pdfs_asyncで返されたrequestId(UUID)'),
115
- fileName: zod_1.z
116
- .string()
117
- .optional()
118
- .describe('保存ファイル名(省略時はrequestId.zip)'),
119
- outputDir: outputDirSchema,
120
- }, async (input) => (0, download_zip_js_1.handleDownloadZip)(input));
113
+ server.tool(list_templates_js_1.listTemplatesTool.name, list_templates_js_1.listTemplatesTool.description, {}, (0, index_js_4.withTelemetry)(telemetry, list_templates_js_1.listTemplatesTool.name, async (input) => (0, list_templates_js_1.handleListTemplates)(input)));
114
+ // ─── generate_pdf_sync (両モード共通) ──────────────────────────────────
115
+ // HTTP モードでは EmbeddedResource (application/pdf, base64 blob) のみを返し、
116
+ // サーバー側 filesystem には保存しない (コンテナ内パスはクライアント不可達)
117
+ // stdio モードでは従来通り Roots/outputDir に保存 + EmbeddedResource も併せて返す。
118
+ if (mode === 'stdio') {
119
+ server.tool(generate_pdf_sync_js_1.generatePdfSyncTool.name, generate_pdf_sync_js_1.generatePdfSyncTool.description, singlePdfSyncSchema, (0, index_js_4.withTelemetry)(telemetry, generate_pdf_sync_js_1.generatePdfSyncTool.name, async (input) => (0, generate_pdf_sync_js_1.handleGeneratePdfSync)(input, {
120
+ mode: 'stdio',
121
+ resolveOutputDir: () => (0, index_js_3.resolveDefaultOutputDir)(server),
122
+ })));
123
+ }
124
+ else {
125
+ // HTTP モード: outputDir は除外、代わりに includePreview を受け付ける
126
+ server.tool(generate_pdf_sync_js_1.generatePdfSyncTool.name, generate_pdf_sync_js_1.generatePdfSyncTool.description, singlePdfSyncHttpSchema, (0, index_js_4.withTelemetry)(telemetry, generate_pdf_sync_js_1.generatePdfSyncTool.name, async (input) => (0, generate_pdf_sync_js_1.handleGeneratePdfSync)(input, { mode: 'http' })));
127
+ }
128
+ // ─── 他の filesystem-writing tools は stdio モード専用 ──────────────────
129
+ // generate_pdfs_sync (ZIP) と download_* は claude.ai 等のリモートクライアントから
130
+ // プレビュー対象にならないため、HTTP モードでは async 版のみ提供する。
131
+ if (mode === 'stdio') {
132
+ // generate_pdfs_sync (Roots-aware)
133
+ server.tool(generate_pdfs_sync_js_1.generatePdfsSyncTool.name, generate_pdfs_sync_js_1.generatePdfsSyncTool.description, multiplePdfSyncSchema, (0, index_js_4.withTelemetry)(telemetry, generate_pdfs_sync_js_1.generatePdfsSyncTool.name, async (input) => (0, generate_pdfs_sync_js_1.handleGeneratePdfsSync)(input, {
134
+ resolveOutputDir: () => (0, index_js_3.resolveDefaultOutputDir)(server),
135
+ })));
136
+ // download_file
137
+ server.tool(download_file_js_1.downloadFileTool.name, download_file_js_1.downloadFileTool.description, {
138
+ requestId: zod_1.z
139
+ .string()
140
+ .describe('generate_pdf_asyncで返されたrequestId(UUID)'),
141
+ fileId: zod_1.z.string().describe('generate_pdf_asyncのfiles[].fileId'),
142
+ fileName: zod_1.z
143
+ .string()
144
+ .optional()
145
+ .describe('保存ファイル名(省略時はfileId.pdf)'),
146
+ outputDir: outputDirSchema,
147
+ }, (0, index_js_4.withTelemetry)(telemetry, download_file_js_1.downloadFileTool.name, async (input) => (0, download_file_js_1.handleDownloadFile)(input)));
148
+ // download_zip
149
+ server.tool(download_zip_js_1.downloadZipTool.name, download_zip_js_1.downloadZipTool.description, {
150
+ requestId: zod_1.z
151
+ .string()
152
+ .describe('generate_pdfs_asyncで返されたrequestId(UUID)'),
153
+ fileName: zod_1.z
154
+ .string()
155
+ .optional()
156
+ .describe('保存ファイル名(省略時はrequestId.zip)'),
157
+ outputDir: outputDirSchema,
158
+ }, (0, index_js_4.withTelemetry)(telemetry, download_zip_js_1.downloadZipTool.name, async (input) => (0, download_zip_js_1.handleDownloadZip)(input)));
159
+ // generate_pdf_async は HTTP モードでは非公開化 (sync が data+fileUrl+fileId を
160
+ // 1 リクエストで返せるため、リモートクライアント側で async を呼び分ける合理性が
161
+ // 薄く、Claude がツール選択を誤る原因になる)。stdio モードでは Claude Desktop /
162
+ // Code 内のローカル開発で個別生成 → download_file の組み合わせを使うケースが
163
+ // あるため引き続き提供。
164
+ server.tool(generate_pdf_async_js_1.generatePdfAsyncTool.name, generate_pdf_async_js_1.generatePdfAsyncTool.description, singlePdfSchema, (0, index_js_4.withTelemetry)(telemetry, generate_pdf_async_js_1.generatePdfAsyncTool.name, async (input) => (0, generate_pdf_async_js_1.handleGeneratePdfAsync)(input)));
165
+ }
166
+ // generate_pdfs_async (両モード共通: 複数 PDF を非同期生成。
167
+ // 単数 sync では捌けない bulk 用途のため HTTP モードでも残す)
168
+ server.tool(generate_pdfs_async_js_1.generatePdfsAsyncTool.name, generate_pdfs_async_js_1.generatePdfsAsyncTool.description, multiplePdfSchema, (0, index_js_4.withTelemetry)(telemetry, generate_pdfs_async_js_1.generatePdfsAsyncTool.name, async (input) => (0, generate_pdfs_async_js_1.handleGeneratePdfsAsync)(input)));
121
169
  // suggest_params (Sampling-backed)
122
170
  server.tool(suggest_params_js_1.suggestParamsTool.name, suggest_params_js_1.suggestParamsTool.description, {
123
171
  designId: designIdSchema,
@@ -127,11 +175,20 @@ const startServer = async () => {
127
175
  description: zod_1.z
128
176
  .string()
129
177
  .describe('帳票の内容を自然文で記述(例: "請求書、宛先A社、合計1万円")'),
130
- }, async (input) => (0, suggest_params_js_1.handleSuggestParams)(server, input));
178
+ }, (0, index_js_4.withTelemetry)(telemetry, suggest_params_js_1.suggestParamsTool.name, async (input) => (0, suggest_params_js_1.handleSuggestParams)(server, input)));
131
179
  // Prompts (recipe cards) & Resources (read-only data) — 各 register 関数が
132
180
  // 内部で server.prompt() / server.resource() を呼んで capability を自動登録します。
133
181
  (0, index_js_1.registerPrompts)(server);
134
182
  (0, index_js_2.registerResources)(server, pkg);
183
+ return server;
184
+ };
185
+ exports.createMcpServer = createMcpServer;
186
+ /**
187
+ * stdio エントリ用の従来 API。createMcpServer() で生成したインスタンスを
188
+ * StdioServerTransport に connect する。HTTP モードはこの関数を使わない。
189
+ */
190
+ const startServer = async () => {
191
+ const server = (0, exports.createMcpServer)();
135
192
  const transport = new stdio_js_1.StdioServerTransport();
136
193
  await server.connect(transport);
137
194
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;AAAA,oEAAoE;AACpE,wEAAiF;AACjF,6BAAwB;AACxB,+EAG0C;AAC1C,iEAGmC;AACnC,uEAGsC;AACtC,yEAGuC;AACvC,yEAGuC;AACvC,2EAGwC;AACxC,+DAAgF;AAChF,6DAA6E;AAC7E,6DAA+E;AAC/E,iEAGmC;AACnC,iDAAqD;AACrD,mDAAyD;AACzD,+CAA2D;AAE3D,iEAAiE;AACjE,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAsC,CAAC;AAE5E,6DAA6D;AAE7D,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAC7D,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE/D,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACxD,SAAS,EAAE,OAAC;SACT,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC3B,QAAQ,EAAE;SACV,QAAQ,CAAC,oBAAoB,CAAC;IACjC,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/D,MAAM,EAAE,OAAC;SACN,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;SACnB,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,OAAC;KACtB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CACP,0FAA0F,CAC3F,CAAC;AAEJ,MAAM,eAAe,GAAG;IACtB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC;CACjD,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,OAAC;SACR,KAAK,CAAC,gBAAgB,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uBAAuB,CAAC;CACrC,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,GAAG,eAAe;IAClB,SAAS,EAAE,eAAe;CAC3B,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC5B,GAAG,iBAAiB;IACpB,SAAS,EAAE,eAAe;IAC1B,WAAW,EAAE,OAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mCAAmC,CAAC;CACjD,CAAC;AAEK,MAAM,WAAW,GAAG,KAAK,IAAmB,EAAE;IACnD,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;KACrB,CAAC,CAAC;IAEH,wFAAwF;IACxF,MAAM,CAAC,IAAI,CACT,kCAAgB,CAAC,IAAI,EACrB,kCAAgB,CAAC,WAAW,EAC5B;QACE,KAAK,EAAE,OAAC;aACL,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,yBAAyB,CAAC;KACvC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,oCAAkB,EAAC,KAAK,CAAC,CAC3C,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACT,kDAAuB,CAAC,IAAI,EAC5B,kDAAuB,CAAC,WAAW,EACnC;QACE,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,aAAa;aACnB,QAAQ,EAAE;aACV,QAAQ,CAAC,kBAAkB,CAAC;KAChC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,oDAAyB,EAAC,KAAK,CAAC,CAClD,CAAC;IAEF,iBAAiB;IACjB,MAAM,CAAC,IAAI,CACT,qCAAiB,CAAC,IAAI,EACtB,qCAAiB,CAAC,WAAW,EAC7B,EAAE,EACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,uCAAmB,EAAC,KAAK,CAAC,CAC5C,CAAC;IAEF,kCAAkC;IAClC,MAAM,CAAC,IAAI,CACT,0CAAmB,CAAC,IAAI,EACxB,0CAAmB,CAAC,WAAW,EAC/B,mBAAmB,EACnB,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,IAAA,4CAAqB,EAAC,KAAK,EAAE;QAC3B,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAA,kCAAuB,EAAC,MAAM,CAAC;KACxD,CAAC,CACL,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,IAAI,CACT,4CAAoB,CAAC,IAAI,EACzB,4CAAoB,CAAC,WAAW,EAChC,eAAe,EACf,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,8CAAsB,EAAC,KAAK,CAAC,CAC/C,CAAC;IAEF,mCAAmC;IACnC,MAAM,CAAC,IAAI,CACT,4CAAoB,CAAC,IAAI,EACzB,4CAAoB,CAAC,WAAW,EAChC,qBAAqB,EACrB,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,IAAA,8CAAsB,EAAC,KAAK,EAAE;QAC5B,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAA,kCAAuB,EAAC,MAAM,CAAC;KACxD,CAAC,CACL,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,IAAI,CACT,8CAAqB,CAAC,IAAI,EAC1B,8CAAqB,CAAC,WAAW,EACjC,iBAAiB,EACjB,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,gDAAuB,EAAC,KAAK,CAAC,CAChD,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,mCAAgB,CAAC,IAAI,EACrB,mCAAgB,CAAC,WAAW,EAC5B;QACE,SAAS,EAAE,OAAC;aACT,MAAM,EAAE;aACR,QAAQ,CAAC,wCAAwC,CAAC;QACrD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAChE,QAAQ,EAAE,OAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yBAAyB,CAAC;QACtC,SAAS,EAAE,eAAe;KAC3B,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,qCAAkB,EAAC,KAAK,CAAC,CAC3C,CAAC;IAEF,eAAe;IACf,MAAM,CAAC,IAAI,CACT,iCAAe,CAAC,IAAI,EACpB,iCAAe,CAAC,WAAW,EAC3B;QACE,SAAS,EAAE,OAAC;aACT,MAAM,EAAE;aACR,QAAQ,CAAC,yCAAyC,CAAC;QACtD,QAAQ,EAAE,OAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4BAA4B,CAAC;QACzC,SAAS,EAAE,eAAe;KAC3B,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,mCAAiB,EAAC,KAAK,CAAC,CAC1C,CAAC;IAEF,mCAAmC;IACnC,MAAM,CAAC,IAAI,CACT,qCAAiB,CAAC,IAAI,EACtB,qCAAiB,CAAC,WAAW,EAC7B;QACE,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,aAAa;aACnB,QAAQ,EAAE;aACV,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,WAAW,EAAE,OAAC;aACX,MAAM,EAAE;aACR,QAAQ,CACP,mCAAmC,CACpC;KACJ,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,uCAAmB,EAAC,MAAM,EAAE,KAAK,CAAC,CACpD,CAAC;IAEF,uEAAuE;IACvE,oEAAoE;IACpE,IAAA,0BAAe,EAAC,MAAM,CAAC,CAAC;IACxB,IAAA,4BAAiB,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC;AA1IW,QAAA,WAAW,eA0ItB"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const TELEMETRY_SECRET_HEADER = "X-Telemetry-Secret";
2
+ export declare const TELEMETRY_DEFAULT_TIMEOUT_MS = 2000;
3
+ export type TelemetryPropertyValue = string | number | boolean | null | ReadonlyArray<string | number | boolean | null>;
4
+ export type TelemetryProperties = Record<string, TelemetryPropertyValue>;
5
+ export interface TelemetryEvent {
6
+ event: string;
7
+ userId?: string;
8
+ workspaceId?: string;
9
+ properties?: TelemetryProperties;
10
+ timestamp?: number;
11
+ }
12
+ export interface TelemetryClientOptions {
13
+ endpointUrl: string;
14
+ sharedSecret?: string;
15
+ timeoutMs?: number;
16
+ logger?: Pick<Console, 'warn'>;
17
+ }
18
+ export interface TelemetryClient {
19
+ track(event: TelemetryEvent): void;
20
+ /** Resolves once any spawned background sends settle (test-only). */
21
+ flush(): Promise<void>;
22
+ }
23
+ export declare const createTelemetryClient: (options: Partial<TelemetryClientOptions>) => TelemetryClient;
24
+ /**
25
+ * Build a client from environment variables. Returns a no-op client when
26
+ * `TELEMETRY_ENDPOINT_URL` is unset so MCP usage is never impacted by
27
+ * misconfiguration.
28
+ */
29
+ export declare const telemetryClientFromEnv: () => TelemetryClient;
30
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/telemetry/client.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAkED,eAAO,MAAM,qBAAqB,GAChC,SAAS,OAAO,CAAC,sBAAsB,CAAC,KACvC,eAMF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAO,eAItC,CAAC"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ // Fire-and-forget HTTP client for the Report Flow event telemetry collector.
3
+ //
4
+ // Schema spec: developer-docs/docs/internals/event-telemetry-schema.md (PRJ-3-375).
5
+ // TODO(PRJ-3-379): replace the locally-defined types with imports from
6
+ // @monepla/report-flow-core/telemetry once that subpath is published.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.telemetryClientFromEnv = exports.createTelemetryClient = exports.TELEMETRY_DEFAULT_TIMEOUT_MS = exports.TELEMETRY_SECRET_HEADER = void 0;
9
+ exports.TELEMETRY_SECRET_HEADER = 'X-Telemetry-Secret';
10
+ exports.TELEMETRY_DEFAULT_TIMEOUT_MS = 2000;
11
+ class NoopTelemetryClient {
12
+ track() { }
13
+ async flush() { }
14
+ }
15
+ class HttpTelemetryClient {
16
+ endpoint;
17
+ secret;
18
+ timeoutMs;
19
+ logger;
20
+ inflight = new Set();
21
+ constructor(opts) {
22
+ this.endpoint = opts.endpointUrl;
23
+ this.secret = opts.sharedSecret;
24
+ this.timeoutMs = opts.timeoutMs ?? exports.TELEMETRY_DEFAULT_TIMEOUT_MS;
25
+ this.logger = opts.logger ?? console;
26
+ }
27
+ track(event) {
28
+ const send = this.send(event);
29
+ this.inflight.add(send);
30
+ void send.finally(() => this.inflight.delete(send));
31
+ }
32
+ async flush() {
33
+ await Promise.allSettled(Array.from(this.inflight));
34
+ }
35
+ async send(event) {
36
+ const headers = {
37
+ 'Content-Type': 'application/json',
38
+ };
39
+ if (this.secret)
40
+ headers[exports.TELEMETRY_SECRET_HEADER] = this.secret;
41
+ const controller = new AbortController();
42
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
43
+ try {
44
+ const res = await fetch(this.endpoint, {
45
+ method: 'POST',
46
+ headers,
47
+ body: JSON.stringify(event),
48
+ signal: controller.signal,
49
+ });
50
+ if (!res.ok) {
51
+ this.logger.warn(`[telemetry] non-success response: status=${res.status} event=${event.event}`);
52
+ }
53
+ }
54
+ catch (err) {
55
+ // Captures synchronous throws from fetch (e.g., bad URL, fetch
56
+ // undefined in non-fetch environments) and async rejections in one
57
+ // place so the caller never sees a top-level Promise rejection.
58
+ const message = err instanceof Error ? err.message : String(err);
59
+ this.logger.warn(`[telemetry] send failed: ${message} event=${event.event}`);
60
+ }
61
+ finally {
62
+ clearTimeout(timer);
63
+ }
64
+ }
65
+ }
66
+ const createTelemetryClient = (options) => {
67
+ const endpoint = options.endpointUrl?.trim();
68
+ if (!endpoint)
69
+ return new NoopTelemetryClient();
70
+ // Spread `options` first so the trimmed `endpointUrl` wins; an untrimmed
71
+ // copy in `options.endpointUrl` would otherwise clobber it.
72
+ return new HttpTelemetryClient({ ...options, endpointUrl: endpoint });
73
+ };
74
+ exports.createTelemetryClient = createTelemetryClient;
75
+ /**
76
+ * Build a client from environment variables. Returns a no-op client when
77
+ * `TELEMETRY_ENDPOINT_URL` is unset so MCP usage is never impacted by
78
+ * misconfiguration.
79
+ */
80
+ const telemetryClientFromEnv = () => (0, exports.createTelemetryClient)({
81
+ endpointUrl: process.env.TELEMETRY_ENDPOINT_URL,
82
+ sharedSecret: process.env.TELEMETRY_SHARED_SECRET,
83
+ });
84
+ exports.telemetryClientFromEnv = telemetryClientFromEnv;
85
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/telemetry/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { TELEMETRY_SECRET_HEADER, TELEMETRY_DEFAULT_TIMEOUT_MS, createTelemetryClient, telemetryClientFromEnv, } from './client.js';
2
+ export type { TelemetryClient, TelemetryClientOptions, TelemetryEvent, TelemetryProperties, TelemetryPropertyValue, } from './client.js';
3
+ export { withTelemetry } from './interceptor.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withTelemetry = exports.telemetryClientFromEnv = exports.createTelemetryClient = exports.TELEMETRY_DEFAULT_TIMEOUT_MS = exports.TELEMETRY_SECRET_HEADER = void 0;
4
+ var client_js_1 = require("./client.js");
5
+ Object.defineProperty(exports, "TELEMETRY_SECRET_HEADER", { enumerable: true, get: function () { return client_js_1.TELEMETRY_SECRET_HEADER; } });
6
+ Object.defineProperty(exports, "TELEMETRY_DEFAULT_TIMEOUT_MS", { enumerable: true, get: function () { return client_js_1.TELEMETRY_DEFAULT_TIMEOUT_MS; } });
7
+ Object.defineProperty(exports, "createTelemetryClient", { enumerable: true, get: function () { return client_js_1.createTelemetryClient; } });
8
+ Object.defineProperty(exports, "telemetryClientFromEnv", { enumerable: true, get: function () { return client_js_1.telemetryClientFromEnv; } });
9
+ var interceptor_js_1 = require("./interceptor.js");
10
+ Object.defineProperty(exports, "withTelemetry", { enumerable: true, get: function () { return interceptor_js_1.withTelemetry; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":";;;AAAA,yCAKqB;AAJnB,oHAAA,uBAAuB,OAAA;AACvB,yHAAA,4BAA4B,OAAA;AAC5B,kHAAA,qBAAqB,OAAA;AACrB,mHAAA,sBAAsB,OAAA;AASxB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
@@ -0,0 +1,9 @@
1
+ import type { TelemetryClient } from './client.js';
2
+ type ToolHandler<I, R> = (input: I) => Promise<R>;
3
+ type ToolResultLike = {
4
+ isError?: boolean;
5
+ [key: string]: unknown;
6
+ };
7
+ export declare const withTelemetry: <I, R extends ToolResultLike>(client: TelemetryClient, toolName: string, handler: ToolHandler<I, R>) => ToolHandler<I, R>;
8
+ export {};
9
+ //# sourceMappingURL=interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/telemetry/interceptor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAElD,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AA0BF,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,CAAC,SAAS,cAAc,EACvD,QAAQ,eAAe,EACvB,UAAU,MAAM,EAChB,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KACzB,WAAW,CAAC,CAAC,EAAE,CAAC,CAsClB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ // Wraps MCP tool handlers with fire-and-forget telemetry.
3
+ //
4
+ // Emits `integration.mcp.invoked` with { tool, durationMs, success, errorClass? }
5
+ // after every tool call (success or failure). Never mutates the handler return
6
+ // value, so existing callers see identical behavior.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.withTelemetry = void 0;
9
+ // None of today's tool schemas declare `workspaceId` (the workspace is
10
+ // implicit in the OAuth token / keychain entry), so this helper currently
11
+ // returns `undefined` for every production call. Kept defensively so a
12
+ // future tool that exposes `workspaceId` to the model surfaces it
13
+ // automatically — and so the field can be re-pointed at the OAuth /
14
+ // keychain auth context once that is threaded into createMcpServer
15
+ // (Codex P2 on PR #38).
16
+ const extractWorkspaceId = (input) => {
17
+ if (!input || typeof input !== 'object')
18
+ return undefined;
19
+ const value = input.workspaceId;
20
+ return typeof value === 'string' ? value : undefined;
21
+ };
22
+ const inferErrorClass = (result, error) => {
23
+ if (error instanceof Error)
24
+ return error.name || 'Error';
25
+ if (typeof error === 'string')
26
+ return 'Error';
27
+ const r = result;
28
+ if (r?.isError)
29
+ return 'ToolError';
30
+ return undefined;
31
+ };
32
+ const withTelemetry = (client, toolName, handler) => {
33
+ return async (input) => {
34
+ const startedAt = Date.now();
35
+ const workspaceId = extractWorkspaceId(input);
36
+ try {
37
+ const result = await handler(input);
38
+ client.track({
39
+ event: 'integration.mcp.invoked',
40
+ workspaceId,
41
+ // Stamp client-side ingest time so events from clock-skewed clients
42
+ // remain orderable in Analytics Engine (matches schema §6).
43
+ timestamp: Date.now(),
44
+ properties: {
45
+ tool: toolName,
46
+ durationMs: Date.now() - startedAt,
47
+ success: !result.isError,
48
+ ...(result.isError
49
+ ? { errorClass: inferErrorClass(result, undefined) ?? 'ToolError' }
50
+ : {}),
51
+ },
52
+ });
53
+ return result;
54
+ }
55
+ catch (err) {
56
+ client.track({
57
+ event: 'integration.mcp.invoked',
58
+ workspaceId,
59
+ timestamp: Date.now(),
60
+ properties: {
61
+ tool: toolName,
62
+ durationMs: Date.now() - startedAt,
63
+ success: false,
64
+ errorClass: inferErrorClass(undefined, err) ?? 'Error',
65
+ },
66
+ });
67
+ throw err;
68
+ }
69
+ };
70
+ };
71
+ exports.withTelemetry = withTelemetry;
72
+ //# sourceMappingURL=interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/telemetry/interceptor.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,EAAE;AACF,kFAAkF;AAClF,+EAA+E;AAC/E,qDAAqD;;;AAWrD,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,kEAAkE;AAClE,oEAAoE;AACpE,mEAAmE;AACnE,wBAAwB;AACxB,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAsB,EAAE;IAChE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,KAAK,GAAI,KAAiC,CAAC,WAAW,CAAC;IAC7D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,MAAe,EACf,KAAc,EACM,EAAE;IACtB,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9C,MAAM,CAAC,GAAG,MAAoC,CAAC;IAC/C,IAAI,CAAC,EAAE,OAAO;QAAE,OAAO,WAAW,CAAC;IACnC,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAC3B,MAAuB,EACvB,QAAgB,EAChB,OAA0B,EACP,EAAE;IACrB,OAAO,KAAK,EAAE,KAAQ,EAAc,EAAE;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC;gBACX,KAAK,EAAE,yBAAyB;gBAChC,WAAW;gBACX,oEAAoE;gBACpE,4DAA4D;gBAC5D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;oBACxB,GAAG,CAAC,MAAM,CAAC,OAAO;wBAChB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE;wBACnE,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC;gBACX,KAAK,EAAE,yBAAyB;gBAChC,WAAW;gBACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,OAAO;iBACvD;aACF,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,aAAa,iBA0CxB"}
@@ -8,21 +8,45 @@ export type GeneratePdfSyncInput = {
8
8
  version: number;
9
9
  content: ContentDto;
10
10
  outputDir?: string;
11
+ /**
12
+ * true を指定すると EmbeddedResource (application/pdf, base64 blob) も返却する。
13
+ * デフォルト false。claude.ai が PDF resource を inline 表示するように対応した
14
+ * 段階で true を推奨に変更する想定。
15
+ */
16
+ includePreview?: boolean;
11
17
  };
12
18
  export type GeneratePdfSyncDeps = {
13
19
  /**
14
- * outputDir 未指定時に呼ばれるフォールバック。
20
+ * stdio: 'stdio' (デフォルト) — ローカルファイル保存 + 戻り値に filePath を含める
21
+ * http : 'http' — ローカル保存をスキップ
22
+ */
23
+ mode?: 'stdio' | 'http';
24
+ /**
25
+ * outputDir 未指定時のフォールバック (stdio モード専用)。
15
26
  * server.ts で Roots を見てデフォルトディレクトリを返すために使う。
16
- * 未指定の場合は client 側が process.cwd() にフォールバックする。
17
27
  */
18
28
  resolveOutputDir?: () => Promise<string | undefined>;
19
29
  };
20
- export type GeneratePdfSyncResult = {
21
- content: [{
22
- type: 'text';
23
- text: string;
24
- }];
30
+ type TextContent = {
31
+ type: 'text';
32
+ text: string;
33
+ };
34
+ type EmbeddedResource = {
35
+ type: 'resource';
36
+ resource: {
37
+ uri: string;
38
+ mimeType: string;
39
+ blob: string;
40
+ };
41
+ };
42
+ /**
43
+ * Tool 層の戻り値型。`client.ts` の `GeneratePdfSyncResult`
44
+ * ({ data, filePath? }) と区別するため `Tool` を付ける。
45
+ */
46
+ export type GeneratePdfSyncToolResult = {
47
+ content: Array<TextContent | EmbeddedResource>;
25
48
  isError?: true;
26
49
  };
27
- export declare const handleGeneratePdfSync: (input: GeneratePdfSyncInput, deps?: GeneratePdfSyncDeps) => Promise<GeneratePdfSyncResult>;
50
+ export declare const handleGeneratePdfSync: (input: GeneratePdfSyncInput, deps?: GeneratePdfSyncDeps) => Promise<GeneratePdfSyncToolResult>;
51
+ export {};
28
52
  //# sourceMappingURL=generate-pdf-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-pdf-sync.d.ts","sourceRoot":"","sources":["../../src/tools/generate-pdf-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D,eAAO,MAAM,mBAAmB;;;CAI/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,OAAO,oBAAoB,EAC3B,OAAM,mBAAwB,KAC7B,OAAO,CAAC,qBAAqB,CAmB/B,CAAC"}
1
+ {"version":3,"file":"generate-pdf-sync.d.ts","sourceRoot":"","sources":["../../src/tools/generate-pdf-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D,eAAO,MAAM,mBAAmB;;;CAI/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACtD,CAAC;AAEF,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAClD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AA0CF,eAAO,MAAM,qBAAqB,GAChC,OAAO,oBAAoB,EAC3B,OAAM,mBAAwB,KAC7B,OAAO,CAAC,yBAAyB,CAgEnC,CAAC"}