@proletariat/cli 0.3.55 → 0.3.57

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 (246) hide show
  1. package/README.md +74 -5
  2. package/bin/validate-better-sqlite3.cjs +44 -5
  3. package/dist/commands/agent/cleanup.d.ts +1 -0
  4. package/dist/commands/agent/cleanup.js +11 -1
  5. package/dist/commands/agent/cleanup.js.map +1 -1
  6. package/dist/commands/agent/rebuild.js +1 -1
  7. package/dist/commands/agent/rebuild.js.map +1 -1
  8. package/dist/commands/asana/import.d.ts +14 -0
  9. package/dist/commands/asana/import.js +240 -0
  10. package/dist/commands/asana/import.js.map +1 -0
  11. package/dist/commands/claude-yolo.d.ts +20 -0
  12. package/dist/commands/claude-yolo.js +86 -0
  13. package/dist/commands/claude-yolo.js.map +1 -0
  14. package/dist/commands/codex/index.d.ts +23 -0
  15. package/dist/commands/codex/index.js +168 -0
  16. package/dist/commands/codex/index.js.map +1 -0
  17. package/dist/commands/codex-yolo.d.ts +20 -0
  18. package/dist/commands/codex-yolo.js +86 -0
  19. package/dist/commands/codex-yolo.js.map +1 -0
  20. package/dist/commands/config/index.js +2 -2
  21. package/dist/commands/config/index.js.map +1 -1
  22. package/dist/commands/dashboard.d.ts +38 -0
  23. package/dist/commands/dashboard.js +352 -0
  24. package/dist/commands/dashboard.js.map +1 -0
  25. package/dist/commands/docker/clean.js +1 -1
  26. package/dist/commands/docker/clean.js.map +1 -1
  27. package/dist/commands/docker/list.js +1 -1
  28. package/dist/commands/docker/list.js.map +1 -1
  29. package/dist/commands/docker/logs.js +1 -1
  30. package/dist/commands/docker/logs.js.map +1 -1
  31. package/dist/commands/docker/restart.js +1 -1
  32. package/dist/commands/docker/restart.js.map +1 -1
  33. package/dist/commands/docker/shell.js +1 -1
  34. package/dist/commands/docker/shell.js.map +1 -1
  35. package/dist/commands/docker/start.js +1 -1
  36. package/dist/commands/docker/start.js.map +1 -1
  37. package/dist/commands/docker/stop.js +1 -1
  38. package/dist/commands/docker/stop.js.map +1 -1
  39. package/dist/commands/docker/sync.js +1 -1
  40. package/dist/commands/docker/sync.js.map +1 -1
  41. package/dist/commands/execution/config.js +2 -2
  42. package/dist/commands/execution/config.js.map +1 -1
  43. package/dist/commands/execution/list.js +1 -1
  44. package/dist/commands/execution/list.js.map +1 -1
  45. package/dist/commands/execution/logs.js +10 -8
  46. package/dist/commands/execution/logs.js.map +1 -1
  47. package/dist/commands/execution/stop.js +1 -1
  48. package/dist/commands/execution/stop.js.map +1 -1
  49. package/dist/commands/execution/view.js +1 -1
  50. package/dist/commands/execution/view.js.map +1 -1
  51. package/dist/commands/init.d.ts +0 -16
  52. package/dist/commands/init.js +50 -160
  53. package/dist/commands/init.js.map +1 -1
  54. package/dist/commands/logs.d.ts +20 -0
  55. package/dist/commands/logs.js +84 -0
  56. package/dist/commands/logs.js.map +1 -0
  57. package/dist/commands/mcp-server.js +1 -1
  58. package/dist/commands/mcp-server.js.map +1 -1
  59. package/dist/commands/new.d.ts +27 -0
  60. package/dist/commands/new.js +184 -0
  61. package/dist/commands/new.js.map +1 -0
  62. package/dist/commands/orchestrator/attach.d.ts +1 -0
  63. package/dist/commands/orchestrator/attach.js +159 -26
  64. package/dist/commands/orchestrator/attach.js.map +1 -1
  65. package/dist/commands/orchestrator/start.d.ts +20 -0
  66. package/dist/commands/orchestrator/start.js +123 -14
  67. package/dist/commands/orchestrator/start.js.map +1 -1
  68. package/dist/commands/orchestrator/status.d.ts +4 -0
  69. package/dist/commands/orchestrator/status.js +70 -29
  70. package/dist/commands/orchestrator/status.js.map +1 -1
  71. package/dist/commands/orchestrator/stop.js +57 -23
  72. package/dist/commands/orchestrator/stop.js.map +1 -1
  73. package/dist/commands/peek.d.ts +20 -0
  74. package/dist/commands/peek.js +84 -0
  75. package/dist/commands/peek.js.map +1 -0
  76. package/dist/commands/poke.d.ts +20 -0
  77. package/dist/commands/poke.js +89 -0
  78. package/dist/commands/poke.js.map +1 -0
  79. package/dist/commands/pr/link.js +1 -1
  80. package/dist/commands/pr/link.js.map +1 -1
  81. package/dist/commands/pr/status.js +1 -1
  82. package/dist/commands/pr/status.js.map +1 -1
  83. package/dist/commands/ps.d.ts +18 -0
  84. package/dist/commands/ps.js +123 -0
  85. package/dist/commands/ps.js.map +1 -0
  86. package/dist/commands/qa/index.js +1 -1
  87. package/dist/commands/qa/index.js.map +1 -1
  88. package/dist/commands/repo/add.js +1 -1
  89. package/dist/commands/repo/add.js.map +1 -1
  90. package/dist/commands/repo/fix-remotes.d.ts +14 -0
  91. package/dist/commands/repo/fix-remotes.js +154 -0
  92. package/dist/commands/repo/fix-remotes.js.map +1 -0
  93. package/dist/commands/repo/list.js +1 -1
  94. package/dist/commands/repo/list.js.map +1 -1
  95. package/dist/commands/repo/remove.js +1 -1
  96. package/dist/commands/repo/remove.js.map +1 -1
  97. package/dist/commands/repo/view.js +1 -1
  98. package/dist/commands/repo/view.js.map +1 -1
  99. package/dist/commands/run/index.d.ts +25 -0
  100. package/dist/commands/run/index.js +212 -0
  101. package/dist/commands/run/index.js.map +1 -0
  102. package/dist/commands/session/index.js +4 -0
  103. package/dist/commands/session/index.js.map +1 -1
  104. package/dist/commands/session/prune.d.ts +18 -0
  105. package/dist/commands/session/prune.js +327 -0
  106. package/dist/commands/session/prune.js.map +1 -0
  107. package/dist/commands/shortcut/connect.d.ts +15 -0
  108. package/dist/commands/shortcut/connect.js +210 -0
  109. package/dist/commands/shortcut/connect.js.map +1 -0
  110. package/dist/commands/stop.d.ts +19 -0
  111. package/dist/commands/stop.js +83 -0
  112. package/dist/commands/stop.js.map +1 -0
  113. package/dist/commands/work/asana.d.ts +23 -0
  114. package/dist/commands/work/asana.js +213 -0
  115. package/dist/commands/work/asana.js.map +1 -0
  116. package/dist/commands/work/complete.js +1 -1
  117. package/dist/commands/work/complete.js.map +1 -1
  118. package/dist/commands/work/ready.js +1 -1
  119. package/dist/commands/work/ready.js.map +1 -1
  120. package/dist/commands/work/review.js +1 -1
  121. package/dist/commands/work/review.js.map +1 -1
  122. package/dist/commands/work/revise.js +1 -1
  123. package/dist/commands/work/revise.js.map +1 -1
  124. package/dist/commands/work/shortcut.d.ts +23 -0
  125. package/dist/commands/work/shortcut.js +212 -0
  126. package/dist/commands/work/shortcut.js.map +1 -0
  127. package/dist/commands/work/spawn.d.ts +3 -0
  128. package/dist/commands/work/spawn.js +175 -2
  129. package/dist/commands/work/spawn.js.map +1 -1
  130. package/dist/commands/work/start.js +54 -45
  131. package/dist/commands/work/start.js.map +1 -1
  132. package/dist/commands/work/watch.js +1 -1
  133. package/dist/commands/work/watch.js.map +1 -1
  134. package/dist/commands/workspace/add.js +1 -1
  135. package/dist/commands/workspace/add.js.map +1 -1
  136. package/dist/commands/workspace/list.js +1 -1
  137. package/dist/commands/workspace/list.js.map +1 -1
  138. package/dist/hooks/init.d.ts +1 -1
  139. package/dist/hooks/init.js +6 -6
  140. package/dist/hooks/init.js.map +1 -1
  141. package/dist/lib/agent-naming.d.ts +15 -0
  142. package/dist/lib/agent-naming.js +32 -0
  143. package/dist/lib/agent-naming.js.map +1 -0
  144. package/dist/lib/agents/commands.d.ts +2 -0
  145. package/dist/lib/agents/commands.js +56 -51
  146. package/dist/lib/agents/commands.js.map +1 -1
  147. package/dist/lib/agents/index.js +11 -7
  148. package/dist/lib/agents/index.js.map +1 -1
  149. package/dist/lib/asana/client.d.ts +8 -0
  150. package/dist/lib/asana/client.js +26 -7
  151. package/dist/lib/asana/client.js.map +1 -1
  152. package/dist/lib/asana/types.d.ts +20 -0
  153. package/dist/lib/branch/index.d.ts +36 -0
  154. package/dist/lib/branch/index.js +129 -0
  155. package/dist/lib/branch/index.js.map +1 -1
  156. package/dist/lib/database/index.js +1 -1
  157. package/dist/lib/database/index.js.map +1 -1
  158. package/dist/lib/database/native-validation.d.ts +2 -0
  159. package/dist/lib/database/native-validation.js +30 -1
  160. package/dist/lib/database/native-validation.js.map +1 -1
  161. package/dist/lib/events/emitting-runner.d.ts +30 -0
  162. package/dist/lib/events/emitting-runner.js +95 -0
  163. package/dist/lib/events/emitting-runner.js.map +1 -0
  164. package/dist/lib/events/event-bus.d.ts +54 -0
  165. package/dist/lib/events/event-bus.js +107 -0
  166. package/dist/lib/events/event-bus.js.map +1 -0
  167. package/dist/lib/events/events.d.ts +67 -0
  168. package/dist/lib/events/events.js +8 -0
  169. package/dist/lib/events/events.js.map +1 -0
  170. package/dist/lib/events/index.d.ts +7 -0
  171. package/dist/lib/events/index.js +6 -0
  172. package/dist/lib/events/index.js.map +1 -0
  173. package/dist/lib/execution/devcontainer.d.ts +27 -0
  174. package/dist/lib/execution/devcontainer.js +80 -0
  175. package/dist/lib/execution/devcontainer.js.map +1 -1
  176. package/dist/lib/execution/runners.d.ts +28 -0
  177. package/dist/lib/execution/runners.js +536 -35
  178. package/dist/lib/execution/runners.js.map +1 -1
  179. package/dist/lib/execution/spawner.js +38 -17
  180. package/dist/lib/execution/spawner.js.map +1 -1
  181. package/dist/lib/execution/types.d.ts +2 -0
  182. package/dist/lib/execution/types.js.map +1 -1
  183. package/dist/lib/external-issues/adapters.d.ts +34 -0
  184. package/dist/lib/external-issues/adapters.js +191 -0
  185. package/dist/lib/external-issues/adapters.js.map +1 -1
  186. package/dist/lib/external-issues/asana.d.ts +75 -0
  187. package/dist/lib/external-issues/asana.js +243 -0
  188. package/dist/lib/external-issues/asana.js.map +1 -0
  189. package/dist/lib/external-issues/index.d.ts +4 -2
  190. package/dist/lib/external-issues/index.js +6 -2
  191. package/dist/lib/external-issues/index.js.map +1 -1
  192. package/dist/lib/external-issues/linear.js.map +1 -1
  193. package/dist/lib/external-issues/mapping-store.js +1 -1
  194. package/dist/lib/external-issues/shortcut.d.ts +86 -0
  195. package/dist/lib/external-issues/shortcut.js +274 -0
  196. package/dist/lib/external-issues/shortcut.js.map +1 -0
  197. package/dist/lib/external-issues/types.d.ts +3 -3
  198. package/dist/lib/external-issues/types.js +1 -1
  199. package/dist/lib/external-issues/types.js.map +1 -1
  200. package/dist/lib/mcp/tools/cli-passthrough.js +1 -1
  201. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
  202. package/dist/lib/mcp/tools/work.js +1 -1
  203. package/dist/lib/mcp/tools/work.js.map +1 -1
  204. package/dist/lib/pmo/index.d.ts +2 -2
  205. package/dist/lib/pmo/index.js +3 -3
  206. package/dist/lib/pmo/index.js.map +1 -1
  207. package/dist/lib/pmo/sync-manager.js +1 -1
  208. package/dist/lib/pmo/sync-manager.js.map +1 -1
  209. package/dist/lib/pmo/watcher.js +1 -1
  210. package/dist/lib/pmo/watcher.js.map +1 -1
  211. package/dist/lib/repos/git.d.ts +44 -0
  212. package/dist/lib/repos/git.js +127 -0
  213. package/dist/lib/repos/git.js.map +1 -1
  214. package/dist/lib/repos/index.js +36 -3
  215. package/dist/lib/repos/index.js.map +1 -1
  216. package/dist/lib/runners/agent-runner.d.ts +92 -0
  217. package/dist/lib/runners/agent-runner.js +9 -0
  218. package/dist/lib/runners/agent-runner.js.map +1 -0
  219. package/dist/lib/runners/claude-code-runner.d.ts +53 -0
  220. package/dist/lib/runners/claude-code-runner.js +132 -0
  221. package/dist/lib/runners/claude-code-runner.js.map +1 -0
  222. package/dist/lib/runners/index.d.ts +34 -0
  223. package/dist/lib/runners/index.js +97 -0
  224. package/dist/lib/runners/index.js.map +1 -0
  225. package/dist/lib/session-store.d.ts +70 -0
  226. package/dist/lib/session-store.js +167 -0
  227. package/dist/lib/session-store.js.map +1 -0
  228. package/dist/lib/shortcut/config.d.ts +44 -0
  229. package/dist/lib/shortcut/config.js +98 -0
  230. package/dist/lib/shortcut/config.js.map +1 -0
  231. package/dist/lib/shortcut/index.d.ts +7 -0
  232. package/dist/lib/shortcut/index.js +7 -0
  233. package/dist/lib/shortcut/index.js.map +1 -0
  234. package/dist/lib/work-source/client.d.ts +10 -0
  235. package/dist/lib/work-source/client.js +74 -0
  236. package/dist/lib/work-source/client.js.map +1 -0
  237. package/dist/lib/work-source/config.d.ts +1 -1
  238. package/dist/lib/work-source/config.js +17 -1
  239. package/dist/lib/work-source/config.js.map +1 -1
  240. package/dist/lib/work-source/index.d.ts +1 -0
  241. package/dist/lib/work-source/index.js +1 -0
  242. package/dist/lib/work-source/index.js.map +1 -1
  243. package/dist/lib/workspace.js +2 -2
  244. package/dist/lib/workspace.js.map +1 -1
  245. package/oclif.manifest.json +8135 -6979
  246. package/package.json +1 -1
