@ai-support-agent/cli 0.0.5-beta.5 → 0.0.6
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/dist/agent-config-sync.d.ts +49 -0
- package/dist/agent-config-sync.d.ts.map +1 -0
- package/dist/agent-config-sync.js +168 -0
- package/dist/agent-config-sync.js.map +1 -0
- package/dist/agent-runner.d.ts +11 -3
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +48 -24
- package/dist/agent-runner.js.map +1 -1
- package/dist/agent-transport.d.ts +59 -0
- package/dist/agent-transport.d.ts.map +1 -0
- package/dist/agent-transport.js +225 -0
- package/dist/agent-transport.js.map +1 -0
- package/dist/api-client.d.ts +2 -1
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +4 -0
- package/dist/api-client.js.map +1 -1
- package/dist/appsync-subscriber.d.ts +15 -9
- package/dist/appsync-subscriber.d.ts.map +1 -1
- package/dist/appsync-subscriber.js +50 -111
- package/dist/appsync-subscriber.js.map +1 -1
- package/dist/aws-profile.d.ts.map +1 -1
- package/dist/aws-profile.js +3 -6
- package/dist/aws-profile.js.map +1 -1
- package/dist/base-websocket.d.ts +40 -0
- package/dist/base-websocket.d.ts.map +1 -0
- package/dist/base-websocket.js +95 -0
- package/dist/base-websocket.js.map +1 -0
- package/dist/child-process-manager.d.ts +20 -0
- package/dist/child-process-manager.d.ts.map +1 -0
- package/dist/child-process-manager.js +125 -0
- package/dist/child-process-manager.js.map +1 -0
- package/dist/commands/api-chat-executor.d.ts +10 -1
- package/dist/commands/api-chat-executor.d.ts.map +1 -1
- package/dist/commands/api-chat-executor.js +83 -58
- package/dist/commands/api-chat-executor.js.map +1 -1
- package/dist/commands/chat-executor.d.ts +13 -2
- package/dist/commands/chat-executor.d.ts.map +1 -1
- package/dist/commands/chat-executor.js +66 -16
- package/dist/commands/chat-executor.js.map +1 -1
- package/dist/commands/claude-code-args.d.ts +12 -0
- package/dist/commands/claude-code-args.d.ts.map +1 -0
- package/dist/commands/claude-code-args.js +78 -0
- package/dist/commands/claude-code-args.js.map +1 -0
- package/dist/commands/claude-code-runner.d.ts +17 -36
- package/dist/commands/claude-code-runner.d.ts.map +1 -1
- package/dist/commands/claude-code-runner.js +49 -221
- package/dist/commands/claude-code-runner.js.map +1 -1
- package/dist/commands/claude-code-stream.d.ts +63 -0
- package/dist/commands/claude-code-stream.d.ts.map +1 -0
- package/dist/commands/claude-code-stream.js +179 -0
- package/dist/commands/claude-code-stream.js.map +1 -0
- package/dist/commands/file-executor.d.ts +1 -1
- package/dist/commands/file-executor.d.ts.map +1 -1
- package/dist/commands/file-executor.js +59 -70
- package/dist/commands/file-executor.js.map +1 -1
- package/dist/commands/file-path-guard.d.ts +9 -0
- package/dist/commands/file-path-guard.d.ts.map +1 -0
- package/dist/commands/file-path-guard.js +15 -0
- package/dist/commands/file-path-guard.js.map +1 -0
- package/dist/commands/file-transfer.d.ts +5 -0
- package/dist/commands/file-transfer.d.ts.map +1 -1
- package/dist/commands/file-transfer.js +16 -39
- package/dist/commands/file-transfer.js.map +1 -1
- package/dist/commands/index.d.ts +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +18 -7
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/process-executor.d.ts +1 -1
- package/dist/commands/process-executor.d.ts.map +1 -1
- package/dist/commands/process-executor.js +24 -6
- package/dist/commands/process-executor.js.map +1 -1
- package/dist/commands/process-manager.d.ts +22 -0
- package/dist/commands/process-manager.d.ts.map +1 -0
- package/dist/commands/process-manager.js +36 -0
- package/dist/commands/process-manager.js.map +1 -0
- package/dist/commands/shared-chat-utils.d.ts +10 -1
- package/dist/commands/shared-chat-utils.d.ts.map +1 -1
- package/dist/commands/shared-chat-utils.js +18 -0
- package/dist/commands/shared-chat-utils.js.map +1 -1
- package/dist/commands/shell-executor.d.ts +1 -1
- package/dist/commands/shell-executor.d.ts.map +1 -1
- package/dist/commands/shell-executor.js +9 -12
- package/dist/commands/shell-executor.js.map +1 -1
- package/dist/config-manager.d.ts.map +1 -1
- package/dist/config-manager.js +2 -3
- package/dist/config-manager.js.map +1 -1
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +26 -1
- package/dist/constants.js.map +1 -1
- package/dist/docker/docker-runner.d.ts.map +1 -1
- package/dist/docker/docker-runner.js +5 -3
- package/dist/docker/docker-runner.js.map +1 -1
- package/dist/ipc-types.d.ts +36 -0
- package/dist/ipc-types.d.ts.map +1 -0
- package/dist/ipc-types.js +34 -0
- package/dist/ipc-types.js.map +1 -0
- package/dist/mcp/config-writer.d.ts +5 -1
- package/dist/mcp/config-writer.d.ts.map +1 -1
- package/dist/mcp/config-writer.js +14 -1
- package/dist/mcp/config-writer.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/credentials.d.ts.map +1 -1
- package/dist/mcp/tools/credentials.js +36 -9
- package/dist/mcp/tools/credentials.js.map +1 -1
- package/dist/mcp/tools/db-query.d.ts.map +1 -1
- package/dist/mcp/tools/db-query.js +13 -18
- package/dist/mcp/tools/db-query.js.map +1 -1
- package/dist/mcp/tools/db-schemas.d.ts.map +1 -1
- package/dist/mcp/tools/db-schemas.js +8 -13
- package/dist/mcp/tools/db-schemas.js.map +1 -1
- package/dist/mcp/tools/file-upload.d.ts.map +1 -1
- package/dist/mcp/tools/file-upload.js +12 -17
- package/dist/mcp/tools/file-upload.js.map +1 -1
- package/dist/mcp/tools/mcp-response.d.ts +29 -1
- package/dist/mcp/tools/mcp-response.d.ts.map +1 -1
- package/dist/mcp/tools/mcp-response.js +51 -3
- package/dist/mcp/tools/mcp-response.js.map +1 -1
- package/dist/mcp/tools/project-info.d.ts.map +1 -1
- package/dist/mcp/tools/project-info.js +28 -33
- package/dist/mcp/tools/project-info.js.map +1 -1
- package/dist/mcp/tools/read-conversation-file.d.ts +4 -0
- package/dist/mcp/tools/read-conversation-file.d.ts.map +1 -0
- package/dist/mcp/tools/read-conversation-file.js +92 -0
- package/dist/mcp/tools/read-conversation-file.js.map +1 -0
- package/dist/process-manager.d.ts +2 -0
- package/dist/process-manager.d.ts.map +1 -0
- package/dist/process-manager.js +7 -0
- package/dist/process-manager.js.map +1 -0
- package/dist/project-agent.d.ts +5 -25
- package/dist/project-agent.d.ts.map +1 -1
- package/dist/project-agent.js +67 -313
- package/dist/project-agent.js.map +1 -1
- package/dist/project-config-sync.d.ts.map +1 -1
- package/dist/project-config-sync.js +9 -3
- package/dist/project-config-sync.js.map +1 -1
- package/dist/project-worker.d.ts +2 -0
- package/dist/project-worker.d.ts.map +1 -0
- package/dist/project-worker.js +85 -0
- package/dist/project-worker.js.map +1 -0
- package/dist/repo-sync.d.ts +23 -0
- package/dist/repo-sync.d.ts.map +1 -0
- package/dist/repo-sync.js +191 -0
- package/dist/repo-sync.js.map +1 -0
- package/dist/terminal/terminal-websocket.d.ts +8 -9
- package/dist/terminal/terminal-websocket.d.ts.map +1 -1
- package/dist/terminal/terminal-websocket.js +30 -87
- package/dist/terminal/terminal-websocket.js.map +1 -1
- package/dist/types/chat.d.ts +28 -0
- package/dist/types/chat.d.ts.map +1 -0
- package/dist/types/chat.js +3 -0
- package/dist/types/chat.js.map +1 -0
- package/dist/types/command.d.ts +100 -0
- package/dist/types/command.d.ts.map +1 -0
- package/dist/types/command.js +11 -0
- package/dist/types/command.js.map +1 -0
- package/dist/types/config.d.ts +44 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +22 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/project.d.ts +112 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +3 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/server.d.ts +58 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/server.js +3 -0
- package/dist/types/server.js.map +1 -0
- package/dist/types.d.ts +1 -295
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/activity-timeout.d.ts +19 -0
- package/dist/utils/activity-timeout.d.ts.map +1 -0
- package/dist/utils/activity-timeout.js +28 -0
- package/dist/utils/activity-timeout.js.map +1 -0
- package/dist/utils/claude-config-validator.d.ts +16 -0
- package/dist/utils/claude-config-validator.d.ts.map +1 -0
- package/dist/utils/claude-config-validator.js +94 -0
- package/dist/utils/claude-config-validator.js.map +1 -0
- package/dist/utils/content-type.d.ts +10 -0
- package/dist/utils/content-type.d.ts.map +1 -0
- package/dist/utils/content-type.js +120 -0
- package/dist/utils/content-type.js.map +1 -0
- package/dist/utils/json-parse.d.ts +5 -0
- package/dist/utils/json-parse.d.ts.map +1 -0
- package/dist/utils/json-parse.js +15 -0
- package/dist/utils/json-parse.js.map +1 -0
- package/dist/utils/stream-parser.d.ts +14 -0
- package/dist/utils/stream-parser.d.ts.map +1 -0
- package/dist/utils/stream-parser.js +31 -0
- package/dist/utils/stream-parser.js.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +40 -0
- package/dist/utils.js.map +1 -1
- package/dist/ws-reconnect.d.ts +12 -0
- package/dist/ws-reconnect.d.ts.map +1 -0
- package/dist/ws-reconnect.js +32 -0
- package/dist/ws-reconnect.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,128 +1,86 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.buildCleanEnv =
|
|
7
|
-
exports.buildClaudeArgs = buildClaudeArgs;
|
|
3
|
+
exports.parseFileUploadResult = exports.processStreamJsonLine = exports._resetCleanEnvCache = exports.buildCleanEnv = exports.buildClaudeArgs = void 0;
|
|
8
4
|
exports.runClaudeCode = runClaudeCode;
|
|
9
|
-
exports.processStreamJsonLine = processStreamJsonLine;
|
|
10
|
-
exports.parseFileUploadResult = parseFileUploadResult;
|
|
11
5
|
const child_process_1 = require("child_process");
|
|
12
|
-
const os_1 = __importDefault(require("os"));
|
|
13
6
|
const constants_1 = require("../constants");
|
|
14
7
|
const logger_1 = require("../logger");
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function buildClaudeArgs(message, options) {
|
|
29
|
-
const args = ['-p', '--output-format', 'stream-json', '--verbose'];
|
|
30
|
-
if (options?.allowedTools?.length) {
|
|
31
|
-
for (const tool of options.allowedTools) {
|
|
32
|
-
args.push('--allowedTools', tool);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (options?.addDirs?.length) {
|
|
36
|
-
for (const dir of options.addDirs) {
|
|
37
|
-
const resolved = dir.replace(/^~/, os_1.default.homedir());
|
|
38
|
-
args.push('--add-dir', resolved);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (options?.mcpConfigPath) {
|
|
42
|
-
args.push('--mcp-config', options.mcpConfigPath);
|
|
43
|
-
}
|
|
44
|
-
// システムプロンプトを構築: 言語設定 + サーバー設定 + file_upload 指示
|
|
45
|
-
const promptParts = [];
|
|
46
|
-
if (options?.locale) {
|
|
47
|
-
promptParts.push(options.locale === 'ja'
|
|
48
|
-
? 'Always respond in Japanese. Use Japanese for all explanations and communications.'
|
|
49
|
-
: 'Always respond in English. Use English for all explanations and communications.');
|
|
50
|
-
}
|
|
51
|
-
if (options?.systemPrompt) {
|
|
52
|
-
promptParts.push(options.systemPrompt);
|
|
53
|
-
}
|
|
54
|
-
if (options?.mcpConfigPath) {
|
|
55
|
-
promptParts.push([
|
|
56
|
-
'CRITICAL FILE DELIVERY RULE:',
|
|
57
|
-
'When you create or modify a file using the Write tool, the user CANNOT see or download the file unless you upload it.',
|
|
58
|
-
'You MUST call the mcp__ai-support-agent__file_upload tool AFTER every Write tool call.',
|
|
59
|
-
'Required parameters for file_upload:',
|
|
60
|
-
'- filePath: the absolute path of the file you just wrote',
|
|
61
|
-
'- filename: the display name (e.g., "mbc-logo.svg")',
|
|
62
|
-
'- conversationId: from <message_metadata> in the user message',
|
|
63
|
-
'- messageId: from <message_metadata> in the user message',
|
|
64
|
-
'- projectCode: from <message_metadata> in the user message',
|
|
65
|
-
'If you skip the upload, the file is invisible to the user. Always upload.',
|
|
66
|
-
].join('\n'));
|
|
67
|
-
}
|
|
68
|
-
if (promptParts.length > 0) {
|
|
69
|
-
args.push('--append-system-prompt', promptParts.join('\n\n'));
|
|
70
|
-
}
|
|
71
|
-
args.push(message);
|
|
72
|
-
return args;
|
|
73
|
-
}
|
|
8
|
+
const activity_timeout_1 = require("../utils/activity-timeout");
|
|
9
|
+
const claude_config_validator_1 = require("../utils/claude-config-validator");
|
|
10
|
+
const stream_parser_1 = require("../utils/stream-parser");
|
|
11
|
+
const claude_code_args_1 = require("./claude-code-args");
|
|
12
|
+
const claude_code_stream_1 = require("./claude-code-stream");
|
|
13
|
+
// Re-export for backward compatibility
|
|
14
|
+
var claude_code_args_2 = require("./claude-code-args");
|
|
15
|
+
Object.defineProperty(exports, "buildClaudeArgs", { enumerable: true, get: function () { return claude_code_args_2.buildClaudeArgs; } });
|
|
16
|
+
Object.defineProperty(exports, "buildCleanEnv", { enumerable: true, get: function () { return claude_code_args_2.buildCleanEnv; } });
|
|
17
|
+
Object.defineProperty(exports, "_resetCleanEnvCache", { enumerable: true, get: function () { return claude_code_args_2._resetCleanEnvCache; } });
|
|
18
|
+
var claude_code_stream_2 = require("./claude-code-stream");
|
|
19
|
+
Object.defineProperty(exports, "processStreamJsonLine", { enumerable: true, get: function () { return claude_code_stream_2.processStreamJsonLine; } });
|
|
20
|
+
Object.defineProperty(exports, "parseFileUploadResult", { enumerable: true, get: function () { return claude_code_stream_2.parseFileUploadResult; } });
|
|
74
21
|
/**
|
|
75
22
|
* Claude Code CLI をサブプロセスとして実行し、出力をストリーミングで返す
|
|
23
|
+
* ClaudeCodeHandle を返す: result Promise と kill 関数
|
|
76
24
|
*/
|
|
77
|
-
|
|
78
|
-
|
|
25
|
+
function runClaudeCode(options) {
|
|
26
|
+
const { message, sendChunk, allowedTools, addDirs, locale, awsEnv, mcpConfigPath, cwd, systemPrompt } = options;
|
|
27
|
+
let killFn = () => { };
|
|
28
|
+
const result = new Promise((resolve, reject) => {
|
|
79
29
|
const startTime = Date.now();
|
|
80
30
|
// claude CLI が利用可能か確認し、print モードで実行
|
|
81
31
|
// Claude Code セッション内からの起動時にネスト検出やSSEポート干渉を回避するため、
|
|
82
32
|
// CLAUDECODE および CLAUDE_CODE_* 環境変数を除外
|
|
83
|
-
const cleanEnv = buildCleanEnv();
|
|
33
|
+
const cleanEnv = (0, claude_code_args_1.buildCleanEnv)();
|
|
84
34
|
const env = awsEnv ? { ...cleanEnv, ...awsEnv } : cleanEnv;
|
|
85
|
-
const args = buildClaudeArgs(message, { allowedTools, addDirs, locale, mcpConfigPath, systemPrompt });
|
|
35
|
+
const args = (0, claude_code_args_1.buildClaudeArgs)(message, { allowedTools, addDirs, locale, mcpConfigPath, systemPrompt });
|
|
36
|
+
(0, claude_config_validator_1.ensureClaudeJsonIntegrity)();
|
|
86
37
|
const child = (0, child_process_1.spawn)('claude', args, {
|
|
87
38
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
88
39
|
env,
|
|
89
40
|
...(cwd ? { cwd } : {}),
|
|
90
41
|
});
|
|
91
42
|
logger_1.logger.debug(`[chat] claude CLI spawned (pid=${child.pid}, cmd=claude ${args.map(a => a.includes(' ') ? `"${a}"` : a).join(' ')})`);
|
|
43
|
+
// kill 関数を設定: SIGTERM → SIGKILL パターン
|
|
44
|
+
killFn = () => {
|
|
45
|
+
if (child.killed)
|
|
46
|
+
return;
|
|
47
|
+
logger_1.logger.info(`[chat] Killing claude CLI process (pid=${child.pid})`);
|
|
48
|
+
child.kill('SIGTERM');
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
if (!child.killed) {
|
|
51
|
+
logger_1.logger.warn(`[chat] claude CLI still running after SIGTERM, sending SIGKILL (pid=${child.pid})`);
|
|
52
|
+
child.kill('SIGKILL');
|
|
53
|
+
}
|
|
54
|
+
}, constants_1.CHAT_SIGKILL_DELAY);
|
|
55
|
+
};
|
|
92
56
|
let resultText = '';
|
|
93
|
-
|
|
57
|
+
const streamParser = new stream_parser_1.StreamLineParser();
|
|
94
58
|
// テキストチャンクの重複送信を防ぐため、前回送信済みテキスト長を追跡
|
|
95
59
|
let sentTextLength = 0;
|
|
96
60
|
// file_upload ツールの tool_use_id を追跡して tool_result から file_attachment を生成
|
|
97
61
|
const pendingFileUploadIds = new Set();
|
|
98
|
-
//
|
|
62
|
+
// tool_use_id → ツール名のマッピング(tool_result で toolName を復元するため)
|
|
63
|
+
const pendingToolNames = new Map();
|
|
64
|
+
// アクティビティベースタイムアウト: 最後の stdout 出力から CHAT_TIMEOUT 経過で強制終了
|
|
99
65
|
let sigkillTimer;
|
|
100
|
-
const
|
|
101
|
-
logger_1.logger.warn(`[chat] claude CLI timed out after ${constants_1.CHAT_TIMEOUT / 1000}s (pid=${child.pid}), sending SIGTERM`);
|
|
66
|
+
const activityTimeout = (0, activity_timeout_1.createActivityTimeout)(constants_1.CHAT_TIMEOUT, () => {
|
|
67
|
+
logger_1.logger.warn(`[chat] claude CLI timed out after ${constants_1.CHAT_TIMEOUT / 1000}s of inactivity (pid=${child.pid}), sending SIGTERM`);
|
|
102
68
|
child.kill('SIGTERM');
|
|
103
|
-
// SIGTERM後5秒で応答なければSIGKILL
|
|
104
69
|
sigkillTimer = setTimeout(() => {
|
|
105
70
|
if (!child.killed) {
|
|
106
71
|
logger_1.logger.warn(`[chat] claude CLI still running after SIGTERM, sending SIGKILL (pid=${child.pid})`);
|
|
107
72
|
child.kill('SIGKILL');
|
|
108
73
|
}
|
|
109
74
|
}, constants_1.CHAT_SIGKILL_DELAY);
|
|
110
|
-
}
|
|
75
|
+
});
|
|
111
76
|
child.stdout.on('data', (data) => {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
// 最後の不完全な行はバッファに残す
|
|
116
|
-
stdoutBuffer = lines.pop() ?? '';
|
|
117
|
-
for (const line of lines) {
|
|
118
|
-
const trimmed = line.trim();
|
|
119
|
-
if (!trimmed)
|
|
120
|
-
continue;
|
|
121
|
-
const { newSentTextLength, text } = processStreamJsonLine(trimmed, sendChunk, child.pid ?? 0, { sentTextLength, pendingFileUploadIds });
|
|
77
|
+
activityTimeout.reset();
|
|
78
|
+
streamParser.push(data.toString(), (line) => {
|
|
79
|
+
const { newSentTextLength, text } = (0, claude_code_stream_1.processStreamJsonLine)(line, sendChunk, child.pid ?? 0, { sentTextLength, pendingFileUploadIds, pendingToolNames });
|
|
122
80
|
sentTextLength = newSentTextLength;
|
|
123
81
|
if (text !== undefined)
|
|
124
82
|
resultText = text;
|
|
125
|
-
}
|
|
83
|
+
});
|
|
126
84
|
});
|
|
127
85
|
child.stderr.on('data', (data) => {
|
|
128
86
|
// --verbose モードでは stderr にも NDJSON が出力されるので、デバッグログのみ
|
|
@@ -130,7 +88,7 @@ async function runClaudeCode(message, sendChunk, allowedTools, addDirs, locale,
|
|
|
130
88
|
logger_1.logger.debug(`[chat] claude CLI stderr: ${text.substring(0, constants_1.LOG_DEBUG_LIMIT)}`);
|
|
131
89
|
});
|
|
132
90
|
child.on('error', (error) => {
|
|
133
|
-
|
|
91
|
+
activityTimeout.clear();
|
|
134
92
|
if (sigkillTimer)
|
|
135
93
|
clearTimeout(sigkillTimer);
|
|
136
94
|
if (error.code === 'ENOENT') {
|
|
@@ -141,7 +99,7 @@ async function runClaudeCode(message, sendChunk, allowedTools, addDirs, locale,
|
|
|
141
99
|
}
|
|
142
100
|
});
|
|
143
101
|
child.on('close', (code) => {
|
|
144
|
-
|
|
102
|
+
activityTimeout.clear();
|
|
145
103
|
if (sigkillTimer)
|
|
146
104
|
clearTimeout(sigkillTimer);
|
|
147
105
|
const durationMs = Date.now() - startTime;
|
|
@@ -164,136 +122,6 @@ async function runClaudeCode(message, sendChunk, allowedTools, addDirs, locale,
|
|
|
164
122
|
}
|
|
165
123
|
});
|
|
166
124
|
});
|
|
167
|
-
}
|
|
168
|
-
/** file_upload ツール結果を file_attachment チャンクに変換する */
|
|
169
|
-
const FILE_UPLOAD_TOOL_NAME = 'mcp__ai-support-agent__file_upload';
|
|
170
|
-
/**
|
|
171
|
-
* stream-json の NDJSON 1行をパースし、テキストやツール呼び出し情報を処理する
|
|
172
|
-
* sendChunk は fire-and-forget で呼び出される(同期的に状態を返すため)
|
|
173
|
-
*
|
|
174
|
-
* @returns newSentTextLength: 送信済みテキスト長, text: resultイベントのテキスト(undefinedなら未取得)
|
|
175
|
-
*/
|
|
176
|
-
function processStreamJsonLine(line, sendChunk, pid, state) {
|
|
177
|
-
let parsed;
|
|
178
|
-
try {
|
|
179
|
-
parsed = JSON.parse(line);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
// JSON パースに失敗した場合はスキップ
|
|
183
|
-
logger_1.logger.debug(`[chat] stream-json parse error (pid=${pid}): ${line.substring(0, constants_1.LOG_DEBUG_LIMIT)}`);
|
|
184
|
-
return { newSentTextLength: state.sentTextLength };
|
|
185
|
-
}
|
|
186
|
-
if (parsed.type === 'assistant' && parsed.message?.content) {
|
|
187
|
-
let newSentTextLength = state.sentTextLength;
|
|
188
|
-
// assistant メッセージからテキストとツール呼び出しを抽出
|
|
189
|
-
let fullText = '';
|
|
190
|
-
for (const block of parsed.message.content) {
|
|
191
|
-
if (block.type === 'text' && block.text) {
|
|
192
|
-
fullText += block.text;
|
|
193
|
-
}
|
|
194
|
-
else if (block.type === 'tool_use' && block.name) {
|
|
195
|
-
// ツール呼び出し情報をログ出力
|
|
196
|
-
logger_1.logger.info(`[chat] tool_use: ${block.name} (pid=${pid})`);
|
|
197
|
-
// tool_call チャンクとして送信
|
|
198
|
-
void sendChunk('tool_call', JSON.stringify({
|
|
199
|
-
name: block.name,
|
|
200
|
-
id: block.id,
|
|
201
|
-
}));
|
|
202
|
-
// file_upload ツールの呼び出しを追跡(tool_result から file_attachment を生成するため)
|
|
203
|
-
if (block.name === FILE_UPLOAD_TOOL_NAME && block.id) {
|
|
204
|
-
if (!state.pendingFileUploadIds)
|
|
205
|
-
state.pendingFileUploadIds = new Set();
|
|
206
|
-
state.pendingFileUploadIds.add(block.id);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
// 新しいテキスト部分のみ delta チャンクとして送信(重複防止)
|
|
211
|
-
if (fullText.length > newSentTextLength) {
|
|
212
|
-
const newText = fullText.substring(newSentTextLength);
|
|
213
|
-
void sendChunk('delta', newText);
|
|
214
|
-
newSentTextLength = fullText.length;
|
|
215
|
-
}
|
|
216
|
-
return { newSentTextLength };
|
|
217
|
-
}
|
|
218
|
-
// user メッセージ内の tool_result から file_upload の結果を検出し、file_attachment チャンクを送信
|
|
219
|
-
// MCP ツールの tool_result は2回来る: 1回目は tool_reference(スキップ)、2回目が実際の結果
|
|
220
|
-
if (parsed.type === 'user' && parsed.message?.content && state.pendingFileUploadIds?.size) {
|
|
221
|
-
for (const block of parsed.message.content) {
|
|
222
|
-
if (block.type === 'tool_result' && block.tool_use_id && state.pendingFileUploadIds.has(block.tool_use_id)) {
|
|
223
|
-
const fileData = parseFileUploadResult(block.content);
|
|
224
|
-
if (fileData) {
|
|
225
|
-
state.pendingFileUploadIds.delete(block.tool_use_id);
|
|
226
|
-
logger_1.logger.info(`[chat] file_upload result: fileId=${fileData.fileId}, filename=${fileData.filename} (pid=${pid})`);
|
|
227
|
-
void sendChunk('file_attachment', JSON.stringify(fileData));
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return { newSentTextLength: state.sentTextLength };
|
|
232
|
-
}
|
|
233
|
-
if (parsed.type === 'result' && parsed.result !== undefined) {
|
|
234
|
-
return { newSentTextLength: state.sentTextLength, text: parsed.result };
|
|
235
|
-
}
|
|
236
|
-
if (parsed.type === 'system' && parsed.subtype === 'init') {
|
|
237
|
-
// MCP サーバー接続状態とツール一覧をログ出力(デバッグ用)
|
|
238
|
-
if (parsed.mcp_servers?.length) {
|
|
239
|
-
for (const mcp of parsed.mcp_servers) {
|
|
240
|
-
if (mcp.status === 'connected') {
|
|
241
|
-
logger_1.logger.info(`[chat] MCP server "${mcp.name}" connected (pid=${pid})`);
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
logger_1.logger.warn(`[chat] MCP server "${mcp.name}" status=${mcp.status}${mcp.error ? ` error=${mcp.error}` : ''} (pid=${pid})`);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
if (parsed.tools?.length) {
|
|
249
|
-
const mcpTools = parsed.tools.filter(t => t.startsWith('mcp__'));
|
|
250
|
-
logger_1.logger.info(`[chat] stream-json init: ${parsed.tools.length} tools available, MCP tools: [${mcpTools.join(', ')}] (pid=${pid})`);
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
logger_1.logger.info(`[chat] stream-json init received, no tools listed (pid=${pid})`);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
return { newSentTextLength: state.sentTextLength };
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* file_upload ツールの結果をパースし、file_attachment チャンク用データを返す
|
|
260
|
-
*
|
|
261
|
-
* MCP ツールの tool_result.content は配列形式: [{type: "text", text: "..."}]
|
|
262
|
-
* 組み込みツールの tool_result.content は文字列形式
|
|
263
|
-
*/
|
|
264
|
-
function parseFileUploadResult(content) {
|
|
265
|
-
if (!content)
|
|
266
|
-
return null;
|
|
267
|
-
// content からテキストを抽出
|
|
268
|
-
let textContent;
|
|
269
|
-
if (typeof content === 'string') {
|
|
270
|
-
textContent = content;
|
|
271
|
-
}
|
|
272
|
-
else if (Array.isArray(content)) {
|
|
273
|
-
// MCP ツール形式: [{type: "text", text: "..."}, ...]
|
|
274
|
-
const textBlock = content.find(b => b.type === 'text' && b.text);
|
|
275
|
-
if (!textBlock?.text)
|
|
276
|
-
return null;
|
|
277
|
-
textContent = textBlock.text;
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
return null;
|
|
281
|
-
}
|
|
282
|
-
try {
|
|
283
|
-
const data = JSON.parse(textContent);
|
|
284
|
-
if (data.success && typeof data.fileId === 'string' && typeof data.s3Key === 'string' && typeof data.filename === 'string') {
|
|
285
|
-
return {
|
|
286
|
-
fileId: data.fileId,
|
|
287
|
-
s3Key: data.s3Key,
|
|
288
|
-
filename: data.filename,
|
|
289
|
-
contentType: data.contentType ?? 'application/octet-stream',
|
|
290
|
-
fileSize: typeof data.fileSize === 'number' ? data.fileSize : 0,
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
catch {
|
|
295
|
-
// パース失敗は無視
|
|
296
|
-
}
|
|
297
|
-
return null;
|
|
125
|
+
return { result, cancel: () => killFn() };
|
|
298
126
|
}
|
|
299
127
|
//# sourceMappingURL=claude-code-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-runner.js","sourceRoot":"","sources":["../../src/commands/claude-code-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-code-runner.js","sourceRoot":"","sources":["../../src/commands/claude-code-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ChatChunkType } from '../types';
|
|
2
|
+
/** stream-json の assistant/user メッセージ内のコンテンツブロック */
|
|
3
|
+
export interface StreamJsonContentBlock {
|
|
4
|
+
type: 'text' | 'tool_use' | 'tool_result' | 'tool_reference';
|
|
5
|
+
text?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
input?: Record<string, unknown>;
|
|
9
|
+
tool_use_id?: string;
|
|
10
|
+
/** 組み込みツールでは string、MCP ツールでは {type, text}[] の配列 */
|
|
11
|
+
content?: string | Array<{
|
|
12
|
+
type: string;
|
|
13
|
+
text?: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
/** stream-json の MCP サーバー接続情報 */
|
|
17
|
+
export interface StreamJsonMcpServer {
|
|
18
|
+
name: string;
|
|
19
|
+
status: string;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
/** stream-json の1行(NDJSON)の型定義 */
|
|
23
|
+
export interface StreamJsonLine {
|
|
24
|
+
type: string;
|
|
25
|
+
subtype?: string;
|
|
26
|
+
message?: {
|
|
27
|
+
content?: StreamJsonContentBlock[];
|
|
28
|
+
};
|
|
29
|
+
result?: string;
|
|
30
|
+
tools?: string[];
|
|
31
|
+
mcp_servers?: StreamJsonMcpServer[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* stream-json の NDJSON 1行をパースし、テキストやツール呼び出し情報を処理する
|
|
35
|
+
* sendChunk は fire-and-forget で呼び出される(同期的に状態を返すため)
|
|
36
|
+
*
|
|
37
|
+
* @returns newSentTextLength: 送信済みテキスト長, text: resultイベントのテキスト(undefinedなら未取得)
|
|
38
|
+
*/
|
|
39
|
+
export declare function processStreamJsonLine(line: string, sendChunk: (type: ChatChunkType, content: string) => Promise<void>, pid: number, state: {
|
|
40
|
+
sentTextLength: number;
|
|
41
|
+
pendingFileUploadIds?: Set<string>;
|
|
42
|
+
pendingToolNames?: Map<string, string>;
|
|
43
|
+
}): {
|
|
44
|
+
newSentTextLength: number;
|
|
45
|
+
text?: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* file_upload ツールの結果をパースし、file_attachment チャンク用データを返す
|
|
49
|
+
*
|
|
50
|
+
* MCP ツールの tool_result.content は配列形式: [{type: "text", text: "..."}]
|
|
51
|
+
* 組み込みツールの tool_result.content は文字列形式
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseFileUploadResult(content: string | Array<{
|
|
54
|
+
type: string;
|
|
55
|
+
text?: string;
|
|
56
|
+
}> | undefined): {
|
|
57
|
+
fileId: string;
|
|
58
|
+
s3Key: string;
|
|
59
|
+
filename: string;
|
|
60
|
+
contentType: string;
|
|
61
|
+
fileSize: number;
|
|
62
|
+
} | null;
|
|
63
|
+
//# sourceMappingURL=claude-code-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-stream.d.ts","sourceRoot":"","sources":["../../src/commands/claude-code-stream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7C,oDAAoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAA;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAA;KACnC,CAAA;IACD,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAA;CACpC;AAKD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAClE,GAAG,EAAE,MAAM,EACX,KAAK,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5G;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAiI9C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,GAAG;IAC3G,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,GAAG,IAAI,CA2BP"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processStreamJsonLine = processStreamJsonLine;
|
|
4
|
+
exports.parseFileUploadResult = parseFileUploadResult;
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const logger_1 = require("../logger");
|
|
7
|
+
const json_parse_1 = require("../utils/json-parse");
|
|
8
|
+
/** file_upload ツール結果を file_attachment チャンクに変換する */
|
|
9
|
+
const FILE_UPLOAD_TOOL_NAME = 'mcp__ai-support-agent__file_upload';
|
|
10
|
+
/**
|
|
11
|
+
* stream-json の NDJSON 1行をパースし、テキストやツール呼び出し情報を処理する
|
|
12
|
+
* sendChunk は fire-and-forget で呼び出される(同期的に状態を返すため)
|
|
13
|
+
*
|
|
14
|
+
* @returns newSentTextLength: 送信済みテキスト長, text: resultイベントのテキスト(undefinedなら未取得)
|
|
15
|
+
*/
|
|
16
|
+
function processStreamJsonLine(line, sendChunk, pid, state) {
|
|
17
|
+
const parsed = (0, json_parse_1.safeJsonParse)(line);
|
|
18
|
+
if (!parsed) {
|
|
19
|
+
logger_1.logger.debug(`[chat] stream-json parse error (pid=${pid}): ${line.substring(0, constants_1.LOG_DEBUG_LIMIT)}`);
|
|
20
|
+
return { newSentTextLength: state.sentTextLength };
|
|
21
|
+
}
|
|
22
|
+
if (parsed.type === 'assistant' && parsed.message?.content) {
|
|
23
|
+
let newSentTextLength = state.sentTextLength;
|
|
24
|
+
// assistant メッセージからテキストとツール呼び出しを抽出
|
|
25
|
+
let fullText = '';
|
|
26
|
+
for (const block of parsed.message.content) {
|
|
27
|
+
if (block.type === 'text' && block.text) {
|
|
28
|
+
fullText += block.text;
|
|
29
|
+
}
|
|
30
|
+
else if (block.type === 'tool_use' && block.name) {
|
|
31
|
+
// ツール呼び出し情報をログ出力
|
|
32
|
+
logger_1.logger.info(`[chat] tool_use: ${block.name} (pid=${pid})`);
|
|
33
|
+
// tool_call チャンクとして送信(input は大きすぎる場合があるため省略可)
|
|
34
|
+
void sendChunk('tool_call', JSON.stringify({
|
|
35
|
+
toolName: block.name,
|
|
36
|
+
name: block.name,
|
|
37
|
+
id: block.id,
|
|
38
|
+
input: block.input ?? {},
|
|
39
|
+
}));
|
|
40
|
+
// tool_use_id → ツール名のマッピングを追跡(tool_result で toolName を復元するため)
|
|
41
|
+
if (block.id) {
|
|
42
|
+
if (!state.pendingToolNames)
|
|
43
|
+
state.pendingToolNames = new Map();
|
|
44
|
+
state.pendingToolNames.set(block.id, block.name);
|
|
45
|
+
}
|
|
46
|
+
// file_upload ツールの呼び出しを追跡(tool_result から file_attachment を生成するため)
|
|
47
|
+
if (block.name === FILE_UPLOAD_TOOL_NAME && block.id) {
|
|
48
|
+
if (!state.pendingFileUploadIds)
|
|
49
|
+
state.pendingFileUploadIds = new Set();
|
|
50
|
+
state.pendingFileUploadIds.add(block.id);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// 新しいテキスト部分のみ delta チャンクとして送信(重複防止)
|
|
55
|
+
if (fullText.length > newSentTextLength) {
|
|
56
|
+
const newText = fullText.substring(newSentTextLength);
|
|
57
|
+
void sendChunk('delta', newText);
|
|
58
|
+
newSentTextLength = fullText.length;
|
|
59
|
+
}
|
|
60
|
+
return { newSentTextLength };
|
|
61
|
+
}
|
|
62
|
+
// user メッセージ内の tool_result を処理
|
|
63
|
+
// 1. 全ツールの tool_result を tool_result チャンクとして送信(RDS保存・UI表示用)
|
|
64
|
+
// 2. file_upload ツールの結果は追加で file_attachment チャンクも送信
|
|
65
|
+
// MCP ツールの tool_result は2回来る: 1回目は tool_reference(スキップ)、2回目が実際の結果
|
|
66
|
+
//
|
|
67
|
+
// 重要: user メッセージ(tool_result)の後に来る次の assistant メッセージは
|
|
68
|
+
// 新しいメッセージなので、sentTextLength をリセットする。
|
|
69
|
+
// リセットしないと、新メッセージのテキストが前メッセージより短い場合に
|
|
70
|
+
// delta チャンクが送信されず、テキストが欠落する。
|
|
71
|
+
if (parsed.type === 'user' && parsed.message?.content) {
|
|
72
|
+
for (const block of parsed.message.content) {
|
|
73
|
+
if (block.type !== 'tool_result' || !block.tool_use_id)
|
|
74
|
+
continue;
|
|
75
|
+
// tool_reference ブロックはスキップ(MCP ツールの1回目)
|
|
76
|
+
if (Array.isArray(block.content) && block.content.length > 0 && block.content[0].type === 'tool_reference') {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// ツール名を復元
|
|
80
|
+
const toolName = state.pendingToolNames?.get(block.tool_use_id) ?? 'unknown';
|
|
81
|
+
// tool_result の内容をテキストとして抽出
|
|
82
|
+
let resultText;
|
|
83
|
+
if (typeof block.content === 'string') {
|
|
84
|
+
resultText = block.content;
|
|
85
|
+
}
|
|
86
|
+
else if (Array.isArray(block.content)) {
|
|
87
|
+
const textBlock = block.content.find(b => b.type === 'text' && b.text);
|
|
88
|
+
resultText = textBlock?.text ?? '';
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
resultText = '';
|
|
92
|
+
}
|
|
93
|
+
// tool_result チャンクを送信
|
|
94
|
+
const isError = resultText.startsWith('Error:') || resultText.startsWith('error:');
|
|
95
|
+
const output = (0, json_parse_1.safeJsonParse)(resultText) ?? { text: resultText };
|
|
96
|
+
void sendChunk('tool_result', JSON.stringify({
|
|
97
|
+
toolName,
|
|
98
|
+
success: !isError,
|
|
99
|
+
output,
|
|
100
|
+
}));
|
|
101
|
+
logger_1.logger.info(`[chat] tool_result: ${toolName} success=${!isError} (pid=${pid})`);
|
|
102
|
+
// file_upload ツールの場合は追加で file_attachment チャンクも送信
|
|
103
|
+
if (state.pendingFileUploadIds?.has(block.tool_use_id)) {
|
|
104
|
+
const fileData = parseFileUploadResult(block.content);
|
|
105
|
+
if (fileData) {
|
|
106
|
+
state.pendingFileUploadIds.delete(block.tool_use_id);
|
|
107
|
+
logger_1.logger.info(`[chat] file_upload result: fileId=${fileData.fileId}, filename=${fileData.filename} (pid=${pid})`);
|
|
108
|
+
void sendChunk('file_attachment', JSON.stringify(fileData));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// マッピングをクリーンアップ
|
|
112
|
+
state.pendingToolNames?.delete(block.tool_use_id);
|
|
113
|
+
}
|
|
114
|
+
// sentTextLength をリセット: 次の assistant メッセージは新しいメッセージなので
|
|
115
|
+
// 前メッセージのテキスト長に基づく重複防止は不要
|
|
116
|
+
return { newSentTextLength: 0 };
|
|
117
|
+
}
|
|
118
|
+
if (parsed.type === 'result' && parsed.result !== undefined) {
|
|
119
|
+
return { newSentTextLength: state.sentTextLength, text: parsed.result };
|
|
120
|
+
}
|
|
121
|
+
if (parsed.type === 'system' && parsed.subtype === 'init') {
|
|
122
|
+
// MCP サーバー接続状態とツール一覧をログ出力(デバッグ用)
|
|
123
|
+
if (parsed.mcp_servers?.length) {
|
|
124
|
+
for (const mcp of parsed.mcp_servers) {
|
|
125
|
+
if (mcp.status === 'connected') {
|
|
126
|
+
logger_1.logger.info(`[chat] MCP server "${mcp.name}" connected (pid=${pid})`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
logger_1.logger.warn(`[chat] MCP server "${mcp.name}" status=${mcp.status}${mcp.error ? ` error=${mcp.error}` : ''} (pid=${pid})`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (parsed.tools?.length) {
|
|
134
|
+
const mcpTools = parsed.tools.filter(t => t.startsWith('mcp__'));
|
|
135
|
+
logger_1.logger.info(`[chat] stream-json init: ${parsed.tools.length} tools available, MCP tools: [${mcpTools.join(', ')}] (pid=${pid})`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
logger_1.logger.info(`[chat] stream-json init received, no tools listed (pid=${pid})`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { newSentTextLength: state.sentTextLength };
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* file_upload ツールの結果をパースし、file_attachment チャンク用データを返す
|
|
145
|
+
*
|
|
146
|
+
* MCP ツールの tool_result.content は配列形式: [{type: "text", text: "..."}]
|
|
147
|
+
* 組み込みツールの tool_result.content は文字列形式
|
|
148
|
+
*/
|
|
149
|
+
function parseFileUploadResult(content) {
|
|
150
|
+
if (!content)
|
|
151
|
+
return null;
|
|
152
|
+
// content からテキストを抽出
|
|
153
|
+
let textContent;
|
|
154
|
+
if (typeof content === 'string') {
|
|
155
|
+
textContent = content;
|
|
156
|
+
}
|
|
157
|
+
else if (Array.isArray(content)) {
|
|
158
|
+
// MCP ツール形式: [{type: "text", text: "..."}, ...]
|
|
159
|
+
const textBlock = content.find(b => b.type === 'text' && b.text);
|
|
160
|
+
if (!textBlock?.text)
|
|
161
|
+
return null;
|
|
162
|
+
textContent = textBlock.text;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
const data = (0, json_parse_1.safeJsonParse)(textContent);
|
|
168
|
+
if (data?.success && typeof data.fileId === 'string' && typeof data.s3Key === 'string' && typeof data.filename === 'string') {
|
|
169
|
+
return {
|
|
170
|
+
fileId: data.fileId,
|
|
171
|
+
s3Key: data.s3Key,
|
|
172
|
+
filename: data.filename,
|
|
173
|
+
contentType: data.contentType ?? 'application/octet-stream',
|
|
174
|
+
fileSize: typeof data.fileSize === 'number' ? data.fileSize : 0,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=claude-code-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-stream.js","sourceRoot":"","sources":["../../src/commands/claude-code-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CommandResult, type FileDeletePayload, type FileListPayload, type FileMkdirPayload, type FileReadPayload, type FileRenamePayload, type FileWritePayload } from '../types';
|
|
2
2
|
export declare function fileRead(payload: FileReadPayload): Promise<CommandResult>;
|
|
3
3
|
export declare function fileWrite(payload: FileWritePayload): Promise<CommandResult>;
|
|
4
4
|
export declare function fileList(payload: FileListPayload): Promise<CommandResult>;
|