@proletariat/cli 0.3.57 → 0.3.59

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 (219) hide show
  1. package/dist/commands/{spec/view.d.ts → dashboard/index.d.ts} +4 -6
  2. package/dist/commands/dashboard/index.js +117 -0
  3. package/dist/commands/dashboard/index.js.map +1 -0
  4. package/dist/commands/execution/config.js +5 -4
  5. package/dist/commands/execution/config.js.map +1 -1
  6. package/dist/commands/execution/stop.js +4 -2
  7. package/dist/commands/execution/stop.js.map +1 -1
  8. package/dist/commands/execution/view.js +3 -0
  9. package/dist/commands/execution/view.js.map +1 -1
  10. package/dist/commands/init.d.ts +1 -0
  11. package/dist/commands/init.js +40 -3
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/mcp-server.js +1 -2
  14. package/dist/commands/mcp-server.js.map +1 -1
  15. package/dist/commands/media/add.d.ts +19 -0
  16. package/dist/commands/media/add.js +94 -0
  17. package/dist/commands/media/add.js.map +1 -0
  18. package/dist/commands/{spec → media}/index.d.ts +1 -1
  19. package/dist/commands/media/index.js +85 -0
  20. package/dist/commands/media/index.js.map +1 -0
  21. package/dist/commands/{spec/link/remove.d.ts → media/list.d.ts} +3 -6
  22. package/dist/commands/media/list.js +89 -0
  23. package/dist/commands/media/list.js.map +1 -0
  24. package/dist/commands/media/preprocess.d.ts +19 -0
  25. package/dist/commands/media/preprocess.js +91 -0
  26. package/dist/commands/media/preprocess.js.map +1 -0
  27. package/dist/commands/{spec/delete.d.ts → media/remove.d.ts} +2 -2
  28. package/dist/commands/media/remove.js +101 -0
  29. package/dist/commands/media/remove.js.map +1 -0
  30. package/dist/commands/{spec/link/index.d.ts → media/show.d.ts} +3 -3
  31. package/dist/commands/media/show.js +122 -0
  32. package/dist/commands/media/show.js.map +1 -0
  33. package/dist/commands/orchestrator/start.js +5 -0
  34. package/dist/commands/orchestrator/start.js.map +1 -1
  35. package/dist/commands/session/exec.d.ts +19 -0
  36. package/dist/commands/session/exec.js +205 -0
  37. package/dist/commands/session/exec.js.map +1 -0
  38. package/dist/commands/session/index.js +12 -0
  39. package/dist/commands/session/index.js.map +1 -1
  40. package/dist/commands/{spec/link/depends.d.ts → session/inspect.d.ts} +4 -4
  41. package/dist/commands/session/inspect.js +316 -0
  42. package/dist/commands/session/inspect.js.map +1 -0
  43. package/dist/commands/session/peek.d.ts +15 -0
  44. package/dist/commands/session/peek.js +141 -8
  45. package/dist/commands/session/peek.js.map +1 -1
  46. package/dist/commands/session/poke.d.ts +4 -1
  47. package/dist/commands/session/poke.js +175 -20
  48. package/dist/commands/session/poke.js.map +1 -1
  49. package/dist/commands/session/restart.d.ts +20 -0
  50. package/dist/commands/session/restart.js +320 -0
  51. package/dist/commands/session/restart.js.map +1 -0
  52. package/dist/commands/tools/add.d.ts +20 -0
  53. package/dist/commands/tools/add.js +129 -0
  54. package/dist/commands/tools/add.js.map +1 -0
  55. package/dist/commands/tools/check.d.ts +10 -0
  56. package/dist/commands/tools/check.js +75 -0
  57. package/dist/commands/tools/check.js.map +1 -0
  58. package/dist/commands/tools/detect.d.ts +11 -0
  59. package/dist/commands/tools/detect.js +107 -0
  60. package/dist/commands/tools/detect.js.map +1 -0
  61. package/dist/commands/tools/index.d.ts +11 -0
  62. package/dist/commands/tools/index.js +87 -0
  63. package/dist/commands/tools/index.js.map +1 -0
  64. package/dist/commands/tools/remove.d.ts +13 -0
  65. package/dist/commands/tools/remove.js +55 -0
  66. package/dist/commands/tools/remove.js.map +1 -0
  67. package/dist/commands/trello/configure.d.ts +16 -0
  68. package/dist/commands/trello/configure.js +259 -0
  69. package/dist/commands/trello/configure.js.map +1 -0
  70. package/dist/commands/{spec/plan.d.ts → trello/import.d.ts} +3 -5
  71. package/dist/commands/trello/import.js +241 -0
  72. package/dist/commands/trello/import.js.map +1 -0
  73. package/dist/commands/{spec/ticket.d.ts → trello/sync.d.ts} +5 -6
  74. package/dist/commands/trello/sync.js +190 -0
  75. package/dist/commands/trello/sync.js.map +1 -0
  76. package/dist/commands/work/start.d.ts +2 -0
  77. package/dist/commands/work/start.js +27 -41
  78. package/dist/commands/work/start.js.map +1 -1
  79. package/dist/lib/dashboard/data.d.ts +64 -0
  80. package/dist/lib/dashboard/data.js +259 -0
  81. package/dist/lib/dashboard/data.js.map +1 -0
  82. package/dist/lib/dashboard/html.d.ts +7 -0
  83. package/dist/lib/dashboard/html.js +682 -0
  84. package/dist/lib/dashboard/html.js.map +1 -0
  85. package/dist/lib/dashboard/server.d.ts +20 -0
  86. package/dist/lib/dashboard/server.js +114 -0
  87. package/dist/lib/dashboard/server.js.map +1 -0
  88. package/dist/lib/database/index.d.ts +49 -1
  89. package/dist/lib/database/index.js +127 -0
  90. package/dist/lib/database/index.js.map +1 -1
  91. package/dist/lib/execution/config.d.ts +8 -0
  92. package/dist/lib/execution/config.js +83 -4
  93. package/dist/lib/execution/config.js.map +1 -1
  94. package/dist/lib/execution/runners.d.ts +60 -4
  95. package/dist/lib/execution/runners.js +398 -79
  96. package/dist/lib/execution/runners.js.map +1 -1
  97. package/dist/lib/execution/spawner.d.ts +4 -2
  98. package/dist/lib/execution/spawner.js +54 -47
  99. package/dist/lib/execution/spawner.js.map +1 -1
  100. package/dist/lib/execution/types.d.ts +27 -5
  101. package/dist/lib/execution/types.js +24 -0
  102. package/dist/lib/execution/types.js.map +1 -1
  103. package/dist/lib/external-issues/adapters.d.ts +17 -0
  104. package/dist/lib/external-issues/adapters.js +88 -0
  105. package/dist/lib/external-issues/adapters.js.map +1 -1
  106. package/dist/lib/external-issues/mapping-store.js +1 -1
  107. package/dist/lib/external-issues/shortcut.js +2 -1
  108. package/dist/lib/external-issues/shortcut.js.map +1 -1
  109. package/dist/lib/external-issues/trello.d.ts +80 -0
  110. package/dist/lib/external-issues/trello.js +266 -0
  111. package/dist/lib/external-issues/trello.js.map +1 -0
  112. package/dist/lib/external-issues/types.d.ts +3 -3
  113. package/dist/lib/external-issues/types.js +1 -1
  114. package/dist/lib/external-issues/types.js.map +1 -1
  115. package/dist/lib/linear/client.d.ts +4 -3
  116. package/dist/lib/linear/client.js +185 -122
  117. package/dist/lib/linear/client.js.map +1 -1
  118. package/dist/lib/mcp/tools/cli-passthrough.js +77 -0
  119. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
  120. package/dist/lib/mcp/tools/index.d.ts +0 -1
  121. package/dist/lib/mcp/tools/index.js +0 -1
  122. package/dist/lib/mcp/tools/index.js.map +1 -1
  123. package/dist/lib/media/index.d.ts +91 -0
  124. package/dist/lib/media/index.js +475 -0
  125. package/dist/lib/media/index.js.map +1 -0
  126. package/dist/lib/onboarding/detect-tools.d.ts +15 -0
  127. package/dist/lib/onboarding/detect-tools.js +44 -0
  128. package/dist/lib/onboarding/detect-tools.js.map +1 -0
  129. package/dist/lib/onboarding/index.d.ts +2 -0
  130. package/dist/lib/onboarding/index.js +3 -0
  131. package/dist/lib/onboarding/index.js.map +1 -0
  132. package/dist/lib/onboarding/wizard.d.ts +25 -0
  133. package/dist/lib/onboarding/wizard.js +156 -0
  134. package/dist/lib/onboarding/wizard.js.map +1 -0
  135. package/dist/lib/pmo/schema.d.ts +2 -1
  136. package/dist/lib/pmo/schema.js +3 -1
  137. package/dist/lib/pmo/schema.js.map +1 -1
  138. package/dist/lib/runners/claude-code-runner.js +6 -0
  139. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  140. package/dist/lib/tool-registry/detect.d.ts +20 -0
  141. package/dist/lib/tool-registry/detect.js +95 -0
  142. package/dist/lib/tool-registry/detect.js.map +1 -0
  143. package/dist/lib/tool-registry/index.d.ts +10 -0
  144. package/dist/lib/tool-registry/index.js +13 -0
  145. package/dist/lib/tool-registry/index.js.map +1 -0
  146. package/dist/lib/tool-registry/policy.d.ts +32 -0
  147. package/dist/lib/tool-registry/policy.js +97 -0
  148. package/dist/lib/tool-registry/policy.js.map +1 -0
  149. package/dist/lib/tool-registry/registry.d.ts +42 -0
  150. package/dist/lib/tool-registry/registry.js +120 -0
  151. package/dist/lib/tool-registry/registry.js.map +1 -0
  152. package/dist/lib/tool-registry/spawn.d.ts +50 -0
  153. package/dist/lib/tool-registry/spawn.js +103 -0
  154. package/dist/lib/tool-registry/spawn.js.map +1 -0
  155. package/dist/lib/tool-registry/types.d.ts +56 -0
  156. package/dist/lib/tool-registry/types.js +109 -0
  157. package/dist/lib/tool-registry/types.js.map +1 -0
  158. package/dist/lib/trello/client.d.ts +23 -0
  159. package/dist/lib/trello/client.js +114 -0
  160. package/dist/lib/trello/client.js.map +1 -0
  161. package/dist/lib/trello/config.d.ts +55 -0
  162. package/dist/lib/trello/config.js +127 -0
  163. package/dist/lib/trello/config.js.map +1 -0
  164. package/dist/lib/trello/index.d.ts +5 -0
  165. package/dist/lib/trello/index.js +5 -0
  166. package/dist/lib/trello/index.js.map +1 -0
  167. package/dist/lib/trello/mapper.d.ts +13 -0
  168. package/dist/lib/trello/mapper.js +71 -0
  169. package/dist/lib/trello/mapper.js.map +1 -0
  170. package/dist/lib/trello/sync.d.ts +13 -0
  171. package/dist/lib/trello/sync.js +38 -0
  172. package/dist/lib/trello/sync.js.map +1 -0
  173. package/dist/lib/trello/types.d.ts +53 -0
  174. package/dist/lib/trello/types.js +2 -0
  175. package/dist/lib/trello/types.js.map +1 -0
  176. package/dist/lib/work-source/client.js +17 -0
  177. package/dist/lib/work-source/client.js.map +1 -1
  178. package/dist/lib/work-source/config.d.ts +6 -1
  179. package/dist/lib/work-source/config.js +30 -1
  180. package/dist/lib/work-source/config.js.map +1 -1
  181. package/dist/lib/work-source/index.d.ts +1 -1
  182. package/dist/lib/work-source/index.js +1 -1
  183. package/dist/lib/work-source/index.js.map +1 -1
  184. package/oclif.manifest.json +6524 -6171
  185. package/package.json +6 -2
  186. package/dist/commands/spec/create.d.ts +0 -20
  187. package/dist/commands/spec/create.js +0 -171
  188. package/dist/commands/spec/create.js.map +0 -1
  189. package/dist/commands/spec/delete.js +0 -112
  190. package/dist/commands/spec/delete.js.map +0 -1
  191. package/dist/commands/spec/edit.d.ts +0 -23
  192. package/dist/commands/spec/edit.js +0 -262
  193. package/dist/commands/spec/edit.js.map +0 -1
  194. package/dist/commands/spec/index.js +0 -88
  195. package/dist/commands/spec/index.js.map +0 -1
  196. package/dist/commands/spec/link/depends.js +0 -87
  197. package/dist/commands/spec/link/depends.js.map +0 -1
  198. package/dist/commands/spec/link/index.js +0 -93
  199. package/dist/commands/spec/link/index.js.map +0 -1
  200. package/dist/commands/spec/link/remove.js +0 -91
  201. package/dist/commands/spec/link/remove.js.map +0 -1
  202. package/dist/commands/spec/list.d.ts +0 -14
  203. package/dist/commands/spec/list.js +0 -101
  204. package/dist/commands/spec/list.js.map +0 -1
  205. package/dist/commands/spec/plan.js +0 -102
  206. package/dist/commands/spec/plan.js.map +0 -1
  207. package/dist/commands/spec/ticket.js +0 -144
  208. package/dist/commands/spec/ticket.js.map +0 -1
  209. package/dist/commands/spec/view.js +0 -202
  210. package/dist/commands/spec/view.js.map +0 -1
  211. package/dist/lib/mcp/tools/spec.d.ts +0 -6
  212. package/dist/lib/mcp/tools/spec.js +0 -197
  213. package/dist/lib/mcp/tools/spec.js.map +0 -1
  214. package/dist/lib/pmo/spec-parser.d.ts +0 -25
  215. package/dist/lib/pmo/spec-parser.js +0 -206
  216. package/dist/lib/pmo/spec-parser.js.map +0 -1
  217. package/dist/lib/pmo/spec-types.d.ts +0 -43
  218. package/dist/lib/pmo/spec-types.js +0 -8
  219. package/dist/lib/pmo/spec-types.js.map +0 -1
