@ai-support-agent/cli 0.2.6 → 0.2.7-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/agent-config-sync.d.ts.map +1 -1
  2. package/dist/agent-config-sync.js +14 -0
  3. package/dist/agent-config-sync.js.map +1 -1
  4. package/dist/api-client.d.ts +16 -1
  5. package/dist/api-client.d.ts.map +1 -1
  6. package/dist/api-client.js +21 -0
  7. package/dist/api-client.js.map +1 -1
  8. package/dist/commands/api-chat-executor.d.ts.map +1 -1
  9. package/dist/commands/api-chat-executor.js +3 -1
  10. package/dist/commands/api-chat-executor.js.map +1 -1
  11. package/dist/commands/chat-executor.d.ts.map +1 -1
  12. package/dist/commands/chat-executor.js +49 -5
  13. package/dist/commands/chat-executor.js.map +1 -1
  14. package/dist/commands/claude-code-runner.d.ts +1 -0
  15. package/dist/commands/claude-code-runner.d.ts.map +1 -1
  16. package/dist/commands/claude-code-runner.js +2 -0
  17. package/dist/commands/claude-code-runner.js.map +1 -1
  18. package/dist/commands/codex-runner.d.ts.map +1 -1
  19. package/dist/commands/codex-runner.js +2 -0
  20. package/dist/commands/codex-runner.js.map +1 -1
  21. package/dist/commands/shared-chat-utils.d.ts +28 -2
  22. package/dist/commands/shared-chat-utils.d.ts.map +1 -1
  23. package/dist/commands/shared-chat-utils.js +75 -4
  24. package/dist/commands/shared-chat-utils.js.map +1 -1
  25. package/dist/constants.d.ts +7 -0
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +15 -3
  28. package/dist/constants.js.map +1 -1
  29. package/dist/mcp/config-writer.d.ts +75 -0
  30. package/dist/mcp/config-writer.d.ts.map +1 -1
  31. package/dist/mcp/config-writer.js +138 -1
  32. package/dist/mcp/config-writer.js.map +1 -1
  33. package/dist/mcp/server.d.ts.map +1 -1
  34. package/dist/mcp/server.js +4 -0
  35. package/dist/mcp/server.js.map +1 -1
  36. package/dist/mcp/tools/read-slack-thread.d.ts +21 -0
  37. package/dist/mcp/tools/read-slack-thread.d.ts.map +1 -0
  38. package/dist/mcp/tools/read-slack-thread.js +45 -0
  39. package/dist/mcp/tools/read-slack-thread.js.map +1 -0
  40. package/dist/mcp/tools/trigger-e2e-test.d.ts +12 -0
  41. package/dist/mcp/tools/trigger-e2e-test.d.ts.map +1 -0
  42. package/dist/mcp/tools/trigger-e2e-test.js +40 -0
  43. package/dist/mcp/tools/trigger-e2e-test.js.map +1 -0
  44. package/dist/security.d.ts.map +1 -1
  45. package/dist/security.js +10 -0
  46. package/dist/security.js.map +1 -1
  47. package/dist/types/chat.d.ts +2 -0
  48. package/dist/types/chat.d.ts.map +1 -1
  49. package/dist/types/tool-output.d.ts +28 -0
  50. package/dist/types/tool-output.d.ts.map +1 -1
  51. package/package.json +1 -1
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BROWSER_LOCAL_PORT_ENV = void 0;
3
+ exports.TASK_ID_ENV = exports.CONVERSATION_ID_ENV = exports.BROWSER_LOCAL_PORT_ENV = void 0;
4
4
  exports.getMcpConfigPath = getMcpConfigPath;
5
5
  exports.buildMcpConfig = buildMcpConfig;
6
6
  exports.writeMcpConfig = writeMcpConfig;
7
+ exports.writeCommandMcpConfig = writeCommandMcpConfig;
8
+ exports.cleanupStaleCommandMcpConfigs = cleanupStaleCommandMcpConfigs;
9
+ const crypto_1 = require("crypto");
7
10
  const fs_1 = require("fs");
8
11
  const path_1 = require("path");
12
+ const logger_1 = require("../logger");
13
+ const utils_1 = require("../utils");
9
14
  /**
10
15
  * MCP 設定ファイルのパスを返す
11
16
  */