@@ -13,7 +13,7 @@ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
13
13
  import { findHQRoot } from '../../lib/workspace.js';
14
14
  import { getHeadquartersNameFromPath } from '../../lib/machine-config.js';
15
15
  import { loadExecutionConfig, shouldUseControlMode, buildTmuxAttachCommand } from '../../lib/execution/index.js';
16
- import { buildOrchestratorSessionName, findRunningOrchestratorSessions, findHQOrchestratorSessions, extractOrchestratorNameFromSession, } from './start.js';
16
+ import { buildOrchestratorSessionName, buildOrchestratorContainerName, findRunningOrchestratorSessions, findHQOrchestratorSessions, findHQOrchestratorContainers, findRunningOrchestratorContainers, extractOrchestratorNameFromSession, getOrchestratorContainerId, } from './start.js';
17
17
  /**
18
18
  * Detect the terminal emulator from environment variables.
19
19
  * Returns a terminal app name suitable for AppleScript tab creation,
@@ -78,29 +78,51 @@ export default class OrchestratorAttach extends PromptCommand {
78
78
  const { flags } = await this.parse(OrchestratorAttach);
79
79
  const jsonMode = shouldOutputJson(flags);
80
80
  const hostSessions = getHostTmuxSessionNames();
81
+ // Track whether the resolved session is in a Docker container
82
+ let isDockerSession = false;
83
+ let dockerContainerId;
81
84
  // Resolve session name: try HQ-scoped first, fall back to discovery
82
85
  let sessionName;
83
86
  const hqPath = findHQRoot(process.cwd());
84
87
  if (hqPath) {
85
88
  const hqName = getHeadquartersNameFromPath(hqPath);
86
89
  if (flags.name) {
87
- // Explicit --name: look for that specific orchestrator
90
+ // Explicit --name: look for that specific orchestrator (host tmux first, then Docker)
88
91
  sessionName = buildOrchestratorSessionName(hqName, flags.name);
89
92
  if (!hostSessions.includes(sessionName)) {
90
- sessionName = undefined;
93
+ // Not found as host tmux session, check Docker
94
+ const containerName = buildOrchestratorContainerName(hqName, flags.name);
95
+ const containerId = getOrchestratorContainerId(containerName);
96
+ if (containerId) {
97
+ sessionName = containerName;
98
+ isDockerSession = true;
99
+ dockerContainerId = containerId;
100
+ }
101
+ else {
102
+ sessionName = undefined;
103
+ }
91
104
  }
92
105
  }
93
106
  else {
94
- // No --name: discover ALL orchestrators in this HQ
107
+ // No --name: discover ALL orchestrators in this HQ (host tmux + Docker)
95
108
  const hqSessions = findHQOrchestratorSessions(hostSessions, hqName);
96
- if (hqSessions.length === 1) {
97
- sessionName = hqSessions[0];
109
+ const hqContainers = findHQOrchestratorContainers(hqName);
110
+ const allSessions = [
111
+ ...hqSessions.map(s => ({ name: extractOrchestratorNameFromSession(s, hqName) || s, value: s, isDocker: false })),
112
+ ...hqContainers.map(c => ({ name: extractOrchestratorNameFromSession(c, hqName) || c, value: c, isDocker: true })),
113
+ ];
114
+ if (allSessions.length === 1) {
115
+ sessionName = allSessions[0].value;
116
+ isDockerSession = allSessions[0].isDocker;
117
+ if (isDockerSession) {
118
+ dockerContainerId = getOrchestratorContainerId(sessionName) || undefined;
119
+ }
98
120
  }
99
- else if (hqSessions.length > 1) {
100
- const sessionChoices = hqSessions.map(s => ({
101
- name: extractOrchestratorNameFromSession(s, hqName) || s,
102
- value: s,
103
- command: `prlt orchestrator attach --name "${extractOrchestratorNameFromSession(s, hqName) || s}" --json`,
121
+ else if (allSessions.length > 1) {
122
+ const sessionChoices = allSessions.map(s => ({
123
+ name: `${s.name}${s.isDocker ? ' (Docker)' : ''}`,
124
+ value: s.value,
125
+ command: `prlt orchestrator attach --name "${s.name}" --json`,
104
126
  }));
105
127
  const selectMessage = 'Multiple orchestrator sessions found. Select one to attach:';
106
128
  if (jsonMode) {
@@ -114,6 +136,11 @@ export default class OrchestratorAttach extends PromptCommand {
114
136
  choices: sessionChoices,
115
137
  }]);
116
138
  sessionName = session;
139
+ const matched = allSessions.find(s => s.value === session);
140
+ if (matched?.isDocker) {
141
+ isDockerSession = true;
142
+ dockerContainerId = getOrchestratorContainerId(session) || undefined;
143
+ }
117
144
  }
118
145
  // If 0 found, fall through to global discovery below
119
146
  }
@@ -121,7 +148,12 @@ export default class OrchestratorAttach extends PromptCommand {
121
148
  // If not in HQ or session not found, discover running orchestrator sessions globally
122
149
  if (!sessionName) {
123
150
  const runningSessions = findRunningOrchestratorSessions(hostSessions);
124
- if (runningSessions.length === 0) {
151
+ const runningContainers = findRunningOrchestratorContainers();
152
+ const allSessions = [
153
+ ...runningSessions.map(s => ({ name: s, value: s, isDocker: false })),
154
+ ...runningContainers.map(c => ({ name: `${c} (Docker)`, value: c, isDocker: true })),
155
+ ];
156
+ if (allSessions.length === 0) {
125
157
  if (jsonMode) {
126
158
  outputErrorAsJson('NOT_RUNNING', 'Orchestrator is not running. Start it with: prlt orchestrator start', createMetadata('orchestrator attach', flags));
127
159
  return;
@@ -132,15 +164,19 @@ export default class OrchestratorAttach extends PromptCommand {
132
164
  this.log('');
133
165
  return;
134
166
  }
135
- else if (runningSessions.length === 1) {
136
- sessionName = runningSessions[0];
167
+ else if (allSessions.length === 1) {
168
+ sessionName = allSessions[0].value;
169
+ isDockerSession = allSessions[0].isDocker;
170
+ if (isDockerSession) {
171
+ dockerContainerId = getOrchestratorContainerId(sessionName) || undefined;
172
+ }
137
173
  }
138
174
  else {
139
175
  // Multiple sessions — let user pick
140
- const sessionChoices = runningSessions.map(s => ({
141
- name: s,
142
- value: s,
143
- command: `prlt orchestrator attach --name "${s}" --json`,
176
+ const sessionChoices = allSessions.map(s => ({
177
+ name: s.name,
178
+ value: s.value,
179
+ command: `prlt orchestrator attach --name "${s.value}" --json`,
144
180
  }));
145
181
  const selectMessage = 'Multiple orchestrator sessions found. Select one to attach:';
146
182
  if (jsonMode) {
@@ -154,6 +190,11 @@ export default class OrchestratorAttach extends PromptCommand {
154
190
  choices: sessionChoices,
155
191
  }]);
156
192
  sessionName = session;
193
+ const matched = allSessions.find(s => s.value === session);
194
+ if (matched?.isDocker) {
195
+ isDockerSession = true;
196
+ dockerContainerId = getOrchestratorContainerId(session) || undefined;
197
+ }
157
198
  }
158
199
  }
159
200
  if (!sessionName) {
@@ -162,6 +203,8 @@ export default class OrchestratorAttach extends PromptCommand {
162
203
  if (jsonMode) {
163
204
  outputSuccessAsJson({
164
205
  sessionId: sessionName,
206
+ containerId: dockerContainerId,
207
+ environment: isDockerSession ? 'docker' : 'host',
165
208
  status: 'attaching',
166
209
  }, createMetadata('orchestrator attach', flags));
167
210
  return;
@@ -173,7 +216,30 @@ export default class OrchestratorAttach extends PromptCommand {
173
216
  this.log(styles.warning('--terminal has no effect without --new-tab. Ignoring.'));
174
217
  }
175
218
  this.log('');
176
- this.log(styles.info(`Attaching to orchestrator session: ${sessionName}`));
219
+ this.log(styles.info(`Attaching to orchestrator session: ${sessionName}${isDockerSession ? ' (Docker)' : ''}`));
220
+ // Docker-based orchestrator: attach via docker exec
221
+ if (isDockerSession && dockerContainerId) {
222
+ if (flags['new-tab']) {
223
+ const terminalApp = flags.terminal ?? detectTerminalApp();
224
+ if (!terminalApp) {
225
+ this.log(styles.warning('Could not detect terminal emulator for new tab.'));
226
+ this.log(styles.muted('Falling back to direct attach in current terminal.'));
227
+ }
228
+ else {
229
+ await this.openDockerInNewTab(terminalApp, dockerContainerId, sessionName);
230
+ return;
231
+ }
232
+ }
233
+ // Attach directly in current terminal
234
+ try {
235
+ execSync(`docker exec -it ${dockerContainerId} tmux attach -t "${sessionName}"`, { stdio: 'inherit' });
236
+ }
237
+ catch {
238
+ this.error(`Failed to attach to Docker orchestrator session "${sessionName}"`);
239
+ }
240
+ return;
241
+ }
242
+ // Host-based orchestrator: attach via tmux
177
243
  // Determine if we should use tmux control mode (-u -CC) for iTerm
178
244
  let useControlMode = false;
179
245
  try {
@@ -211,19 +277,20 @@ export default class OrchestratorAttach extends PromptCommand {
211
277
  this.attachInCurrentTerminal(useControlMode, sessionName);
212
278
  }
213
279
  }
214
- attachInCurrentTerminal(useControlMode, sessionName) {
280
+ attachInCurrentTerminal(_useControlMode, sessionName) {
215
281
  try {
216
- // Set mouse mode based on attach type:
217
- // - Plain terminal: mouse on (enables scroll in tmux; hold Shift/Option to bypass)
218
- // - iTerm -CC: mouse off (iTerm handles scrolling natively)
219
- const mouseMode = useControlMode ? 'off' : 'on';
282
+ // Always use regular attach (no -CC) in current terminal.
283
+ // Control mode sends raw tmux protocol sequences (%begin, %output, %end)
284
+ // that render as garbled text unless iTerm's native CC handler is active
285
+ // (only happens in new tabs opened via AppleScript).
286
+ // Mouse mode is always on for current-terminal attach (enables scroll in tmux).
220
287
  try {
221
- execSync(`tmux set-option -t "${sessionName}" mouse ${mouseMode}`, { stdio: 'pipe' });
288
+ execSync(`tmux set-option -t "${sessionName}" mouse on`, { stdio: 'pipe' });
222
289
  }
223
290
  catch {
224
291
  // Non-fatal: mouse mode is a convenience, don't block attach
225
292
  }
226
- const tmuxAttach = buildTmuxAttachCommand(useControlMode);
293
+ const tmuxAttach = buildTmuxAttachCommand(false);
227
294
  execSync(`${tmuxAttach} -t "${sessionName}"`, { stdio: 'inherit' });
228
295
  }
229
296
  catch {
@@ -307,5 +374,71 @@ exec $SHELL
307
374
  this.error(`Failed to open terminal tab: ${error instanceof Error ? error.message : error}`);
308
375
  }
309
376
  }
377
+ async openDockerInNewTab(terminalApp, containerId, sessionName) {
378
+ const title = 'Orchestrator (Docker)';
379
+ const baseDir = path.join(os.homedir(), '.proletariat', 'scripts');
380
+ fs.mkdirSync(baseDir, { recursive: true });
381
+ const scriptPath = path.join(baseDir, `attach-orch-docker-${Date.now()}.sh`);
382
+ const script = `#!/bin/bash
383
+ echo -ne "\\033]0;${title}\\007"
384
+ echo -ne "\\033]1;${title}\\007"
385
+ echo "Attaching to Docker orchestrator: ${sessionName}"
386
+ docker exec -it ${containerId} tmux attach -t "${sessionName}"
387
+ rm -f "${scriptPath}"
388
+ exec $SHELL
389
+ `;
390
+ fs.writeFileSync(scriptPath, script, { mode: 0o755 });
391
+ try {
392
+ switch (terminalApp) {
393
+ case 'iTerm':
394
+ execSync(`osascript -e '
395
+ tell application "iTerm"
396
+ activate
397
+ tell current window
398
+ set newTab to (create tab with default profile)
399
+ tell current session of newTab
400
+ set name to "${title}"
401
+ write text "${scriptPath}"
402
+ end tell
403
+ end tell
404
+ end tell
405
+ '`);
406
+ break;
407
+ case 'Ghostty':
408
+ execSync(`osascript -e '
409
+ tell application "Ghostty"
410
+ activate
411
+ end tell
412
+ tell application "System Events"
413
+ tell process "Ghostty"
414
+ keystroke "t" using command down
415
+ delay 0.3
416
+ keystroke "${scriptPath}"
417
+ keystroke return
418
+ end tell
419
+ end tell
420
+ '`);
421
+ break;
422
+ default:
423
+ execSync(`osascript -e '
424
+ tell application "Terminal"
425
+ activate
426
+ tell application "System Events"
427
+ tell process "Terminal"
428
+ keystroke "t" using command down
429
+ end tell
430
+ end tell
431
+ delay 0.3
432
+ do script "${scriptPath}" in front window
433
+ end tell
434
+ '`);
435
+ break;
436
+ }
437
+ this.log(styles.success('Opened new tab and attaching to Docker orchestrator'));
438
+ }
439
+ catch (error) {
440
+ this.error(`Failed to open terminal tab: ${error instanceof Error ? error.message : error}`);
441
+ }
442
+ }
310
443
  }
311
444
  //# sourceMappingURL=attach.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/commands/orchestrator/attach.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/commands/orchestrator/attach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAChH,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EAClC,0BAA0B,GAC3B,MAAM,YAAY,CAAA;AAEnB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,kEAAkE;IAClE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4CAA4C;IAC5C,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC1F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAE5C,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,OAAO,CAAA;QAChB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAA;QAClB,KAAK,gBAAgB;YACnB,OAAO,UAAU,CAAA;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,8DAA8D;IAC9D,4EAA4E;IAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzE,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,aAAa;IAC3D,MAAM,CAAC,WAAW,GAAG,iDAAiD,CAAA;IAEtE,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;QACrC,+CAA+C;QAC/C,kEAAkE;KACnE,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,kBAAkB;QACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+DAA+D;SAC7E,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,yEAAyE;YACtF,OAAO,EAAE,KAAK;SACf,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,6FAA6F;SAC3G,CAAC;QACF,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC;YAChC,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4EAA4E;YACzF,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAA;QAE9C,8DAA8D;QAC9D,IAAI,eAAe,GAAG,KAAK,CAAA;QAC3B,IAAI,iBAAqC,CAAA;QAEzC,oEAAoE;QACpE,IAAI,WAA+B,CAAA;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAExC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;YAElD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,sFAAsF;gBACtF,WAAW,GAAG,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACxC,+CAA+C;oBAC/C,MAAM,aAAa,GAAG,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;oBACxE,MAAM,WAAW,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAA;oBAC7D,IAAI,WAAW,EAAE,CAAC;wBAChB,WAAW,GAAG,aAAa,CAAA;wBAC3B,eAAe,GAAG,IAAI,CAAA;wBACtB,iBAAiB,GAAG,WAAW,CAAA;oBACjC,CAAC;yBAAM,CAAC;wBACN,WAAW,GAAG,SAAS,CAAA;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wEAAwE;gBACxE,MAAM,UAAU,GAAG,0BAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;gBACnE,MAAM,YAAY,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAA;gBAEzD,MAAM,WAAW,GAAG;oBAClB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,kCAAkC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;oBACjH,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,kCAAkC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnH,CAAA;gBAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7B,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;oBAClC,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;oBACzC,IAAI,eAAe,EAAE,CAAC;wBACpB,iBAAiB,GAAG,0BAA0B,CAAC,WAAW,CAAC,IAAI,SAAS,CAAA;oBAC1E,CAAC;gBACH,CAAC;qBAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC3C,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;wBACjD,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,OAAO,EAAE,oCAAoC,CAAC,CAAC,IAAI,UAAU;qBAC9D,CAAC,CAAC,CAAA;oBACH,MAAM,aAAa,GAAG,6DAA6D,CAAA;oBAEnF,IAAI,QAAQ,EAAE,CAAC;wBACb,kBAAkB,CAChB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,EACnE,cAAc,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAC7C,CAAA;wBACD,OAAM;oBACR,CAAC;oBAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAsB,CAAC;4BAC1D,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,aAAa;4BACtB,OAAO,EAAE,cAAc;yBACxB,CAAC,CAAC,CAAA;oBACH,WAAW,GAAG,OAAO,CAAA;oBACrB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAA;oBAC1D,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACtB,eAAe,GAAG,IAAI,CAAA;wBACtB,iBAAiB,GAAG,0BAA0B,CAAC,OAAO,CAAC,IAAI,SAAS,CAAA;oBACtE,CAAC;gBACH,CAAC;gBACD,qDAAqD;YACvD,CAAC;QACH,CAAC;QAED,qFAAqF;QACrF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,eAAe,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAA;YACrE,MAAM,iBAAiB,GAAG,iCAAiC,EAAE,CAAA;YAE7D,MAAM,WAAW,GAAG;gBAClB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aACrF,CAAA;YAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,QAAQ,EAAE,CAAC;oBACb,iBAAiB,CACf,aAAa,EACb,qEAAqE,EACrE,cAAc,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAC7C,CAAA;oBACD,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAA;gBACxD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAA;gBAChE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,OAAM;YACR,CAAC;iBAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;gBAClC,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;gBACzC,IAAI,eAAe,EAAE,CAAC;oBACpB,iBAAiB,GAAG,0BAA0B,CAAC,WAAW,CAAC,IAAI,SAAS,CAAA;gBAC1E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC3C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,OAAO,EAAE,oCAAoC,CAAC,CAAC,KAAK,UAAU;iBAC/D,CAAC,CAAC,CAAA;gBACH,MAAM,aAAa,GAAG,6DAA6D,CAAA;gBAEnF,IAAI,QAAQ,EAAE,CAAC;oBACb,kBAAkB,CAChB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,EACnE,cAAc,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAC7C,CAAA;oBACD,OAAM;gBACR,CAAC;gBAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAsB,CAAC;wBAC1D,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,aAAa;wBACtB,OAAO,EAAE,cAAc;qBACxB,CAAC,CAAC,CAAA;gBACH,WAAW,GAAG,OAAO,CAAA;gBACrB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAA;gBAC1D,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;oBACtB,eAAe,GAAG,IAAI,CAAA;oBACtB,iBAAiB,GAAG,0BAA0B,CAAC,OAAO,CAAC,IAAI,SAAS,CAAA;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,mBAAmB,CAAC;gBAClB,SAAS,EAAE,WAAW;gBACtB,WAAW,EAAE,iBAAiB;gBAC9B,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;gBAChD,MAAM,EAAE,WAAW;aACpB,EAAE,cAAc,CAAC,qBAAqB,EAAE,KAAgC,CAAC,CAAC,CAAA;YAC3E,OAAM;QACR,CAAC;QAED,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC,CAAA;QAC/G,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,CAAA;QACnF,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAE/G,oDAAoD;QACpD,IAAI,eAAe,IAAI,iBAAiB,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,IAAI,iBAAiB,EAAE,CAAA;gBACzD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,CAAA;oBAC3E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAA;gBAC9E,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAA;oBAC1E,OAAM;gBACR,CAAC;YACH,CAAC;YACD,sCAAsC;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,mBAAmB,iBAAiB,oBAAoB,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACxG,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,oDAAoD,WAAW,GAAG,CAAC,CAAA;YAChF,CAAC;YACD,OAAM;QACR,CAAC;QAED,2CAA2C;QAC3C,kEAAkE;QAClE,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;YAC5E,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC/B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;gBACnC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;oBACxB,cAAc,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACzE,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE,CAAA;YACZ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,8DAA8D;YAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,IAAI,iBAAiB,EAAE,CAAA;YACzD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,CAAA;gBAC3E,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAA;gBACjF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC,CAAA;gBACxG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;gBACzD,OAAM;YACR,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,CAAA;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,eAAwB,EAAE,WAAmB;QAC3E,IAAI,CAAC;YACH,0DAA0D;YAC1D,yEAAyE;YACzE,yEAAyE;YACzE,qDAAqD;YACrD,gFAAgF;YAChF,IAAI,CAAC;gBACH,QAAQ,CAAC,uBAAuB,WAAW,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC7E,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;YAC/D,CAAC;YAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;YAChD,QAAQ,CAAC,GAAG,UAAU,QAAQ,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,6CAA6C,WAAW,GAAG,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,cAAuB,EAAE,WAAmB;QAC1F,MAAM,KAAK,GAAG,cAAc,CAAA;QAC5B,MAAM,UAAU,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAA;QACzD,MAAM,SAAS,GAAG,GAAG,UAAU,QAAQ,WAAW,GAAG,CAAA;QACrD,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA;QAClE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAErE,MAAM,MAAM,GAAG;;oBAEC,KAAK;oBACL,KAAK;;;sBAGH,WAAW,WAAW,SAAS;;sBAE/B,WAAW;EAC/B,SAAS;;;SAGF,UAAU;;CAElB,CAAA;QACG,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC;YACH,QAAQ,WAAW,EAAE,CAAC;gBACpB,KAAK,OAAO;oBACV,QAAQ,CAAC;;;;;;iCAMc,KAAK;gCACN,UAAU;;;;YAI9B,CAAC,CAAA;oBACH,MAAK;gBAEP,KAAK,SAAS;oBACZ,QAAQ,CAAC;;;;;;;;6BAQU,UAAU;;;;YAI3B,CAAC,CAAA;oBACH,MAAK;gBAEP,KAAK,UAAU,CAAC;gBAChB;oBACE,QAAQ,CAAC;;;;;;;;;2BASQ,UAAU;;YAEzB,CAAC,CAAA;oBACH,MAAK;YACT,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,CAAA;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,WAAmB,EAAE,WAAmB;QAC5F,MAAM,KAAK,GAAG,uBAAuB,CAAA;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA;QAClE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAE5E,MAAM,MAAM,GAAG;oBACC,KAAK;oBACL,KAAK;0CACiB,WAAW;kBACnC,WAAW,oBAAoB,WAAW;SACnD,UAAU;;CAElB,CAAA;QACG,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC;YACH,QAAQ,WAAW,EAAE,CAAC;gBACpB,KAAK,OAAO;oBACV,QAAQ,CAAC;;;;;;iCAMc,KAAK;gCACN,UAAU;;;;YAI9B,CAAC,CAAA;oBACH,MAAK;gBAEP,KAAK,SAAS;oBACZ,QAAQ,CAAC;;;;;;;;6BAQU,UAAU;;;;YAI3B,CAAC,CAAA;oBACH,MAAK;gBAEP;oBACE,QAAQ,CAAC;;;;;;;;;2BASQ,UAAU;;YAEzB,CAAC,CAAA;oBACH,MAAK;YACT,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,CAAA;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC"}
@@ -19,6 +19,24 @@ export declare function findRunningOrchestratorSessions(hostSessions: string[]):
19
19
  * Filters sessions by 'prlt-orchestrator-{sanitizedHqName}-' prefix.
20
20
  */
21
21
  export declare function findHQOrchestratorSessions(hostSessions: string[], hqName: string): string[];
22
+ /**
23
+ * Build Docker container name for an orchestrator instance.
24
+ * Format: 'prlt-orchestrator-{hqName}-{name}'
25
+ */
26
+ export declare function buildOrchestratorContainerName(hqName: string, name?: string): string;
27
+ /**
28
+ * Find running Docker-based orchestrator containers.
29
+ * Returns container names matching 'prlt-orchestrator-*'.
30
+ */
31
+ export declare function findRunningOrchestratorContainers(): string[];
32
+ /**
33
+ * Find Docker orchestrator containers scoped to a specific HQ workspace.
34
+ */
35
+ export declare function findHQOrchestratorContainers(hqName: string): string[];
36
+ /**
37
+ * Get the Docker container ID for a running orchestrator container.
38
+ */
39
+ export declare function getOrchestratorContainerId(containerName: string): string | null;
22
40
  export declare function resolveOrchestratorName(name?: string): string;
23
41
  export declare function buildOrchestratorAttachCommand(name: string): string;
24
42
  export declare function extractOrchestratorNameFromSession(sessionName: string, hqName: string): string | null;
@@ -37,6 +55,8 @@ export default class OrchestratorStart extends PromptCommand {
37
55
  name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
38
56
  background: import("@oclif/core/interfaces").BooleanFlag<boolean>;
39
57
  foreground: import("@oclif/core/interfaces").BooleanFlag<boolean>;
58
+ docker: import("@oclif/core/interfaces").BooleanFlag<boolean>;
59
+ 'run-on-host': import("@oclif/core/interfaces").BooleanFlag<boolean>;
40
60
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
41
61
  machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
42
62
  };
@@ -1,4 +1,5 @@
1
1
  import { Flags } from '@oclif/core';
2
+ import { execSync } from 'node:child_process';
2
3
  import * as path from 'node:path';
3
4
  import * as fs from 'node:fs';
4
5
  import Database from 'better-sqlite3';
@@ -9,7 +10,7 @@ import { getHeadquartersNameFromPath } from '../../lib/machine-config.js';
9
10
  import { shouldOutputJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, buildPromptConfig, outputPromptAsJson, } from '../../lib/prompt-json.js';
10
11
  import { styles } from '../../lib/styles.js';
11
12
  import { DEFAULT_EXECUTION_CONFIG, } from '../../lib/execution/types.js';
12
- import { runExecution, hostCredentialsExist } from '../../lib/execution/runners.js';
13
+ import { runExecution, hostCredentialsExist, isDockerRunning, runOrchestratorInDocker, } from '../../lib/execution/runners.js';
13
14
  import { getHostTmuxSessionNames } from '../../lib/execution/session-utils.js';
14
15
  import { ExecutionStorage } from '../../lib/execution/storage.js';
15
16
  import { getWorkspaceInfo } from '../../lib/agents/commands.js';
@@ -50,6 +51,49 @@ export function findHQOrchestratorSessions(hostSessions, hqName) {
50
51
  const prefix = `prlt-orchestrator-${sanitizeName(hqName) || 'default'}-`;
51
52
  return hostSessions.filter(s => s.startsWith(prefix));
52
53
  }
54
+ /**
55
+ * Build Docker container name for an orchestrator instance.
56
+ * Format: 'prlt-orchestrator-{hqName}-{name}'
57
+ */
58
+ export function buildOrchestratorContainerName(hqName, name = 'main') {
59
+ const safeHqName = sanitizeName(hqName) || 'default';
60
+ const safeName = sanitizeName(name) || 'main';
61
+ return `prlt-orchestrator-${safeHqName}-${safeName}`;
62
+ }
63
+ /**
64
+ * Find running Docker-based orchestrator containers.
65
+ * Returns container names matching 'prlt-orchestrator-*'.
66
+ */
67
+ export function findRunningOrchestratorContainers() {
68
+ try {
69
+ const output = execSync('docker ps --filter "name=prlt-orchestrator-" --format "{{.Names}}"', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
70
+ if (!output)
71
+ return [];
72
+ return output.split('\n').filter(Boolean);
73
+ }
74
+ catch {
75
+ return [];
76
+ }
77
+ }
78
+ /**
79
+ * Find Docker orchestrator containers scoped to a specific HQ workspace.
80
+ */
81
+ export function findHQOrchestratorContainers(hqName) {
82
+ const prefix = `prlt-orchestrator-${sanitizeName(hqName) || 'default'}-`;
83
+ return findRunningOrchestratorContainers().filter(c => c.startsWith(prefix));
84
+ }
85
+ /**
86
+ * Get the Docker container ID for a running orchestrator container.
87
+ */
88
+ export function getOrchestratorContainerId(containerName) {
89
+ try {
90
+ const id = execSync(`docker container inspect -f '{{.Id}}' ${containerName}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
91
+ return id ? id.substring(0, 12) : null;
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
53
97
  export function resolveOrchestratorName(name) {
54
98
  const normalized = name?.trim();
55
99
  return normalized && normalized.length > 0 ? normalized : 'main';
@@ -162,6 +206,16 @@ export default class OrchestratorStart extends PromptCommand {
162
206
  default: false,
163
207
  exclusive: ['background'],
164
208
  }),
209
+ docker: Flags.boolean({
210
+ description: 'Run orchestrator in a Docker container (sibling container pattern)',
211
+ default: false,
212
+ exclusive: ['run-on-host'],
213
+ }),
214
+ 'run-on-host': Flags.boolean({
215
+ description: 'Run orchestrator on host (default behavior)',
216
+ default: false,
217
+ exclusive: ['docker'],
218
+ }),
165
219
  };
166
220
  async run() {
167
221
  const { flags } = await this.parse(OrchestratorStart);
@@ -170,10 +224,10 @@ export default class OrchestratorStart extends PromptCommand {
170
224
  const hqPath = findHQRoot(process.cwd());
171
225
  if (!hqPath) {
172
226
  if (jsonMode) {
173
- outputErrorAsJson('NO_HQ', 'Not in an HQ workspace. Run "prlt init" first.', createMetadata('orchestrator start', flags));
227
+ outputErrorAsJson('NO_HQ', 'Not in an HQ workspace. Run "prlt new" first.', createMetadata('orchestrator start', flags));
174
228
  return;
175
229
  }
176
- this.error('Not in an HQ workspace. Run "prlt init" first.');
230
+ this.error('Not in an HQ workspace. Run "prlt new" first.');
177
231
  }
178
232
  // Resolve orchestrator name (interactive prompt when --name is omitted)
179
233
  const workspaceInfo = getWorkspaceInfo();
@@ -305,20 +359,55 @@ export default class OrchestratorStart extends PromptCommand {
305
359
  }
306
360
  selectedExecutor = executor;
307
361
  }
308
- // Validate Claude Code authentication for claude-code executor
309
- if (selectedExecutor === 'claude-code' && !hostCredentialsExist()) {
362
+ // Determine execution environment
363
+ let environment = 'host';
364
+ if (flags.docker) {
365
+ environment = 'docker';
366
+ }
367
+ else if (!flags['run-on-host'] && !jsonMode) {
368
+ // Interactive mode: if Docker is available, offer the choice
369
+ // (unless --run-on-host was explicitly set)
370
+ if (isDockerRunning()) {
371
+ const envChoices = [
372
+ { name: '💻 Host — run directly on this machine (default)', value: 'host', command: 'prlt orchestrator start --run-on-host --json' },
373
+ { name: '🐳 Docker — run in isolated container (sibling container pattern)', value: 'docker', command: 'prlt orchestrator start --docker --json' },
374
+ ];
375
+ const { selectedEnv } = await this.prompt([{
376
+ type: 'list',
377
+ name: 'selectedEnv',
378
+ message: 'Where should the orchestrator run?',
379
+ choices: envChoices,
380
+ }]);
381
+ environment = selectedEnv;
382
+ }
383
+ }
384
+ // Validate Docker is running if docker environment was selected
385
+ if (environment === 'docker' && !isDockerRunning()) {
386
+ const errorMsg = 'Docker is not running. Please start Docker Desktop and try again, or use --run-on-host.';
387
+ if (jsonMode) {
388
+ outputErrorAsJson('DOCKER_NOT_RUNNING', errorMsg, createMetadata('orchestrator start', flags));
389
+ return;
390
+ }
391
+ this.error(errorMsg);
392
+ }
393
+ // Validate Claude Code authentication for host execution
394
+ // Docker uses OAuth credentials volume, so host auth check only applies to host mode
395
+ if (environment === 'host' && selectedExecutor === 'claude-code' && !hostCredentialsExist()) {
310
396
  const errorMsg = 'Claude Code authentication is not available. This usually happens when the macOS keychain is locked in SSH sessions.';
311
397
  const remediation = [
312
398
  '',
313
399
  'To fix this, choose one of the following:',
314
400
  '',
315
- '1. Unlock the keychain:',
401
+ '1. Run orchestrator in Docker (uses OAuth, no keychain needed):',
402
+ ' prlt orchestrator start --docker',
403
+ '',
404
+ '2. Unlock the keychain:',
316
405
  ' security unlock-keychain',
317
406
  '',
318
- '2. Set the ANTHROPIC_API_KEY environment variable:',
407
+ '3. Set the ANTHROPIC_API_KEY environment variable:',
319
408
  ' export ANTHROPIC_API_KEY=your-api-key',
320
409
  '',
321
- '3. Login to Claude Code:',
410
+ '4. Login to Claude Code:',
322
411
  ' claude /login',
323
412
  '',
324
413
  ].join('\n');
@@ -401,6 +490,7 @@ export default class OrchestratorStart extends PromptCommand {
401
490
  hqPath,
402
491
  isOrchestrator: true,
403
492
  hqName,
493
+ executionEnvironment: environment,
404
494
  };
405
495
  // Build execution config
406
496
  const executionConfig = { ...DEFAULT_EXECUTION_CONFIG };
@@ -475,6 +565,7 @@ export default class OrchestratorStart extends PromptCommand {
475
565
  if (!jsonMode) {
476
566
  this.log('');
477
567
  this.log(styles.muted(` Starting orchestrator...`));
568
+ this.log(styles.muted(` Environment: ${environment}`));
478
569
  this.log(styles.muted(` Executor: ${selectedExecutor}`));
479
570
  this.log(styles.muted(` Permission mode: ${permissionMode}`));
480
571
  this.log(styles.muted(` Display mode: ${displayMode}`));
@@ -488,9 +579,18 @@ export default class OrchestratorStart extends PromptCommand {
488
579
  this.log('');
489
580
  }
490
581
  // Launch orchestrator
491
- const result = await runExecution('host', context, selectedExecutor, executionConfig, {
492
- displayMode,
493
- });
582
+ let result;
583
+ if (environment === 'docker') {
584
+ result = await runOrchestratorInDocker(context, selectedExecutor, executionConfig, {
585
+ displayMode,
586
+ sessionName,
587
+ });
588
+ }
589
+ else {
590
+ result = await runExecution('host', context, selectedExecutor, executionConfig, {
591
+ displayMode,
592
+ });
593
+ }
494
594
  if (result.success) {
495
595
  // Create execution record so `prlt session poke orchestrator "message"` works
496
596
  if (db) {
@@ -500,10 +600,11 @@ export default class OrchestratorStart extends PromptCommand {
500
600
  ticketId: 'ORCH',
501
601
  agentName: `orchestrator-${orchestratorName}`,
502
602
  executor: selectedExecutor,
503
- environment: 'host',
603
+ environment,
504
604
  displayMode,
505
605
  permissionMode,
506
606
  sessionId: result.sessionId || sessionName,
607
+ containerId: result.containerId,
507
608
  });
508
609
  }
509
610
  catch {
@@ -513,6 +614,8 @@ export default class OrchestratorStart extends PromptCommand {
513
614
  if (jsonMode) {
514
615
  outputSuccessAsJson({
515
616
  sessionId: result.sessionId || sessionName,
617
+ containerId: result.containerId,
618
+ environment,
516
619
  executor: selectedExecutor,
517
620
  permissionMode,
518
621
  displayMode,
@@ -521,15 +624,21 @@ export default class OrchestratorStart extends PromptCommand {
521
624
  }, createMetadata('orchestrator start', flags));
522
625
  }
523
626
  if (displayMode === 'background') {
524
- this.log(styles.success(`Orchestrator started in background`));
627
+ this.log(styles.success(`Orchestrator started in background${environment === 'docker' ? ' (Docker)' : ''}`));
525
628
  this.log(styles.muted(` Session: ${result.sessionId || sessionName}`));
629
+ if (result.containerId) {
630
+ this.log(styles.muted(` Container: ${result.containerId}`));
631
+ }
526
632
  this.log(styles.muted(` Attach with: ${attachCommand}`));
527
633
  }
528
634
  else {
529
- this.log(styles.success(`Orchestrator started`));
635
+ this.log(styles.success(`Orchestrator started${environment === 'docker' ? ' (Docker)' : ''}`));
530
636
  if (result.sessionId) {
531
637
  this.log(styles.muted(` Session: ${result.sessionId}`));
532
638
  }
639
+ if (result.containerId) {
640
+ this.log(styles.muted(` Container: ${result.containerId}`));
641
+ }
533
642
  }
534
643
  }
535
644
  else {