@@ -0,0 +1,320 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import { execSync } from 'node:child_process';
4
+ import Database from 'better-sqlite3';
5
+ import { styles } from '../../lib/styles.js';
6
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
7
+ import { ExecutionStorage } from '../../lib/execution/index.js';
8
+ import { getHostTmuxSessionNames, getContainerTmuxSessionMap, findContainerSessionsByPrefix, findSessionForExecution, captureTmuxPane, } from '../../lib/execution/session-utils.js';
9
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
10
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
11
+ // =============================================================================
12
+ // Helpers
13
+ // =============================================================================
14
+ /**
15
+ * Send Ctrl-C to a tmux session to interrupt the current process.
16
+ */
17
+ function sendCtrlC(sessionId, containerId) {
18
+ try {
19
+ const sendCmd = `tmux send-keys -t "${sessionId}" C-c`;
20
+ if (containerId) {
21
+ execSync(`docker exec ${containerId} bash -c '${sendCmd}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
22
+ }
23
+ else {
24
+ execSync(sendCmd, {
25
+ encoding: 'utf-8',
26
+ stdio: ['pipe', 'pipe', 'pipe'],
27
+ timeout: 5000,
28
+ });
29
+ }
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ /**
37
+ * Send a command to a tmux session.
38
+ */
39
+ function sendCommand(sessionId, command, containerId) {
40
+ try {
41
+ const escapedCommand = command.replace(/'/g, "'\\''");
42
+ const sendTextCmd = `tmux send-keys -l -t "${sessionId}" '${escapedCommand}'`;
43
+ const sendEnterCmd = `tmux send-keys -t "${sessionId}" Enter`;
44
+ if (containerId) {
45
+ execSync(`docker exec ${containerId} bash -c '${sendTextCmd}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
46
+ execSync('sleep 0.1', { stdio: ['pipe', 'pipe', 'pipe'] });
47
+ execSync(`docker exec ${containerId} bash -c '${sendEnterCmd}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
48
+ }
49
+ else {
50
+ execSync(sendTextCmd, {
51
+ encoding: 'utf-8',
52
+ stdio: ['pipe', 'pipe', 'pipe'],
53
+ timeout: 5000,
54
+ });
55
+ execSync('sleep 0.1', { stdio: ['pipe', 'pipe', 'pipe'] });
56
+ execSync(sendEnterCmd, {
57
+ encoding: 'utf-8',
58
+ stdio: ['pipe', 'pipe', 'pipe'],
59
+ timeout: 5000,
60
+ });
61
+ }
62
+ return true;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ }
68
+ /**
69
+ * Check if the session is at a shell prompt (idle).
70
+ */
71
+ function isAtPrompt(sessionId, containerId) {
72
+ try {
73
+ const content = captureTmuxPane(sessionId, 5, containerId);
74
+ if (!content)
75
+ return false;
76
+ const lines = content.split('\n');
77
+ const lastNonEmpty = [...lines].reverse().find(l => l.trim().length > 0) || '';
78
+ return /[$❯#>]\s*$/.test(lastNonEmpty);
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ /**
85
+ * Wait for the session to reach a shell prompt.
86
+ */
87
+ async function waitForPrompt(sessionId, timeoutMs, containerId) {
88
+ const startTime = Date.now();
89
+ while (Date.now() - startTime < timeoutMs) {
90
+ if (isAtPrompt(sessionId, containerId))
91
+ return true;
92
+ await new Promise(resolve => setTimeout(resolve, 1000));
93
+ }
94
+ return false;
95
+ }
96
+ // =============================================================================
97
+ // Command
98
+ // =============================================================================
99
+ export default class SessionRestart extends PMOCommand {
100
+ static description = 'Gracefully restart a stuck or completed agent session';
101
+ static examples = [
102
+ '<%= config.bin %> session restart altman',
103
+ '<%= config.bin %> session restart TKT-123',
104
+ '<%= config.bin %> session restart altman --fresh',
105
+ '<%= config.bin %> session restart altman --resume',
106
+ '<%= config.bin %> session restart altman --timeout 30',
107
+ ];
108
+ static args = {
109
+ target: Args.string({
110
+ description: 'Agent name or ticket ID',
111
+ required: true,
112
+ }),
113
+ };
114
+ static flags = {
115
+ ...pmoBaseFlags,
116
+ fresh: Flags.boolean({
117
+ description: 'Reset worktree to branch HEAD before restarting',
118
+ default: false,
119
+ exclusive: ['resume'],
120
+ }),
121
+ resume: Flags.boolean({
122
+ description: 'Continue from where the agent left off (pass --resume flag to Claude Code)',
123
+ default: false,
124
+ exclusive: ['fresh'],
125
+ }),
126
+ timeout: Flags.integer({
127
+ description: 'Seconds to wait for clean exit before force restart',
128
+ default: 15,
129
+ }),
130
+ };
131
+ getPMOOptions() {
132
+ return { promptIfMultiple: false };
133
+ }
134
+ async execute() {
135
+ const { args, flags } = await this.parse(SessionRestart);
136
+ const jsonMode = shouldOutputJson(flags);
137
+ const { target } = args;
138
+ // Resolve the agent
139
+ let executionStorage = null;
140
+ let db = null;
141
+ try {
142
+ const workspaceInfo = getWorkspaceInfo();
143
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
144
+ db = new Database(dbPath);
145
+ executionStorage = new ExecutionStorage(db);
146
+ }
147
+ catch {
148
+ if (jsonMode) {
149
+ outputErrorAsJson('NOT_IN_WORKSPACE', 'Not in a workspace. Run from a proletariat HQ directory.', createMetadata('session restart', flags));
150
+ }
151
+ else {
152
+ this.log('');
153
+ this.log(styles.error('Not in a workspace. Run from a proletariat HQ directory.'));
154
+ this.log('');
155
+ }
156
+ return;
157
+ }
158
+ try {
159
+ // Get active executions
160
+ const runningExecutions = executionStorage.listExecutions({ status: 'running' });
161
+ const startingExecutions = executionStorage.listExecutions({ status: 'starting' });
162
+ const activeExecutions = [...runningExecutions, ...startingExecutions];
163
+ // Find matching execution
164
+ let match = activeExecutions.find(exec => exec.agentName === target || exec.ticketId === target);
165
+ if (!match) {
166
+ match = activeExecutions.find(exec => exec.agentName.includes(target) || exec.ticketId.includes(target.toUpperCase()));
167
+ }
168
+ if (!match) {
169
+ if (jsonMode) {
170
+ outputErrorAsJson('NO_ACTIVE_EXECUTION', `No active session found for "${target}".`, createMetadata('session restart', flags));
171
+ }
172
+ else {
173
+ this.log('');
174
+ this.log(styles.error(`No active session found for "${target}".`));
175
+ this.log(styles.muted('Use `prlt session list` to see running sessions.'));
176
+ this.log('');
177
+ }
178
+ return;
179
+ }
180
+ // Resolve tmux session
181
+ const isContainer = match.environment === 'devcontainer';
182
+ let actualSessionId = match.sessionId;
183
+ let containerId = isContainer ? match.containerId : undefined;
184
+ if (!match.sessionId) {
185
+ const hostTmuxSessions = getHostTmuxSessionNames();
186
+ const containerTmuxSessions = getContainerTmuxSessionMap();
187
+ if (isContainer && match.containerId) {
188
+ const containerSessions = findContainerSessionsByPrefix(containerTmuxSessions, match.containerId);
189
+ const found = findSessionForExecution(match.ticketId, match.agentName, containerSessions);
190
+ if (found) {
191
+ actualSessionId = found;
192
+ containerId = match.containerId;
193
+ }
194
+ }
195
+ else {
196
+ const found = findSessionForExecution(match.ticketId, match.agentName, hostTmuxSessions);
197
+ if (found)
198
+ actualSessionId = found;
199
+ }
200
+ }
201
+ if (!actualSessionId) {
202
+ if (jsonMode) {
203
+ outputErrorAsJson('SESSION_NOT_FOUND', `Could not find tmux session for agent "${match.agentName}".`, createMetadata('session restart', flags));
204
+ }
205
+ else {
206
+ this.log('');
207
+ this.log(styles.error(`Could not find tmux session for agent "${match.agentName}".`));
208
+ this.log('');
209
+ }
210
+ return;
211
+ }
212
+ // Step 1: Send Ctrl-C to interrupt current process
213
+ if (!jsonMode) {
214
+ this.log('');
215
+ this.log(styles.info(`Restarting agent ${match.agentName} (${match.ticketId})...`));
216
+ this.log(styles.muted(' Sending Ctrl-C to interrupt current process...'));
217
+ }
218
+ sendCtrlC(actualSessionId, containerId);
219
+ // Step 2: Wait for clean exit
220
+ const timeoutMs = flags.timeout * 1000;
221
+ const reachedPrompt = await waitForPrompt(actualSessionId, timeoutMs, containerId);
222
+ if (!reachedPrompt) {
223
+ // Send another Ctrl-C to force exit
224
+ if (!jsonMode) {
225
+ this.log(styles.muted(' Process did not exit cleanly, sending another Ctrl-C...'));
226
+ }
227
+ sendCtrlC(actualSessionId, containerId);
228
+ await waitForPrompt(actualSessionId, 5000, containerId);
229
+ }
230
+ // Step 3: If --fresh, reset worktree
231
+ if (flags.fresh) {
232
+ if (!jsonMode) {
233
+ this.log(styles.muted(' Resetting worktree to branch HEAD...'));
234
+ }
235
+ if (isContainer && containerId) {
236
+ const resetCmd = `git -C /workspace reset --hard HEAD && git -C /workspace clean -fd`;
237
+ sendCommand(actualSessionId, resetCmd, containerId);
238
+ await new Promise(resolve => setTimeout(resolve, 2000));
239
+ await waitForPrompt(actualSessionId, 5000, containerId);
240
+ }
241
+ else {
242
+ const workspaceInfo = getWorkspaceInfo();
243
+ const worktreePath = path.join(workspaceInfo.path, 'agents', 'temp', match.agentName);
244
+ try {
245
+ execSync(`git -C "${worktreePath}" reset --hard HEAD && git -C "${worktreePath}" clean -fd`, {
246
+ encoding: 'utf-8',
247
+ stdio: ['pipe', 'pipe', 'pipe'],
248
+ timeout: 10000,
249
+ });
250
+ }
251
+ catch {
252
+ // Best effort reset
253
+ }
254
+ }
255
+ }
256
+ // Step 4: Re-launch Claude Code
257
+ if (!jsonMode) {
258
+ this.log(styles.muted(' Re-launching Claude Code...'));
259
+ }
260
+ // Build the claude command with appropriate flags
261
+ let claudeCmd = 'claude';
262
+ if (flags.resume) {
263
+ claudeCmd += ' --resume';
264
+ }
265
+ // Add permission flags if the original execution used danger mode
266
+ if (match.permissionMode === 'danger') {
267
+ claudeCmd += ' --dangerously-skip-permissions';
268
+ }
269
+ sendCommand(actualSessionId, claudeCmd, containerId);
270
+ // Track restart — update execution status back to running
271
+ let newRestartCount = 1;
272
+ try {
273
+ const currentExec = executionStorage.getExecution(match.id);
274
+ if (currentExec?.errorMessage) {
275
+ try {
276
+ const parsed = JSON.parse(currentExec.errorMessage);
277
+ newRestartCount = (parsed.restartCount || 0) + 1;
278
+ }
279
+ catch {
280
+ // errorMessage is not JSON, just count as first restart
281
+ }
282
+ }
283
+ executionStorage.updateStatus(match.id, 'running');
284
+ }
285
+ catch {
286
+ // Best effort tracking
287
+ }
288
+ // Output results
289
+ if (jsonMode) {
290
+ outputSuccessAsJson({
291
+ agent: match.agentName,
292
+ ticketId: match.ticketId,
293
+ sessionId: actualSessionId,
294
+ environment: isContainer ? 'container' : 'host',
295
+ containerId,
296
+ restarted: true,
297
+ mode: flags.fresh ? 'fresh' : flags.resume ? 'resume' : 'default',
298
+ cleanExit: reachedPrompt,
299
+ restartCount: newRestartCount,
300
+ }, createMetadata('session restart', flags));
301
+ }
302
+ else {
303
+ this.log('');
304
+ this.log(styles.success(`Agent ${match.agentName} restarted successfully.`));
305
+ if (flags.fresh) {
306
+ this.log(styles.muted(' Mode: fresh (worktree reset to HEAD)'));
307
+ }
308
+ else if (flags.resume) {
309
+ this.log(styles.muted(' Mode: resume (continuing from last state)'));
310
+ }
311
+ this.log(styles.muted(` Clean exit: ${reachedPrompt ? 'yes' : 'no (forced)'}`));
312
+ this.log('');
313
+ }
314
+ }
315
+ finally {
316
+ db?.close();
317
+ }
318
+ }
319
+ }
320
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../../src/commands/session/restart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { PromptCommand } from '../../lib/prompt-command.js';
2
+ export default class ToolsAdd extends PromptCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ command: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ auth: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ detect: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ install: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ description: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ };
19
+ run(): Promise<void>;
20
+ }
@@ -0,0 +1,129 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { PromptCommand } from '../../lib/prompt-command.js';
4
+ import { findHQRoot } from '../../lib/workspace.js';
5
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
6
+ import { machineOutputFlags } from '../../lib/pmo/index.js';
7
+ import { addMcpServer, addCliTool, loadToolRegistry, } from '../../lib/tool-registry/index.js';
8
+ export default class ToolsAdd extends PromptCommand {
9
+ static description = 'Register an MCP server or CLI tool';
10
+ static examples = [
11
+ '<%= config.bin %> tools add mcp arcade --url https://api.arcade.dev/mcp --auth ARCADE_API_KEY --description "Arcade integrations"',
12
+ '<%= config.bin %> tools add cli gh --command gh --detect "which gh" --install "brew install gh" --description "GitHub CLI"',
13
+ ];
14
+ static args = {
15
+ type: Args.string({
16
+ description: 'Tool type (mcp or cli)',
17
+ required: true,
18
+ options: ['mcp', 'cli'],
19
+ }),
20
+ name: Args.string({
21
+ description: 'Tool name (unique identifier)',
22
+ required: true,
23
+ }),
24
+ };
25
+ static flags = {
26
+ ...machineOutputFlags,
27
+ url: Flags.string({
28
+ description: 'MCP server URL (for remote servers)',
29
+ }),
30
+ command: Flags.string({
31
+ description: 'Command to run (MCP server command or CLI tool binary)',
32
+ }),
33
+ auth: Flags.string({
34
+ description: 'Environment variable for authentication (e.g., ARCADE_API_KEY)',
35
+ }),
36
+ detect: Flags.string({
37
+ description: 'Shell command to detect if CLI tool is installed',
38
+ }),
39
+ install: Flags.string({
40
+ description: 'Shell command to install the CLI tool',
41
+ }),
42
+ description: Flags.string({
43
+ char: 'd',
44
+ description: 'Human-readable description',
45
+ required: true,
46
+ }),
47
+ };
48
+ async run() {
49
+ const { args, flags } = await this.parse(ToolsAdd);
50
+ const jsonMode = shouldOutputJson(flags);
51
+ const meta = () => createMetadata('tools add', flags);
52
+ const hqPath = findHQRoot();
53
+ if (!hqPath) {
54
+ if (jsonMode) {
55
+ outputErrorAsJson('NO_WORKSPACE', 'Not in a proletariat workspace', meta());
56
+ }
57
+ else {
58
+ this.error('Not in a proletariat workspace. Run `prlt init` first.');
59
+ }
60
+ return;
61
+ }
62
+ const registry = loadToolRegistry(hqPath);
63
+ if (args.type === 'mcp') {
64
+ if (!flags.url && !flags.command) {
65
+ if (jsonMode) {
66
+ outputErrorAsJson('MISSING_FLAG', 'MCP server requires --url or --command', meta());
67
+ }
68
+ else {
69
+ this.error('MCP server requires either --url (remote) or --command (local)');
70
+ }
71
+ return;
72
+ }
73
+ if (args.name in registry['mcp-servers']) {
74
+ if (jsonMode) {
75
+ outputErrorAsJson('DUPLICATE', `MCP server '${args.name}' already exists`, meta());
76
+ }
77
+ else {
78
+ this.error(`MCP server '${args.name}' already exists. Remove it first with: prlt tools remove ${args.name}`);
79
+ }
80
+ return;
81
+ }
82
+ const auth = flags.auth ? `\${${flags.auth}}` : undefined;
83
+ addMcpServer(hqPath, args.name, {
84
+ url: flags.url,
85
+ command: flags.command,
86
+ auth,
87
+ description: flags.description,
88
+ });
89
+ if (jsonMode) {
90
+ outputSuccessAsJson({ name: args.name, type: 'mcp', description: flags.description }, meta());
91
+ }
92
+ else {
93
+ this.log(chalk.green(`\nMCP server '${args.name}' registered successfully.`));
94
+ if (flags.url)
95
+ this.log(chalk.dim(` URL: ${flags.url}`));
96
+ if (flags.command)
97
+ this.log(chalk.dim(` Command: ${flags.command}`));
98
+ this.log('');
99
+ }
100
+ }
101
+ else if (args.type === 'cli') {
102
+ const command = flags.command || args.name;
103
+ if (args.name in registry['cli-tools']) {
104
+ if (jsonMode) {
105
+ outputErrorAsJson('DUPLICATE', `CLI tool '${args.name}' already exists`, meta());
106
+ }
107
+ else {
108
+ this.error(`CLI tool '${args.name}' already exists. Remove it first with: prlt tools remove ${args.name}`);
109
+ }
110
+ return;
111
+ }
112
+ addCliTool(hqPath, args.name, {
113
+ command,
114
+ description: flags.description,
115
+ detect: flags.detect,
116
+ install: flags.install,
117
+ });
118
+ if (jsonMode) {
119
+ outputSuccessAsJson({ name: args.name, type: 'cli', command, description: flags.description }, meta());
120
+ }
121
+ else {
122
+ this.log(chalk.green(`\nCLI tool '${args.name}' registered successfully.`));
123
+ this.log(chalk.dim(` Command: ${command}`));
124
+ this.log('');
125
+ }
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/tools/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class ToolsCheck extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
@@ -0,0 +1,75 @@
1
+ import { Command } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { findHQRoot } from '../../lib/workspace.js';
4
+ import { shouldOutputJson } from '../../lib/prompt-json.js';
5
+ import { machineOutputFlags } from '../../lib/pmo/index.js';
6
+ import { loadToolRegistry, checkAllTools } from '../../lib/tool-registry/index.js';
7
+ export default class ToolsCheck extends Command {
8
+ static description = 'Verify all registered tools are available and healthy';
9
+ static examples = [
10
+ '<%= config.bin %> tools check',
11
+ '<%= config.bin %> tools check --json',
12
+ ];
13
+ static flags = {
14
+ ...machineOutputFlags,
15
+ };
16
+ async run() {
17
+ const { flags } = await this.parse(ToolsCheck);
18
+ const jsonMode = shouldOutputJson(flags);
19
+ const hqPath = findHQRoot();
20
+ if (!hqPath) {
21
+ if (jsonMode) {
22
+ this.log(JSON.stringify({ error: 'Not in a proletariat workspace' }));
23
+ }
24
+ else {
25
+ this.error('Not in a proletariat workspace. Run `prlt init` first.');
26
+ }
27
+ return;
28
+ }
29
+ const registry = loadToolRegistry(hqPath);
30
+ const results = checkAllTools(registry);
31
+ if (jsonMode) {
32
+ this.log(JSON.stringify({ results }, null, 2));
33
+ return;
34
+ }
35
+ this.log('');
36
+ this.log(chalk.bold('Tool Health Check'));
37
+ this.log('═'.repeat(60));
38
+ const available = results.filter(r => r.available);
39
+ const unavailable = results.filter(r => !r.available);
40
+ if (available.length > 0) {
41
+ this.log(`\n${chalk.green('Available')}`);
42
+ this.log('─'.repeat(40));
43
+ for (const result of available) {
44
+ const badge = result.type === 'mcp' ? chalk.cyan('[MCP]') : chalk.green('[CLI]');
45
+ this.log(` ${chalk.green('✓')} ${badge} ${result.name}`);
46
+ }
47
+ }
48
+ if (unavailable.length > 0) {
49
+ this.log(`\n${chalk.red('Unavailable')}`);
50
+ this.log('─'.repeat(40));
51
+ for (const result of unavailable) {
52
+ const badge = result.type === 'mcp' ? chalk.cyan('[MCP]') : chalk.green('[CLI]');
53
+ this.log(` ${chalk.red('✗')} ${badge} ${result.name}`);
54
+ if (result.error)
55
+ this.log(` ${chalk.dim(result.error)}`);
56
+ if (result.installHint)
57
+ this.log(` ${chalk.dim(`Install: ${result.installHint}`)}`);
58
+ }
59
+ }
60
+ if (results.length === 0) {
61
+ this.log(chalk.dim('\n No tools registered. Run `prlt tools detect` to find available tools.'));
62
+ }
63
+ this.log('');
64
+ const total = results.length;
65
+ const okCount = available.length;
66
+ if (total > 0) {
67
+ const summary = okCount === total
68
+ ? chalk.green(`All ${total} tools available`)
69
+ : chalk.yellow(`${okCount}/${total} tools available`);
70
+ this.log(summary);
71
+ this.log('');
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/commands/tools/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class ToolsDetect extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ auto: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ }