@proletariat/cli 0.3.68 → 0.3.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/session/health.d.ts +11 -0
- package/dist/commands/session/health.js +1 -1
- package/dist/commands/session/health.js.map +1 -1
- package/dist/lib/execution/runners/cloud.d.ts +16 -0
- package/dist/lib/execution/runners/cloud.js +88 -0
- package/dist/lib/execution/runners/cloud.js.map +1 -0
- package/dist/lib/execution/runners/devcontainer-terminal.d.ts +13 -0
- package/dist/lib/execution/runners/devcontainer-terminal.js +184 -0
- package/dist/lib/execution/runners/devcontainer-terminal.js.map +1 -0
- package/dist/lib/execution/runners/devcontainer-tmux.d.ts +16 -0
- package/dist/lib/execution/runners/devcontainer-tmux.js +270 -0
- package/dist/lib/execution/runners/devcontainer-tmux.js.map +1 -0
- package/dist/lib/execution/runners/devcontainer.d.ts +19 -0
- package/dist/lib/execution/runners/devcontainer.js +261 -0
- package/dist/lib/execution/runners/devcontainer.js.map +1 -0
- package/dist/lib/execution/runners/docker-credentials.d.ts +51 -0
- package/dist/lib/execution/runners/docker-credentials.js +175 -0
- package/dist/lib/execution/runners/docker-credentials.js.map +1 -0
- package/dist/lib/execution/runners/docker-management.d.ts +49 -0
- package/dist/lib/execution/runners/docker-management.js +300 -0
- package/dist/lib/execution/runners/docker-management.js.map +1 -0
- package/dist/lib/execution/runners/docker.d.ts +13 -0
- package/dist/lib/execution/runners/docker.js +75 -0
- package/dist/lib/execution/runners/docker.js.map +1 -0
- package/dist/lib/execution/runners/executor.d.ts +41 -0
- package/dist/lib/execution/runners/executor.js +108 -0
- package/dist/lib/execution/runners/executor.js.map +1 -0
- package/dist/lib/execution/runners/host.d.ts +14 -0
- package/dist/lib/execution/runners/host.js +437 -0
- package/dist/lib/execution/runners/host.js.map +1 -0
- package/dist/lib/execution/runners/index.d.ts +29 -0
- package/dist/lib/execution/runners/index.js +79 -0
- package/dist/lib/execution/runners/index.js.map +1 -0
- package/dist/lib/execution/runners/orchestrator.d.ts +30 -0
- package/dist/lib/execution/runners/orchestrator.js +332 -0
- package/dist/lib/execution/runners/orchestrator.js.map +1 -0
- package/dist/lib/execution/runners/prompt-builder.d.ts +12 -0
- package/dist/lib/execution/runners/prompt-builder.js +337 -0
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -0
- package/dist/lib/execution/runners/sandbox.d.ts +34 -0
- package/dist/lib/execution/runners/sandbox.js +108 -0
- package/dist/lib/execution/runners/sandbox.js.map +1 -0
- package/dist/lib/execution/runners/shared.d.ts +62 -0
- package/dist/lib/execution/runners/shared.js +141 -0
- package/dist/lib/execution/runners/shared.js.map +1 -0
- package/dist/lib/execution/runners.d.ts +12 -272
- package/dist/lib/execution/runners.js +12 -3200
- package/dist/lib/execution/runners.js.map +1 -1
- package/dist/lib/external-issues/outbound-sync.d.ts +15 -0
- package/dist/lib/external-issues/outbound-sync.js +11 -1
- package/dist/lib/external-issues/outbound-sync.js.map +1 -1
- package/oclif.manifest.json +2334 -2334
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution Runners
|
|
3
|
+
*
|
|
4
|
+
* Dispatcher and re-exports for all execution environment runners.
|
|
5
|
+
* Each runner is in its own module for independent testability and maintainability.
|
|
6
|
+
*
|
|
7
|
+
* Modules:
|
|
8
|
+
* - shared.ts — Shared utilities (session names, credentials, docker, prompts, etc.)
|
|
9
|
+
* - host.ts — Host runner with tmux session persistence
|
|
10
|
+
* - devcontainer.ts — Docker container runner with raw Docker commands
|
|
11
|
+
* - docker.ts — Simple detached Docker container runner
|
|
12
|
+
* - orchestrator.ts — Orchestrator-in-Docker runner (sibling container pattern)
|
|
13
|
+
* - sandbox.ts — srt sandbox runner (wraps host runner)
|
|
14
|
+
* - cloud.ts — Remote execution via SSH
|
|
15
|
+
*/
|
|
16
|
+
import { DEFAULT_EXECUTION_CONFIG, normalizeEnvironment, } from './shared.js';
|
|
17
|
+
import { ensureTmuxServerHasKeychainAccess } from './shared.js';
|
|
18
|
+
import { runHost } from './host.js';
|
|
19
|
+
import { runDevcontainer } from './devcontainer.js';
|
|
20
|
+
import { runDocker } from './docker.js';
|
|
21
|
+
import { runSandbox } from './sandbox.js';
|
|
22
|
+
import { runCloud } from './cloud.js';
|
|
23
|
+
// =============================================================================
|
|
24
|
+
// Runner Dispatcher
|
|
25
|
+
// =============================================================================
|
|
26
|
+
export async function runExecution(environment, context, executor, config = DEFAULT_EXECUTION_CONFIG, options) {
|
|
27
|
+
// Ensure context knows its execution environment
|
|
28
|
+
if (!context.executionEnvironment) {
|
|
29
|
+
context.executionEnvironment = environment;
|
|
30
|
+
}
|
|
31
|
+
// Normalize environment (maps 'vm' -> 'cloud')
|
|
32
|
+
const normalizedEnv = normalizeEnvironment(environment);
|
|
33
|
+
// Ensure tmux server has keychain access for OAuth (host/sandbox only)
|
|
34
|
+
// Docker uses claude-credentials volume, devcontainer runs inside container
|
|
35
|
+
if (normalizedEnv === 'host' || normalizedEnv === 'sandbox') {
|
|
36
|
+
await ensureTmuxServerHasKeychainAccess();
|
|
37
|
+
}
|
|
38
|
+
switch (normalizedEnv) {
|
|
39
|
+
case 'devcontainer':
|
|
40
|
+
return runDevcontainer(context, executor, config, options?.displayMode, options?.sessionManager);
|
|
41
|
+
case 'host':
|
|
42
|
+
return runHost(context, executor, config, options?.displayMode);
|
|
43
|
+
case 'sandbox':
|
|
44
|
+
return runSandbox(context, executor, config, options?.displayMode);
|
|
45
|
+
case 'docker':
|
|
46
|
+
return runDocker(context, executor, config);
|
|
47
|
+
case 'cloud':
|
|
48
|
+
return runCloud(context, executor, config, options?.host);
|
|
49
|
+
default:
|
|
50
|
+
return { success: false, error: `Unknown execution environment: ${environment}` };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// =============================================================================
|
|
54
|
+
// Re-exports — All public API from the old monolithic runners.ts
|
|
55
|
+
// =============================================================================
|
|
56
|
+
// Shared utilities
|
|
57
|
+
export {
|
|
58
|
+
// Session/title helpers
|
|
59
|
+
buildSessionName, buildWindowTitle, buildTmuxWindowName,
|
|
60
|
+
// Control mode helpers
|
|
61
|
+
shouldUseControlMode, buildTmuxMouseOption, buildTmuxAttachCommand, configureITermTmuxPreferences, configureITermTmuxWindowMode,
|
|
62
|
+
// Credential helpers
|
|
63
|
+
CLAUDE_CREDENTIALS_VOLUME, credentialsVolumeExists, dockerCredentialsExist, getDockerCredentialInfo, hostCredentialsExist,
|
|
64
|
+
// Executor helpers
|
|
65
|
+
getExecutorCommand, isClaudeExecutor, getExecutorDisplayName, getExecutorPackage, checkExecutorOnHost, checkExecutorInContainer, runExecutorPreflight,
|
|
66
|
+
// GitHub token
|
|
67
|
+
getGitHubToken, isGitHubTokenAvailable, checkDockerDaemon, isDockerRunning, isDevcontainerCliInstalled,
|
|
68
|
+
// Docker container management
|
|
69
|
+
getHostPrltVersion, getAgentContainerName, containerExists, isContainerRunning, getContainerId,
|
|
70
|
+
// Prompt building
|
|
71
|
+
buildPrompt, buildOrchestratorSystemPrompt, buildIntegrationCommandsSection, } from './shared.js';
|
|
72
|
+
// Individual runners
|
|
73
|
+
export { runHost } from './host.js';
|
|
74
|
+
export { runDevcontainer, buildDevcontainerCommand } from './devcontainer.js';
|
|
75
|
+
export { runDocker } from './docker.js';
|
|
76
|
+
export { runOrchestratorInDocker } from './orchestrator.js';
|
|
77
|
+
export { runSandbox, isSrtInstalled, buildSrtCommand } from './sandbox.js';
|
|
78
|
+
export { runCloud, runVm } from './cloud.js';
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/execution/runners/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator Docker Runner (Sibling Container Pattern)
|
|
3
|
+
*
|
|
4
|
+
* Runs the orchestrator in a Docker container that can spawn sibling containers
|
|
5
|
+
* via the mounted Docker socket.
|
|
6
|
+
*/
|
|
7
|
+
import { DisplayMode, ExecutorType, ExecutionContext, ExecutionConfig } from './shared.js';
|
|
8
|
+
import { RunnerResult } from './shared.js';
|
|
9
|
+
/**
|
|
10
|
+
* Run orchestrator in a Docker container using the sibling container pattern.
|
|
11
|
+
*
|
|
12
|
+
* Architecture:
|
|
13
|
+
* ```
|
|
14
|
+
* Host Docker daemon
|
|
15
|
+
* ├── orchestrator container (has /var/run/docker.sock mounted)
|
|
16
|
+
* ├── agent-1 container (spawned by orchestrator, sibling)
|
|
17
|
+
* ├── agent-2 container (spawned by orchestrator, sibling)
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The orchestrator container needs:
|
|
21
|
+
* - HQ directory mounted (proletariat-hq)
|
|
22
|
+
* - Docker socket mounted (/var/run/docker.sock) — so it can spawn agent containers as siblings
|
|
23
|
+
* - prlt CLI installed in the container
|
|
24
|
+
* - OAuth credentials for Claude Code (via Docker volume)
|
|
25
|
+
* - tmux for session persistence inside the container
|
|
26
|
+
*/
|
|
27
|
+
export declare function runOrchestratorInDocker(context: ExecutionContext, executor: ExecutorType, config: ExecutionConfig, options?: {
|
|
28
|
+
displayMode?: DisplayMode;
|
|
29
|
+
sessionName?: string;
|
|
30
|
+
}): Promise<RunnerResult>;
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator Docker Runner (Sibling Container Pattern)
|
|
3
|
+
*
|
|
4
|
+
* Runs the orchestrator in a Docker container that can spawn sibling containers
|
|
5
|
+
* via the mounted Docker socket.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn, execSync, fs, path, os, generateOrchestratorDockerfile, } from './shared.js';
|
|
8
|
+
import { buildPrompt, checkDockerDaemon, containerExists, isContainerRunning, getContainerId, getHostPrltVersion, } from './shared.js';
|
|
9
|
+
/**
|
|
10
|
+
* Run orchestrator in a Docker container using the sibling container pattern.
|
|
11
|
+
*
|
|
12
|
+
* Architecture:
|
|
13
|
+
* ```
|
|
14
|
+
* Host Docker daemon
|
|
15
|
+
* ├── orchestrator container (has /var/run/docker.sock mounted)
|
|
16
|
+
* ├── agent-1 container (spawned by orchestrator, sibling)
|
|
17
|
+
* ├── agent-2 container (spawned by orchestrator, sibling)
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The orchestrator container needs:
|
|
21
|
+
* - HQ directory mounted (proletariat-hq)
|
|
22
|
+
* - Docker socket mounted (/var/run/docker.sock) — so it can spawn agent containers as siblings
|
|
23
|
+
* - prlt CLI installed in the container
|
|
24
|
+
* - OAuth credentials for Claude Code (via Docker volume)
|
|
25
|
+
* - tmux for session persistence inside the container
|
|
26
|
+
*/
|
|
27
|
+
export async function runOrchestratorInDocker(context, executor, config, options) {
|
|
28
|
+
const displayMode = options?.displayMode || 'background';
|
|
29
|
+
const hqPath = context.hqPath || context.worktreePath;
|
|
30
|
+
const hqName = context.hqName || 'default';
|
|
31
|
+
const orchestratorName = context.agentName || 'main';
|
|
32
|
+
// Container name matches tmux session name for consistency
|
|
33
|
+
const containerName = `prlt-orchestrator-${(hqName).replace(/[^a-zA-Z0-9._-]/g, '-')}-${(orchestratorName).replace(/[^a-zA-Z0-9._-]/g, '-')}`;
|
|
34
|
+
const imageName = `prlt-orchestrator-${(hqName).replace(/[^a-zA-Z0-9._-]/g, '-')}:latest`;
|
|
35
|
+
try {
|
|
36
|
+
// Check Docker is running (TKT-081: fast detection with diagnostic info)
|
|
37
|
+
const dockerStatus = checkDockerDaemon();
|
|
38
|
+
if (!dockerStatus.available) {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
error: `Docker daemon is not available. ${dockerStatus.message}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Check if container already exists and is running
|
|
45
|
+
if (containerExists(containerName)) {
|
|
46
|
+
if (isContainerRunning(containerName)) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
error: `Orchestrator container "${containerName}" is already running. Use "prlt orchestrator attach" to reattach.`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Remove stopped container
|
|
53
|
+
try {
|
|
54
|
+
execSync(`docker rm -f ${containerName}`, { stdio: 'pipe' });
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Ignore removal errors
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Generate Dockerfile
|
|
61
|
+
const orchestratorDockerOptions = {
|
|
62
|
+
orchestratorName,
|
|
63
|
+
hqPath,
|
|
64
|
+
executor,
|
|
65
|
+
};
|
|
66
|
+
const dockerfileContent = generateOrchestratorDockerfile(orchestratorDockerOptions);
|
|
67
|
+
// Write Dockerfile to temp directory
|
|
68
|
+
const buildDir = path.join(hqPath, '.proletariat', 'orchestrator-docker');
|
|
69
|
+
fs.mkdirSync(buildDir, { recursive: true });
|
|
70
|
+
const dockerfilePath = path.join(buildDir, 'Dockerfile');
|
|
71
|
+
fs.writeFileSync(dockerfilePath, dockerfileContent);
|
|
72
|
+
// Build the image
|
|
73
|
+
const hostPrltVersion = getHostPrltVersion();
|
|
74
|
+
const buildArgs = {
|
|
75
|
+
PRLT_VERSION: hostPrltVersion || 'latest',
|
|
76
|
+
};
|
|
77
|
+
const buildArgFlags = Object.entries(buildArgs)
|
|
78
|
+
.map(([key, value]) => `--build-arg ${key}="${value}"`)
|
|
79
|
+
.join(' ');
|
|
80
|
+
console.debug(`[runners:orchestrator-docker] Building image: ${imageName}`);
|
|
81
|
+
try {
|
|
82
|
+
execSync(`docker build -t ${imageName} -f "${dockerfilePath}" ${buildArgFlags} "${buildDir}"`, { stdio: 'pipe' });
|
|
83
|
+
}
|
|
84
|
+
catch (buildError) {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: `Failed to build orchestrator Docker image: ${buildError instanceof Error ? buildError.message : buildError}`,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Build mount flags for docker run
|
|
91
|
+
const mounts = [
|
|
92
|
+
// Mount HQ directory
|
|
93
|
+
`-v "${hqPath}:/hq:cached"`,
|
|
94
|
+
// Docker socket for sibling container pattern
|
|
95
|
+
`-v /var/run/docker.sock:/var/run/docker.sock`,
|
|
96
|
+
// Claude credentials volume (shared with agent containers)
|
|
97
|
+
...(executor === 'claude-code' ? ['-v "claude-credentials:/home/node/.claude"'] : []),
|
|
98
|
+
// Persistent bash history
|
|
99
|
+
'-v "claude-bash-history:/commandhistory"',
|
|
100
|
+
];
|
|
101
|
+
// Build environment variables
|
|
102
|
+
const envVars = [
|
|
103
|
+
`-e PRLT_HQ_PATH=/hq`,
|
|
104
|
+
`-e PRLT_AGENT_NAME="orchestrator-${orchestratorName}"`,
|
|
105
|
+
`-e PRLT_HOST_PATH="${hqPath}"`,
|
|
106
|
+
// Pass through GitHub tokens for agent spawning
|
|
107
|
+
...(process.env.GITHUB_TOKEN ? [`-e GITHUB_TOKEN="${process.env.GITHUB_TOKEN}"`] : []),
|
|
108
|
+
...(process.env.GH_TOKEN ? [`-e GH_TOKEN="${process.env.GH_TOKEN}"`] : []),
|
|
109
|
+
// Pass ANTHROPIC_API_KEY if available (for cases where OAuth is not set up)
|
|
110
|
+
...(process.env.ANTHROPIC_API_KEY ? [`-e ANTHROPIC_API_KEY="${process.env.ANTHROPIC_API_KEY}"`] : []),
|
|
111
|
+
];
|
|
112
|
+
// Create and start container
|
|
113
|
+
const createCmd = [
|
|
114
|
+
'docker run -d',
|
|
115
|
+
`--name ${containerName}`,
|
|
116
|
+
'--user node',
|
|
117
|
+
'-w /hq',
|
|
118
|
+
...mounts,
|
|
119
|
+
...envVars,
|
|
120
|
+
`--memory=${config.devcontainer.memory}`,
|
|
121
|
+
`--cpus=${config.devcontainer.cpus}`,
|
|
122
|
+
imageName,
|
|
123
|
+
'sleep infinity', // Keep container running
|
|
124
|
+
].join(' ');
|
|
125
|
+
console.debug(`[runners:orchestrator-docker] Creating container: ${createCmd}`);
|
|
126
|
+
execSync(createCmd, { stdio: 'pipe' });
|
|
127
|
+
const containerId = getContainerId(containerName);
|
|
128
|
+
if (!containerId) {
|
|
129
|
+
return {
|
|
130
|
+
success: false,
|
|
131
|
+
error: 'Failed to get container ID after creation',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Fix Docker socket permissions inside the container
|
|
135
|
+
// The socket is owned by root on the host; we need the node user to access it
|
|
136
|
+
try {
|
|
137
|
+
execSync(`docker exec --user root ${containerId} chmod 666 /var/run/docker.sock`, { stdio: 'pipe' });
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
console.debug('[runners:orchestrator-docker] Failed to fix Docker socket permissions (may already be accessible)');
|
|
141
|
+
}
|
|
142
|
+
// Copy Claude Code settings to container (for bypassing prompts)
|
|
143
|
+
if (executor === 'claude-code') {
|
|
144
|
+
try {
|
|
145
|
+
const hostClaudeJson = path.join(os.homedir(), '.claude.json');
|
|
146
|
+
let settings = {};
|
|
147
|
+
if (fs.existsSync(hostClaudeJson)) {
|
|
148
|
+
try {
|
|
149
|
+
settings = JSON.parse(fs.readFileSync(hostClaudeJson, 'utf-8'));
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Use empty settings
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (config.permissionMode === 'danger') {
|
|
156
|
+
settings.bypassPermissionsModeAccepted = true;
|
|
157
|
+
}
|
|
158
|
+
settings.numStartups = settings.numStartups || 1;
|
|
159
|
+
settings.hasCompletedOnboarding = true;
|
|
160
|
+
settings.theme = settings.theme || 'dark';
|
|
161
|
+
if (!settings.tipsHistory || typeof settings.tipsHistory !== 'object') {
|
|
162
|
+
settings.tipsHistory = {};
|
|
163
|
+
}
|
|
164
|
+
const tips = settings.tipsHistory;
|
|
165
|
+
tips['new-user-warmup'] = tips['new-user-warmup'] || 1;
|
|
166
|
+
settings.effortCalloutDismissed = true;
|
|
167
|
+
if (!settings.projects || typeof settings.projects !== 'object') {
|
|
168
|
+
settings.projects = {};
|
|
169
|
+
}
|
|
170
|
+
const projects = settings.projects;
|
|
171
|
+
for (const projectPath of ['/hq', '/']) {
|
|
172
|
+
if (!projects[projectPath])
|
|
173
|
+
projects[projectPath] = {};
|
|
174
|
+
projects[projectPath].hasTrustDialogAccepted = true;
|
|
175
|
+
projects[projectPath].hasCompletedProjectOnboarding = true;
|
|
176
|
+
}
|
|
177
|
+
execSync(`docker exec -i ${containerId} bash -c 'cat > /home/node/.claude.json'`, { input: JSON.stringify(settings), stdio: ['pipe', 'pipe', 'pipe'] });
|
|
178
|
+
const claudeSettings = JSON.stringify({ skipDangerousModePermissionPrompt: true });
|
|
179
|
+
execSync(`docker exec -i ${containerId} bash -c 'mkdir -p /home/node/.claude && cat > /home/node/.claude/settings.json'`, { input: claudeSettings, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.debug('[runners:orchestrator-docker] Failed to copy Claude settings:', error);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Build the prompt and write to temp file inside container
|
|
186
|
+
const prompt = buildPrompt(context);
|
|
187
|
+
const promptPath = `/tmp/orchestrator-prompt-${Date.now()}.txt`;
|
|
188
|
+
try {
|
|
189
|
+
execSync(`docker exec -i ${containerId} bash -c 'cat > ${promptPath}'`, { input: prompt, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return {
|
|
193
|
+
success: false,
|
|
194
|
+
error: 'Failed to write prompt to container',
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
// Build executor command
|
|
198
|
+
const skipPermissions = config.permissionMode === 'danger';
|
|
199
|
+
const permissionsFlag = skipPermissions ? '--dangerously-skip-permissions ' : '';
|
|
200
|
+
const effortFlag = skipPermissions ? '--effort high ' : '';
|
|
201
|
+
// TKT-053: Disable plan mode for background agents — prevents silent stalls
|
|
202
|
+
const disallowPlanFlag = displayMode === 'background' ? '--disallowedTools EnterPlanMode ' : '';
|
|
203
|
+
// PRLT-950: Use -- to separate flags from positional prompt argument.
|
|
204
|
+
// --disallowedTools is variadic and will consume the prompt as its second arg without --.
|
|
205
|
+
const executorCmd = executor === 'claude-code'
|
|
206
|
+
? `claude ${permissionsFlag}${effortFlag}${disallowPlanFlag}-- "$(cat ${promptPath})"`
|
|
207
|
+
: `claude ${permissionsFlag}${effortFlag}-- "$(cat ${promptPath})"`;
|
|
208
|
+
// Build tmux session name (reuses the same name as host tmux for consistency)
|
|
209
|
+
const tmuxSessionName = options?.sessionName || containerName;
|
|
210
|
+
// Create tmux session inside container with the executor command
|
|
211
|
+
const tmuxCmd = `tmux new-session -d -s "${tmuxSessionName}" -n "${tmuxSessionName}" bash -c '(unset CLAUDECODE CLAUDE_CODE_ENTRYPOINT; cd /hq && ${executorCmd}); echo ""; echo "Orchestrator complete. Press Enter to close."; exec bash'`;
|
|
212
|
+
try {
|
|
213
|
+
execSync(`docker exec ${containerId} bash -c '${tmuxCmd.replace(/'/g, "'\\''")}'`, { stdio: 'pipe' });
|
|
214
|
+
}
|
|
215
|
+
catch (tmuxError) {
|
|
216
|
+
// Fallback: try simpler command without subshell
|
|
217
|
+
console.debug('[runners:orchestrator-docker] tmux creation failed, trying simpler approach:', tmuxError);
|
|
218
|
+
try {
|
|
219
|
+
// Write a script inside the container
|
|
220
|
+
const scriptContent = `#!/bin/bash
|
|
221
|
+
cd /hq
|
|
222
|
+
unset CLAUDECODE CLAUDE_CODE_ENTRYPOINT
|
|
223
|
+
${executor === 'claude-code' ? `claude ${permissionsFlag}${effortFlag}${disallowPlanFlag}"$(cat ${promptPath})"` : `claude "$(cat ${promptPath})"`}
|
|
224
|
+
echo ""
|
|
225
|
+
echo "Orchestrator complete. Press Enter to close."
|
|
226
|
+
exec bash
|
|
227
|
+
`;
|
|
228
|
+
execSync(`docker exec -i ${containerId} bash -c 'cat > /tmp/orchestrator-start.sh && chmod +x /tmp/orchestrator-start.sh'`, { input: scriptContent, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
229
|
+
execSync(`docker exec ${containerId} tmux new-session -d -s "${tmuxSessionName}" /tmp/orchestrator-start.sh`, { stdio: 'pipe' });
|
|
230
|
+
}
|
|
231
|
+
catch (fallbackError) {
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
error: `Failed to create tmux session in container: ${fallbackError instanceof Error ? fallbackError.message : fallbackError}`,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Handle display mode
|
|
239
|
+
if (displayMode === 'foreground') {
|
|
240
|
+
// Attach to tmux inside the container in current terminal
|
|
241
|
+
try {
|
|
242
|
+
const child = spawn('docker', ['exec', '-it', containerId, 'tmux', 'attach', '-t', tmuxSessionName], {
|
|
243
|
+
stdio: 'inherit',
|
|
244
|
+
});
|
|
245
|
+
await new Promise((resolve) => {
|
|
246
|
+
child.on('close', () => resolve());
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// User detached - that's fine
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (displayMode === 'terminal' && process.platform === 'darwin') {
|
|
254
|
+
// Open a new terminal tab that attaches to the container's tmux
|
|
255
|
+
const baseDir = path.join(hqPath, '.proletariat', 'scripts');
|
|
256
|
+
fs.mkdirSync(baseDir, { recursive: true });
|
|
257
|
+
const scriptPath = path.join(baseDir, `orch-docker-attach-${Date.now()}.sh`);
|
|
258
|
+
const scriptContent = `#!/bin/bash
|
|
259
|
+
echo -ne "\\033]0;Orchestrator (Docker)\\007"
|
|
260
|
+
echo -ne "\\033]1;Orchestrator (Docker)\\007"
|
|
261
|
+
docker exec -it ${containerId} tmux attach -t "${tmuxSessionName}"
|
|
262
|
+
rm -f "${scriptPath}"
|
|
263
|
+
exec $SHELL
|
|
264
|
+
`;
|
|
265
|
+
fs.writeFileSync(scriptPath, scriptContent, { mode: 0o755 });
|
|
266
|
+
const terminalApp = config.terminal.app;
|
|
267
|
+
try {
|
|
268
|
+
switch (terminalApp) {
|
|
269
|
+
case 'iTerm':
|
|
270
|
+
execSync(`osascript -e '
|
|
271
|
+
tell application "iTerm"
|
|
272
|
+
activate
|
|
273
|
+
tell current window
|
|
274
|
+
set newTab to (create tab with default profile)
|
|
275
|
+
tell current session of newTab
|
|
276
|
+
set name to "Orchestrator (Docker)"
|
|
277
|
+
write text "${scriptPath}"
|
|
278
|
+
end tell
|
|
279
|
+
end tell
|
|
280
|
+
end tell
|
|
281
|
+
'`);
|
|
282
|
+
break;
|
|
283
|
+
case 'Ghostty':
|
|
284
|
+
execSync(`osascript -e '
|
|
285
|
+
tell application "Ghostty"
|
|
286
|
+
activate
|
|
287
|
+
end tell
|
|
288
|
+
tell application "System Events"
|
|
289
|
+
tell process "Ghostty"
|
|
290
|
+
keystroke "t" using command down
|
|
291
|
+
delay 0.3
|
|
292
|
+
keystroke "${scriptPath}"
|
|
293
|
+
keystroke return
|
|
294
|
+
end tell
|
|
295
|
+
end tell
|
|
296
|
+
'`);
|
|
297
|
+
break;
|
|
298
|
+
default:
|
|
299
|
+
execSync(`osascript -e '
|
|
300
|
+
tell application "Terminal"
|
|
301
|
+
activate
|
|
302
|
+
tell application "System Events"
|
|
303
|
+
tell process "Terminal"
|
|
304
|
+
keystroke "t" using command down
|
|
305
|
+
end tell
|
|
306
|
+
end tell
|
|
307
|
+
delay 0.3
|
|
308
|
+
do script "${scriptPath}" in front window
|
|
309
|
+
end tell
|
|
310
|
+
'`);
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
console.debug('[runners:orchestrator-docker] Failed to open terminal tab, running in background');
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// 'background' display mode: container is already running, nothing more to do
|
|
319
|
+
return {
|
|
320
|
+
success: true,
|
|
321
|
+
containerId,
|
|
322
|
+
sessionId: tmuxSessionName,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
return {
|
|
327
|
+
success: false,
|
|
328
|
+
error: error instanceof Error ? error.message : 'Failed to start orchestrator in Docker',
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../src/lib/execution/runners/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Builder
|
|
3
|
+
*
|
|
4
|
+
* Functions for building agent prompts including:
|
|
5
|
+
* - Integration commands for connected services
|
|
6
|
+
* - Orchestrator prompt (system prompt + user message)
|
|
7
|
+
* - Ticket prompt (action + ticket content + completion instructions)
|
|
8
|
+
*/
|
|
9
|
+
import { ExecutionContext } from '../types.js';
|
|
10
|
+
export declare function buildIntegrationCommandsSection(connectedIntegrations?: string[]): string;
|
|
11
|
+
export declare function buildOrchestratorSystemPrompt(context: ExecutionContext): string;
|
|
12
|
+
export declare function buildPrompt(context: ExecutionContext): string;
|