@ai-support-agent/cli 0.0.4-beta.1 → 0.0.4-beta.10

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 (95) hide show
  1. package/dist/agent-runner.d.ts +1 -0
  2. package/dist/agent-runner.d.ts.map +1 -1
  3. package/dist/agent-runner.js +5 -5
  4. package/dist/agent-runner.js.map +1 -1
  5. package/dist/api-client.d.ts +4 -2
  6. package/dist/api-client.d.ts.map +1 -1
  7. package/dist/api-client.js +19 -3
  8. package/dist/api-client.js.map +1 -1
  9. package/dist/appsync-subscriber.d.ts.map +1 -1
  10. package/dist/appsync-subscriber.js +8 -2
  11. package/dist/appsync-subscriber.js.map +1 -1
  12. package/dist/auth-server.js +1 -1
  13. package/dist/auth-server.js.map +1 -1
  14. package/dist/aws-credential-builder.d.ts +19 -0
  15. package/dist/aws-credential-builder.d.ts.map +1 -0
  16. package/dist/aws-credential-builder.js +116 -0
  17. package/dist/aws-credential-builder.js.map +1 -0
  18. package/dist/aws-profile.d.ts +38 -0
  19. package/dist/aws-profile.d.ts.map +1 -0
  20. package/dist/aws-profile.js +162 -0
  21. package/dist/aws-profile.js.map +1 -0
  22. package/dist/chat-mode-detector.d.ts.map +1 -1
  23. package/dist/chat-mode-detector.js +2 -2
  24. package/dist/chat-mode-detector.js.map +1 -1
  25. package/dist/commands/api-chat-executor.d.ts.map +1 -1
  26. package/dist/commands/api-chat-executor.js +40 -15
  27. package/dist/commands/api-chat-executor.js.map +1 -1
  28. package/dist/commands/chat-executor.d.ts +3 -2
  29. package/dist/commands/chat-executor.d.ts.map +1 -1
  30. package/dist/commands/chat-executor.js +91 -91
  31. package/dist/commands/chat-executor.js.map +1 -1
  32. package/dist/commands/claude-code-runner.d.ts +24 -0
  33. package/dist/commands/claude-code-runner.d.ts.map +1 -0
  34. package/dist/commands/claude-code-runner.js +126 -0
  35. package/dist/commands/claude-code-runner.js.map +1 -0
  36. package/dist/commands/file-executor.js +1 -1
  37. package/dist/commands/file-executor.js.map +1 -1
  38. package/dist/commands/index.d.ts +5 -1
  39. package/dist/commands/index.d.ts.map +1 -1
  40. package/dist/commands/index.js +16 -3
  41. package/dist/commands/index.js.map +1 -1
  42. package/dist/commands/process-executor.js +1 -1
  43. package/dist/commands/process-executor.js.map +1 -1
  44. package/dist/commands/set-project-dir.d.ts +3 -0
  45. package/dist/commands/set-project-dir.d.ts.map +1 -0
  46. package/dist/commands/set-project-dir.js +42 -0
  47. package/dist/commands/set-project-dir.js.map +1 -0
  48. package/dist/commands/shared-chat-utils.d.ts.map +1 -1
  49. package/dist/commands/shared-chat-utils.js +2 -1
  50. package/dist/commands/shared-chat-utils.js.map +1 -1
  51. package/dist/commands/shell-executor.js +1 -1
  52. package/dist/commands/shell-executor.js.map +1 -1
  53. package/dist/config-manager.d.ts +8 -0
  54. package/dist/config-manager.d.ts.map +1 -1
  55. package/dist/config-manager.js +23 -0
  56. package/dist/config-manager.js.map +1 -1
  57. package/dist/constants.d.ts +28 -0
  58. package/dist/constants.d.ts.map +1 -1
  59. package/dist/constants.js +36 -2
  60. package/dist/constants.js.map +1 -1
  61. package/dist/index.js +53 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/locales/en.json +13 -1
  64. package/dist/locales/ja.json +13 -1
  65. package/dist/locales/locales/en.json +13 -1
  66. package/dist/locales/locales/ja.json +13 -1
  67. package/dist/logger.d.ts.map +1 -1
  68. package/dist/logger.js +8 -1
  69. package/dist/logger.js.map +1 -1
  70. package/dist/project-agent.d.ts +12 -1
  71. package/dist/project-agent.d.ts.map +1 -1
  72. package/dist/project-agent.js +138 -72
  73. package/dist/project-agent.js.map +1 -1
  74. package/dist/project-config-sync.d.ts +18 -0
  75. package/dist/project-config-sync.d.ts.map +1 -0
  76. package/dist/project-config-sync.js +126 -0
  77. package/dist/project-config-sync.js.map +1 -0
  78. package/dist/project-dir.d.ts +38 -0
  79. package/dist/project-dir.d.ts.map +1 -0
  80. package/dist/project-dir.js +147 -0
  81. package/dist/project-dir.js.map +1 -0
  82. package/dist/retry-strategy.d.ts +6 -0
  83. package/dist/retry-strategy.d.ts.map +1 -1
  84. package/dist/retry-strategy.js +10 -2
  85. package/dist/retry-strategy.js.map +1 -1
  86. package/dist/security.d.ts.map +1 -1
  87. package/dist/security.js +2 -1
  88. package/dist/security.js.map +1 -1
  89. package/dist/types.d.ts +76 -1
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/utils.d.ts +1 -0
  92. package/dist/utils.d.ts.map +1 -1
  93. package/dist/utils.js +6 -0
  94. package/dist/utils.js.map +1 -1
  95. package/package.json +1 -1
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getProfileName = getProfileName;
37
+ exports.generateAwsConfig = generateAwsConfig;
38
+ exports.writeAwsConfig = writeAwsConfig;
39
+ exports.generateAwsCredentials = generateAwsCredentials;
40
+ exports.writeAwsCredentials = writeAwsCredentials;
41
+ exports.buildAwsProfileEnv = buildAwsProfileEnv;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const project_dir_1 = require("./project-dir");
45
+ const logger_1 = require("./logger");
46
+ /**
47
+ * Generate profile name from project code and account.
48
+ * Uses profileName if available, otherwise falls back to name.
49
+ * Format: {projectCode}-{profileName|name}
50
+ */
51
+ function getProfileName(projectCode, account) {
52
+ const suffix = typeof account === 'string' ? account : (account.profileName || account.name);
53
+ return `${projectCode}-${suffix}`;
54
+ }
55
+ /**
56
+ * Generate AWS config file content in INI format.
57
+ * Contains profile definitions with region and SSO settings (if applicable).
58
+ */
59
+ function generateAwsConfig(projectCode, accounts) {
60
+ const lines = [
61
+ `# Auto-generated by ai-support-agent for project: ${projectCode}`,
62
+ `# Do not edit manually - this file is overwritten on config sync`,
63
+ '',
64
+ ];
65
+ for (const account of accounts) {
66
+ const profileName = getProfileName(projectCode, account);
67
+ lines.push(`[profile ${profileName}]`);
68
+ lines.push(`region = ${account.region}`);
69
+ if (account.auth.method === 'sso') {
70
+ lines.push(`sso_start_url = ${account.auth.startUrl}`);
71
+ lines.push(`sso_region = ${account.auth.ssoRegion}`);
72
+ lines.push(`sso_account_id = ${account.accountId}`);
73
+ lines.push(`sso_role_name = ${account.auth.permissionSetName}`);
74
+ }
75
+ lines.push('');
76
+ }
77
+ return lines.join('\n');
78
+ }
79
+ /**
80
+ * Write AWS config file to project's aws directory.
81
+ * Uses atomic write (temp + rename) with 0o600 permissions.
82
+ */
83
+ function writeAwsConfig(projectDir, projectCode, accounts) {
84
+ try {
85
+ const awsDir = (0, project_dir_1.getAwsDir)(projectDir);
86
+ if (!fs.existsSync(awsDir)) {
87
+ fs.mkdirSync(awsDir, { recursive: true, mode: 0o700 });
88
+ }
89
+ const content = generateAwsConfig(projectCode, accounts);
90
+ const configPath = path.join(awsDir, 'config');
91
+ const tmpPath = configPath + '.tmp';
92
+ fs.writeFileSync(tmpPath, content, { mode: 0o600 });
93
+ fs.renameSync(tmpPath, configPath);
94
+ logger_1.logger.debug(`AWS config written to ${configPath} (${accounts.length} profiles)`);
95
+ }
96
+ catch (error) {
97
+ logger_1.logger.warn(`Failed to write AWS config: ${error}`);
98
+ }
99
+ }
100
+ /**
101
+ * Generate AWS credentials file content in INI format.
102
+ */
103
+ function generateAwsCredentials(projectCode, credentialMap) {
104
+ const lines = [
105
+ `# Auto-generated by ai-support-agent for project: ${projectCode}`,
106
+ `# Do not edit manually - this file is overwritten on each chat command`,
107
+ '',
108
+ ];
109
+ for (const [accountName, creds] of credentialMap) {
110
+ const profileName = getProfileName(projectCode, accountName);
111
+ lines.push(`[${profileName}]`);
112
+ lines.push(`aws_access_key_id = ${creds.accessKeyId}`);
113
+ lines.push(`aws_secret_access_key = ${creds.secretAccessKey}`);
114
+ if (creds.sessionToken) {
115
+ lines.push(`aws_session_token = ${creds.sessionToken}`);
116
+ }
117
+ lines.push(`region = ${creds.region}`);
118
+ lines.push('');
119
+ }
120
+ return lines.join('\n');
121
+ }
122
+ /**
123
+ * Write AWS credentials file to project's aws directory.
124
+ * Uses atomic write (temp + rename) with 0o600 permissions.
125
+ */
126
+ function writeAwsCredentials(projectDir, projectCode, credentialMap) {
127
+ try {
128
+ const awsDir = (0, project_dir_1.getAwsDir)(projectDir);
129
+ if (!fs.existsSync(awsDir)) {
130
+ fs.mkdirSync(awsDir, { recursive: true, mode: 0o700 });
131
+ }
132
+ const content = generateAwsCredentials(projectCode, credentialMap);
133
+ const credentialsPath = path.join(awsDir, 'credentials');
134
+ const tmpPath = credentialsPath + '.tmp';
135
+ fs.writeFileSync(tmpPath, content, { mode: 0o600 });
136
+ fs.renameSync(tmpPath, credentialsPath);
137
+ logger_1.logger.debug(`AWS credentials written to ${credentialsPath} (${credentialMap.size} profiles)`);
138
+ }
139
+ catch (error) {
140
+ logger_1.logger.warn(`Failed to write AWS credentials: ${error}`);
141
+ }
142
+ }
143
+ /**
144
+ * Build environment variables for Claude Code to use AWS profiles.
145
+ * Sets AWS_CONFIG_FILE and AWS_SHARED_CREDENTIALS_FILE to project-specific paths.
146
+ * Optionally sets AWS_PROFILE and AWS_DEFAULT_REGION for the default account.
147
+ */
148
+ function buildAwsProfileEnv(projectDir, projectCode, defaultAccountName, defaultRegion) {
149
+ const awsDir = (0, project_dir_1.getAwsDir)(projectDir);
150
+ const env = {
151
+ AWS_CONFIG_FILE: path.join(awsDir, 'config'),
152
+ AWS_SHARED_CREDENTIALS_FILE: path.join(awsDir, 'credentials'),
153
+ };
154
+ if (defaultAccountName) {
155
+ env.AWS_PROFILE = getProfileName(projectCode, defaultAccountName);
156
+ }
157
+ if (defaultRegion) {
158
+ env.AWS_DEFAULT_REGION = defaultRegion;
159
+ }
160
+ return env;
161
+ }
162
+ //# sourceMappingURL=aws-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-profile.js","sourceRoot":"","sources":["../src/aws-profile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat-mode-detector.d.ts","sourceRoot":"","sources":["../src/chat-mode-detector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C;;;;GAIG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAgBzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,EAAE,EAC1B,aAAa,CAAC,EAAE,aAAa,EAC7B,aAAa,CAAC,EAAE,aAAa,GAC5B,aAAa,GAAG,SAAS,CAkC3B"}
1
+ {"version":3,"file":"chat-mode-detector.d.ts","sourceRoot":"","sources":["../src/chat-mode-detector.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;;;GAIG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAgBzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,EAAE,EAC1B,aAAa,CAAC,EAAE,aAAa,EAC7B,aAAa,CAAC,EAAE,aAAa,GAC5B,aAAa,GAAG,SAAS,CAkC3B"}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detectAvailableChatModes = detectAvailableChatModes;
4
4
  exports.resolveActiveChatMode = resolveActiveChatMode;
5
5
  const child_process_1 = require("child_process");
6
+ const constants_1 = require("./constants");
6
7
  const logger_1 = require("./logger");
7
- const CLAUDE_DETECT_TIMEOUT_MS = 5_000;
8
8
  /**
9
9
  * 利用可能なチャットモードを検出する
10
10
  * - claude CLI の存在確認(5秒タイムアウト)
@@ -68,7 +68,7 @@ function resolveActiveChatMode(available, localOverride, serverDefault) {
68
68
  async function isClaudeCodeAvailable() {
69
69
  return new Promise((resolve) => {
70
70
  try {
71
- const child = (0, child_process_1.execFile)('claude', ['--version'], { timeout: CLAUDE_DETECT_TIMEOUT_MS }, (error) => {
71
+ const child = (0, child_process_1.execFile)('claude', ['--version'], { timeout: constants_1.CLAUDE_DETECT_TIMEOUT_MS }, (error) => {
72
72
  resolve(!error);
73
73
  });
74
74
  child.on('error', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-mode-detector.js","sourceRoot":"","sources":["../src/chat-mode-detector.ts"],"names":[],"mappings":";;AAYA,4DAgBC;AAYD,sDAsCC;AA9ED,iDAAwC;AAExC,qCAAiC;AAGjC,MAAM,wBAAwB,GAAG,KAAK,CAAA;AAEtC;;;;GAIG;AACI,KAAK,UAAU,wBAAwB;IAC5C,MAAM,KAAK,GAAoB,EAAE,CAAA;IAEjC,sBAAsB;IACtB,MAAM,eAAe,GAAG,MAAM,qBAAqB,EAAE,CAAA;IACrD,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC3B,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACnC,SAA0B,EAC1B,aAA6B,EAC7B,aAA6B;IAE7B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,eAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,YAAY;IACZ,IAAI,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,eAAM,CAAC,KAAK,CAAC,8CAA8C,aAAa,EAAE,CAAC,CAAA;QAC3E,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,eAAM,CAAC,IAAI,CACT,wCAAwC,aAAa,+BAA+B,CACrF,CAAA;IACH,CAAC;IAED,YAAY;IACZ,IAAI,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,eAAM,CAAC,KAAK,CAAC,8CAA8C,aAAa,EAAE,CAAC,CAAA;QAC3E,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,eAAM,CAAC,IAAI,CACT,wCAAwC,aAAa,+BAA+B,CACrF,CAAA;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;QAChD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChB,eAAM,CAAC,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAA;IAC/D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB;IAClC,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,wBAAQ,EACpB,QAAQ,EACR,CAAC,WAAW,CAAC,EACb,EAAE,OAAO,EAAE,wBAAwB,EAAE,EACrC,CAAC,KAAK,EAAE,EAAE;gBACR,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC,CACF,CAAA;YACD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"chat-mode-detector.js","sourceRoot":"","sources":["../src/chat-mode-detector.ts"],"names":[],"mappings":";;AAWA,4DAgBC;AAYD,sDAsCC;AA7ED,iDAAwC;AAExC,2CAAsD;AACtD,qCAAiC;AAGjC;;;;GAIG;AACI,KAAK,UAAU,wBAAwB;IAC5C,MAAM,KAAK,GAAoB,EAAE,CAAA;IAEjC,sBAAsB;IACtB,MAAM,eAAe,GAAG,MAAM,qBAAqB,EAAE,CAAA;IACrD,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC3B,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACnC,SAA0B,EAC1B,aAA6B,EAC7B,aAA6B;IAE7B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,eAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,YAAY;IACZ,IAAI,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,eAAM,CAAC,KAAK,CAAC,8CAA8C,aAAa,EAAE,CAAC,CAAA;QAC3E,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,eAAM,CAAC,IAAI,CACT,wCAAwC,aAAa,+BAA+B,CACrF,CAAA;IACH,CAAC;IAED,YAAY;IACZ,IAAI,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,eAAM,CAAC,KAAK,CAAC,8CAA8C,aAAa,EAAE,CAAC,CAAA;QAC3E,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,eAAM,CAAC,IAAI,CACT,wCAAwC,aAAa,+BAA+B,CACrF,CAAA;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;QAChD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAChB,eAAM,CAAC,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAA;IAC/D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB;IAClC,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,wBAAQ,EACpB,QAAQ,EACR,CAAC,WAAW,CAAC,EACb,EAAE,OAAO,EAAE,oCAAwB,EAAE,EACrC,CAAC,KAAK,EAAE,EAAE;gBACR,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC,CACF,CAAA;YACD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-chat-executor.d.ts","sourceRoot":"","sources":["../../src/commands/api-chat-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAO5F;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAiDxB"}
1
+ {"version":3,"file":"api-chat-executor.d.ts","sourceRoot":"","sources":["../../src/commands/api-chat-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAazC,OAAO,KAAK,EAAE,iBAAiB,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAiB5F;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA2DxB"}
@@ -5,39 +5,48 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.executeApiChatCommand = executeApiChatCommand;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const constants_1 = require("../constants");
8
9
  const logger_1 = require("../logger");
9
10
  const utils_1 = require("../utils");
10
11
  const shared_chat_utils_1 = require("./shared-chat-utils");
11
- const DEFAULT_MODEL = 'claude-sonnet-4-6-20250514';
12
12
  /**
13
13
  * Anthropic API を直接呼び出してチャットメッセージを処理する
14
14
  * エージェントが持つ ANTHROPIC_API_KEY で Claude を呼び出す
15
15
  */
16
16
  async function executeApiChatCommand(payload, commandId, client, config, agentId) {
17
17
  if (!agentId) {
18
- return { success: false, error: 'agentId is required for chat command' };
18
+ return { success: false, error: constants_1.ERR_AGENT_ID_REQUIRED };
19
19
  }
20
20
  const message = (0, utils_1.parseString)(payload.message);
21
21
  if (!message) {
22
- return { success: false, error: 'message is required' };
22
+ return { success: false, error: constants_1.ERR_MESSAGE_REQUIRED };
23
23
  }
24
24
  const apiKey = process.env.ANTHROPIC_API_KEY;
25
25
  if (!apiKey) {
26
26
  return {
27
27
  success: false,
28
- error: 'ANTHROPIC_API_KEY is not set. API chat mode requires an Anthropic API key.',
28
+ error: constants_1.ERR_ANTHROPIC_API_KEY_NOT_SET,
29
29
  };
30
30
  }
31
- logger_1.logger.info(`[api-chat] Starting API chat command [${commandId}]: message="${message.substring(0, 100)}${message.length > 100 ? '...' : ''}"`);
31
+ logger_1.logger.info(`[api-chat] Starting API chat command [${commandId}]: message="${(0, utils_1.truncateString)(message, constants_1.LOG_MESSAGE_LIMIT)}"`);
32
32
  const { sendChunk, getChunkIndex } = (0, shared_chat_utils_1.createChunkSender)(commandId, client, agentId, 'api-chat');
33
33
  try {
34
- const model = config?.claudeCodeConfig?.model ?? DEFAULT_MODEL;
35
- const maxTokens = config?.claudeCodeConfig?.maxTokens ?? 4096;
34
+ const model = config?.claudeCodeConfig?.model ?? constants_1.DEFAULT_ANTHROPIC_MODEL;
35
+ const maxTokens = config?.claudeCodeConfig?.maxTokens ?? constants_1.DEFAULT_MAX_TOKENS;
36
36
  const systemPrompt = config?.claudeCodeConfig?.systemPrompt;
37
37
  const result = await callAnthropicApi(apiKey, message, model, maxTokens, systemPrompt, sendChunk);
38
- logger_1.logger.info(`[api-chat] API chat command completed [${commandId}]: output=${result.length} chars, ${getChunkIndex()} chunks sent`);
39
- await sendChunk('done', result);
40
- return { success: true, data: result };
38
+ logger_1.logger.info(`[api-chat] API chat command completed [${commandId}]: output=${result.text.length} chars, ${getChunkIndex()} chunks sent, tokens: in=${result.usage.inputTokens} out=${result.usage.outputTokens}`);
39
+ // done チャンクに usage 情報を含める
40
+ const doneContent = JSON.stringify({
41
+ text: result.text,
42
+ usage: {
43
+ totalInputTokens: result.usage.inputTokens,
44
+ totalOutputTokens: result.usage.outputTokens,
45
+ totalTokens: result.usage.inputTokens + result.usage.outputTokens,
46
+ },
47
+ });
48
+ await sendChunk('done', doneContent);
49
+ return { success: true, data: result.text };
41
50
  }
42
51
  catch (error) {
43
52
  const errorMessage = (0, utils_1.getErrorMessage)(error);
@@ -59,18 +68,19 @@ async function callAnthropicApi(apiKey, message, model, maxTokens, systemPrompt,
59
68
  if (systemPrompt) {
60
69
  body.system = systemPrompt;
61
70
  }
62
- const response = await axios_1.default.post('https://api.anthropic.com/v1/messages', body, {
71
+ const response = await axios_1.default.post(constants_1.ANTHROPIC_API_URL, body, {
63
72
  headers: {
64
73
  'x-api-key': apiKey,
65
- 'anthropic-version': '2023-06-01',
74
+ 'anthropic-version': constants_1.ANTHROPIC_API_VERSION,
66
75
  'content-type': 'application/json',
67
76
  },
68
77
  responseType: 'stream',
69
- timeout: 120_000,
78
+ timeout: constants_1.CHAT_TIMEOUT,
70
79
  });
71
80
  return new Promise((resolve, reject) => {
72
81
  let fullOutput = '';
73
82
  let buffer = '';
83
+ const usage = { inputTokens: 0, outputTokens: 0 };
74
84
  const stream = response.data;
75
85
  stream.on('data', (chunk) => {
76
86
  buffer += chunk.toString();
@@ -85,7 +95,22 @@ async function callAnthropicApi(apiKey, message, model, maxTokens, systemPrompt,
85
95
  continue;
86
96
  try {
87
97
  const event = JSON.parse(data);
88
- if (event.type === 'content_block_delta') {
98
+ if (event.type === 'message_start') {
99
+ // message_start イベントから input_tokens を取得
100
+ const msg = event.message;
101
+ const msgUsage = msg?.usage;
102
+ if (typeof msgUsage?.input_tokens === 'number') {
103
+ usage.inputTokens = msgUsage.input_tokens;
104
+ }
105
+ }
106
+ else if (event.type === 'message_delta') {
107
+ // message_delta イベントから output_tokens を取得
108
+ const deltaUsage = event.usage;
109
+ if (typeof deltaUsage?.output_tokens === 'number') {
110
+ usage.outputTokens = deltaUsage.output_tokens;
111
+ }
112
+ }
113
+ else if (event.type === 'content_block_delta') {
89
114
  const delta = event.delta;
90
115
  if (delta?.type === 'text_delta' && typeof delta.text === 'string') {
91
116
  fullOutput += delta.text;
@@ -107,7 +132,7 @@ async function callAnthropicApi(apiKey, message, model, maxTokens, systemPrompt,
107
132
  }
108
133
  });
109
134
  stream.on('end', () => {
110
- resolve(fullOutput);
135
+ resolve({ text: fullOutput, usage });
111
136
  });
112
137
  stream.on('error', (error) => {
113
138
  reject(error);
@@ -1 +1 @@
1
- {"version":3,"file":"api-chat-executor.js","sourceRoot":"","sources":["../../src/commands/api-chat-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-chat-executor.js","sourceRoot":"","sources":["../../src/commands/api-chat-executor.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { ApiClient } from '../api-client';
2
- import type { AgentChatMode, AgentServerConfig, ChatPayload, CommandResult } from '../types';
2
+ import type { AgentChatMode, AgentServerConfig, ChatPayload, CommandResult, ProjectConfigResponse } from '../types';
3
+ export { buildClaudeArgs, buildCleanEnv } from './claude-code-runner';
3
4
  /**
4
5
  * エージェントチャットモードに応じてチャットメッセージを処理する
5
6
  * - claude_code: Claude Code CLI を使用(デフォルト)
@@ -7,5 +8,5 @@ import type { AgentChatMode, AgentServerConfig, ChatPayload, CommandResult } fro
7
8
  *
8
9
  * activeChatMode はサーバーの chatMode ではなく、エージェント内部の実行方式を指す
9
10
  */
10
- export declare function executeChatCommand(payload: ChatPayload, commandId: string, client: ApiClient, serverConfig?: AgentServerConfig, activeChatMode?: AgentChatMode, agentId?: string): Promise<CommandResult>;
11
+ export declare function executeChatCommand(payload: ChatPayload, commandId: string, client: ApiClient, serverConfig?: AgentServerConfig, activeChatMode?: AgentChatMode, agentId?: string, projectDir?: string, projectConfig?: ProjectConfigResponse): Promise<CommandResult>;
11
12
  //# sourceMappingURL=chat-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-executor.d.ts","sourceRoot":"","sources":["../../src/commands/chat-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAM3G;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,YAAY,CAAC,EAAE,iBAAiB,EAChC,cAAc,CAAC,EAAE,aAAa,EAC9B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAcxB"}
1
+ {"version":3,"file":"chat-executor.d.ts","sourceRoot":"","sources":["../../src/commands/chat-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAIzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAQnH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAErE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACjB,YAAY,CAAC,EAAE,iBAAiB,EAChC,cAAc,CAAC,EAAE,aAAa,EAC9B,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,qBAAqB,GACpC,OAAO,CAAC,aAAa,CAAC,CAcxB"}
@@ -1,11 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildCleanEnv = exports.buildClaudeArgs = void 0;
3
37
  exports.executeChatCommand = executeChatCommand;
4
- const child_process_1 = require("child_process");
38
+ const aws_credential_builder_1 = require("../aws-credential-builder");
39
+ const constants_1 = require("../constants");
5
40
  const logger_1 = require("../logger");
6
41
  const utils_1 = require("../utils");
7
42
  const api_chat_executor_1 = require("./api-chat-executor");
43
+ const claude_code_runner_1 = require("./claude-code-runner");
8
44
  const shared_chat_utils_1 = require("./shared-chat-utils");
45
+ // Re-export for backward compatibility with existing consumers
46
+ var claude_code_runner_2 = require("./claude-code-runner");
47
+ Object.defineProperty(exports, "buildClaudeArgs", { enumerable: true, get: function () { return claude_code_runner_2.buildClaudeArgs; } });
48
+ Object.defineProperty(exports, "buildCleanEnv", { enumerable: true, get: function () { return claude_code_runner_2.buildCleanEnv; } });
9
49
  /**
10
50
  * エージェントチャットモードに応じてチャットメッセージを処理する
11
51
  * - claude_code: Claude Code CLI を使用(デフォルト)
@@ -13,9 +53,9 @@ const shared_chat_utils_1 = require("./shared-chat-utils");
13
53
  *
14
54
  * activeChatMode はサーバーの chatMode ではなく、エージェント内部の実行方式を指す
15
55
  */
16
- async function executeChatCommand(payload, commandId, client, serverConfig, activeChatMode, agentId) {
56
+ async function executeChatCommand(payload, commandId, client, serverConfig, activeChatMode, agentId, projectDir, projectConfig) {
17
57
  if (!agentId) {
18
- return { success: false, error: 'agentId is required for chat command' };
58
+ return { success: false, error: constants_1.ERR_AGENT_ID_REQUIRED };
19
59
  }
20
60
  const mode = activeChatMode ?? 'claude_code';
21
61
  switch (mode) {
@@ -23,7 +63,7 @@ async function executeChatCommand(payload, commandId, client, serverConfig, acti
23
63
  return (0, api_chat_executor_1.executeApiChatCommand)(payload, commandId, client, serverConfig, agentId);
24
64
  case 'claude_code':
25
65
  default:
26
- return executeClaudeCodeChat(payload, commandId, client, agentId, serverConfig);
66
+ return executeClaudeCodeChat(payload, commandId, client, agentId, serverConfig, projectDir, projectConfig);
27
67
  }
28
68
  }
29
69
  /**
@@ -31,21 +71,59 @@ async function executeChatCommand(payload, commandId, client, serverConfig, acti
31
71
  * サブプロセスとして起動し、stdout をストリーミングで読み取り、
32
72
  * チャンクとしてAPIに送信する
33
73
  */
34
- async function executeClaudeCodeChat(payload, commandId, client, agentId, serverConfig) {
74
+ async function executeClaudeCodeChat(payload, commandId, client, agentId, serverConfig, projectDir, projectConfig) {
35
75
  const message = (0, utils_1.parseString)(payload.message);
36
76
  if (!message) {
37
- return { success: false, error: 'message is required' };
77
+ return { success: false, error: constants_1.ERR_MESSAGE_REQUIRED };
38
78
  }
39
- logger_1.logger.info(`[chat] Starting chat command [${commandId}]: message="${message.substring(0, 100)}${message.length > 100 ? '...' : ''}"`);
79
+ logger_1.logger.info(`[chat] Starting chat command [${commandId}]: message="${(0, utils_1.truncateString)(message, constants_1.LOG_MESSAGE_LIMIT)}"`);
40
80
  const { sendChunk, getChunkIndex } = (0, shared_chat_utils_1.createChunkSender)(commandId, client, agentId, 'chat', { debugLog: true });
41
81
  try {
42
82
  const allowedTools = serverConfig?.claudeCodeConfig?.allowedTools;
43
- logger_1.logger.debug(`[chat] Spawning claude CLI for command [${commandId}]${allowedTools?.length ? ` with allowedTools: ${allowedTools.join(', ')}` : ''}`);
44
- const result = await runClaudeCode(message, sendChunk, allowedTools);
45
- logger_1.logger.info(`[chat] Chat command completed [${commandId}]: output=${result.length} chars, ${getChunkIndex()} chunks sent`);
46
- // 完了チャンクを送信
47
- await sendChunk('done', result);
48
- return { success: true, data: result };
83
+ const serverAddDirs = serverConfig?.claudeCodeConfig?.addDirs ?? [];
84
+ // Merge project directory auto-add dirs with server-configured dirs
85
+ let addDirs;
86
+ if (projectDir) {
87
+ const { getAutoAddDirs } = await Promise.resolve().then(() => __importStar(require('../project-dir')));
88
+ const autoAddDirs = getAutoAddDirs(projectDir);
89
+ addDirs = [...autoAddDirs, ...serverAddDirs];
90
+ }
91
+ else {
92
+ addDirs = serverAddDirs.length > 0 ? serverAddDirs : undefined;
93
+ }
94
+ const locale = (0, utils_1.parseString)(payload.locale) ?? undefined;
95
+ // AWS認証情報を取得(プロファイル方式 or 環境変数直接注入)
96
+ let awsEnv;
97
+ if (projectDir && projectConfig?.aws?.accounts?.length) {
98
+ // プロファイル方式: 全アカウントの認証情報を取得してプロファイルファイルに書き込み
99
+ const awsResult = await (0, aws_credential_builder_1.buildAwsProfileCredentials)(client, projectDir, projectConfig);
100
+ awsEnv = awsResult.env;
101
+ if (awsResult.errors.length > 0) {
102
+ const notice = `⚠️ ${awsResult.errors.join('\n')}\n\n`;
103
+ await sendChunk('delta', notice);
104
+ }
105
+ }
106
+ else {
107
+ // フォールバック: 単一アカウントの環境変数直接注入(従来方式)
108
+ const awsAccountId = (0, utils_1.parseString)(payload.awsAccountId) ?? undefined;
109
+ const awsResult = await (0, aws_credential_builder_1.buildSingleAccountAwsEnv)(client, awsAccountId);
110
+ awsEnv = awsResult.env;
111
+ if (awsResult.errors.length > 0) {
112
+ const notice = `⚠️ ${awsResult.errors.join('\n')}\n\n`;
113
+ await sendChunk('delta', notice);
114
+ }
115
+ }
116
+ logger_1.logger.debug(`[chat] Spawning claude CLI for command [${commandId}]${allowedTools?.length ? ` with allowedTools: ${allowedTools.join(', ')}` : ' (no allowedTools)'}${addDirs?.length ? ` with addDirs: ${addDirs.join(', ')}` : ''}${locale ? ` locale=${locale}` : ''}${awsEnv ? ' with AWS credentials' : ''}`);
117
+ logger_1.logger.debug(`[chat] serverConfig.claudeCodeConfig: ${JSON.stringify(serverConfig?.claudeCodeConfig ?? null)}`);
118
+ const result = await (0, claude_code_runner_1.runClaudeCode)(message, sendChunk, allowedTools, addDirs, locale, awsEnv);
119
+ logger_1.logger.info(`[chat] Chat command completed [${commandId}]: output=${result.text.length} chars, ${getChunkIndex()} chunks sent, duration=${result.metadata.durationMs}ms`);
120
+ // 完了チャンクを送信(metadata を含める)
121
+ const doneContent = JSON.stringify({
122
+ text: result.text,
123
+ metadata: result.metadata,
124
+ });
125
+ await sendChunk('done', doneContent);
126
+ return { success: true, data: result.text };
49
127
  }
50
128
  catch (error) {
51
129
  const errorMessage = (0, utils_1.getErrorMessage)(error);
@@ -54,82 +132,4 @@ async function executeClaudeCodeChat(payload, commandId, client, agentId, server
54
132
  return { success: false, error: errorMessage };
55
133
  }
56
134
  }
57
- /**
58
- * Claude Code CLI をサブプロセスとして実行し、出力をストリーミングで返す
59
- */
60
- async function runClaudeCode(message, sendChunk, allowedTools) {
61
- return new Promise((resolve, reject) => {
62
- // claude CLI が利用可能か確認し、print モードで実行
63
- // Claude Code セッション内からの起動時にネスト検出やSSEポート干渉を回避するため、
64
- // CLAUDECODE および CLAUDE_CODE_* 環境変数を除外
65
- const cleanEnv = {};
66
- for (const [key, value] of Object.entries(process.env)) {
67
- if (key === 'CLAUDECODE' || key.startsWith('CLAUDE_CODE_'))
68
- continue;
69
- if (value !== undefined)
70
- cleanEnv[key] = value;
71
- }
72
- const args = ['-p'];
73
- if (allowedTools && allowedTools.length > 0) {
74
- for (const tool of allowedTools) {
75
- args.push('--allowedTools', tool);
76
- }
77
- }
78
- args.push(message);
79
- const child = (0, child_process_1.spawn)('claude', args, {
80
- stdio: ['ignore', 'pipe', 'pipe'],
81
- env: cleanEnv,
82
- });
83
- logger_1.logger.debug(`[chat] claude CLI spawned (pid=${child.pid}, CLAUDECODE removed=${!cleanEnv['CLAUDECODE']})`);
84
- let fullOutput = '';
85
- let stderrOutput = '';
86
- // タイムアウト: 120秒で応答がなければ強制終了
87
- let sigkillTimer;
88
- const timeout = setTimeout(() => {
89
- logger_1.logger.warn(`[chat] claude CLI timed out after 120s (pid=${child.pid}), sending SIGTERM`);
90
- child.kill('SIGTERM');
91
- // SIGTERM後5秒で応答なければSIGKILL
92
- sigkillTimer = setTimeout(() => {
93
- if (!child.killed) {
94
- logger_1.logger.warn(`[chat] claude CLI still running after SIGTERM, sending SIGKILL (pid=${child.pid})`);
95
- child.kill('SIGKILL');
96
- }
97
- }, 5_000);
98
- }, 120_000);
99
- child.stdout.on('data', (data) => {
100
- const text = data.toString();
101
- fullOutput += text;
102
- // delta チャンクとしてAPIに送信(fire-and-forget)
103
- void sendChunk('delta', text);
104
- });
105
- child.stderr.on('data', (data) => {
106
- const text = data.toString();
107
- stderrOutput += text;
108
- logger_1.logger.debug(`[chat] claude CLI stderr: ${text.substring(0, 200)}`);
109
- });
110
- child.on('error', (error) => {
111
- clearTimeout(timeout);
112
- if (sigkillTimer)
113
- clearTimeout(sigkillTimer);
114
- if (error.code === 'ENOENT') {
115
- reject(new Error('claude CLI が見つかりません。Claude Code がインストールされていることを確認してください。'));
116
- }
117
- else {
118
- reject(error);
119
- }
120
- });
121
- child.on('close', (code) => {
122
- clearTimeout(timeout);
123
- if (sigkillTimer)
124
- clearTimeout(sigkillTimer);
125
- logger_1.logger.debug(`[chat] claude CLI exited (pid=${child.pid}, code=${code}, stdout=${fullOutput.length}b, stderr=${stderrOutput.length}b)`);
126
- if (code === 0) {
127
- resolve(fullOutput);
128
- }
129
- else {
130
- reject(new Error(`claude CLI がコード ${code} で終了しました${stderrOutput ? `: ${stderrOutput}` : ''}`));
131
- }
132
- });
133
- });
134
- }
135
135
  //# sourceMappingURL=chat-executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-executor.js","sourceRoot":"","sources":["../../src/commands/chat-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-executor.js","sourceRoot":"","sources":["../../src/commands/chat-executor.ts"],"names":[],"mappings":"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"}