@kaitranntt/ccs 4.4.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +14 -7
  2. package/VERSION +1 -1
  3. package/config/base-agy.settings.json +10 -0
  4. package/config/base-codex.settings.json +10 -0
  5. package/config/base-gemini.settings.json +10 -0
  6. package/dist/auth/auth-commands.d.ts +52 -0
  7. package/dist/auth/auth-commands.d.ts.map +1 -0
  8. package/dist/auth/auth-commands.js +479 -0
  9. package/dist/auth/auth-commands.js.map +1 -0
  10. package/dist/auth/profile-detector.d.ts +68 -0
  11. package/dist/auth/profile-detector.d.ts.map +1 -0
  12. package/dist/auth/profile-detector.js +209 -0
  13. package/dist/auth/profile-detector.js.map +1 -0
  14. package/dist/auth/profile-registry.d.ts +60 -0
  15. package/dist/auth/profile-registry.d.ts.map +1 -0
  16. package/dist/auth/profile-registry.js +188 -0
  17. package/dist/auth/profile-registry.js.map +1 -0
  18. package/dist/ccs.d.ts +10 -0
  19. package/dist/ccs.d.ts.map +1 -0
  20. package/dist/ccs.js +320 -0
  21. package/dist/ccs.js.map +1 -0
  22. package/dist/cliproxy/auth-handler.d.ts +93 -0
  23. package/dist/cliproxy/auth-handler.d.ts.map +1 -0
  24. package/dist/cliproxy/auth-handler.js +402 -0
  25. package/dist/cliproxy/auth-handler.js.map +1 -0
  26. package/dist/cliproxy/base-config-loader.d.ts +42 -0
  27. package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
  28. package/dist/cliproxy/base-config-loader.js +123 -0
  29. package/dist/cliproxy/base-config-loader.js.map +1 -0
  30. package/dist/cliproxy/binary-manager.d.ts +104 -0
  31. package/dist/cliproxy/binary-manager.d.ts.map +1 -0
  32. package/dist/cliproxy/binary-manager.js +567 -0
  33. package/dist/cliproxy/binary-manager.js.map +1 -0
  34. package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
  35. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
  36. package/dist/cliproxy/cliproxy-executor.js +297 -0
  37. package/dist/cliproxy/cliproxy-executor.js.map +1 -0
  38. package/dist/cliproxy/config-generator.d.ts +89 -0
  39. package/dist/cliproxy/config-generator.d.ts.map +1 -0
  40. package/dist/cliproxy/config-generator.js +263 -0
  41. package/dist/cliproxy/config-generator.js.map +1 -0
  42. package/dist/cliproxy/index.d.ts +13 -0
  43. package/dist/cliproxy/index.d.ts.map +1 -0
  44. package/dist/cliproxy/index.js +62 -0
  45. package/dist/cliproxy/index.js.map +1 -0
  46. package/dist/cliproxy/platform-detector.d.ts +48 -0
  47. package/dist/cliproxy/platform-detector.d.ts.map +1 -0
  48. package/dist/cliproxy/platform-detector.js +118 -0
  49. package/dist/cliproxy/platform-detector.js.map +1 -0
  50. package/dist/cliproxy/types.d.ts +169 -0
  51. package/dist/cliproxy/types.d.ts.map +1 -0
  52. package/dist/cliproxy/types.js +7 -0
  53. package/dist/cliproxy/types.js.map +1 -0
  54. package/dist/commands/doctor-command.d.ts +10 -0
  55. package/dist/commands/doctor-command.d.ts.map +1 -0
  56. package/dist/commands/doctor-command.js +44 -0
  57. package/dist/commands/doctor-command.js.map +1 -0
  58. package/dist/commands/help-command.d.ts +5 -0
  59. package/dist/commands/help-command.d.ts.map +1 -0
  60. package/dist/commands/help-command.js +104 -0
  61. package/dist/commands/help-command.js.map +1 -0
  62. package/dist/commands/install-command.d.ts +14 -0
  63. package/dist/commands/install-command.d.ts.map +1 -0
  64. package/dist/commands/install-command.js +39 -0
  65. package/dist/commands/install-command.js.map +1 -0
  66. package/dist/commands/shell-completion-command.d.ts +10 -0
  67. package/dist/commands/shell-completion-command.d.ts.map +1 -0
  68. package/dist/commands/shell-completion-command.js +85 -0
  69. package/dist/commands/shell-completion-command.js.map +1 -0
  70. package/dist/commands/sync-command.d.ts +10 -0
  71. package/dist/commands/sync-command.d.ts.map +1 -0
  72. package/dist/commands/sync-command.js +59 -0
  73. package/dist/commands/sync-command.js.map +1 -0
  74. package/dist/commands/update-command.d.ts +12 -0
  75. package/dist/commands/update-command.d.ts.map +1 -0
  76. package/dist/commands/update-command.js +295 -0
  77. package/dist/commands/update-command.js.map +1 -0
  78. package/dist/commands/version-command.d.ts +10 -0
  79. package/dist/commands/version-command.d.ts.map +1 -0
  80. package/dist/commands/version-command.js +100 -0
  81. package/dist/commands/version-command.js.map +1 -0
  82. package/dist/delegation/delegation-handler.d.ts +60 -0
  83. package/dist/delegation/delegation-handler.d.ts.map +1 -0
  84. package/dist/delegation/delegation-handler.js +174 -0
  85. package/dist/delegation/delegation-handler.js.map +1 -0
  86. package/dist/delegation/headless-executor.d.ts +114 -0
  87. package/dist/delegation/headless-executor.d.ts.map +1 -0
  88. package/dist/delegation/headless-executor.js +562 -0
  89. package/dist/delegation/headless-executor.js.map +1 -0
  90. package/dist/delegation/result-formatter.d.ts +108 -0
  91. package/dist/delegation/result-formatter.d.ts.map +1 -0
  92. package/dist/delegation/result-formatter.js +391 -0
  93. package/dist/delegation/result-formatter.js.map +1 -0
  94. package/dist/delegation/session-manager.d.ts +58 -0
  95. package/dist/delegation/session-manager.d.ts.map +1 -0
  96. package/dist/delegation/session-manager.js +153 -0
  97. package/dist/delegation/session-manager.js.map +1 -0
  98. package/dist/delegation/settings-parser.d.ts +31 -0
  99. package/dist/delegation/settings-parser.d.ts.map +1 -0
  100. package/dist/delegation/settings-parser.js +107 -0
  101. package/dist/delegation/settings-parser.js.map +1 -0
  102. package/dist/glmt/delta-accumulator.d.ts +210 -0
  103. package/dist/glmt/delta-accumulator.d.ts.map +1 -0
  104. package/dist/glmt/delta-accumulator.js +351 -0
  105. package/dist/glmt/delta-accumulator.js.map +1 -0
  106. package/dist/glmt/glmt-proxy.d.ts +72 -0
  107. package/dist/glmt/glmt-proxy.d.ts.map +1 -0
  108. package/dist/glmt/glmt-proxy.js +427 -0
  109. package/dist/glmt/glmt-proxy.js.map +1 -0
  110. package/dist/glmt/glmt-transformer.d.ts +265 -0
  111. package/dist/glmt/glmt-transformer.d.ts.map +1 -0
  112. package/dist/glmt/glmt-transformer.js +832 -0
  113. package/dist/glmt/glmt-transformer.js.map +1 -0
  114. package/dist/glmt/locale-enforcer.d.ts +38 -0
  115. package/dist/glmt/locale-enforcer.d.ts.map +1 -0
  116. package/dist/glmt/locale-enforcer.js +69 -0
  117. package/dist/glmt/locale-enforcer.js.map +1 -0
  118. package/dist/glmt/reasoning-enforcer.d.ts +52 -0
  119. package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
  120. package/dist/glmt/reasoning-enforcer.js +151 -0
  121. package/dist/glmt/reasoning-enforcer.js.map +1 -0
  122. package/dist/glmt/sse-parser.d.ts +47 -0
  123. package/dist/glmt/sse-parser.d.ts.map +1 -0
  124. package/dist/glmt/sse-parser.js +93 -0
  125. package/dist/glmt/sse-parser.js.map +1 -0
  126. package/dist/management/doctor.d.ts +104 -0
  127. package/dist/management/doctor.d.ts.map +1 -0
  128. package/dist/management/doctor.js +673 -0
  129. package/dist/management/doctor.js.map +1 -0
  130. package/dist/management/instance-manager.d.ts +57 -0
  131. package/dist/management/instance-manager.d.ts.map +1 -0
  132. package/dist/management/instance-manager.js +195 -0
  133. package/dist/management/instance-manager.js.map +1 -0
  134. package/dist/management/recovery-manager.d.ts +39 -0
  135. package/dist/management/recovery-manager.d.ts.map +1 -0
  136. package/dist/management/recovery-manager.js +141 -0
  137. package/dist/management/recovery-manager.js.map +1 -0
  138. package/dist/management/shared-manager.d.ts +47 -0
  139. package/dist/management/shared-manager.d.ts.map +1 -0
  140. package/dist/management/shared-manager.js +388 -0
  141. package/dist/management/shared-manager.js.map +1 -0
  142. package/dist/types/cli.d.ts +50 -0
  143. package/dist/types/cli.d.ts.map +1 -0
  144. package/dist/types/cli.js +16 -0
  145. package/dist/types/cli.js.map +1 -0
  146. package/dist/types/config.d.ts +51 -0
  147. package/dist/types/config.d.ts.map +1 -0
  148. package/dist/types/config.js +26 -0
  149. package/dist/types/config.js.map +1 -0
  150. package/dist/types/delegation.d.ts +61 -0
  151. package/dist/types/delegation.d.ts.map +1 -0
  152. package/dist/types/delegation.js +6 -0
  153. package/dist/types/delegation.js.map +1 -0
  154. package/dist/types/glmt.d.ts +95 -0
  155. package/dist/types/glmt.d.ts.map +1 -0
  156. package/dist/types/glmt.js +7 -0
  157. package/dist/types/glmt.js.map +1 -0
  158. package/dist/types/index.d.ts +13 -0
  159. package/dist/types/index.d.ts.map +1 -0
  160. package/dist/types/index.js +16 -0
  161. package/dist/types/index.js.map +1 -0
  162. package/dist/types/utils.d.ts +36 -0
  163. package/dist/types/utils.d.ts.map +1 -0
  164. package/dist/types/utils.js +22 -0
  165. package/dist/types/utils.js.map +1 -0
  166. package/dist/utils/claude-detector.d.ts +14 -0
  167. package/dist/utils/claude-detector.d.ts.map +1 -0
  168. package/dist/utils/claude-detector.js +112 -0
  169. package/dist/utils/claude-detector.js.map +1 -0
  170. package/dist/utils/claude-dir-installer.d.ts +46 -0
  171. package/dist/utils/claude-dir-installer.d.ts.map +1 -0
  172. package/dist/utils/claude-dir-installer.js +289 -0
  173. package/dist/utils/claude-dir-installer.js.map +1 -0
  174. package/dist/utils/claude-symlink-manager.d.ts +61 -0
  175. package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
  176. package/dist/utils/claude-symlink-manager.js +291 -0
  177. package/dist/utils/claude-symlink-manager.js.map +1 -0
  178. package/dist/utils/config-manager.d.ts +32 -0
  179. package/dist/utils/config-manager.d.ts.map +1 -0
  180. package/dist/utils/config-manager.js +143 -0
  181. package/dist/utils/config-manager.js.map +1 -0
  182. package/dist/utils/delegation-validator.d.ts +39 -0
  183. package/dist/utils/delegation-validator.d.ts.map +1 -0
  184. package/dist/utils/delegation-validator.js +161 -0
  185. package/dist/utils/delegation-validator.js.map +1 -0
  186. package/dist/utils/error-codes.d.ts +36 -0
  187. package/dist/utils/error-codes.d.ts.map +1 -0
  188. package/dist/utils/error-codes.js +63 -0
  189. package/dist/utils/error-codes.js.map +1 -0
  190. package/dist/utils/error-manager.d.ts +59 -0
  191. package/dist/utils/error-manager.d.ts.map +1 -0
  192. package/dist/utils/error-manager.js +228 -0
  193. package/dist/utils/error-manager.js.map +1 -0
  194. package/dist/utils/helpers.d.ts +27 -0
  195. package/dist/utils/helpers.d.ts.map +1 -0
  196. package/dist/utils/helpers.js +150 -0
  197. package/dist/utils/helpers.js.map +1 -0
  198. package/dist/utils/package-manager-detector.d.ts +14 -0
  199. package/dist/utils/package-manager-detector.d.ts.map +1 -0
  200. package/dist/utils/package-manager-detector.js +162 -0
  201. package/dist/utils/package-manager-detector.js.map +1 -0
  202. package/dist/utils/progress-indicator.d.ts +52 -0
  203. package/dist/utils/progress-indicator.d.ts.map +1 -0
  204. package/dist/utils/progress-indicator.js +102 -0
  205. package/dist/utils/progress-indicator.js.map +1 -0
  206. package/dist/utils/prompt.d.ts +29 -0
  207. package/dist/utils/prompt.d.ts.map +1 -0
  208. package/dist/utils/prompt.js +116 -0
  209. package/dist/utils/prompt.js.map +1 -0
  210. package/dist/utils/shell-completion.d.ts +52 -0
  211. package/dist/utils/shell-completion.d.ts.map +1 -0
  212. package/dist/utils/shell-completion.js +231 -0
  213. package/dist/utils/shell-completion.js.map +1 -0
  214. package/dist/utils/shell-executor.d.ts +15 -0
  215. package/dist/utils/shell-executor.d.ts.map +1 -0
  216. package/dist/utils/shell-executor.js +57 -0
  217. package/dist/utils/shell-executor.js.map +1 -0
  218. package/dist/utils/update-checker.d.ts +48 -0
  219. package/dist/utils/update-checker.d.ts.map +1 -0
  220. package/dist/utils/update-checker.js +241 -0
  221. package/dist/utils/update-checker.js.map +1 -0
  222. package/lib/ccs +21 -1907
  223. package/lib/ccs.ps1 +26 -1800
  224. package/lib/error-codes.ps1 +2 -1
  225. package/lib/prompt.ps1 +2 -2
  226. package/package.json +31 -11
  227. package/scripts/add-shebang.js +39 -0
  228. package/scripts/bump-version.sh +25 -37
  229. package/scripts/dev-install.sh +32 -11
  230. package/scripts/postinstall.js +29 -29
  231. package/bin/auth/auth-commands.js +0 -499
  232. package/bin/auth/profile-detector.js +0 -204
  233. package/bin/auth/profile-registry.js +0 -225
  234. package/bin/ccs.js +0 -1034
  235. package/bin/delegation/README.md +0 -191
  236. package/bin/delegation/delegation-handler.js +0 -212
  237. package/bin/delegation/headless-executor.js +0 -618
  238. package/bin/delegation/result-formatter.js +0 -485
  239. package/bin/delegation/session-manager.js +0 -157
  240. package/bin/delegation/settings-parser.js +0 -109
  241. package/bin/glmt/delta-accumulator.js +0 -276
  242. package/bin/glmt/glmt-proxy.js +0 -495
  243. package/bin/glmt/glmt-transformer.js +0 -999
  244. package/bin/glmt/locale-enforcer.js +0 -72
  245. package/bin/glmt/reasoning-enforcer.js +0 -173
  246. package/bin/glmt/sse-parser.js +0 -96
  247. package/bin/management/doctor.js +0 -721
  248. package/bin/management/instance-manager.js +0 -202
  249. package/bin/management/recovery-manager.js +0 -135
  250. package/bin/management/shared-manager.js +0 -402
  251. package/bin/utils/claude-detector.js +0 -73
  252. package/bin/utils/claude-dir-installer.js +0 -283
  253. package/bin/utils/claude-symlink-manager.js +0 -289
  254. package/bin/utils/config-manager.js +0 -103
  255. package/bin/utils/delegation-validator.js +0 -154
  256. package/bin/utils/error-codes.js +0 -59
  257. package/bin/utils/error-manager.js +0 -165
  258. package/bin/utils/helpers.js +0 -136
  259. package/bin/utils/progress-indicator.js +0 -111
  260. package/bin/utils/prompt.js +0 -134
  261. package/bin/utils/shell-completion.js +0 -256
  262. package/bin/utils/update-checker.js +0 -243
@@ -0,0 +1,562 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.HeadlessExecutor = void 0;
28
+ const child_process_1 = require("child_process");
29
+ const path = __importStar(require("path"));
30
+ const os = __importStar(require("os"));
31
+ const fs = __importStar(require("fs"));
32
+ const session_manager_1 = require("./session-manager");
33
+ const settings_parser_1 = require("./settings-parser");
34
+ /**
35
+ * Headless executor for Claude CLI delegation
36
+ * Spawns claude with -p flag for single-turn execution
37
+ */
38
+ class HeadlessExecutor {
39
+ /**
40
+ * Execute task via headless Claude CLI
41
+ * @param profile - Profile name (glm, kimi, custom)
42
+ * @param enhancedPrompt - Enhanced prompt with context
43
+ * @param options - Execution options
44
+ * @returns execution result
45
+ */
46
+ static async execute(profile, enhancedPrompt, options = {}) {
47
+ const { cwd = process.cwd(), timeout = 600000, // 10 minutes default
48
+ permissionMode = 'acceptEdits', resumeSession = false, sessionId = null, } = options;
49
+ // Validate permission mode
50
+ this._validatePermissionMode(permissionMode);
51
+ // Initialize session manager
52
+ const sessionMgr = new session_manager_1.SessionManager();
53
+ // Detect Claude CLI path
54
+ const claudeCli = this._detectClaudeCli();
55
+ if (!claudeCli) {
56
+ throw new Error('Claude CLI not found in PATH. Install from: https://docs.claude.com/en/docs/claude-code/installation');
57
+ }
58
+ // Get settings path for profile
59
+ const settingsPath = path.join(os.homedir(), '.ccs', `${profile}.settings.json`);
60
+ // Validate settings file exists
61
+ if (!fs.existsSync(settingsPath)) {
62
+ throw new Error(`Settings file not found: ${settingsPath}\nProfile "${profile}" may not be configured.`);
63
+ }
64
+ // Smart slash command detection and preservation
65
+ // Detects if prompt contains slash command and restructures for proper execution
66
+ const processedPrompt = this._processSlashCommand(enhancedPrompt);
67
+ // Prepare arguments
68
+ const args = ['-p', processedPrompt, '--settings', settingsPath];
69
+ // Always use stream-json for real-time progress visibility
70
+ // Note: --verbose is required when using --print with stream-json
71
+ args.push('--output-format', 'stream-json', '--verbose');
72
+ // Add permission mode
73
+ if (permissionMode && permissionMode !== 'default') {
74
+ if (permissionMode === 'bypassPermissions') {
75
+ args.push('--dangerously-skip-permissions');
76
+ // Warn about dangerous mode
77
+ if (process.env.CCS_DEBUG) {
78
+ console.warn('[!] WARNING: Using --dangerously-skip-permissions mode');
79
+ console.warn('[!] This bypasses ALL permission checks. Use only in trusted environments.');
80
+ }
81
+ }
82
+ else {
83
+ args.push('--permission-mode', permissionMode);
84
+ }
85
+ }
86
+ // Add resume flag for multi-turn sessions
87
+ if (resumeSession) {
88
+ const lastSession = sessionMgr.getLastSession(profile);
89
+ if (lastSession) {
90
+ args.push('--resume', lastSession.sessionId);
91
+ if (process.env.CCS_DEBUG) {
92
+ const cost = lastSession.totalCost !== undefined && lastSession.totalCost !== null
93
+ ? lastSession.totalCost.toFixed(4)
94
+ : '0.0000';
95
+ console.error(`[i] Resuming session: ${lastSession.sessionId} (${lastSession.turns} turns, $${cost})`);
96
+ }
97
+ }
98
+ else if (sessionId) {
99
+ args.push('--resume', sessionId);
100
+ if (process.env.CCS_DEBUG) {
101
+ console.error(`[i] Resuming specific session: ${sessionId}`);
102
+ }
103
+ }
104
+ else {
105
+ console.warn('[!] No previous session found, starting new session');
106
+ }
107
+ }
108
+ else if (sessionId) {
109
+ args.push('--resume', sessionId);
110
+ if (process.env.CCS_DEBUG) {
111
+ console.error(`[i] Resuming specific session: ${sessionId}`);
112
+ }
113
+ }
114
+ // Add tool restrictions from settings
115
+ const toolRestrictions = settings_parser_1.SettingsParser.parseToolRestrictions(cwd);
116
+ if (toolRestrictions.allowedTools.length > 0) {
117
+ args.push('--allowedTools');
118
+ toolRestrictions.allowedTools.forEach((tool) => args.push(tool));
119
+ }
120
+ if (toolRestrictions.disallowedTools.length > 0) {
121
+ args.push('--disallowedTools');
122
+ toolRestrictions.disallowedTools.forEach((tool) => args.push(tool));
123
+ }
124
+ // Note: No max-turns limit - using time-based limits instead (default 10min timeout)
125
+ // Debug log args
126
+ if (process.env.CCS_DEBUG) {
127
+ console.error(`[i] Claude CLI args: ${args.join(' ')}`);
128
+ }
129
+ // Execute with spawn
130
+ return new Promise((resolve, reject) => {
131
+ const startTime = Date.now();
132
+ // Show progress unless explicitly disabled with CCS_QUIET
133
+ const showProgress = !process.env.CCS_QUIET;
134
+ // Show initial progress message
135
+ if (showProgress) {
136
+ const modelName = profile === 'glm' ? 'GLM-4.6' : profile === 'kimi' ? 'Kimi' : profile.toUpperCase();
137
+ console.error(`[i] Delegating to ${modelName}...`);
138
+ }
139
+ const proc = (0, child_process_1.spawn)(claudeCli, args, {
140
+ cwd,
141
+ stdio: ['ignore', 'pipe', 'pipe'],
142
+ timeout,
143
+ });
144
+ let stdout = '';
145
+ let stderr = '';
146
+ let progressInterval;
147
+ const messages = []; // Accumulate stream-json messages
148
+ let partialLine = ''; // Buffer for incomplete JSON lines
149
+ // Handle parent process termination (Ctrl+C or Esc in Claude)
150
+ // When main Claude session is killed, cleanup spawned child process
151
+ const cleanupHandler = () => {
152
+ if (!proc.killed) {
153
+ if (process.env.CCS_DEBUG) {
154
+ console.error('[!] Parent process terminating, killing delegated session...');
155
+ }
156
+ proc.kill('SIGTERM');
157
+ // Force kill if not dead after 2s
158
+ setTimeout(() => {
159
+ if (!proc.killed) {
160
+ proc.kill('SIGKILL');
161
+ }
162
+ }, 2000);
163
+ }
164
+ };
165
+ // Register signal handlers for parent process termination
166
+ process.once('SIGINT', cleanupHandler);
167
+ process.once('SIGTERM', cleanupHandler);
168
+ // Cleanup signal handlers when child process exits
169
+ const removeSignalHandlers = () => {
170
+ process.removeListener('SIGINT', cleanupHandler);
171
+ process.removeListener('SIGTERM', cleanupHandler);
172
+ };
173
+ proc.on('close', removeSignalHandlers);
174
+ proc.on('error', removeSignalHandlers);
175
+ // Progress indicator (show elapsed time every 5 seconds)
176
+ if (showProgress) {
177
+ progressInterval = setInterval(() => {
178
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
179
+ process.stderr.write(`[i] Still running... ${elapsed}s elapsed\r`);
180
+ }, 5000);
181
+ }
182
+ // Capture stdout (stream-json format - jsonl)
183
+ proc.stdout?.on('data', (data) => {
184
+ const dataStr = data.toString();
185
+ stdout += dataStr;
186
+ // Parse stream-json messages (jsonl format - one JSON per line)
187
+ const chunk = partialLine + dataStr;
188
+ const lines = chunk.split('\n');
189
+ partialLine = lines.pop() || ''; // Save incomplete line for next chunk
190
+ for (const line of lines) {
191
+ if (!line.trim())
192
+ continue;
193
+ try {
194
+ const msg = JSON.parse(line);
195
+ messages.push(msg);
196
+ // Show real-time tool use with verbose details
197
+ if (showProgress && msg.type === 'assistant') {
198
+ const toolUses = msg.message?.content?.filter((c) => c.type === 'tool_use') || [];
199
+ for (const tool of toolUses) {
200
+ process.stderr.write('\r\x1b[K'); // Clear line
201
+ // Show verbose tool use with description/input if available
202
+ const toolInput = tool.input || {};
203
+ let verboseMsg = `[Tool] ${tool.name}`;
204
+ // Add context based on tool type (all Claude Code tools)
205
+ switch (tool.name) {
206
+ case 'Bash':
207
+ if (toolInput.command) {
208
+ // Truncate long commands
209
+ const command = toolInput.command;
210
+ const cmd = command.length > 80 ? command.substring(0, 77) + '...' : command;
211
+ verboseMsg += `: ${cmd}`;
212
+ }
213
+ break;
214
+ case 'Edit':
215
+ case 'Write':
216
+ case 'Read':
217
+ if (toolInput.file_path) {
218
+ verboseMsg += `: ${toolInput.file_path}`;
219
+ }
220
+ break;
221
+ case 'NotebookEdit':
222
+ case 'NotebookRead':
223
+ if (toolInput.notebook_path) {
224
+ verboseMsg += `: ${toolInput.notebook_path}`;
225
+ }
226
+ break;
227
+ case 'Grep':
228
+ if (toolInput.pattern) {
229
+ verboseMsg += `: searching for "${toolInput.pattern}"`;
230
+ if (toolInput.path) {
231
+ verboseMsg += ` in ${toolInput.path}`;
232
+ }
233
+ }
234
+ break;
235
+ case 'Glob':
236
+ if (toolInput.pattern) {
237
+ verboseMsg += `: ${toolInput.pattern}`;
238
+ }
239
+ break;
240
+ case 'SlashCommand':
241
+ if (toolInput.command) {
242
+ verboseMsg += `: ${toolInput.command}`;
243
+ }
244
+ break;
245
+ case 'Task':
246
+ if (toolInput.description) {
247
+ verboseMsg += `: ${toolInput.description}`;
248
+ }
249
+ else if (toolInput.prompt) {
250
+ const promptText = toolInput.prompt;
251
+ const prompt = promptText.length > 60 ? promptText.substring(0, 57) + '...' : promptText;
252
+ verboseMsg += `: ${prompt}`;
253
+ }
254
+ break;
255
+ case 'TodoWrite':
256
+ if (toolInput.todos && Array.isArray(toolInput.todos)) {
257
+ // Show in_progress task instead of just count
258
+ const inProgressTask = toolInput.todos.find((t) => t.status === 'in_progress');
259
+ if (inProgressTask && inProgressTask.activeForm) {
260
+ verboseMsg += `: ${inProgressTask.activeForm}`;
261
+ }
262
+ else {
263
+ // Fallback to count if no in_progress task
264
+ verboseMsg += `: ${toolInput.todos.length} task(s)`;
265
+ }
266
+ }
267
+ break;
268
+ case 'WebFetch':
269
+ if (toolInput.url) {
270
+ verboseMsg += `: ${toolInput.url}`;
271
+ }
272
+ break;
273
+ case 'WebSearch':
274
+ if (toolInput.query) {
275
+ verboseMsg += `: "${toolInput.query}"`;
276
+ }
277
+ break;
278
+ default:
279
+ // For unknown tools, show first meaningful parameter
280
+ if (Object.keys(toolInput).length > 0) {
281
+ const firstKey = Object.keys(toolInput)[0];
282
+ const firstValue = toolInput[firstKey];
283
+ if (typeof firstValue === 'string' && firstValue.length < 60) {
284
+ verboseMsg += `: ${firstValue}`;
285
+ }
286
+ }
287
+ }
288
+ process.stderr.write(`${verboseMsg}\n`);
289
+ }
290
+ }
291
+ }
292
+ catch (parseError) {
293
+ // Skip malformed JSON lines (shouldn't happen with stream-json)
294
+ if (process.env.CCS_DEBUG) {
295
+ console.error(`[!] Failed to parse stream-json line: ${parseError.message}`);
296
+ }
297
+ }
298
+ }
299
+ });
300
+ // Stream stderr in real-time (progress messages from Claude CLI)
301
+ proc.stderr?.on('data', (data) => {
302
+ const stderrText = data.toString();
303
+ stderr += stderrText;
304
+ // Show stderr in real-time if in TTY
305
+ if (showProgress) {
306
+ // Clear progress line before showing stderr
307
+ if (progressInterval) {
308
+ process.stderr.write('\r\x1b[K'); // Clear line
309
+ }
310
+ process.stderr.write(stderrText);
311
+ }
312
+ });
313
+ // Handle completion
314
+ proc.on('close', (exitCode) => {
315
+ const duration = Date.now() - startTime;
316
+ // Clear progress indicator
317
+ if (progressInterval) {
318
+ clearInterval(progressInterval);
319
+ process.stderr.write('\r\x1b[K'); // Clear line
320
+ }
321
+ // Show completion message
322
+ if (showProgress) {
323
+ const durationSec = (duration / 1000).toFixed(1);
324
+ if (timedOut) {
325
+ console.error(`[i] Execution timed out after ${durationSec}s`);
326
+ }
327
+ else {
328
+ console.error(`[i] Execution completed in ${durationSec}s`);
329
+ }
330
+ console.error(''); // Blank line before formatted output
331
+ }
332
+ const result = {
333
+ exitCode: exitCode || 0,
334
+ stdout,
335
+ stderr,
336
+ cwd,
337
+ profile,
338
+ duration,
339
+ timedOut: false,
340
+ success: exitCode === 0 && !timedOut,
341
+ messages, // Include all stream-json messages
342
+ };
343
+ // Extract metadata from final 'result' message in stream-json
344
+ const resultMessage = messages.find((m) => m.type === 'result');
345
+ if (resultMessage) {
346
+ // Add parsed fields from result message
347
+ result.sessionId = resultMessage.session_id || undefined;
348
+ result.totalCost = resultMessage.total_cost_usd || 0;
349
+ result.numTurns = resultMessage.num_turns || 0;
350
+ result.isError = resultMessage.is_error || false;
351
+ result.type = resultMessage.type || null;
352
+ result.subtype = resultMessage.subtype || undefined;
353
+ result.durationApi = resultMessage.duration_api_ms || 0;
354
+ result.permissionDenials = resultMessage.permission_denials || [];
355
+ result.errors = resultMessage.errors || [];
356
+ // Extract content from result message
357
+ result.content = resultMessage.result || '';
358
+ }
359
+ else {
360
+ // Fallback: no result message found (shouldn't happen)
361
+ result.content = stdout;
362
+ if (process.env.CCS_DEBUG) {
363
+ console.error(`[!] No result message found in stream-json output`);
364
+ }
365
+ }
366
+ // Store or update session if we have session ID (even on timeout, for :continue support)
367
+ if (result.sessionId) {
368
+ if (resumeSession || sessionId) {
369
+ // Update existing session
370
+ sessionMgr.updateSession(profile, result.sessionId, {
371
+ totalCost: result.totalCost,
372
+ });
373
+ }
374
+ else {
375
+ // Store new session
376
+ sessionMgr.storeSession(profile, {
377
+ sessionId: result.sessionId,
378
+ totalCost: result.totalCost,
379
+ cwd: result.cwd,
380
+ });
381
+ }
382
+ // Cleanup expired sessions periodically
383
+ if (Math.random() < 0.1) {
384
+ // 10% chance
385
+ sessionMgr.cleanupExpired();
386
+ }
387
+ }
388
+ resolve(result);
389
+ });
390
+ // Handle errors
391
+ proc.on('error', (error) => {
392
+ if (progressInterval) {
393
+ clearInterval(progressInterval);
394
+ }
395
+ reject(new Error(`Failed to execute Claude CLI: ${error.message}`));
396
+ });
397
+ // Handle timeout with graceful SIGTERM then forceful SIGKILL
398
+ let timedOut = false;
399
+ if (timeout > 0) {
400
+ const timeoutHandle = setTimeout(() => {
401
+ if (!proc.killed) {
402
+ timedOut = true;
403
+ if (progressInterval) {
404
+ clearInterval(progressInterval);
405
+ process.stderr.write('\r\x1b[K'); // Clear line
406
+ }
407
+ if (process.env.CCS_DEBUG) {
408
+ console.error(`[!] Timeout reached after ${timeout}ms, sending SIGTERM for graceful shutdown...`);
409
+ }
410
+ // Send SIGTERM for graceful shutdown
411
+ proc.kill('SIGTERM');
412
+ // If process doesn't terminate within 10s, force kill
413
+ setTimeout(() => {
414
+ if (!proc.killed) {
415
+ if (process.env.CCS_DEBUG) {
416
+ console.error(`[!] Process did not terminate gracefully, sending SIGKILL...`);
417
+ }
418
+ proc.kill('SIGKILL');
419
+ }
420
+ }, 10000); // Give 10s for graceful shutdown instead of 5s
421
+ }
422
+ }, timeout);
423
+ // Clear timeout on successful completion
424
+ proc.on('close', () => clearTimeout(timeoutHandle));
425
+ }
426
+ });
427
+ }
428
+ /**
429
+ * Validate permission mode
430
+ * @param mode - Permission mode
431
+ * @throws {Error} If mode is invalid
432
+ * @private
433
+ */
434
+ static _validatePermissionMode(mode) {
435
+ const VALID_MODES = ['default', 'plan', 'acceptEdits', 'bypassPermissions'];
436
+ if (!VALID_MODES.includes(mode)) {
437
+ throw new Error(`Invalid permission mode: "${mode}". Valid modes: ${VALID_MODES.join(', ')}`);
438
+ }
439
+ }
440
+ /**
441
+ * Detect Claude CLI executable
442
+ * @returns Path to claude CLI or null if not found
443
+ * @private
444
+ */
445
+ static _detectClaudeCli() {
446
+ // Check environment variable override
447
+ if (process.env.CCS_CLAUDE_PATH) {
448
+ return process.env.CCS_CLAUDE_PATH;
449
+ }
450
+ // Try to find in PATH
451
+ const { execSync } = require('child_process');
452
+ try {
453
+ const result = execSync('command -v claude', { encoding: 'utf8' });
454
+ return result.trim();
455
+ }
456
+ catch (_error) {
457
+ return null;
458
+ }
459
+ }
460
+ /**
461
+ * Execute with retry logic
462
+ * @param profile - Profile name
463
+ * @param enhancedPrompt - Enhanced prompt
464
+ * @param options - Execution options
465
+ * @returns execution result
466
+ */
467
+ static async executeWithRetry(profile, enhancedPrompt, options = {}) {
468
+ const { maxRetries = 2, ...execOptions } = options;
469
+ let lastError;
470
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
471
+ try {
472
+ const result = await this.execute(profile, enhancedPrompt, execOptions);
473
+ // If successful, return immediately
474
+ if (result.success) {
475
+ return result;
476
+ }
477
+ // If not last attempt, retry
478
+ if (attempt < maxRetries) {
479
+ console.error(`[!] Attempt ${attempt + 1} failed, retrying...`);
480
+ await this._sleep(1000 * (attempt + 1)); // Exponential backoff
481
+ continue;
482
+ }
483
+ // Last attempt failed, return result anyway
484
+ return result;
485
+ }
486
+ catch (error) {
487
+ lastError = error;
488
+ if (attempt < maxRetries) {
489
+ console.error(`[!] Attempt ${attempt + 1} errored: ${error.message}, retrying...`);
490
+ await this._sleep(1000 * (attempt + 1));
491
+ }
492
+ }
493
+ }
494
+ // All retries exhausted
495
+ throw lastError || new Error('Execution failed after all retry attempts');
496
+ }
497
+ /**
498
+ * Sleep utility for retry backoff
499
+ * @param ms - Milliseconds to sleep
500
+ * @returns Promise<void>
501
+ * @private
502
+ */
503
+ static _sleep(ms) {
504
+ return new Promise((resolve) => setTimeout(resolve, ms));
505
+ }
506
+ /**
507
+ * Process prompt to detect and preserve slash commands
508
+ * Implements smart enhancement: preserves slash command at start, allows context in rest
509
+ * @param prompt - Original prompt (may contain slash command)
510
+ * @returns Processed prompt with slash command preserved
511
+ * @private
512
+ */
513
+ static _processSlashCommand(prompt) {
514
+ const trimmed = prompt.trim();
515
+ // Case 1: Already starts with slash command - keep as-is
516
+ if (trimmed.match(/^\/[\w:-]+(\s|$)/)) {
517
+ return prompt;
518
+ }
519
+ // Case 2: Find slash command embedded in text
520
+ // Look for /command that's NOT part of a file path
521
+ // File paths: /home/user, /path/to/file (have / before or after)
522
+ // Commands: /cook, /plan (standalone, preceded by space/colon/start)
523
+ // Strategy: Find LAST occurrence that looks like a command, not a path
524
+ const embeddedSlash = trimmed.match(/(?:^|[^\w/])(\/[\w:-]+)(\s+[\s\S]*)?$/);
525
+ if (embeddedSlash) {
526
+ const command = embeddedSlash[1]; // e.g., "/cook"
527
+ const args = (embeddedSlash[2] || '').trim(); // Everything after command
528
+ // Calculate where the command starts (excluding preceding char if any)
529
+ const matchIndex = embeddedSlash.index || 0;
530
+ const matchStart = matchIndex + (embeddedSlash[0][0] === '/' ? 0 : 1);
531
+ const beforeCommand = trimmed.substring(0, matchStart).trim();
532
+ // Restructure: command first, context after
533
+ if (beforeCommand && args) {
534
+ return `${command} ${args}\n\nContext: ${beforeCommand}`;
535
+ }
536
+ else if (beforeCommand) {
537
+ return `${command}\n\nContext: ${beforeCommand}`;
538
+ }
539
+ return args ? `${command} ${args}` : command;
540
+ }
541
+ // No slash command detected, return as-is
542
+ return prompt;
543
+ }
544
+ /**
545
+ * Test if profile is executable (quick health check)
546
+ * @param profile - Profile name
547
+ * @returns True if profile can execute
548
+ */
549
+ static async testProfile(profile) {
550
+ try {
551
+ const result = await this.execute(profile, 'Say "test successful"', {
552
+ timeout: 10000,
553
+ });
554
+ return result.success;
555
+ }
556
+ catch (_error) {
557
+ return false;
558
+ }
559
+ }
560
+ }
561
+ exports.HeadlessExecutor = HeadlessExecutor;
562
+ //# sourceMappingURL=headless-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-executor.js","sourceRoot":"","sources":["../../src/delegation/headless-executor.ts"],"names":[],"mappings":"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"}