@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.
- package/dist/commands/{spec → dashboard}/index.d.ts +4 -4
- package/dist/commands/dashboard/index.js +117 -0
- package/dist/commands/dashboard/index.js.map +1 -0
- package/dist/commands/execution/config.js +5 -4
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/stop.js +4 -2
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.js +3 -0
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +40 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp-server.js +1 -2
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/{spec/link/index.d.ts → session/exec.d.ts} +5 -3
- package/dist/commands/session/exec.js +205 -0
- package/dist/commands/session/exec.js.map +1 -0
- package/dist/commands/session/index.js +12 -0
- package/dist/commands/session/index.js.map +1 -1
- package/dist/commands/{spec/delete.d.ts → session/inspect.d.ts} +3 -3
- package/dist/commands/session/inspect.js +316 -0
- package/dist/commands/session/inspect.js.map +1 -0
- package/dist/commands/session/peek.d.ts +15 -0
- package/dist/commands/session/peek.js +141 -8
- package/dist/commands/session/peek.js.map +1 -1
- package/dist/commands/session/poke.d.ts +4 -1
- package/dist/commands/session/poke.js +175 -20
- package/dist/commands/session/poke.js.map +1 -1
- package/dist/commands/{spec/link/depends.d.ts → session/restart.d.ts} +6 -4
- package/dist/commands/session/restart.js +320 -0
- package/dist/commands/session/restart.js.map +1 -0
- package/dist/commands/tools/add.d.ts +20 -0
- package/dist/commands/tools/add.js +129 -0
- package/dist/commands/tools/add.js.map +1 -0
- package/dist/commands/tools/check.d.ts +10 -0
- package/dist/commands/tools/check.js +75 -0
- package/dist/commands/tools/check.js.map +1 -0
- package/dist/commands/tools/detect.d.ts +11 -0
- package/dist/commands/tools/detect.js +107 -0
- package/dist/commands/tools/detect.js.map +1 -0
- package/dist/commands/tools/index.d.ts +11 -0
- package/dist/commands/tools/index.js +87 -0
- package/dist/commands/tools/index.js.map +1 -0
- package/dist/commands/tools/remove.d.ts +13 -0
- package/dist/commands/tools/remove.js +55 -0
- package/dist/commands/tools/remove.js.map +1 -0
- package/dist/commands/{spec/view.d.ts → trello/configure.d.ts} +6 -6
- package/dist/commands/trello/configure.js +259 -0
- package/dist/commands/trello/configure.js.map +1 -0
- package/dist/commands/{spec/plan.d.ts → trello/import.d.ts} +3 -5
- package/dist/commands/trello/import.js +241 -0
- package/dist/commands/trello/import.js.map +1 -0
- package/dist/commands/{spec/ticket.d.ts → trello/sync.d.ts} +5 -6
- package/dist/commands/trello/sync.js +190 -0
- package/dist/commands/trello/sync.js.map +1 -0
- package/dist/commands/work/start.d.ts +1 -0
- package/dist/commands/work/start.js +17 -39
- package/dist/commands/work/start.js.map +1 -1
- package/dist/lib/dashboard/data.d.ts +64 -0
- package/dist/lib/dashboard/data.js +259 -0
- package/dist/lib/dashboard/data.js.map +1 -0
- package/dist/lib/dashboard/html.d.ts +7 -0
- package/dist/lib/dashboard/html.js +682 -0
- package/dist/lib/dashboard/html.js.map +1 -0
- package/dist/lib/dashboard/server.d.ts +20 -0
- package/dist/lib/dashboard/server.js +114 -0
- package/dist/lib/dashboard/server.js.map +1 -0
- package/dist/lib/execution/config.d.ts +8 -0
- package/dist/lib/execution/config.js +83 -4
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/runners.d.ts +36 -3
- package/dist/lib/execution/runners.js +216 -35
- package/dist/lib/execution/runners.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +2 -0
- package/dist/lib/execution/spawner.js +22 -31
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/types.d.ts +26 -5
- package/dist/lib/execution/types.js +24 -0
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/adapters.d.ts +17 -0
- package/dist/lib/external-issues/adapters.js +88 -0
- package/dist/lib/external-issues/adapters.js.map +1 -1
- package/dist/lib/external-issues/mapping-store.js +1 -1
- package/dist/lib/external-issues/trello.d.ts +80 -0
- package/dist/lib/external-issues/trello.js +266 -0
- package/dist/lib/external-issues/trello.js.map +1 -0
- package/dist/lib/external-issues/types.d.ts +3 -3
- package/dist/lib/external-issues/types.js +1 -1
- package/dist/lib/external-issues/types.js.map +1 -1
- package/dist/lib/linear/client.d.ts +4 -3
- package/dist/lib/linear/client.js +185 -122
- package/dist/lib/linear/client.js.map +1 -1
- package/dist/lib/mcp/tools/cli-passthrough.js +77 -0
- package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
- package/dist/lib/mcp/tools/index.d.ts +0 -1
- package/dist/lib/mcp/tools/index.js +0 -1
- package/dist/lib/mcp/tools/index.js.map +1 -1
- package/dist/lib/onboarding/detect-tools.d.ts +15 -0
- package/dist/lib/onboarding/detect-tools.js +44 -0
- package/dist/lib/onboarding/detect-tools.js.map +1 -0
- package/dist/lib/onboarding/index.d.ts +2 -0
- package/dist/lib/onboarding/index.js +3 -0
- package/dist/lib/onboarding/index.js.map +1 -0
- package/dist/lib/onboarding/wizard.d.ts +25 -0
- package/dist/lib/onboarding/wizard.js +156 -0
- package/dist/lib/onboarding/wizard.js.map +1 -0
- package/dist/lib/pmo/schema.d.ts +2 -1
- package/dist/lib/pmo/schema.js +3 -1
- package/dist/lib/pmo/schema.js.map +1 -1
- package/dist/lib/runners/claude-code-runner.js +6 -0
- package/dist/lib/runners/claude-code-runner.js.map +1 -1
- package/dist/lib/tool-registry/detect.d.ts +20 -0
- package/dist/lib/tool-registry/detect.js +95 -0
- package/dist/lib/tool-registry/detect.js.map +1 -0
- package/dist/lib/tool-registry/index.d.ts +10 -0
- package/dist/lib/tool-registry/index.js +13 -0
- package/dist/lib/tool-registry/index.js.map +1 -0
- package/dist/lib/tool-registry/policy.d.ts +32 -0
- package/dist/lib/tool-registry/policy.js +97 -0
- package/dist/lib/tool-registry/policy.js.map +1 -0
- package/dist/lib/tool-registry/registry.d.ts +42 -0
- package/dist/lib/tool-registry/registry.js +120 -0
- package/dist/lib/tool-registry/registry.js.map +1 -0
- package/dist/lib/tool-registry/spawn.d.ts +50 -0
- package/dist/lib/tool-registry/spawn.js +103 -0
- package/dist/lib/tool-registry/spawn.js.map +1 -0
- package/dist/lib/tool-registry/types.d.ts +56 -0
- package/dist/lib/tool-registry/types.js +109 -0
- package/dist/lib/tool-registry/types.js.map +1 -0
- package/dist/lib/trello/client.d.ts +23 -0
- package/dist/lib/trello/client.js +114 -0
- package/dist/lib/trello/client.js.map +1 -0
- package/dist/lib/trello/config.d.ts +55 -0
- package/dist/lib/trello/config.js +127 -0
- package/dist/lib/trello/config.js.map +1 -0
- package/dist/lib/trello/index.d.ts +5 -0
- package/dist/lib/trello/index.js +5 -0
- package/dist/lib/trello/index.js.map +1 -0
- package/dist/lib/trello/mapper.d.ts +13 -0
- package/dist/lib/trello/mapper.js +71 -0
- package/dist/lib/trello/mapper.js.map +1 -0
- package/dist/lib/trello/sync.d.ts +13 -0
- package/dist/lib/trello/sync.js +38 -0
- package/dist/lib/trello/sync.js.map +1 -0
- package/dist/lib/trello/types.d.ts +53 -0
- package/dist/lib/trello/types.js +2 -0
- package/dist/lib/trello/types.js.map +1 -0
- package/dist/lib/work-source/client.js +17 -0
- package/dist/lib/work-source/client.js.map +1 -1
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +11 -1
- package/dist/lib/work-source/config.js.map +1 -1
- package/oclif.manifest.json +3460 -3476
- package/package.json +6 -2
- package/dist/commands/spec/create.d.ts +0 -20
- package/dist/commands/spec/create.js +0 -171
- package/dist/commands/spec/create.js.map +0 -1
- package/dist/commands/spec/delete.js +0 -112
- package/dist/commands/spec/delete.js.map +0 -1
- package/dist/commands/spec/edit.d.ts +0 -23
- package/dist/commands/spec/edit.js +0 -262
- package/dist/commands/spec/edit.js.map +0 -1
- package/dist/commands/spec/index.js +0 -88
- package/dist/commands/spec/index.js.map +0 -1
- package/dist/commands/spec/link/depends.js +0 -87
- package/dist/commands/spec/link/depends.js.map +0 -1
- package/dist/commands/spec/link/index.js +0 -93
- package/dist/commands/spec/link/index.js.map +0 -1
- package/dist/commands/spec/link/remove.d.ts +0 -18
- package/dist/commands/spec/link/remove.js +0 -91
- package/dist/commands/spec/link/remove.js.map +0 -1
- package/dist/commands/spec/list.d.ts +0 -14
- package/dist/commands/spec/list.js +0 -101
- package/dist/commands/spec/list.js.map +0 -1
- package/dist/commands/spec/plan.js +0 -102
- package/dist/commands/spec/plan.js.map +0 -1
- package/dist/commands/spec/ticket.js +0 -144
- package/dist/commands/spec/ticket.js.map +0 -1
- package/dist/commands/spec/view.js +0 -202
- package/dist/commands/spec/view.js.map +0 -1
- package/dist/lib/mcp/tools/spec.d.ts +0 -6
- package/dist/lib/mcp/tools/spec.js +0 -197
- package/dist/lib/mcp/tools/spec.js.map +0 -1
- package/dist/lib/pmo/spec-parser.d.ts +0 -25
- package/dist/lib/pmo/spec-parser.js +0 -206
- package/dist/lib/pmo/spec-parser.js.map +0 -1
- package/dist/lib/pmo/spec-types.d.ts +0 -43
- package/dist/lib/pmo/spec-types.js +0 -8
- 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:
|
|
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,
|
|
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:
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,eAAe,GAChB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GACf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAexD,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU;IACjD,MAAM,CAAC,WAAW,GAAG,kEAAkE,CAAA;IAEvF,MAAM,CAAC,QAAQ,GAAG;QAChB,uCAAuC;QACvC,wCAAwC;QACxC,8CAA8C;QAC9C,mDAAmD;QACnD,8CAA8C;QAC9C,gDAAgD;QAChD,oEAAoE;QACpE,+CAA+C;QAC/C,oDAAoD;KACrD,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,YAAY;QACf,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,uCAAuC;YACpD,OAAO,EAAE,GAAG;SACb,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,sDAAsD;YACnE,OAAO,EAAE,KAAK;SACf,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,wDAAwD;SACtE,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,CAAC;SACX,CAAC;KACH,CAAA;IAES,aAAa;QACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAExC,iCAAiC;QACjC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;QAEvD,iCAAiC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CACf,aAAa,EACb,2BAA2B,EAC3B,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CACtC,CAAA;gBACD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAA;YACnD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACZ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAA;YACtE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACZ,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,wCAAwC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,QAAQ,EAAE,CAAC;oBACb,iBAAiB,CACf,mBAAmB,EACnB,kCAAkC,IAAI,CAAC,MAAM,IAAI,EACjD,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CACtC,CAAA;oBACD,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,MAAM,uDAAuD,CAAC,CAAA;YAClH,CAAC;YAED,4CAA4C;YAC5C,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACjE,OAAM;YACR,CAAC;YAED,8BAA8B;YAC9B,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,mDAAmD;gBACnD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;oBACpC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;oBACzF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAA;oBAC/E,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;oBACtF,OAAO;wBACL,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,KAAK,EAAE,cAAc;wBACrB,OAAO,EAAE,eAAe;wBACxB,YAAY,EAAE,OAAO,KAAK,IAAI;4BAC5B,CAAC,CAAC,+CAA+C,OAAO,CAAC,SAAS,IAAI;4BACtE,CAAC,CAAC,SAAS;qBACd,CAAA;gBACH,CAAC,CAAC,CAAA;gBACF,mBAAmB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAA;gBACjF,OAAM;YACR,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC3D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;gBACzC,OAAO,EAAE,8BAA8B;gBACvC,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,WAAW,GAAG;gBACpF,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC5B,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,SAAS,UAAU;gBAC9D,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;aACnE,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAM;YACR,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAA;YAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACnC,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC9D,OAAM;YACR,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,MAAc,EAAE,QAA2B;QAC/D,6BAA6B;QAC7B,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAA;QACjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,YAAY,CAAA;QAEhD,qCAAqC;QACrC,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;YACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAA;YACvE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,aAAa,CAAA;QACpD,CAAC;QAED,qEAAqE;QACrE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAA;YAChF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,cAAc,CAAA;QACtD,CAAC;QAED,uBAAuB;QACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAA;QACjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,YAAY,CAAA;QAEhD,+BAA+B;QAC/B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC7B,CAAA;QACD,OAAO,cAAc,CAAA;IACvB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,WAAmB,EAAE,QAA2B;QAC3E,IAAI,EAAE,GAA6B,IAAI,CAAA;QACvC,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,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;YACzB,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;YACjD,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;YAE5D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzB,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,CACzE,CAAA;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;gBAAS,CAAC;YACT,EAAE,EAAE,KAAK,EAAE,CAAA;QACb,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED;;;;OAIG;IACK,UAAU,CAChB,OAAwB,EACxB,KAAa,EACb,QAAiB,EACjB,KAA8B;QAE9B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;QACzF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;QAEtE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,CACf,gBAAgB,EAChB,+CAA+C,OAAO,CAAC,SAAS,kEAAkE,EAClI,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CACtC,CAAA;gBACD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,KAAK,CACR,+CAA+C,OAAO,CAAC,SAAS,KAAK;gBACrE,+DAA+D,CAChE,CAAA;QACH,CAAC;QAED,sCAAsC;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,KAA2B,CAAA;QACnD,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAElF,IAAI,QAAQ,EAAE,CAAC;YACb,mBAAmB,CAAC;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,KAAK;gBACL,OAAO,EAAE,eAAe;gBACxB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,EAAE,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,OAAsB,EAAE,KAAa;QACvD,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAA;QAE5B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,OAAO,CAAA;QAE9C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,aAAa,GAAa,EAAE,CAAA;QAClC,IAAI,aAAa,GAAG,KAAK,CAAA;QAEzB,+CAA+C;QAC/C,MAAM,iBAAiB,GAAG;YACxB,qCAAqC,EAAG,WAAW;YACnD,qCAAqC,EAAI,WAAW;YACpD,uBAAuB,EAAqB,aAAa;SAC1D,CAAA;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACxB,SAAQ;YACV,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBACjC,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;wBACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;4BAChE,aAAa,GAAG,IAAI,CAAA;4BACpB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC1B,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;oBACD,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACtE,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,UAAU,CACtB,OAAwB,EACxB,KAAa,EACb,eAAuB;QAEvB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;QACzF,IAAI,eAAe,GAAG,EAAE,CAAA;QAExB,kBAAkB;QAClB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;QACtE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;YACpC,eAAe,GAAG,OAAO,CAAA;QAC3B,CAAC;QAED,MAAM,UAAU,GAAG,eAAe,GAAG,IAAI,CAAA;QAEzC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7B,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;gBACtE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,gBAAgB;oBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;oBAC3C,aAAa,CAAC,KAAK,CAAC,CAAA;oBACpB,OAAO,EAAE,CAAA;oBACT,OAAM;gBACR,CAAC;gBAED,8CAA8C;gBAC9C,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;oBAChC,4BAA4B;oBAC5B,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAErC,sDAAsD;oBACtD,IAAI,aAAa,GAAG,CAAC,CAAA;oBACrB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;wBACpD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;wBACvD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;4BACrB,aAAa,GAAG,WAAW,GAAG,CAAC,CAAA;wBACjC,CAAC;oBACH,CAAC;oBAED,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;oBAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;oBAClD,CAAC;oBACD,eAAe,GAAG,OAAO,CAAA;gBAC3B,CAAC;YACH,CAAC,EAAE,UAAU,CAAC,CAAA;YAEd,UAAU,CAAC,GAAG,EAAE;gBACd,aAAa,CAAC,KAAK,CAAC,CAAA;gBACpB,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACK,mBAAmB;QACzB,MAAM,QAAQ,GAAsB,EAAE,CAAA;QAEtC,IAAI,gBAAgB,GAA4B,IAAI,CAAA;QACpD,IAAI,EAAE,GAA6B,IAAI,CAAA;QAEvC,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,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;YACzB,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAA;YAClD,MAAM,qBAAqB,GAAG,0BAA0B,EAAE,CAAA;YAC1D,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,qBAAqB,CAAC,CAAA;YAE5E,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;YAC7C,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAU,CAAA;YAElD,gCAAgC;YAChC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC;gBAC1C,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;gBACjE,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;aACnE,CAAC,CAAC,CAAC,EAAE,CAAA;YAEN,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,cAAc,CAAA;gBACvD,IAAI,MAAM,GAAG,KAAK,CAAA;gBAClB,IAAI,WAA+B,CAAA;gBACnC,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAA;gBAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACpC,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;wBAChG,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;wBACvF,IAAI,KAAK,EAAE,CAAC;4BACV,eAAe,GAAG,KAAK,CAAA;4BACvB,MAAM,GAAG,IAAI,CAAA;4BACb,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;wBAChC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;wBACtF,IAAI,KAAK,EAAE,CAAC;4BACV,eAAe,GAAG,KAAK,CAAA;4BACvB,MAAM,GAAG,IAAI,CAAA;wBACf,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,eAAe;wBAAE,SAAQ;gBAChC,CAAC;qBAAM,CAAC;oBACN,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACpC,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;wBAChG,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;wBACnD,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;oBAChC,CAAC;yBAAM,CAAC;wBACN,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACpD,CAAC;gBACH,CAAC;gBAED,IAAI,MAAM,IAAI,eAAe,EAAE,CAAC;oBAC9B,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;wBAC/B,wBAAwB,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,eAAe,EAAE,CAAC,CAAA;oBACnE,CAAC;yBAAM,CAAC;wBACN,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;oBAC1C,CAAC;oBAED,QAAQ,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,eAAe;wBAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;wBAC/C,WAAW;wBACX,MAAM,EAAE,IAAI;qBACb,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,KAAK,MAAM,WAAW,IAAI,gBAAgB,EAAE,CAAC;gBAC3C,IAAI,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;oBAAE,SAAQ;gBAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,WAAW;wBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,WAAW,EAAE,MAAM;wBACnB,MAAM,EAAE,YAAY;qBACrB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,KAAK,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,oBAAoB,EAAE,CAAC;gBAChE,IAAI,wBAAwB,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;oBAAE,SAAQ;gBAC3E,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ,CAAC,IAAI,CAAC;wBACZ,SAAS,EAAE,WAAW;wBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,WAAW,EAAE,WAAW;wBACxB,WAAW;wBACX,MAAM,EAAE,YAAY;qBACrB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,EAAE,EAAE,KAAK,EAAE,CAAA;QACb,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC"}
|
|
@@ -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
|
-
//
|
|
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
|
|
64
|
-
required:
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
/**
|