@proletariat/cli 0.3.58 → 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 (189) hide show
  1. package/dist/commands/{spec → dashboard}/index.d.ts +4 -4
  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/{spec/link/index.d.ts → session/exec.d.ts} +5 -3
  16. package/dist/commands/session/exec.js +205 -0
  17. package/dist/commands/session/exec.js.map +1 -0
  18. package/dist/commands/session/index.js +12 -0
  19. package/dist/commands/session/index.js.map +1 -1
  20. package/dist/commands/{spec/delete.d.ts → session/inspect.d.ts} +3 -3
  21. package/dist/commands/session/inspect.js +316 -0
  22. package/dist/commands/session/inspect.js.map +1 -0
  23. package/dist/commands/session/peek.d.ts +15 -0
  24. package/dist/commands/session/peek.js +141 -8
  25. package/dist/commands/session/peek.js.map +1 -1
  26. package/dist/commands/session/poke.d.ts +4 -1
  27. package/dist/commands/session/poke.js +175 -20
  28. package/dist/commands/session/poke.js.map +1 -1
  29. package/dist/commands/{spec/link/depends.d.ts → session/restart.d.ts} +6 -4
  30. package/dist/commands/session/restart.js +320 -0
  31. package/dist/commands/session/restart.js.map +1 -0
  32. package/dist/commands/tools/add.d.ts +20 -0
  33. package/dist/commands/tools/add.js +129 -0
  34. package/dist/commands/tools/add.js.map +1 -0
  35. package/dist/commands/tools/check.d.ts +10 -0
  36. package/dist/commands/tools/check.js +75 -0
  37. package/dist/commands/tools/check.js.map +1 -0
  38. package/dist/commands/tools/detect.d.ts +11 -0
  39. package/dist/commands/tools/detect.js +107 -0
  40. package/dist/commands/tools/detect.js.map +1 -0
  41. package/dist/commands/tools/index.d.ts +11 -0
  42. package/dist/commands/tools/index.js +87 -0
  43. package/dist/commands/tools/index.js.map +1 -0
  44. package/dist/commands/tools/remove.d.ts +13 -0
  45. package/dist/commands/tools/remove.js +55 -0
  46. package/dist/commands/tools/remove.js.map +1 -0
  47. package/dist/commands/{spec/view.d.ts → trello/configure.d.ts} +6 -6
  48. package/dist/commands/trello/configure.js +259 -0
  49. package/dist/commands/trello/configure.js.map +1 -0
  50. package/dist/commands/{spec/plan.d.ts → trello/import.d.ts} +3 -5
  51. package/dist/commands/trello/import.js +241 -0
  52. package/dist/commands/trello/import.js.map +1 -0
  53. package/dist/commands/{spec/ticket.d.ts → trello/sync.d.ts} +5 -6
  54. package/dist/commands/trello/sync.js +190 -0
  55. package/dist/commands/trello/sync.js.map +1 -0
  56. package/dist/commands/work/start.d.ts +1 -0
  57. package/dist/commands/work/start.js +17 -39
  58. package/dist/commands/work/start.js.map +1 -1
  59. package/dist/lib/dashboard/data.d.ts +64 -0
  60. package/dist/lib/dashboard/data.js +259 -0
  61. package/dist/lib/dashboard/data.js.map +1 -0
  62. package/dist/lib/dashboard/html.d.ts +7 -0
  63. package/dist/lib/dashboard/html.js +682 -0
  64. package/dist/lib/dashboard/html.js.map +1 -0
  65. package/dist/lib/dashboard/server.d.ts +20 -0
  66. package/dist/lib/dashboard/server.js +114 -0
  67. package/dist/lib/dashboard/server.js.map +1 -0
  68. package/dist/lib/execution/config.d.ts +8 -0
  69. package/dist/lib/execution/config.js +83 -4
  70. package/dist/lib/execution/config.js.map +1 -1
  71. package/dist/lib/execution/runners.d.ts +36 -3
  72. package/dist/lib/execution/runners.js +216 -35
  73. package/dist/lib/execution/runners.js.map +1 -1
  74. package/dist/lib/execution/spawner.d.ts +2 -0
  75. package/dist/lib/execution/spawner.js +22 -31
  76. package/dist/lib/execution/spawner.js.map +1 -1
  77. package/dist/lib/execution/types.d.ts +26 -5
  78. package/dist/lib/execution/types.js +24 -0
  79. package/dist/lib/execution/types.js.map +1 -1
  80. package/dist/lib/external-issues/adapters.d.ts +17 -0
  81. package/dist/lib/external-issues/adapters.js +88 -0
  82. package/dist/lib/external-issues/adapters.js.map +1 -1
  83. package/dist/lib/external-issues/mapping-store.js +1 -1
  84. package/dist/lib/external-issues/trello.d.ts +80 -0
  85. package/dist/lib/external-issues/trello.js +266 -0
  86. package/dist/lib/external-issues/trello.js.map +1 -0
  87. package/dist/lib/external-issues/types.d.ts +3 -3
  88. package/dist/lib/external-issues/types.js +1 -1
  89. package/dist/lib/external-issues/types.js.map +1 -1
  90. package/dist/lib/linear/client.d.ts +4 -3
  91. package/dist/lib/linear/client.js +185 -122
  92. package/dist/lib/linear/client.js.map +1 -1
  93. package/dist/lib/mcp/tools/cli-passthrough.js +77 -0
  94. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
  95. package/dist/lib/mcp/tools/index.d.ts +0 -1
  96. package/dist/lib/mcp/tools/index.js +0 -1
  97. package/dist/lib/mcp/tools/index.js.map +1 -1
  98. package/dist/lib/onboarding/detect-tools.d.ts +15 -0
  99. package/dist/lib/onboarding/detect-tools.js +44 -0
  100. package/dist/lib/onboarding/detect-tools.js.map +1 -0
  101. package/dist/lib/onboarding/index.d.ts +2 -0
  102. package/dist/lib/onboarding/index.js +3 -0
  103. package/dist/lib/onboarding/index.js.map +1 -0
  104. package/dist/lib/onboarding/wizard.d.ts +25 -0
  105. package/dist/lib/onboarding/wizard.js +156 -0
  106. package/dist/lib/onboarding/wizard.js.map +1 -0
  107. package/dist/lib/pmo/schema.d.ts +2 -1
  108. package/dist/lib/pmo/schema.js +3 -1
  109. package/dist/lib/pmo/schema.js.map +1 -1
  110. package/dist/lib/runners/claude-code-runner.js +6 -0
  111. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  112. package/dist/lib/tool-registry/detect.d.ts +20 -0
  113. package/dist/lib/tool-registry/detect.js +95 -0
  114. package/dist/lib/tool-registry/detect.js.map +1 -0
  115. package/dist/lib/tool-registry/index.d.ts +10 -0
  116. package/dist/lib/tool-registry/index.js +13 -0
  117. package/dist/lib/tool-registry/index.js.map +1 -0
  118. package/dist/lib/tool-registry/policy.d.ts +32 -0
  119. package/dist/lib/tool-registry/policy.js +97 -0
  120. package/dist/lib/tool-registry/policy.js.map +1 -0
  121. package/dist/lib/tool-registry/registry.d.ts +42 -0
  122. package/dist/lib/tool-registry/registry.js +120 -0
  123. package/dist/lib/tool-registry/registry.js.map +1 -0
  124. package/dist/lib/tool-registry/spawn.d.ts +50 -0
  125. package/dist/lib/tool-registry/spawn.js +103 -0
  126. package/dist/lib/tool-registry/spawn.js.map +1 -0
  127. package/dist/lib/tool-registry/types.d.ts +56 -0
  128. package/dist/lib/tool-registry/types.js +109 -0
  129. package/dist/lib/tool-registry/types.js.map +1 -0
  130. package/dist/lib/trello/client.d.ts +23 -0
  131. package/dist/lib/trello/client.js +114 -0
  132. package/dist/lib/trello/client.js.map +1 -0
  133. package/dist/lib/trello/config.d.ts +55 -0
  134. package/dist/lib/trello/config.js +127 -0
  135. package/dist/lib/trello/config.js.map +1 -0
  136. package/dist/lib/trello/index.d.ts +5 -0
  137. package/dist/lib/trello/index.js +5 -0
  138. package/dist/lib/trello/index.js.map +1 -0
  139. package/dist/lib/trello/mapper.d.ts +13 -0
  140. package/dist/lib/trello/mapper.js +71 -0
  141. package/dist/lib/trello/mapper.js.map +1 -0
  142. package/dist/lib/trello/sync.d.ts +13 -0
  143. package/dist/lib/trello/sync.js +38 -0
  144. package/dist/lib/trello/sync.js.map +1 -0
  145. package/dist/lib/trello/types.d.ts +53 -0
  146. package/dist/lib/trello/types.js +2 -0
  147. package/dist/lib/trello/types.js.map +1 -0
  148. package/dist/lib/work-source/client.js +17 -0
  149. package/dist/lib/work-source/client.js.map +1 -1
  150. package/dist/lib/work-source/config.d.ts +1 -1
  151. package/dist/lib/work-source/config.js +11 -1
  152. package/dist/lib/work-source/config.js.map +1 -1
  153. package/oclif.manifest.json +3460 -3476
  154. package/package.json +6 -2
  155. package/dist/commands/spec/create.d.ts +0 -20
  156. package/dist/commands/spec/create.js +0 -171
  157. package/dist/commands/spec/create.js.map +0 -1
  158. package/dist/commands/spec/delete.js +0 -112
  159. package/dist/commands/spec/delete.js.map +0 -1
  160. package/dist/commands/spec/edit.d.ts +0 -23
  161. package/dist/commands/spec/edit.js +0 -262
  162. package/dist/commands/spec/edit.js.map +0 -1
  163. package/dist/commands/spec/index.js +0 -88
  164. package/dist/commands/spec/index.js.map +0 -1
  165. package/dist/commands/spec/link/depends.js +0 -87
  166. package/dist/commands/spec/link/depends.js.map +0 -1
  167. package/dist/commands/spec/link/index.js +0 -93
  168. package/dist/commands/spec/link/index.js.map +0 -1
  169. package/dist/commands/spec/link/remove.d.ts +0 -18
  170. package/dist/commands/spec/link/remove.js +0 -91
  171. package/dist/commands/spec/link/remove.js.map +0 -1
  172. package/dist/commands/spec/list.d.ts +0 -14
  173. package/dist/commands/spec/list.js +0 -101
  174. package/dist/commands/spec/list.js.map +0 -1
  175. package/dist/commands/spec/plan.js +0 -102
  176. package/dist/commands/spec/plan.js.map +0 -1
  177. package/dist/commands/spec/ticket.js +0 -144
  178. package/dist/commands/spec/ticket.js.map +0 -1
  179. package/dist/commands/spec/view.js +0 -202
  180. package/dist/commands/spec/view.js.map +0 -1
  181. package/dist/lib/mcp/tools/spec.d.ts +0 -6
  182. package/dist/lib/mcp/tools/spec.js +0 -197
  183. package/dist/lib/mcp/tools/spec.js.map +0 -1
  184. package/dist/lib/pmo/spec-parser.d.ts +0 -25
  185. package/dist/lib/pmo/spec-parser.js +0 -206
  186. package/dist/lib/pmo/spec-parser.js.map +0 -1
  187. package/dist/lib/pmo/spec-types.d.ts +0 -43
  188. package/dist/lib/pmo/spec-types.js +0 -8
  189. package/dist/lib/pmo/spec-types.js.map +0 -1