@@ -37,6 +42,36 @@ function buildMcpConfig(apiUrl, projectCode, mcpServerPath, tenantCode) {
37
42
  * ブラウザローカルポートの環境変数名
38
43
  */
39
44
  exports.BROWSER_LOCAL_PORT_ENV = 'AI_SUPPORT_BROWSER_LOCAL_PORT';
45
+ /**
46
+ * 実際のSlackチャット会話ID(conversationId)の環境変数名。
47
+ *
48
+ * read_slack_thread MCPツールが子プロセス(Claude Code CLI がさらに spawn する
49
+ * MCP サーバー)側で `process.env[CONVERSATION_ID_ENV]` として読み取り、現在処理中の
50
+ * Slackスレッドを逆引きするために使用する。
51
+ *
52
+ * 注意: `@modelcontextprotocol/sdk` の `StdioClientTransport` は MCP サーバー子プロセスへ
53
+ * `{ ...getDefaultEnvironment(), ...serverParams.env }` のみを渡す実装になっており、
54
+ * `getDefaultEnvironment()` は HOME/LOGNAME/PATH/SHELL/TERM/USER(Windows: APPDATA 等)
55
+ * のみを継承する。つまり呼び出し元プロセス(claude/codex CLI)が任意に持つ
56
+ * `process.env.AI_SUPPORT_CONVERSATION_ID` は MCP サーバー子プロセスへは自動継承されず、
57
+ * MCP 設定ファイルの `env` に明示的に含まれている場合のみ子プロセスに渡る
58
+ * (`node_modules/@modelcontextprotocol/sdk/dist/cjs/client/stdio.js` で確認済み)。
59
+ * このため conversationId は `writeMcpConfig` が書くプロジェクト単位の静的ファイルではなく、
60
+ * チャットコマンド単位で `writeCommandMcpConfig` が書く per-command ファイルの `env` に
61
+ * 明示的に埋め込む必要がある。
62
+ */
63
+ exports.CONVERSATION_ID_ENV = 'AI_SUPPORT_CONVERSATION_ID';
64
+ /**
65
+ * 実行中タスクのIDの環境変数名。
66
+ *
67
+ * `trigger_e2e_test` MCPツールが子プロセス側で `process.env[TASK_ID_ENV]` として
68
+ * 読み取り、起動したE2E実行をこのタスクに紐付ける(タスク詳細画面のE2Eテストタブ
69
+ * からの逆引き用)。`CONVERSATION_ID_ENV` と同じ理由(`StdioClientTransport` が
70
+ * 呼び出し元プロセスの任意の環境変数をMCPサーバー子プロセスへ自動継承しない)により、
71
+ * `writeCommandMcpConfig` が書く per-command ファイルの `env` に明示的に埋め込む
72
+ * 必要がある。
73
+ */
74
+ exports.TASK_ID_ENV = 'AI_SUPPORT_TASK_ID';
40
75
  /**
41
76
  * MCP 設定ファイルを書き出す
42
77
  *
@@ -88,4 +123,106 @@ function writeMcpConfig(projectDir, apiUrl, token, projectCode, mcpServerPath, b
88
123
  });
89
124
  return configPath;
90
125
  }
126
+ /**
127
+ * commandId をファイル名に安全に埋め込めるよう、英数字・アンダースコア・ハイフン
128
+ * 以外の文字を `_` に置換する(パストラバーサル対策)。
129
+ */
130
+ function sanitizeCommandIdForFilename(commandId) {
131
+ return commandId.replace(/[^A-Za-z0-9_-]/g, '_');
132
+ }
133
+ /**
134
+ * チャットコマンド(Slackメッセージ)単位の MCP 設定ファイルを書き出す。
135
+ *
136
+ * `writeMcpConfig` が書く `.ai-support-agent/mcp/config.json` はプロジェクト単位の
137
+ * 静的ファイルで、config sync 時にのみ再生成され、複数のチャットコマンド(複数の
138
+ * Slack会話が並行/連続実行される場合を含む)から共有される。conversationId は
139
+ * コマンド単位で変わる値であり、この静的ファイルに書き込むと「別会話の
140
+ * conversationId が残ったまま次のコマンドに使われる」「並行実行時に競合する」
141
+ * リスクがある(`agent-transport.ts` の `void handleNotification(...)` により、
142
+ * 同一エージェントが複数コマンドを並行処理しうるため)。
143
+ *
144
+ * そのため、`ai-support-agent` サーバーの `env` に conversationId を埋め込んだ
145
+ * コマンド専用の設定ファイルを都度書き出す。呼び出し元はコマンド完了後に
146
+ * このファイルを削除すること。
147
+ *
148
+ * ファイル名には commandId(サニタイズ済み、デバッグ用)に加えて `randomUUID()` を
149
+ * 必ず含める。commandId は外部API由来で形式保証がなく、サニタイズ後に別の commandId
150
+ * と衝突しうる(例: `cmd/a` と `cmd_a` はいずれも `cmd_a` に正規化される)。UUID を
151
+ * 含めないと、並行実行中の別コマンドの設定ファイルを誤って参照・削除してしまい、
152
+ * conversationId の混線やMCPサーバー起動失敗を招く。書き込みは排他生成(`wx` フラグ)
153
+ * で行い、万一の衝突は例外として検知する(呼び出し元は失敗時に共有静的設定へ
154
+ * フォールバックする設計になっている)。
155
+ *
156
+ * `read_slack_thread` ツールが子プロセス側で `process.env[CONVERSATION_ID_ENV]` として
157
+ * 読み取れるのは、MCP サーバー子プロセスへは `StdioClientTransport` 経由で
158
+ * 設定ファイルの `env` に明示されたキーのみが渡され、呼び出し元プロセス
159
+ * (claude/codex CLI)の任意の環境変数は自動継承されないため(`CONVERSATION_ID_ENV`
160
+ * の定義コメント参照)。
161
+ */
162
+ function writeCommandMcpConfig(baseConfigPath, commandId, conversationId, taskId) {
163
+ const raw = (0, fs_1.readFileSync)(baseConfigPath, 'utf-8');
164
+ const config = JSON.parse(raw);
165
+ const server = config.mcpServers?.['ai-support-agent'];
166
+ if (server) {
167
+ server.env = {
168
+ ...(server.env ?? {}),
169
+ [exports.CONVERSATION_ID_ENV]: conversationId,
170
+ ...(taskId && { [exports.TASK_ID_ENV]: taskId }),
171
+ };
172
+ }
173
+ const dir = (0, path_1.dirname)(baseConfigPath);
174
+ const commandConfigPath = (0, path_1.join)(dir, `config-${sanitizeCommandIdForFilename(commandId)}-${(0, crypto_1.randomUUID)()}.json`);
175
+ (0, fs_1.writeFileSync)(commandConfigPath, JSON.stringify(config, null, 2), {
176
+ mode: 0o600,
177
+ encoding: 'utf-8',
178
+ // 排他生成: 同名ファイルが既に存在する場合は例外を投げる(UUID衝突の理論上の
179
+ // 可能性・命名ロジックのバグを検知するための多層防御)。
180
+ flag: 'wx',
181
+ });
182
+ return commandConfigPath;
183
+ }
184
+ /**
185
+ * 孤立した per-command MCP 設定ファイル(`config-*.json`)を一括削除する。
186
+ *
187
+ * 通常はコマンド完了時(chat-executor.ts の cleanupCommandMcpConfig)に削除されるが、
188
+ * エージェント process が SIGKILL / OOM 等で異常終了した場合、平文トークンと
189
+ * conversationId を含む孤立ファイルが `.ai-support-agent/mcp/` に残り続ける。
190
+ * `TerminalSession.cleanupStaleSandboxes` と同じパターンで、一定時間以上前のものを
191
+ * 掃除する。共有静的ファイル(`config.json` 自体、`baseConfigPath` の basename)や
192
+ * 無関係なファイルには触れない。
193
+ *
194
+ * @param baseConfigPath `getMcpConfigPath(projectDir)` が返す静的設定ファイルのパス
195
+ * @param maxAgeMs 削除対象とする経過時間 (ms)。デフォルト 24 時間。0 で全削除
196
+ * @returns 削除した件数
197
+ */
198
+ function cleanupStaleCommandMcpConfigs(baseConfigPath, maxAgeMs = 24 * 60 * 60 * 1000) {
199
+ const dir = (0, path_1.dirname)(baseConfigPath);
200
+ let entries;
201
+ try {
202
+ entries = (0, fs_1.readdirSync)(dir);
203
+ }
204
+ catch {
205
+ return 0;
206
+ }
207
+ const now = Date.now();
208
+ let removed = 0;
209
+ for (const name of entries) {
210
+ if (!name.startsWith('config-') || !name.endsWith('.json'))
211
+ continue;
212
+ const fullPath = (0, path_1.join)(dir, name);
213
+ try {
214
+ const stat = (0, fs_1.statSync)(fullPath);
215
+ if (maxAgeMs > 0 && now - stat.mtimeMs < maxAgeMs)
216
+ continue;
217
+ (0, fs_1.rmSync)(fullPath, { force: true });
218
+ removed++;
219
+ }
220
+ catch (error) {
221
+ // 個々のファイル失敗で掃除全体を止めないが、無音のまま握り潰さず記録する
222
+ // (どのファイルが掃除されなかったか運用上追跡できるようにする)。
223
+ logger_1.logger.warn(`[mcp-config] Failed to clean up stale per-command MCP config ${name}: ${(0, utils_1.getErrorMessage)(error)}`);
224
+ }
225
+ }
226
+ return removed;
227
+ }
91
228
  //# sourceMappingURL=config-writer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/mcp/config-writer.ts"],"names":[],"mappings":";;;AAWA,4CAEC;AAOD,wCAoBC;AAYD,wCA2DC;AA/GD,2BAA6C;AAC7C,+BAAoC;AAOpC;;GAEG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAA,WAAI,EAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAC5B,MAAc,EACd,WAAmB,EACnB,aAAqB,EACrB,UAAkB;IAElB,OAAO;QACL,UAAU,EAAE;YACV,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,aAAa,CAAC;gBACrB,GAAG,EAAE;oBACH,wBAAwB,EAAE,MAAM;oBAChC,sBAAsB,EAAE,2BAA2B;oBACnD,6BAA6B,EAAE,WAAW;oBAC1C,4BAA4B,EAAE,UAAU;iBACzC;aACF;SACF;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACU,QAAA,sBAAsB,GAAG,+BAA+B,CAAA;AAErE;;;;GAIG;AACH,SAAgB,cAAc,CAC5B,UAAkB,EAClB,MAAc,EACd,KAAa,EACb,WAAmB,EACnB,aAAqB,EACrB,cAAmC,EACnC,UAAmB,EACnB,gBAAyB;IAEzB,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,UAAU,CAAC,CAAA;IAE/B,IAAA,cAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAEhD,iFAAiF;IACjF,MAAM,kBAAkB,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1C,CAAC,CAAC,EAAE,CAAA;IAEJ,wCAAwC;IACxC,MAAM,MAAM,GAA4B;QACtC,UAAU,EAAE;YACV,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,aAAa,CAAC;gBACrB,GAAG,EAAE;oBACH,wBAAwB,EAAE,MAAM;oBAChC,sBAAsB,EAAE,KAAK;oBAC7B,6BAA6B,EAAE,WAAW;oBAC1C,4BAA4B,EAAE,kBAAkB;oBAChD,GAAG,CAAC,gBAAgB,IAAI;wBACtB,CAAC,8BAAsB,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;qBACnD,CAAC;iBACH;aACF;YACD,6BAA6B;YAC7B,GAAG,CAAC,cAAc,EAAE,MAAM;gBACxB,CAAC,CAAC;oBACE,OAAO,EAAE;wBACP,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,CAAC,oBAAoB,CAAC;wBAC5B,GAAG,EAAE;4BACH,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;4BACxC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM;yBAC1C;qBACF;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAA;IAED,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACzD,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"config-writer.js","sourceRoot":"","sources":["../../src/mcp/config-writer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAU/E;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAsBnI;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBpD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAY/E;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAwBnI;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBpD"}
@@ -15,8 +15,10 @@ const db_schemas_1 = require("./tools/db-schemas");
15
15
  const file_upload_1 = require("./tools/file-upload");
16
16
  const project_info_1 = require("./tools/project-info");
17
17
  const read_conversation_file_1 = require("./tools/read-conversation-file");
18
+ const read_slack_thread_1 = require("./tools/read-slack-thread");
18
19
  const send_slack_message_1 = require("./tools/send-slack-message");
19
20
  const trigger_alarm_1 = require("./tools/trigger-alarm");
21
+ const trigger_e2e_test_1 = require("./tools/trigger-e2e-test");
20
22
  /**
21
23
  * MCP サーバーを作成する
22
24
  */
@@ -33,6 +35,8 @@ function createMcpServer(apiClient, projectCode, browserSessionManager) {
33
35
  (0, read_conversation_file_1.registerReadConversationFileTool)(server, apiClient);
34
36
  (0, send_slack_message_1.registerSendSlackMessageTool)(server, apiClient);
35
37
  (0, trigger_alarm_1.registerTriggerAlarmTool)(server, apiClient);
38
+ (0, read_slack_thread_1.registerReadSlackThreadTool)(server, apiClient);
39
+ (0, trigger_e2e_test_1.registerTriggerE2eTestTool)(server, apiClient);
36
40
  // browser_navigate/browser_click等とreport_test_stepが同じBrowserSessionManagerを
37
41
  // 参照するように、ここで一つだけ生成して両方に渡す(渡さないと、report_test_step が
38
42
  // アクティブなセッションを解決できず、常に白紙のスクリーンショットを撮ってしまう)。
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ApiClient } from '../../api-client';
3
+ /**
4
+ * read_slack_thread ツールを MCP サーバーに登録する。
5
+ *
6
+ * channel/threadTs はクライアント(LLM)から受け取らず、サーバー側で
7
+ * `AI_SUPPORT_CONVERSATION_ID` 環境変数(現在の会話ID)から Slackスレッドへ
8
+ * 逆引きする。
9
+ *
10
+ * 注意(ゲート条件と実際のSlack限定性の違い): このツールがローカルで判定できるのは
11
+ * `AI_SUPPORT_CONVERSATION_ID` が設定されているか否かのみであり、これは Slack 由来の
12
+ * チャットコマンドに限らず conversationId を持つ他の会話(例: Web チャット)でも
13
+ * 設定されうる。「実際にSlackスレッドに紐づいているか」はサーバー側
14
+ * (`SlackConversationService.findThreadByConversationId`)でのみ判定され、
15
+ * 紐づかない場合は `NOT_FOUND` エラーとして返る。したがって本ツールは
16
+ * 「Slack起源であることが確定している場合のみ利用可能」ではなく、「conversationId
17
+ * があれば試行し、Slackスレッドに紐づかなければサーバー側エラーになる」という
18
+ * 挙動になる。
19
+ */
20
+ export declare function registerReadSlackThreadTool(server: McpServer, apiClient: ApiClient): void;
21
+ //# sourceMappingURL=read-slack-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-slack-thread.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-slack-thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAK5C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA4BzF"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerReadSlackThreadTool = registerReadSlackThreadTool;
4
+ const logger_1 = require("../../logger");
5
+ const config_writer_1 = require("../config-writer");
6
+ const mcp_response_1 = require("./mcp-response");
7
+ /**
8
+ * read_slack_thread ツールを MCP サーバーに登録する。
9
+ *
10
+ * channel/threadTs はクライアント(LLM)から受け取らず、サーバー側で
11
+ * `AI_SUPPORT_CONVERSATION_ID` 環境変数(現在の会話ID)から Slackスレッドへ
12
+ * 逆引きする。
13
+ *
14
+ * 注意(ゲート条件と実際のSlack限定性の違い): このツールがローカルで判定できるのは
15
+ * `AI_SUPPORT_CONVERSATION_ID` が設定されているか否かのみであり、これは Slack 由来の
16
+ * チャットコマンドに限らず conversationId を持つ他の会話(例: Web チャット)でも
17
+ * 設定されうる。「実際にSlackスレッドに紐づいているか」はサーバー側
18
+ * (`SlackConversationService.findThreadByConversationId`)でのみ判定され、
19
+ * 紐づかない場合は `NOT_FOUND` エラーとして返る。したがって本ツールは
20
+ * 「Slack起源であることが確定している場合のみ利用可能」ではなく、「conversationId
21
+ * があれば試行し、Slackスレッドに紐づかなければサーバー側エラーになる」という
22
+ * 挙動になる。
23
+ */
24
+ function registerReadSlackThreadTool(server, apiClient) {
25
+ server.tool('read_slack_thread', 'Read the full text of the conversation thread currently being processed (channel/thread resolved server-side from AI_SUPPORT_CONVERSATION_ID), including this bot\'s own past posts. Takes no arguments. Requires the current chat command to carry a conversation id; if that conversation is not backed by a Slack thread, the underlying API returns a NOT_FOUND error.', {}, async () => (0, mcp_response_1.withMcpErrorHandling)(async () => {
26
+ const chatConversationId = process.env[config_writer_1.CONVERSATION_ID_ENV];
27
+ if (!chatConversationId) {
28
+ return (0, mcp_response_1.mcpErrorResponse)(`${config_writer_1.CONVERSATION_ID_ENV} is not set. This tool requires the current chat command to carry a conversation id.`);
29
+ }
30
+ const result = await apiClient.readSlackThread(chatConversationId);
31
+ if (!result.success) {
32
+ return (0, mcp_response_1.mcpErrorResponse)(result.error?.message ?? 'Failed to read Slack thread');
33
+ }
34
+ if (!result.data) {
35
+ // success:true と data 欠落の組み合わせはバックエンド契約違反(本来あるべき
36
+ // text フィールドの欠落)であり、「スレッドが実際に空」とは運用上区別できない。
37
+ // 呼び出し元(LLM)から見て正常系の空応答と誤認されないよう、エラーとして
38
+ // 返す(黙って {} に丸めない)。識別子付きで警告ログも残す。
39
+ logger_1.logger.warn(`[read_slack_thread] API reported success but omitted data for chatConversationId=${chatConversationId}`);
40
+ return (0, mcp_response_1.mcpErrorResponse)('read_slack_thread: API returned success but no data (contract violation)');
41
+ }
42
+ return (0, mcp_response_1.mcpJsonResponse)(result.data);
43
+ }));
44
+ }
45
+ //# sourceMappingURL=read-slack-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-slack-thread.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-slack-thread.ts"],"names":[],"mappings":";;AAwBA,kEA4BC;AAjDD,yCAAqC;AACrC,oDAAsD;AACtD,iDAAwF;AAExF;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,2BAA2B,CAAC,MAAiB,EAAE,SAAoB;IACjF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,4WAA4W,EAC5W,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,IAAA,mCAAoB,EAAC,KAAK,IAAI,EAAE;QAC1C,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mCAAmB,CAAC,CAAA;QAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,IAAA,+BAAgB,EACrB,GAAG,mCAAmB,sFAAsF,CAC7G,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;QAClE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,IAAA,+BAAgB,EAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,6BAA6B,CAAC,CAAA;QACjF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,iDAAiD;YACjD,4CAA4C;YAC5C,wCAAwC;YACxC,kCAAkC;YAClC,eAAM,CAAC,IAAI,CAAC,oFAAoF,kBAAkB,EAAE,CAAC,CAAA;YACrH,OAAO,IAAA,+BAAgB,EAAC,0EAA0E,CAAC,CAAA;QACrG,CAAC;QACD,OAAO,IAAA,8BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ApiClient } from '../../api-client';
3
+ /**
4
+ * trigger_e2e_test ツールを MCP サーバーに登録する
5
+ *
6
+ * タスク実行中(AI_SUPPORT_TASK_ID がセットされている場合)のみ有効。起動した
7
+ * E2E 実行にタスクIDを紐付け、タスク詳細画面の E2E テストタブから逆引きできる
8
+ * ようにする。testCaseId は対象プロジェクトのアクティブな E2E テストケースの
9
+ * ID を指定する必要がある。
10
+ */
11
+ export declare function registerTriggerE2eTestTool(server: McpServer, apiClient: ApiClient): void;
12
+ //# sourceMappingURL=trigger-e2e-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-e2e-test.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/trigger-e2e-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAI5C;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAkCxF"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerTriggerE2eTestTool = registerTriggerE2eTestTool;
4
+ const zod_1 = require("zod");
5
+ const logger_1 = require("../../logger");
6
+ const mcp_response_1 = require("./mcp-response");
7
+ /**
8
+ * trigger_e2e_test ツールを MCP サーバーに登録する
9
+ *
10
+ * タスク実行中(AI_SUPPORT_TASK_ID がセットされている場合)のみ有効。起動した
11
+ * E2E 実行にタスクIDを紐付け、タスク詳細画面の E2E テストタブから逆引きできる
12
+ * ようにする。testCaseId は対象プロジェクトのアクティブな E2E テストケースの
13
+ * ID を指定する必要がある。
14
+ */
15
+ function registerTriggerE2eTestTool(server, apiClient) {
16
+ server.tool('trigger_e2e_test', 'Trigger a registered E2E test case to run. Only available during task execution — the launched E2E run is linked '
17
+ + 'to this task so it shows up in the task detail\'s E2E test tab. testCaseId must be an existing E2E test case ID '
18
+ + 'for this project.', {
19
+ testCaseId: zod_1.z.string().describe('ID of the E2E test case to execute'),
20
+ executionMethod: zod_1.z.enum(['ai', 'script', 'hybrid', 'playwright']).optional()
21
+ .describe('Execution method (optional; defaults to the test case setting)'),
22
+ environmentId: zod_1.z.string().optional().describe('E2E environment ID (optional)'),
23
+ }, async (args) => (0, mcp_response_1.withMcpErrorHandling)(async () => {
24
+ const taskId = process.env.AI_SUPPORT_TASK_ID;
25
+ if (!taskId) {
26
+ logger_1.logger.warn(`[trigger_e2e_test] Guarded: AI_SUPPORT_TASK_ID not set (testCaseId=${args.testCaseId})`);
27
+ return (0, mcp_response_1.mcpTextResponse)('trigger_e2e_test is only available during task execution (AI_SUPPORT_TASK_ID not set)');
28
+ }
29
+ const callId = (0, mcp_response_1.newIdempotencyKey)();
30
+ const result = await apiClient.triggerE2eTest(args.testCaseId, taskId, args.executionMethod, args.environmentId, callId);
31
+ if (!result.success) {
32
+ const message = result.error?.message ?? 'Failed to trigger E2E test';
33
+ logger_1.logger.warn(`[trigger_e2e_test] Failed: testCaseId=${args.testCaseId} taskId=${taskId}: ${message}`);
34
+ return (0, mcp_response_1.mcpErrorResponse)(message);
35
+ }
36
+ logger_1.logger.debug(`[trigger_e2e_test] Triggered: testCaseId=${args.testCaseId} taskId=${taskId} executionId=${result.data?.executionId}`);
37
+ return (0, mcp_response_1.mcpJsonResponse)(result.data);
38
+ }));
39
+ }
40
+ //# sourceMappingURL=trigger-e2e-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-e2e-test.js","sourceRoot":"","sources":["../../../src/mcp/tools/trigger-e2e-test.ts"],"names":[],"mappings":";;AAeA,gEAkCC;AAhDD,6BAAuB;AAGvB,yCAAqC;AACrC,iDAA4H;AAE5H;;;;;;;GAOG;AACH,SAAgB,0BAA0B,CAAC,MAAiB,EAAE,SAAoB;IAChF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,mHAAmH;UAC/G,kHAAkH;UAClH,mBAAmB,EACvB;QACE,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACrE,eAAe,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;aACzE,QAAQ,CAAC,gEAAgE,CAAC;QAC7E,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC/E,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAA,mCAAoB,EAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,eAAM,CAAC,IAAI,CAAC,sEAAsE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;YACrG,OAAO,IAAA,8BAAe,EACpB,uFAAuF,CACxF,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,gCAAiB,GAAE,CAAA;QAClC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,CAC3C,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAC1E,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,4BAA4B,CAAA;YACrE,eAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,UAAU,WAAW,MAAM,KAAK,OAAO,EAAE,CAAC,CAAA;YACpG,OAAO,IAAA,+BAAgB,EAAC,OAAO,CAAC,CAAA;QAClC,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,CAAC,UAAU,WAAW,MAAM,gBAAgB,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;QACpI,OAAO,IAAA,8BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CACH,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,eAAO,MAAM,wBAAwB,UAiBpC,CAAA;AAED,eAAO,MAAM,qBAAqB,UAIjC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAE9C,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAK1C,CAAA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAKhD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMrD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBzE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBjG;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAcjC"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG5C,eAAO,MAAM,wBAAwB,UAiBpC,CAAA;AAED,eAAO,MAAM,qBAAqB,UAIjC,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAE9C,CAAA;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAe1C,CAAA;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAKhD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMrD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBzE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBjG;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAcjC"}
package/dist/security.js CHANGED
@@ -79,6 +79,16 @@ exports.SAFE_ENV_KEYS = [
79
79
  'TERM', 'TMPDIR', 'TMP', 'TEMP', 'NODE_ENV',
80
80
  // Windows
81
81
  'SystemRoot', 'USERPROFILE', 'APPDATA', 'PATHEXT', 'COMSPEC',
82
+ // ECS oneshot: the API injects inbound-webhook context via containerEnv so an
83
+ // `execute_command` shell can read it. WEBHOOK_TRIGGERED=true marks a webhook
84
+ // start (even with no body), WEBHOOK_BODY carries the serialized request body
85
+ // (size-capped), and WEBHOOK_BODY_TRUNCATED=true signals the body was trimmed.
86
+ // These are only ever set inside the oneshot container; absent for resident
87
+ // agents, so exposing them here is safe (untrusted external data — the executed
88
+ // command decides how to use it).
89
+ 'WEBHOOK_TRIGGERED',
90
+ 'WEBHOOK_BODY',
91
+ 'WEBHOOK_BODY_TRUNCATED',
82
92
  ];
83
93
  function getSensitiveHomePaths() {
84
94
  const home = os.homedir();
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,sDAKC;AAED,oCAMC;AAED,0CAOC;AAQD,8CAEC;AAkBD,0DAIC;AASD,8DAwBC;AAED,4CAwBC;AAED,wDAkBC;AA5LD,uCAAwB;AACxB,uCAAwB;AACxB,2CAA4B;AAE5B,2CAAwD;AACxD,iCAA0B;AAE1B,mCAAyD;AAE5C,QAAA,wBAAwB,GAAG;IACtC,uBAAuB;IACvB,2CAA2C,EAAG,qBAAqB;IACnE,UAAU;IACV,UAAU;IACV,qBAAqB;IACrB,uBAAuB,EAA0B,qCAAqC;IACtF,oBAAoB;IACpB,qBAAqB;IACrB,yBAAyB,EAAwB,gBAAgB;IACjE,yBAAyB,EAAwB,gBAAgB;IACjE,wDAAwD;IACxD,gFAAgF;IAChF,kEAAkE;IAClE,uCAAuC,EAAS,sCAAsC;IACtF,8DAA8D,EAAG,+BAA+B;IAChG,8DAA8D,EAAG,+BAA+B;CACjG,CAAA;AAEY,QAAA,qBAAqB,GAAG;IACnC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;IACnC,mCAAmC;IACnC,eAAe,EAAE,kBAAkB;CACpC,CAAA;AAEY,QAAA,eAAe,GAAwB,IAAI,GAAG,CAAC;IAC1D,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;CACpD,CAAC,CAAA;AAEW,QAAA,aAAa,GAAsB;IAC9C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa;IAChE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU;IAC3C,UAAU;IACV,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;IAC5D,8EAA8E;IAC9E,8EAA8E;IAC9E,8EAA8E;IAC9E,+EAA+E;IAC/E,4EAA4E;IAC5E,gFAAgF;IAChF,kCAAkC;IAClC,mBAAmB;IACnB,cAAc;IACd,wBAAwB;CACzB,CAAA;AAED,SAAgB,qBAAqB;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;IACzB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,GAAG,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CACpC,CAAA;AACH,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,GAAG,IAAI,qBAAa,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;IAClE,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAgB,eAAe,CAAC,OAAe;IAC7C,KAAK,MAAM,OAAO,IAAI,gCAAwB,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,gDAAgD,CAAA;QACzD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,uBAAuB,CAAC,WAAmB;IACzD,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,IAAA,QAAC,EAAC,4BAA4B,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CAAC,QAAgB;IACxD,+EAA+E;IAC/E,0EAA0E;IAC1E,gEAAgE;IAChE,sEAAsE;IACtE,iCAAiC;IACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,OAAO,2BAA2B,CAAA;IACpC,CAAC;IACD,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QACtC,QAAQ,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,6BAAqB,EAAE,GAAG,qBAAqB,EAAE,CAAC,CAAA;IACzE,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,kBAAkB,GAAG,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAA;QACrD,IAAI,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,kBAAkB,MAAM,oBAAoB,CAAA;QACrD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAgB;IACvE,2EAA2E;IAC3E,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACpG,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAA;QACtE,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YACxD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,6BAAqB,EAAE,GAAG,qBAAqB,EAAE,CAAC,CAAA;IACzE,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,kBAAkB,GAAG,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAA;QACrD,IAAI,QAAQ,KAAK,kBAAkB,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,kBAAkB,MAAM,oBAAoB,CAAA;QACrD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAC1C,OAA2B,EAC3B,WAAoB,EACpB,OAAgB;IAEhB,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,IAAI,CAAA;IACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAA0B,EAAE,CAAA;IAC9D,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC3D,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAC7C,CAAC;IACD,yDAAyD;IACzD,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -13,6 +13,8 @@ export interface ChatPayload {
13
13
  conversationFiles?: unknown;
14
14
  browserSessionId?: unknown;
15
15
  agentChatMode?: unknown;
16
+ /** タスク実行中のタスクID(タスク詳細のE2Eテストタブ逆引き用。trigger_e2e_testツールがE2E実行に紐付ける) */
17
+ taskId?: unknown;
16
18
  policyContext?: {
17
19
  e2eExecutionId?: string;
18
20
  e2eTestCaseId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE;QACd,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,WAAW,GACX,aAAa,GACb,MAAM,GACN,OAAO,GACP,QAAQ,GACR,iBAAiB,CAAA;AAErB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE;QACd,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,WAAW,GACX,aAAa,GACb,MAAM,GACN,OAAO,GACP,QAAQ,GACR,iBAAiB,CAAA;AAErB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB"}
@@ -22,4 +22,32 @@ export interface TriggerAlarmResult {
22
22
  };
23
23
  error?: ToolOutputError;
24
24
  }
25
+ /**
26
+ * `read_slack_thread` Agent MCP ツールの結果。
27
+ *
28
+ * `data.text` は現在のSlackスレッドの整形済み全文(自ボットの過去投稿を含み、
29
+ * 他アプリのBotメッセージは除外)。会話IDがSlack会話に紐づかない場合は
30
+ * `error.code === 'NOT_FOUND'` を返す。
31
+ */
32
+ export interface ReadSlackThreadResult {
33
+ success: boolean;
34
+ data?: {
35
+ text: string;
36
+ };
37
+ error?: ToolOutputError;
38
+ }
39
+ /**
40
+ * `trigger_e2e_test` Agent MCP ツールの結果。
41
+ *
42
+ * タスク実行中に呼び出された場合、起動した E2E 実行に taskId が紐付き、
43
+ * タスク詳細画面の E2E テストタブから逆引きできるようになる。
44
+ */
45
+ export interface TriggerE2eTestResult {
46
+ success: boolean;
47
+ data?: {
48
+ executionId?: string;
49
+ dispatched?: boolean;
50
+ };
51
+ error?: ToolOutputError;
52
+ }
25
53
  //# sourceMappingURL=tool-output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-output.d.ts","sourceRoot":"","sources":["../../src/types/tool-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;KAAE,CAAA;IAC5E,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB"}
1
+ {"version":3,"file":"tool-output.d.ts","sourceRoot":"","sources":["../../src/types/tool-output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;KAAE,CAAA;IAC5E,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACrD,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-support-agent/cli",
3
- "version": "0.2.6",
3
+ "version": "0.2.7-beta.1",
4
4
  "description": "AI Support Agent CLI client",
5
5
  "main": "dist/index.js",
6
6
  "bin": {