@cleocode/adapters 2026.5.4 → 2026.5.5
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/package.json +4 -4
- package/dist/cant-context.js +0 -711
- package/dist/cant-context.js.map +0 -1
- package/dist/providers/claude-code/adapter.js +0 -222
- package/dist/providers/claude-code/adapter.js.map +0 -1
- package/dist/providers/claude-code/context-monitor.js +0 -159
- package/dist/providers/claude-code/context-monitor.js.map +0 -1
- package/dist/providers/claude-code/hooks.js +0 -428
- package/dist/providers/claude-code/hooks.js.map +0 -1
- package/dist/providers/claude-code/index.js +0 -41
- package/dist/providers/claude-code/index.js.map +0 -1
- package/dist/providers/claude-code/install.js +0 -310
- package/dist/providers/claude-code/install.js.map +0 -1
- package/dist/providers/claude-code/paths.js +0 -41
- package/dist/providers/claude-code/paths.js.map +0 -1
- package/dist/providers/claude-code/spawn.js +0 -198
- package/dist/providers/claude-code/spawn.js.map +0 -1
- package/dist/providers/claude-code/statusline.js +0 -130
- package/dist/providers/claude-code/statusline.js.map +0 -1
- package/dist/providers/claude-code/task-sync.js +0 -119
- package/dist/providers/claude-code/task-sync.js.map +0 -1
- package/dist/providers/claude-code/transport.js +0 -29
- package/dist/providers/claude-code/transport.js.map +0 -1
- package/dist/providers/claude-sdk/adapter.js +0 -88
- package/dist/providers/claude-sdk/adapter.js.map +0 -1
- package/dist/providers/claude-sdk/index.js +0 -34
- package/dist/providers/claude-sdk/index.js.map +0 -1
- package/dist/providers/claude-sdk/install.js +0 -61
- package/dist/providers/claude-sdk/install.js.map +0 -1
- package/dist/providers/claude-sdk/mcp-registry.js +0 -66
- package/dist/providers/claude-sdk/mcp-registry.js.map +0 -1
- package/dist/providers/claude-sdk/session-store.js +0 -84
- package/dist/providers/claude-sdk/session-store.js.map +0 -1
- package/dist/providers/claude-sdk/spawn.js +0 -251
- package/dist/providers/claude-sdk/spawn.js.map +0 -1
- package/dist/providers/claude-sdk/tool-bridge.js +0 -50
- package/dist/providers/claude-sdk/tool-bridge.js.map +0 -1
- package/dist/providers/codex/adapter.js +0 -146
- package/dist/providers/codex/adapter.js.map +0 -1
- package/dist/providers/codex/hooks.js +0 -113
- package/dist/providers/codex/hooks.js.map +0 -1
- package/dist/providers/codex/index.js +0 -40
- package/dist/providers/codex/index.js.map +0 -1
- package/dist/providers/codex/install.js +0 -132
- package/dist/providers/codex/install.js.map +0 -1
- package/dist/providers/codex/spawn.js +0 -203
- package/dist/providers/codex/spawn.js.map +0 -1
- package/dist/providers/cursor/adapter.js +0 -151
- package/dist/providers/cursor/adapter.js.map +0 -1
- package/dist/providers/cursor/hooks.js +0 -208
- package/dist/providers/cursor/hooks.js.map +0 -1
- package/dist/providers/cursor/index.js +0 -36
- package/dist/providers/cursor/index.js.map +0 -1
- package/dist/providers/cursor/install.js +0 -281
- package/dist/providers/cursor/install.js.map +0 -1
- package/dist/providers/cursor/spawn.js +0 -59
- package/dist/providers/cursor/spawn.js.map +0 -1
- package/dist/providers/gemini-cli/adapter.js +0 -158
- package/dist/providers/gemini-cli/adapter.js.map +0 -1
- package/dist/providers/gemini-cli/hooks.js +0 -128
- package/dist/providers/gemini-cli/hooks.js.map +0 -1
- package/dist/providers/gemini-cli/index.js +0 -40
- package/dist/providers/gemini-cli/index.js.map +0 -1
- package/dist/providers/gemini-cli/install.js +0 -124
- package/dist/providers/gemini-cli/install.js.map +0 -1
- package/dist/providers/gemini-cli/spawn.js +0 -195
- package/dist/providers/gemini-cli/spawn.js.map +0 -1
- package/dist/providers/kimi/adapter.js +0 -145
- package/dist/providers/kimi/adapter.js.map +0 -1
- package/dist/providers/kimi/hooks.js +0 -79
- package/dist/providers/kimi/hooks.js.map +0 -1
- package/dist/providers/kimi/index.js +0 -40
- package/dist/providers/kimi/index.js.map +0 -1
- package/dist/providers/kimi/install.js +0 -124
- package/dist/providers/kimi/install.js.map +0 -1
- package/dist/providers/kimi/spawn.js +0 -225
- package/dist/providers/kimi/spawn.js.map +0 -1
- package/dist/providers/openai-sdk/adapter.js +0 -121
- package/dist/providers/openai-sdk/adapter.js.map +0 -1
- package/dist/providers/openai-sdk/guardrails.js +0 -174
- package/dist/providers/openai-sdk/guardrails.js.map +0 -1
- package/dist/providers/openai-sdk/handoff.js +0 -128
- package/dist/providers/openai-sdk/handoff.js.map +0 -1
- package/dist/providers/openai-sdk/index.js +0 -40
- package/dist/providers/openai-sdk/index.js.map +0 -1
- package/dist/providers/openai-sdk/install.js +0 -120
- package/dist/providers/openai-sdk/install.js.map +0 -1
- package/dist/providers/openai-sdk/spawn.js +0 -361
- package/dist/providers/openai-sdk/spawn.js.map +0 -1
- package/dist/providers/openai-sdk/tracing.js +0 -159
- package/dist/providers/openai-sdk/tracing.js.map +0 -1
- package/dist/providers/opencode/adapter.js +0 -166
- package/dist/providers/opencode/adapter.js.map +0 -1
- package/dist/providers/opencode/hooks.js +0 -206
- package/dist/providers/opencode/hooks.js.map +0 -1
- package/dist/providers/opencode/index.js +0 -37
- package/dist/providers/opencode/index.js.map +0 -1
- package/dist/providers/opencode/install.js +0 -242
- package/dist/providers/opencode/install.js.map +0 -1
- package/dist/providers/opencode/spawn.js +0 -257
- package/dist/providers/opencode/spawn.js.map +0 -1
- package/dist/providers/pi/adapter.js +0 -220
- package/dist/providers/pi/adapter.js.map +0 -1
- package/dist/providers/pi/hooks.js +0 -223
- package/dist/providers/pi/hooks.js.map +0 -1
- package/dist/providers/pi/index.js +0 -38
- package/dist/providers/pi/index.js.map +0 -1
- package/dist/providers/pi/install.js +0 -183
- package/dist/providers/pi/install.js.map +0 -1
- package/dist/providers/pi/spawn.js +0 -187
- package/dist/providers/pi/spawn.js.map +0 -1
- package/dist/providers/shared/conduit-trace-writer.js +0 -65
- package/dist/providers/shared/conduit-trace-writer.js.map +0 -1
- package/dist/providers/shared/hook-template-installer.js +0 -209
- package/dist/providers/shared/hook-template-installer.js.map +0 -1
- package/dist/providers/shared/paths.js +0 -77
- package/dist/providers/shared/paths.js.map +0 -1
- package/dist/providers/shared/sdk-result-mapper.js +0 -55
- package/dist/providers/shared/sdk-result-mapper.js.map +0 -1
- package/dist/providers/shared/transcript-reader.js +0 -124
- package/dist/providers/shared/transcript-reader.js.map +0 -1
- package/dist/registry.js +0 -92
- package/dist/registry.js.map +0 -1
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code Install Provider
|
|
3
|
-
*
|
|
4
|
-
* Handles CLEO installation into Claude Code environments:
|
|
5
|
-
* - Ensures CLAUDE.md has CLEO @-references
|
|
6
|
-
* - Manages plugin registration in ~/.claude/settings.json
|
|
7
|
-
*
|
|
8
|
-
* Migrated from src/core/install/claude-plugin.ts
|
|
9
|
-
*
|
|
10
|
-
* @task T5240
|
|
11
|
-
*/
|
|
12
|
-
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from 'node:fs';
|
|
13
|
-
import { homedir } from 'node:os';
|
|
14
|
-
import { dirname, join } from 'node:path';
|
|
15
|
-
import { fileURLToPath } from 'node:url';
|
|
16
|
-
import { installProviderHookTemplates, } from '../shared/hook-template-installer.js';
|
|
17
|
-
import { getCleoTemplatesTildePath } from '../shared/paths.js';
|
|
18
|
-
/**
|
|
19
|
-
* Lines that should appear in CLAUDE.md to reference CLEO.
|
|
20
|
-
* The CLEO-INJECTION.md path is resolved dynamically to support non-default
|
|
21
|
-
* XDG / OS installation locations (T916).
|
|
22
|
-
*/
|
|
23
|
-
const INSTRUCTION_REFERENCES = [
|
|
24
|
-
`@${getCleoTemplatesTildePath()}/CLEO-INJECTION.md`,
|
|
25
|
-
'@.cleo/memory-bridge.md',
|
|
26
|
-
];
|
|
27
|
-
/** Resolve the commands directory bundled with this adapter. */
|
|
28
|
-
function getAdapterCommandsDir() {
|
|
29
|
-
// Works in both ESM (import.meta.url) and compiled output
|
|
30
|
-
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
31
|
-
return join(thisDir, 'commands');
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Install provider for Claude Code.
|
|
35
|
-
*
|
|
36
|
-
* Manages CLEO's integration with Claude Code by:
|
|
37
|
-
* 1. Ensuring CLAUDE.md contains @-references to CLEO instruction files
|
|
38
|
-
* 2. Installing adapter-provided commands to .claude/commands/
|
|
39
|
-
* 3. Registering the brain observation plugin in ~/.claude/settings.json
|
|
40
|
-
*
|
|
41
|
-
* @remarks
|
|
42
|
-
* Installation is idempotent -- running install multiple times on the same
|
|
43
|
-
* project produces the same result. The provider disables the legacy
|
|
44
|
-
* `claude-mem\@thedotmack` plugin if present and enables the unified
|
|
45
|
-
* `cleo\@cleocode` plugin instead.
|
|
46
|
-
*/
|
|
47
|
-
export class ClaudeCodeInstallProvider {
|
|
48
|
-
/**
|
|
49
|
-
* Install CLEO into a Claude Code project.
|
|
50
|
-
*
|
|
51
|
-
* @param options - Installation options including project directory
|
|
52
|
-
* @returns Result describing what was installed
|
|
53
|
-
*/
|
|
54
|
-
async install(options) {
|
|
55
|
-
const { projectDir } = options;
|
|
56
|
-
const installedAt = new Date().toISOString();
|
|
57
|
-
let instructionFileUpdated = false;
|
|
58
|
-
const details = {};
|
|
59
|
-
// Step 1: Ensure CLAUDE.md has @-references
|
|
60
|
-
instructionFileUpdated = this.updateInstructionFile(projectDir);
|
|
61
|
-
if (instructionFileUpdated) {
|
|
62
|
-
details.instructionFile = join(projectDir, 'CLAUDE.md');
|
|
63
|
-
}
|
|
64
|
-
// Step 2: Install adapter-provided commands to .claude/commands/
|
|
65
|
-
const commandsInstalled = this.installCommands(projectDir);
|
|
66
|
-
if (commandsInstalled.length > 0) {
|
|
67
|
-
details.commands = commandsInstalled;
|
|
68
|
-
}
|
|
69
|
-
// Step 3: Register plugin in ~/.claude/settings.json
|
|
70
|
-
const pluginResult = this.registerPlugin();
|
|
71
|
-
if (pluginResult) {
|
|
72
|
-
details.plugin = pluginResult;
|
|
73
|
-
}
|
|
74
|
-
// Step 4 (T1013): Install PreCompact hook templates + wire the handler
|
|
75
|
-
// command into ~/.claude/settings.json's `PreCompact` event.
|
|
76
|
-
const hookResult = this.installHookTemplates();
|
|
77
|
-
if (hookResult) {
|
|
78
|
-
details.hookTemplates = hookResult;
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
success: true,
|
|
82
|
-
installedAt,
|
|
83
|
-
instructionFileUpdated,
|
|
84
|
-
details,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Uninstall CLEO from the current Claude Code project.
|
|
89
|
-
*
|
|
90
|
-
* Does not remove CLAUDE.md references (they are harmless if CLEO is not present).
|
|
91
|
-
*/
|
|
92
|
-
async uninstall() { }
|
|
93
|
-
/**
|
|
94
|
-
* Check whether CLEO is installed in the current environment.
|
|
95
|
-
*
|
|
96
|
-
* Checks for plugin enabled in ~/.claude/settings.json.
|
|
97
|
-
*/
|
|
98
|
-
async isInstalled() {
|
|
99
|
-
// Check ~/.claude/settings.json for plugin registration
|
|
100
|
-
const settingsPath = join(homedir(), '.claude', 'settings.json');
|
|
101
|
-
if (existsSync(settingsPath)) {
|
|
102
|
-
try {
|
|
103
|
-
const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
104
|
-
const plugins = settings.enabledPlugins;
|
|
105
|
-
if (plugins && plugins['cleo@cleocode'] === true) {
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
// Fall through
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Ensure CLAUDE.md contains @-references to CLEO instruction files.
|
|
117
|
-
*
|
|
118
|
-
* Creates CLAUDE.md if it does not exist. Appends any missing references.
|
|
119
|
-
*
|
|
120
|
-
* @param projectDir - Project root directory
|
|
121
|
-
*/
|
|
122
|
-
async ensureInstructionReferences(projectDir) {
|
|
123
|
-
this.updateInstructionFile(projectDir);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Update CLAUDE.md with CLEO @-references.
|
|
127
|
-
*
|
|
128
|
-
* @returns true if the file was created or modified
|
|
129
|
-
*/
|
|
130
|
-
updateInstructionFile(projectDir) {
|
|
131
|
-
const claudeMdPath = join(projectDir, 'CLAUDE.md');
|
|
132
|
-
let content = '';
|
|
133
|
-
let existed = false;
|
|
134
|
-
if (existsSync(claudeMdPath)) {
|
|
135
|
-
content = readFileSync(claudeMdPath, 'utf-8');
|
|
136
|
-
existed = true;
|
|
137
|
-
}
|
|
138
|
-
const missingRefs = INSTRUCTION_REFERENCES.filter((ref) => !content.includes(ref));
|
|
139
|
-
if (missingRefs.length === 0) {
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
const refsBlock = missingRefs.join('\n');
|
|
143
|
-
if (existed) {
|
|
144
|
-
// Append missing references
|
|
145
|
-
const separator = content.endsWith('\n') ? '' : '\n';
|
|
146
|
-
content = content + separator + refsBlock + '\n';
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
// Create new CLAUDE.md with references
|
|
150
|
-
content = refsBlock + '\n';
|
|
151
|
-
}
|
|
152
|
-
writeFileSync(claudeMdPath, content, 'utf-8');
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Install Claude Code-specific commands to .claude/commands/ in the project.
|
|
157
|
-
*
|
|
158
|
-
* These commands extend CLEO's provider-neutral skills with Claude Code-specific
|
|
159
|
-
* operational patterns (Agent tool spawn templates, model assignment, context guardrails).
|
|
160
|
-
*
|
|
161
|
-
* @param projectDir - Project root directory
|
|
162
|
-
* @returns Array of installed command filenames
|
|
163
|
-
*/
|
|
164
|
-
installCommands(projectDir) {
|
|
165
|
-
const adapterCommandsDir = getAdapterCommandsDir();
|
|
166
|
-
if (!existsSync(adapterCommandsDir)) {
|
|
167
|
-
return [];
|
|
168
|
-
}
|
|
169
|
-
const targetDir = join(projectDir, '.claude', 'commands');
|
|
170
|
-
mkdirSync(targetDir, { recursive: true });
|
|
171
|
-
const installed = [];
|
|
172
|
-
const files = readdirSync(adapterCommandsDir).filter((f) => f.endsWith('.md'));
|
|
173
|
-
for (const file of files) {
|
|
174
|
-
const src = join(adapterCommandsDir, file);
|
|
175
|
-
const dest = join(targetDir, file);
|
|
176
|
-
copyFileSync(src, dest);
|
|
177
|
-
installed.push(file);
|
|
178
|
-
}
|
|
179
|
-
return installed;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Register the CLEO brain plugin in ~/.claude/settings.json.
|
|
183
|
-
*
|
|
184
|
-
* @returns Description of what was registered, or null if no change needed
|
|
185
|
-
*/
|
|
186
|
-
registerPlugin() {
|
|
187
|
-
const home = homedir();
|
|
188
|
-
const settingsPath = join(home, '.claude', 'settings.json');
|
|
189
|
-
let settings = {};
|
|
190
|
-
if (existsSync(settingsPath)) {
|
|
191
|
-
try {
|
|
192
|
-
settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
193
|
-
}
|
|
194
|
-
catch {
|
|
195
|
-
// Start fresh
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
const enabledPlugins = settings.enabledPlugins ?? {};
|
|
199
|
-
const pluginKey = 'cleo@cleocode';
|
|
200
|
-
if (enabledPlugins[pluginKey] === true) {
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
203
|
-
// Disable old claude-mem if present
|
|
204
|
-
if (enabledPlugins['claude-mem@thedotmack'] === true) {
|
|
205
|
-
enabledPlugins['claude-mem@thedotmack'] = false;
|
|
206
|
-
}
|
|
207
|
-
enabledPlugins[pluginKey] = true;
|
|
208
|
-
settings.enabledPlugins = enabledPlugins;
|
|
209
|
-
mkdirSync(join(home, '.claude'), { recursive: true });
|
|
210
|
-
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
211
|
-
return `Enabled ${pluginKey} in ~/.claude/settings.json`;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Install the CLEO PreCompact hook templates for Claude Code (T1013).
|
|
215
|
-
*
|
|
216
|
-
* Writes two files to `~/.claude/hooks/`:
|
|
217
|
-
* 1. `cleo-precompact-core.sh` — universal CLEO safestop helper (shared
|
|
218
|
-
* across all providers; sourced by the provider-specific shim).
|
|
219
|
-
* 2. `precompact-safestop.sh` — Claude-Code-flavoured wrapper that invokes
|
|
220
|
-
* `cleo memory precompact-flush` and `cleo safestop`.
|
|
221
|
-
*
|
|
222
|
-
* Also registers a `PreCompact` entry in `~/.claude/settings.json` so Claude
|
|
223
|
-
* Code runs the hook when auto-compact fires (at 95% context).
|
|
224
|
-
*
|
|
225
|
-
* Idempotent: subsequent installs skip unchanged files and do not duplicate
|
|
226
|
-
* the settings.json hook entry.
|
|
227
|
-
*
|
|
228
|
-
* @returns Install summary (paths written + config change description), or
|
|
229
|
-
* `null` when no change was required.
|
|
230
|
-
*
|
|
231
|
-
* @task T1013
|
|
232
|
-
*/
|
|
233
|
-
installHookTemplates() {
|
|
234
|
-
const home = homedir();
|
|
235
|
-
const hooksDir = join(home, '.claude', 'hooks');
|
|
236
|
-
// 1. Copy the bash templates next to each other so `source $SCRIPT_DIR/...` works.
|
|
237
|
-
// Template copy is best-effort so missing/locked filesystems (CI sandboxes,
|
|
238
|
-
// mocked `node:fs` in unit tests) don't fail the whole install.
|
|
239
|
-
let templates;
|
|
240
|
-
try {
|
|
241
|
-
templates = installProviderHookTemplates({
|
|
242
|
-
provider: 'claude-code',
|
|
243
|
-
targetDir: hooksDir,
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
// 2. Wire the PreCompact event in ~/.claude/settings.json.
|
|
250
|
-
const settingsEntryAdded = this.registerPreCompactHook(join(hooksDir, 'precompact-safestop.sh'));
|
|
251
|
-
if (templates.installedFiles.length === 0 && !settingsEntryAdded) {
|
|
252
|
-
return null;
|
|
253
|
-
}
|
|
254
|
-
return { templates, settingsEntryAdded };
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Register the PreCompact hook command in `~/.claude/settings.json`.
|
|
258
|
-
*
|
|
259
|
-
* The Claude Code native event name for the canonical `PreCompact` event is
|
|
260
|
-
* `PreCompact` (identity mapping — see `hook-mappings.json`). The entry is
|
|
261
|
-
* tagged with `# cleo-hook` so the uninstall flow can identify and remove
|
|
262
|
-
* our additions without touching user-authored hooks.
|
|
263
|
-
*
|
|
264
|
-
* @param shimPath - Absolute path to the installed `precompact-safestop.sh`.
|
|
265
|
-
* @returns `true` when a new hook entry was written, `false` when an
|
|
266
|
-
* equivalent entry was already present.
|
|
267
|
-
*
|
|
268
|
-
* @task T1013
|
|
269
|
-
*/
|
|
270
|
-
registerPreCompactHook(shimPath) {
|
|
271
|
-
const home = homedir();
|
|
272
|
-
const settingsPath = join(home, '.claude', 'settings.json');
|
|
273
|
-
let settings = {};
|
|
274
|
-
if (existsSync(settingsPath)) {
|
|
275
|
-
try {
|
|
276
|
-
settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
277
|
-
}
|
|
278
|
-
catch {
|
|
279
|
-
// Start fresh on corrupt settings — safer than aborting install.
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
const hooks = settings.hooks ?? {};
|
|
283
|
-
const preCompactEntries = hooks.PreCompact ?? [];
|
|
284
|
-
const alreadyWired = preCompactEntries.some((entry) => typeof entry === 'object' &&
|
|
285
|
-
entry !== null &&
|
|
286
|
-
Array.isArray(entry.hooks) &&
|
|
287
|
-
entry.hooks.some((h) => typeof h.command === 'string' &&
|
|
288
|
-
h.command.includes('# cleo-hook') &&
|
|
289
|
-
h.command.includes('precompact-safestop.sh')));
|
|
290
|
-
if (alreadyWired) {
|
|
291
|
-
return false;
|
|
292
|
-
}
|
|
293
|
-
preCompactEntries.push({
|
|
294
|
-
matcher: '',
|
|
295
|
-
hooks: [
|
|
296
|
-
{
|
|
297
|
-
type: 'command',
|
|
298
|
-
command: `"${shimPath}" # cleo-hook`,
|
|
299
|
-
timeout: 30,
|
|
300
|
-
},
|
|
301
|
-
],
|
|
302
|
-
});
|
|
303
|
-
hooks.PreCompact = preCompactEntries;
|
|
304
|
-
settings.hooks = hooks;
|
|
305
|
-
mkdirSync(join(home, '.claude'), { recursive: true });
|
|
306
|
-
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
//# sourceMappingURL=install.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/providers/claude-code/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAEL,4BAA4B,GAC7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,sBAAsB,GAAG;IAC7B,IAAI,yBAAyB,EAAE,oBAAoB;IACnD,yBAAyB;CAC1B,CAAC;AAEF,gEAAgE;AAChE,SAAS,qBAAqB;IAC5B,0DAA0D;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,yBAAyB;IACpC;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,sBAAsB,GAAG,KAAK,CAAC;QACnC,MAAM,OAAO,GAA4B,EAAE,CAAC;QAE5C,4CAA4C;QAC5C,sBAAsB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,sBAAsB,EAAE,CAAC;YAC3B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QAED,iEAAiE;QACjE,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,QAAQ,GAAG,iBAAiB,CAAC;QACvC,CAAC;QAED,qDAAqD;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;QAChC,CAAC;QAED,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC/C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC;QACrC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW;YACX,sBAAsB;YACtB,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,KAAmB,CAAC;IAEnC;;;;OAIG;IACH,KAAK,CAAC,WAAW;QACf,wDAAwD;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAqD,CAAC;gBAC/E,IAAI,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC;oBACjD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,2BAA2B,CAAC,UAAkB;QAClD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,UAAkB;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,OAAO,EAAE,CAAC;YACZ,4BAA4B;YAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACrD,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACK,eAAe,CAAC,UAAkB;QACxC,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC1D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACnC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACK,cAAc;QACpB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAE5D,IAAI,QAAQ,GAA4B,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAI,QAAQ,CAAC,cAA0C,IAAI,EAAE,CAAC;QAClF,MAAM,SAAS,GAAG,eAAe,CAAC;QAElC,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,IAAI,cAAc,CAAC,uBAAuB,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,cAAc,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC;QAClD,CAAC;QAED,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;QAEzC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/E,OAAO,WAAW,SAAS,6BAA6B,CAAC;IAC3D,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACK,oBAAoB;QAI1B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAEhD,mFAAmF;QACnF,+EAA+E;QAC/E,mEAAmE;QACnE,IAAI,SAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,SAAS,GAAG,4BAA4B,CAAC;gBACvC,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2DAA2D;QAC3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CACpD,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CACzC,CAAC;QAEF,IAAI,SAAS,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,sBAAsB,CAAC,QAAgB;QAC7C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAE5D,IAAI,QAAQ,GAA4B,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAI,QAAQ,CAAC,KAA+C,IAAI,EAAE,CAAC;QAC9E,MAAM,iBAAiB,GAAI,KAAK,CAAC,UAAoC,IAAI,EAAE,CAAC;QAE5E,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CACzC,CAAC,KAAK,EAAE,EAAE,CACR,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,KAAK,CAAC,OAAO,CAAE,KAAiC,CAAC,KAAK,CAAC;YACrD,KAAiC,CAAC,KAAwC,CAAC,IAAI,CAC/E,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAC5B,CAAC,CAAC,OAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC5C,CAAC,CAAC,OAAkB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAC3D,CACJ,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,IAAI,QAAQ,eAAe;oBACpC,OAAO,EAAE,EAAE;iBACZ;aACF;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC;QACrC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;QAEvB,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code path provider.
|
|
3
|
-
*
|
|
4
|
-
* Implements AdapterPathProvider with Claude Code-specific directory locations.
|
|
5
|
-
*
|
|
6
|
-
* @task T5240
|
|
7
|
-
*/
|
|
8
|
-
import { homedir } from 'node:os';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
/**
|
|
11
|
-
* Path provider for Anthropic Claude Code CLI.
|
|
12
|
-
*
|
|
13
|
-
* Resolves Claude Code's standard directory layout:
|
|
14
|
-
* - Config dir: ~/.claude (or CLAUDE_HOME)
|
|
15
|
-
* - Settings: ~/.claude/settings.json (or CLAUDE_SETTINGS)
|
|
16
|
-
* - Agents: ~/.claude/agents
|
|
17
|
-
* - Memory DB: ~/.claude-mem/claude-mem.db (or CLAUDE_MEM_DB)
|
|
18
|
-
*
|
|
19
|
-
* @remarks
|
|
20
|
-
* All paths respect environment variable overrides for CI and non-standard
|
|
21
|
-
* installations. When env vars are unset, the canonical default paths are used.
|
|
22
|
-
*/
|
|
23
|
-
export class ClaudeCodePathProvider {
|
|
24
|
-
/** Get the provider's root configuration directory. */
|
|
25
|
-
getProviderDir() {
|
|
26
|
-
return process.env['CLAUDE_HOME'] ?? join(homedir(), '.claude');
|
|
27
|
-
}
|
|
28
|
-
/** Get the path to the provider's settings file, or null if unavailable. */
|
|
29
|
-
getSettingsPath() {
|
|
30
|
-
return process.env['CLAUDE_SETTINGS'] ?? join(this.getProviderDir(), 'settings.json');
|
|
31
|
-
}
|
|
32
|
-
/** Get the directory where agents are installed, or null if unsupported. */
|
|
33
|
-
getAgentInstallDir() {
|
|
34
|
-
return join(this.getProviderDir(), 'agents');
|
|
35
|
-
}
|
|
36
|
-
/** Get the path to the provider's memory database, or null if unsupported. */
|
|
37
|
-
getMemoryDbPath() {
|
|
38
|
-
return process.env['CLAUDE_MEM_DB'] ?? join(homedir(), '.claude-mem', 'claude-mem.db');
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/providers/claude-code/paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,sBAAsB;IACjC,uDAAuD;IACvD,cAAc;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED,4EAA4E;IAC5E,eAAe;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,eAAe,CAAC,CAAC;IACxF,CAAC;IAED,4EAA4E;IAC5E,kBAAkB;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,8EAA8E;IAC9E,eAAe;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACzF,CAAC;CACF"}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code Spawn Provider
|
|
3
|
-
*
|
|
4
|
-
* Implements AdapterSpawnProvider for Claude Code CLI.
|
|
5
|
-
* Migrated from src/core/spawn/adapters/claude-code-adapter.ts
|
|
6
|
-
*
|
|
7
|
-
* Uses the native `claude` CLI to spawn subagent processes with prompts
|
|
8
|
-
* written to temporary files. Processes run detached and are tracked
|
|
9
|
-
* by PID for listing and termination.
|
|
10
|
-
*
|
|
11
|
-
* @task T5240
|
|
12
|
-
*/
|
|
13
|
-
import { exec, spawn as nodeSpawn } from 'node:child_process';
|
|
14
|
-
import { unlink, writeFile } from 'node:fs/promises';
|
|
15
|
-
import { promisify } from 'node:util';
|
|
16
|
-
import { getErrorMessage } from '@cleocode/contracts';
|
|
17
|
-
const execAsync = promisify(exec);
|
|
18
|
-
/**
|
|
19
|
-
* Spawn provider for Claude Code.
|
|
20
|
-
*
|
|
21
|
-
* Spawns detached Claude CLI processes for subagent execution.
|
|
22
|
-
* Each spawn writes its prompt to a temporary file, then runs
|
|
23
|
-
* `claude --allow-insecure --no-upgrade-check <tmpFile>` as a
|
|
24
|
-
* detached, unref'd child process.
|
|
25
|
-
*
|
|
26
|
-
* @remarks
|
|
27
|
-
* The provider uses `--allow-insecure --no-upgrade-check` flags to
|
|
28
|
-
* ensure the Claude CLI starts without interactive prompts. Prompts are
|
|
29
|
-
* written to temporary files under `/tmp/` and cleaned up after the
|
|
30
|
-
* child process exits. Processes are tracked by instance ID in an
|
|
31
|
-
* in-memory map and verified via `kill(pid, 0)` liveness checks.
|
|
32
|
-
*/
|
|
33
|
-
export class ClaudeCodeSpawnProvider {
|
|
34
|
-
/** Map of instance IDs to tracked process info. */
|
|
35
|
-
processMap = new Map();
|
|
36
|
-
/**
|
|
37
|
-
* Check if the Claude CLI is available in PATH.
|
|
38
|
-
*
|
|
39
|
-
* @returns true if `claude` is found via `which`
|
|
40
|
-
*/
|
|
41
|
-
async canSpawn() {
|
|
42
|
-
try {
|
|
43
|
-
await execAsync('which claude');
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Spawn a subagent via Claude CLI.
|
|
52
|
-
*
|
|
53
|
-
* Writes the prompt to a temporary file and spawns a detached Claude
|
|
54
|
-
* process. The process runs independently of the parent.
|
|
55
|
-
*
|
|
56
|
-
* @param context - Spawn context with taskId, prompt, and options
|
|
57
|
-
* @returns Spawn result with instance ID and status
|
|
58
|
-
*/
|
|
59
|
-
async spawn(context) {
|
|
60
|
-
const instanceId = `claude-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
61
|
-
const startTime = new Date().toISOString();
|
|
62
|
-
let tmpFile;
|
|
63
|
-
try {
|
|
64
|
-
// Enrich prompt with CANT bundle, memory bridge, mental model, and NEXUS context (T555, T625).
|
|
65
|
-
// Best-effort: if CANT context is unavailable, the raw prompt is used.
|
|
66
|
-
let enrichedPrompt = context.prompt;
|
|
67
|
-
try {
|
|
68
|
-
const { buildCantEnrichedPrompt } = await import('../../cant-context.js');
|
|
69
|
-
enrichedPrompt = await buildCantEnrichedPrompt({
|
|
70
|
-
projectDir: context.workingDirectory ?? process.cwd(),
|
|
71
|
-
basePrompt: context.prompt,
|
|
72
|
-
agentName: context.options?.agentName ?? undefined,
|
|
73
|
-
// Inject NEXUS code intelligence context for the task scope (T625).
|
|
74
|
-
// This injects callers/callees/impact data so the agent understands
|
|
75
|
-
// blast radius before modifying any symbol.
|
|
76
|
-
taskId: context.taskId ?? undefined,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// CANT enrichment unavailable — use raw prompt
|
|
81
|
-
}
|
|
82
|
-
tmpFile = `/tmp/claude-spawn-${instanceId}.txt`;
|
|
83
|
-
await writeFile(tmpFile, enrichedPrompt, 'utf-8');
|
|
84
|
-
// --print: non-interactive batch mode (process prompt, output response, exit)
|
|
85
|
-
// --dangerously-skip-permissions: allow all tool calls without human approval
|
|
86
|
-
// --output-format json: structured output for parsing
|
|
87
|
-
const args = [
|
|
88
|
-
'--print',
|
|
89
|
-
'--dangerously-skip-permissions',
|
|
90
|
-
'--output-format',
|
|
91
|
-
'json',
|
|
92
|
-
tmpFile,
|
|
93
|
-
];
|
|
94
|
-
const spawnOpts = {
|
|
95
|
-
detached: true,
|
|
96
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
97
|
-
};
|
|
98
|
-
if (context.workingDirectory) {
|
|
99
|
-
spawnOpts.cwd = context.workingDirectory;
|
|
100
|
-
}
|
|
101
|
-
const child = nodeSpawn('claude', args, spawnOpts);
|
|
102
|
-
child.unref();
|
|
103
|
-
if (child.pid) {
|
|
104
|
-
this.processMap.set(instanceId, {
|
|
105
|
-
pid: child.pid,
|
|
106
|
-
taskId: context.taskId,
|
|
107
|
-
startTime,
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
const capturedTmpFile = tmpFile;
|
|
111
|
-
child.on('exit', async () => {
|
|
112
|
-
this.processMap.delete(instanceId);
|
|
113
|
-
try {
|
|
114
|
-
await unlink(capturedTmpFile);
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
// Ignore cleanup errors
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
return {
|
|
121
|
-
instanceId,
|
|
122
|
-
taskId: context.taskId,
|
|
123
|
-
providerId: 'claude-code',
|
|
124
|
-
status: 'running',
|
|
125
|
-
startTime,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
// Log spawn failure for debugging
|
|
130
|
-
console.error(`[ClaudeCodeSpawnProvider] Failed to spawn: ${getErrorMessage(error)}`);
|
|
131
|
-
if (tmpFile) {
|
|
132
|
-
try {
|
|
133
|
-
await unlink(tmpFile);
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
// Ignore cleanup errors
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
instanceId,
|
|
141
|
-
taskId: context.taskId,
|
|
142
|
-
providerId: 'claude-code',
|
|
143
|
-
status: 'failed',
|
|
144
|
-
startTime,
|
|
145
|
-
endTime: new Date().toISOString(),
|
|
146
|
-
error: getErrorMessage(error),
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* List currently running Claude subagent processes.
|
|
152
|
-
*
|
|
153
|
-
* Checks each tracked process via kill(pid, 0) to verify it is still alive.
|
|
154
|
-
* Dead processes are automatically cleaned from the tracking map.
|
|
155
|
-
*
|
|
156
|
-
* @returns Array of spawn results for running processes
|
|
157
|
-
*/
|
|
158
|
-
async listRunning() {
|
|
159
|
-
const running = [];
|
|
160
|
-
for (const [instanceId, tracked] of this.processMap.entries()) {
|
|
161
|
-
try {
|
|
162
|
-
process.kill(tracked.pid, 0);
|
|
163
|
-
running.push({
|
|
164
|
-
instanceId,
|
|
165
|
-
taskId: tracked.taskId,
|
|
166
|
-
providerId: 'claude-code',
|
|
167
|
-
status: 'running',
|
|
168
|
-
startTime: tracked.startTime,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
catch {
|
|
172
|
-
this.processMap.delete(instanceId);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
return running;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Terminate a running spawn by instance ID.
|
|
179
|
-
*
|
|
180
|
-
* Sends SIGTERM to the tracked process. If the process is not found
|
|
181
|
-
* or has already exited, this is a no-op.
|
|
182
|
-
*
|
|
183
|
-
* @param instanceId - ID of the spawn instance to terminate
|
|
184
|
-
*/
|
|
185
|
-
async terminate(instanceId) {
|
|
186
|
-
const tracked = this.processMap.get(instanceId);
|
|
187
|
-
if (!tracked)
|
|
188
|
-
return;
|
|
189
|
-
try {
|
|
190
|
-
process.kill(tracked.pid, 'SIGTERM');
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
// Process may have already exited
|
|
194
|
-
}
|
|
195
|
-
this.processMap.delete(instanceId);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=spawn.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/providers/claude-code/spawn.ts"],"names":[],"mappings":"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"}
|