@@ -7,6 +7,10 @@ export default class SessionPeek extends PMOCommand {
7
7
  };
8
8
  static flags: {
9
9
  lines: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
+ full: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ since: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ follow: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ interval: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
14
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
15
  machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
16
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -30,6 +34,17 @@ export default class SessionPeek extends PMOCommand {
30
34
  * In JSON mode: outputs structured JSON.
31
35
  */
32
36
  private outputPeek;
37
+ /**
38
+ * Filter content to only include lines after a given timestamp.
39
+ * Looks for timestamp patterns in lines and filters accordingly.
40
+ * If no timestamps found, returns all content (best effort).
41
+ */
42
+ private filterSince;
43
+ /**
44
+ * Follow mode: continuously stream new output (like tail -f).
45
+ * Captures pane content at regular intervals and outputs only new lines.
46
+ */
47
+ private followMode;
33
48
  /**
34
49
  * Get verified sessions from DB that have actual tmux processes.
35
50
  * Same discovery pattern as attach.ts and list.ts.
@@ -7,6 +7,7 @@ import { ExecutionStorage } from '../../lib/execution/index.js';
7
7
  import { parseSessionName, getHostTmuxSessionNames, getContainerTmuxSessionMap, flattenContainerSessions, findContainerSessionsByPrefix, findSessionForExecution, captureTmuxPane, } from '../../lib/execution/session-utils.js';
8
8
  import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
9
9
  import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
10
+ import { onShutdown } from '../../lib/signal-handler.js';
10
11
  // =============================================================================
11
12
  // Command
12
13
  // =============================================================================
@@ -17,6 +18,9 @@ export default class SessionPeek extends PMOCommand {
17
18
  '<%= config.bin %> session peek TKT-123',
18
19
  '<%= config.bin %> session peek WORK-ABCD1234',
19
20
  '<%= config.bin %> session peek altman --lines 100',
21
+ '<%= config.bin %> session peek altman --full',
22
+ '<%= config.bin %> session peek altman --follow',
23
+ '<%= config.bin %> session peek altman --since 2025-01-01T12:00:00Z',
20
24
  '<%= config.bin %> session peek TKT-123 --json',
21
25
  '<%= config.bin %> session peek altman | grep error',
22
26
  ];
@@ -31,7 +35,23 @@ export default class SessionPeek extends PMOCommand {
31
35
  lines: Flags.integer({
32
36
  char: 'l',
33
37
  description: 'Number of scrollback lines to capture',
34
- default: 50,
38
+ default: 200,
39
+ }),
40
+ full: Flags.boolean({
41
+ description: 'Capture entire scrollback buffer (up to 32768 lines)',
42
+ default: false,
43
+ }),
44
+ since: Flags.string({
45
+ description: 'Filter output to lines after this timestamp (ISO 8601)',
46
+ }),
47
+ follow: Flags.boolean({
48
+ char: 'f',
49
+ description: 'Stream output continuously (like tail -f)',
50
+ default: false,
51
+ }),
52
+ interval: Flags.integer({
53
+ description: 'Polling interval in seconds for --follow mode',
54
+ default: 2,
35
55
  }),
36
56
  };
37
57
  getPMOOptions() {
@@ -40,6 +60,8 @@ export default class SessionPeek extends PMOCommand {
40
60
  async execute() {
41
61
  const { args, flags } = await this.parse(SessionPeek);
42
62
  const jsonMode = shouldOutputJson(flags);
63
+ // Determine effective line count
64
+ const effectiveLines = flags.full ? 32768 : flags.lines;
43
65
  // Discover all verified sessions
44
66
  const sessions = this.getVerifiedSessions();
45
67
  if (sessions.length === 0) {
@@ -64,20 +86,26 @@ export default class SessionPeek extends PMOCommand {
64
86
  }
65
87
  this.error(`No matching session found for "${args.target}". Run "prlt session list" to see available sessions.`);
66
88
  }
89
+ // Handle --follow mode for streaming output
90
+ if (flags.follow && matched.length === 1) {
91
+ await this.followMode(matched[0], effectiveLines, flags.interval);
92
+ return;
93
+ }
67
94
  // Output all matched sessions
68
95
  if (jsonMode && matched.length > 1) {
69
96
  // Collect all captures into a single JSON response
70
97
  const results = matched.map(session => {
71
98
  const containerId = session.environment === 'container' ? session.containerId : undefined;
72
- const content = captureTmuxPane(session.sessionId, flags.lines, containerId);
99
+ const content = captureTmuxPane(session.sessionId, effectiveLines, containerId);
100
+ const filteredContent = flags.since ? this.filterSince(content, flags.since) : content;
73
101
  return {
74
102
  sessionId: session.sessionId,
75
103
  ticketId: session.ticketId,
76
104
  agentName: session.agentName,
77
105
  environment: session.environment,
78
106
  containerId: session.containerId,
79
- lines: flags.lines,
80
- content,
107
+ lines: effectiveLines,
108
+ content: filteredContent,
81
109
  captureError: content === null
82
110
  ? `Failed to capture pane content for session "${session.sessionId}".`
83
111
  : undefined,
@@ -87,7 +115,7 @@ export default class SessionPeek extends PMOCommand {
87
115
  return;
88
116
  }
89
117
  for (const session of matched) {
90
- this.outputPeek(session, flags.lines, jsonMode, flags);
118
+ this.outputPeek(session, effectiveLines, jsonMode, flags);
91
119
  }
92
120
  }
93
121
  else {
@@ -107,7 +135,11 @@ export default class SessionPeek extends PMOCommand {
107
135
  if (!session) {
108
136
  this.error('No session selected');
109
137
  }
110
- this.outputPeek(session, flags.lines, jsonMode, flags);
138
+ if (flags.follow) {
139
+ await this.followMode(session, effectiveLines, flags.interval);
140
+ return;
141
+ }
142
+ this.outputPeek(session, effectiveLines, jsonMode, flags);
111
143
  }
112
144
  }
113
145
  /**
@@ -181,6 +213,9 @@ export default class SessionPeek extends PMOCommand {
181
213
  this.error(`Failed to capture pane content for session "${session.sessionId}". ` +
182
214
  'The session may no longer exist or tmux may not be available.');
183
215
  }
216
+ // Apply --since filtering if provided
217
+ const sinceFlag = flags.since;
218
+ const filteredContent = sinceFlag ? this.filterSince(content, sinceFlag) : content;
184
219
  if (jsonMode) {
185
220
  outputSuccessAsJson({
186
221
  sessionId: session.sessionId,
@@ -189,13 +224,111 @@ export default class SessionPeek extends PMOCommand {
189
224
  environment: session.environment,
190
225
  containerId: session.containerId,
191
226
  lines,
192
- content,
227
+ content: filteredContent,
228
+ ...(sinceFlag ? { filteredSince: sinceFlag } : {}),
193
229
  }, createMetadata('session peek', flags));
194
230
  }
195
231
  else {
196
232
  // Raw text output — pipeable and scriptable
197
- process.stdout.write(content + '\n');
233
+ process.stdout.write((filteredContent || '') + '\n');
234
+ }
235
+ }
236
+ /**
237
+ * Filter content to only include lines after a given timestamp.
238
+ * Looks for timestamp patterns in lines and filters accordingly.
239
+ * If no timestamps found, returns all content (best effort).
240
+ */
241
+ filterSince(content, since) {
242
+ if (!content)
243
+ return content;
244
+ const sinceDate = new Date(since);
245
+ if (isNaN(sinceDate.getTime()))
246
+ return content;
247
+ const sinceMs = sinceDate.getTime();
248
+ const lines = content.split('\n');
249
+ const filteredLines = [];
250
+ let pastThreshold = false;
251
+ // Common timestamp patterns in terminal output
252
+ const timestampPatterns = [
253
+ /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/, // ISO 8601
254
+ /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/, // SQL-like
255
+ /\[\d{2}:\d{2}:\d{2}\]/, // [HH:MM:SS]
256
+ ];
257
+ for (const line of lines) {
258
+ if (pastThreshold) {
259
+ filteredLines.push(line);
260
+ continue;
261
+ }
262
+ for (const pattern of timestampPatterns) {
263
+ const match = line.match(pattern);
264
+ if (match) {
265
+ try {
266
+ const lineDate = new Date(match[0]);
267
+ if (!isNaN(lineDate.getTime()) && lineDate.getTime() >= sinceMs) {
268
+ pastThreshold = true;
269
+ filteredLines.push(line);
270
+ }
271
+ }
272
+ catch {
273
+ // Not a valid date, skip
274
+ }
275
+ break;
276
+ }
277
+ }
278
+ }
279
+ // If no timestamps were found, return all content
280
+ return filteredLines.length > 0 ? filteredLines.join('\n') : content;
281
+ }
282
+ /**
283
+ * Follow mode: continuously stream new output (like tail -f).
284
+ * Captures pane content at regular intervals and outputs only new lines.
285
+ */
286
+ async followMode(session, lines, intervalSeconds) {
287
+ const containerId = session.environment === 'container' ? session.containerId : undefined;
288
+ let previousContent = '';
289
+ // Initial capture
290
+ const initial = captureTmuxPane(session.sessionId, lines, containerId);
291
+ if (initial) {
292
+ process.stdout.write(initial + '\n');
293
+ previousContent = initial;
198
294
  }
295
+ const intervalMs = intervalSeconds * 1000;
296
+ await new Promise((resolve) => {
297
+ const timer = setInterval(() => {
298
+ const content = captureTmuxPane(session.sessionId, lines, containerId);
299
+ if (content === null) {
300
+ // Session ended
301
+ process.stdout.write('\n[Session ended]\n');
302
+ clearInterval(timer);
303
+ resolve();
304
+ return;
305
+ }
306
+ // Find new content by comparing with previous
307
+ if (content !== previousContent) {
308
+ // Find the divergence point
309
+ const prevLines = previousContent.split('\n');
310
+ const currLines = content.split('\n');
311
+ // Look for the last matching line to find new content
312
+ let newStartIndex = 0;
313
+ if (prevLines.length > 0) {
314
+ const lastPrevLine = prevLines[prevLines.length - 1];
315
+ const lastPrevIdx = currLines.lastIndexOf(lastPrevLine);
316
+ if (lastPrevIdx >= 0) {
317
+ newStartIndex = lastPrevIdx + 1;
318
+ }
319
+ }
320
+ const newLines = currLines.slice(newStartIndex);
321
+ if (newLines.length > 0) {
322
+ process.stdout.write(newLines.join('\n') + '\n');
323
+ }
324
+ previousContent = content;
325
+ }
326
+ }, intervalMs);
327
+ onShutdown(() => {
328
+ clearInterval(timer);
329
+ resolve();
330
+ });
331
+ });
199
332
  }
200
333
  /**
201
334
  * Get verified sessions from DB that have actual tmux processes.
@@ -1 +1 @@
1
- {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../../src/commands/session/peek.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peek.js","sourceRoot":"","sources":["../../../src/commands/session/peek.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,12 @@ export default class SessionPoke extends PMOCommand {
4
4
  static examples: string[];
5
5
  static args: {
6
6
  agent: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- message: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ message: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
8
  };
9
9
  static flags: {
10
+ file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ wait: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
13
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
14
  machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
15
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -1,11 +1,12 @@
1
- import { Args } from '@oclif/core';
1
+ import { Args, Flags } from '@oclif/core';
2
+ import * as fs from 'node:fs';
2
3
  import * as path from 'node:path';
3
4
  import { execSync } from 'node:child_process';
4
5
  import Database from 'better-sqlite3';
5
6
  import { styles } from '../../lib/styles.js';
6
7
  import { getWorkspaceInfo } from '../../lib/agents/commands.js';
7
8
  import { ExecutionStorage } from '../../lib/execution/index.js';
8
- import { getHostTmuxSessionNames, getContainerTmuxSessionMap, findContainerSessionsByPrefix, findSessionForExecution, } from '../../lib/execution/session-utils.js';
9
+ import { getHostTmuxSessionNames, getContainerTmuxSessionMap, findContainerSessionsByPrefix, findSessionForExecution, captureTmuxPane, } from '../../lib/execution/session-utils.js';
9
10
  import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
10
11
  import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
11
12
  // =============================================================================
@@ -19,18 +20,34 @@ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadat
19
20
  function sendMessage(sessionId, message, containerId) {
20
21
  // Escape single quotes in the message for shell safety
21
22
  const escapedMessage = message.replace(/'/g, "'\\''");
22
- // Send the text first (without Enter), using -l (literal) flag so tmux
23
+ // First send Escape to clear any buffered input in the prompt — without
24
+ // this, text already typed by the agent concatenates with our message,
25
+ // producing garbage.
26
+ const sendEscapeCmd = `tmux send-keys -t "${sessionId}" Escape`;
27
+ // Send the text (without Enter), using -l (literal) flag so tmux
23
28
  // does not interpret special characters - message is delivered verbatim
24
29
  const sendTextCmd = `tmux send-keys -l -t "${sessionId}" '${escapedMessage}'`;
25
30
  // Then send Enter separately (Enter is a tmux key name, not literal text)
26
31
  const sendEnterCmd = `tmux send-keys -t "${sessionId}" Enter`;
27
32
  if (containerId) {
33
+ // Clear any buffered input first
34
+ execSync(`docker exec ${containerId} bash -c '${sendEscapeCmd}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
35
+ // Wait for Escape to take effect before sending new text
36
+ execSync('sleep 0.2', { stdio: ['pipe', 'pipe', 'pipe'] });
28
37
  execSync(`docker exec ${containerId} bash -c '${sendTextCmd}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
29
38
  // Small delay before sending Enter to avoid race conditions
30
39
  execSync('sleep 0.1', { stdio: ['pipe', 'pipe', 'pipe'] });
31
40
  execSync(`docker exec ${containerId} bash -c '${sendEnterCmd}'`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10000 });
32
41
  }
33
42
  else {
43
+ // Clear any buffered input first
44
+ execSync(sendEscapeCmd, {
45
+ encoding: 'utf-8',
46
+ stdio: ['pipe', 'pipe', 'pipe'],
47
+ timeout: 5000,
48
+ });
49
+ // Wait for Escape to take effect before sending new text
50
+ execSync('sleep 0.2', { stdio: ['pipe', 'pipe', 'pipe'] });
34
51
  execSync(sendTextCmd, {
35
52
  encoding: 'utf-8',
36
53
  stdio: ['pipe', 'pipe', 'pipe'],
@@ -53,6 +70,9 @@ export default class SessionPoke extends PMOCommand {
53
70
  static examples = [
54
71
  '<%= config.bin %> session poke altman "Please focus on the tests first"',
55
72
  '<%= config.bin %> session poke TKT-123 "Add error handling for edge cases"',
73
+ '<%= config.bin %> session poke altman --file prompt.md',
74
+ '<%= config.bin %> session poke altman "Run the tests" --wait --timeout 60',
75
+ 'echo "multi-line message" | <%= config.bin %> session poke altman -',
56
76
  ];
57
77
  static args = {
58
78
  agent: Args.string({
@@ -60,12 +80,25 @@ export default class SessionPoke extends PMOCommand {
60
80
  required: true,
61
81
  }),
62
82
  message: Args.string({
63
- description: 'Message to send to the agent session',
64
- required: true,
83
+ description: 'Message to send (use "-" to read from stdin, or omit with --file)',
84
+ required: false,
65
85
  }),
66
86
  };
67
87
  static flags = {
68
88
  ...pmoBaseFlags,
89
+ file: Flags.string({
90
+ char: 'F',
91
+ description: 'Read message from a file (supports multi-line)',
92
+ }),
93
+ wait: Flags.boolean({
94
+ char: 'w',
95
+ description: 'Wait for response after sending (capture output after message is sent)',
96
+ default: false,
97
+ }),
98
+ timeout: Flags.integer({
99
+ description: 'Timeout in seconds for --wait mode',
100
+ default: 120,
101
+ }),
69
102
  };
70
103
  getPMOOptions() {
71
104
  return { promptIfMultiple: false };
@@ -73,14 +106,80 @@ export default class SessionPoke extends PMOCommand {
73
106
  async execute() {
74
107
  const { args, flags } = await this.parse(SessionPoke);
75
108
  const jsonMode = shouldOutputJson(flags);
76
- const { agent, message } = args;
109
+ const { agent } = args;
110
+ // Resolve the message from args, --file, or stdin
111
+ let message;
112
+ if (flags.file) {
113
+ try {
114
+ message = fs.readFileSync(flags.file, 'utf-8');
115
+ }
116
+ catch (error) {
117
+ const errMsg = error instanceof Error ? error.message : String(error);
118
+ if (jsonMode) {
119
+ outputErrorAsJson('FILE_READ_ERROR', `Failed to read file "${flags.file}": ${errMsg}`, createMetadata('session poke', flags));
120
+ }
121
+ else {
122
+ this.log('');
123
+ this.log(styles.error(`Failed to read file "${flags.file}": ${errMsg}`));
124
+ this.log('');
125
+ }
126
+ return;
127
+ }
128
+ }
129
+ else if (args.message === '-') {
130
+ // Read from stdin
131
+ try {
132
+ message = fs.readFileSync(0, 'utf-8');
133
+ }
134
+ catch {
135
+ if (jsonMode) {
136
+ outputErrorAsJson('STDIN_READ_ERROR', 'Failed to read from stdin.', createMetadata('session poke', flags));
137
+ }
138
+ else {
139
+ this.log('');
140
+ this.log(styles.error('Failed to read from stdin.'));
141
+ this.log('');
142
+ }
143
+ return;
144
+ }
145
+ }
146
+ else if (args.message) {
147
+ message = args.message;
148
+ }
149
+ else {
150
+ if (jsonMode) {
151
+ outputErrorAsJson('NO_MESSAGE', 'No message provided. Pass a message argument, use --file, or pipe to stdin with "-".', createMetadata('session poke', flags));
152
+ }
153
+ else {
154
+ this.log('');
155
+ this.log(styles.error('No message provided.'));
156
+ this.log(styles.muted('Usage: prlt session poke <agent> "message"'));
157
+ this.log(styles.muted(' prlt session poke <agent> --file prompt.md'));
158
+ this.log(styles.muted(' echo "msg" | prlt session poke <agent> -'));
159
+ this.log('');
160
+ }
161
+ return;
162
+ }
77
163
  // Resolve the agent's active session
78
164
  const resolved = this.resolveAgentSession(agent, jsonMode, flags);
79
165
  if (!resolved)
80
166
  return;
81
- // Send the message
167
+ // Capture pre-send content for --wait mode
168
+ let preSendContent = null;
169
+ if (flags.wait) {
170
+ preSendContent = captureTmuxPane(resolved.sessionId, 200, resolved.containerId);
171
+ }
172
+ // Send the message (split multi-line into individual sends)
82
173
  try {
83
- sendMessage(resolved.sessionId, message, resolved.containerId);
174
+ const messageLines = message.trim().split('\n');
175
+ if (messageLines.length === 1) {
176
+ sendMessage(resolved.sessionId, messageLines[0], resolved.containerId);
177
+ }
178
+ else {
179
+ // For multi-line messages, send the entire text as a single literal
180
+ // to preserve the message structure
181
+ sendMessage(resolved.sessionId, message.trim(), resolved.containerId);
182
+ }
84
183
  }
85
184
  catch (error) {
86
185
  const errMsg = error instanceof Error ? error.message : String(error);
@@ -89,42 +188,98 @@ export default class SessionPoke extends PMOCommand {
89
188
  if (jsonMode) {
90
189
  outputErrorAsJson('SESSION_NOT_FOUND', `tmux session "${resolved.sessionId}" does not exist. The agent may have exited.`, createMetadata('session poke', flags));
91
190
  }
92
- this.log('');
93
- this.log(styles.error(`tmux session "${resolved.sessionId}" does not exist. The agent may have exited.`));
94
- this.log(styles.muted('Use `prlt session list` to see running sessions.'));
95
- this.log('');
191
+ else {
192
+ this.log('');
193
+ this.log(styles.error(`tmux session "${resolved.sessionId}" does not exist. The agent may have exited.`));
194
+ this.log(styles.muted('Use `prlt session list` to see running sessions.'));
195
+ this.log('');
196
+ }
96
197
  return;
97
198
  }
98
199
  if (errMsg.includes('No such container') || errMsg.includes('is not running')) {
99
200
  if (jsonMode) {
100
201
  outputErrorAsJson('CONTAINER_NOT_RUNNING', `Docker container for agent "${resolved.agentName}" is not running.`, createMetadata('session poke', flags));
101
202
  }
102
- this.log('');
103
- this.log(styles.error(`Docker container for agent "${resolved.agentName}" is not running.`));
104
- this.log(styles.muted('The container may have stopped. Check with `docker ps`.'));
105
- this.log('');
203
+ else {
204
+ this.log('');
205
+ this.log(styles.error(`Docker container for agent "${resolved.agentName}" is not running.`));
206
+ this.log(styles.muted('The container may have stopped. Check with `docker ps`.'));
207
+ this.log('');
208
+ }
106
209
  return;
107
210
  }
108
211
  // Generic send failure
109
212
  if (jsonMode) {
110
213
  outputErrorAsJson('SEND_FAILED', `Failed to send message to agent "${resolved.agentName}": ${errMsg}`, createMetadata('session poke', flags));
111
214
  }
112
- this.log('');
113
- this.log(styles.error(`Failed to send message: ${errMsg}`));
114
- this.log('');
215
+ else {
216
+ this.log('');
217
+ this.log(styles.error(`Failed to send message: ${errMsg}`));
218
+ this.log('');
219
+ }
115
220
  return;
116
221
  }
222
+ // Handle --wait mode: capture output after sending
223
+ let responseContent = null;
224
+ if (flags.wait) {
225
+ const timeoutMs = flags.timeout * 1000;
226
+ const startTime = Date.now();
227
+ // Wait briefly for the agent to start processing
228
+ await new Promise(resolve => setTimeout(resolve, 2000));
229
+ // Poll for new output until timeout
230
+ while (Date.now() - startTime < timeoutMs) {
231
+ const currentContent = captureTmuxPane(resolved.sessionId, 200, resolved.containerId);
232
+ if (currentContent && currentContent !== preSendContent) {
233
+ // Check if the agent appears to be done (idle/prompt visible)
234
+ const lines = currentContent.split('\n');
235
+ const lastNonEmpty = [...lines].reverse().find(l => l.trim().length > 0) || '';
236
+ const atPrompt = /[$❯#>]\s*$/.test(lastNonEmpty);
237
+ const isDone = /agent work complete/i.test(lastNonEmpty);
238
+ const isWorking = /esc to interrupt/i.test(currentContent.split('\n').slice(-5).join('\n'));
239
+ // If agent is idle or done, capture the response
240
+ if (atPrompt || isDone || !isWorking) {
241
+ // Get just the new lines since we sent the message
242
+ if (preSendContent) {
243
+ const preLines = preSendContent.split('\n');
244
+ const curLines = currentContent.split('\n');
245
+ const lastPreLine = preLines[preLines.length - 1];
246
+ const matchIdx = curLines.lastIndexOf(lastPreLine);
247
+ if (matchIdx >= 0) {
248
+ responseContent = curLines.slice(matchIdx + 1).join('\n');
249
+ }
250
+ else {
251
+ responseContent = currentContent;
252
+ }
253
+ }
254
+ else {
255
+ responseContent = currentContent;
256
+ }
257
+ break;
258
+ }
259
+ }
260
+ await new Promise(resolve => setTimeout(resolve, 2000));
261
+ }
262
+ if (responseContent === null) {
263
+ responseContent = '[Timeout: no response captured within ' + flags.timeout + ' seconds]';
264
+ }
265
+ }
117
266
  // Output result
118
267
  if (jsonMode) {
119
268
  outputSuccessAsJson({
120
269
  success: true,
121
270
  agent: resolved.agentName,
122
271
  session: resolved.sessionId,
123
- message,
272
+ message: message.trim(),
273
+ ...(flags.wait ? { response: responseContent } : {}),
124
274
  }, createMetadata('session poke', flags));
125
275
  }
126
276
  this.log('');
127
277
  this.log(styles.success(`Message sent to ${resolved.agentName} (${resolved.ticketId})`));
278
+ if (flags.wait && responseContent) {
279
+ this.log('');
280
+ this.log(styles.info('Response:'));
281
+ this.log(responseContent);
282
+ }
128
283
  this.log('');
129
284
  }
130
285
  /**