@trenchwork/erosolar 1.1.36 → 1.1.38
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.
Potentially problematic release.
This version of @trenchwork/erosolar might be problematic. Click here for more details.
- package/README.md +219 -170
- package/SECURITY.md +28 -6
- package/agents/engagement-delivery.rules.json +7 -0
- package/agents/variant-research.rules.json +7 -0
- package/dist/bin/erosolar.js +192 -85
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/capabilities/_opsContext.d.ts +65 -1
- package/dist/capabilities/_opsContext.d.ts.map +1 -1
- package/dist/capabilities/_opsContext.js +43 -0
- package/dist/capabilities/_opsContext.js.map +1 -1
- package/dist/capabilities/heliaCapability.d.ts +15 -0
- package/dist/capabilities/heliaCapability.d.ts.map +1 -0
- package/dist/capabilities/heliaCapability.js +34 -0
- package/dist/capabilities/heliaCapability.js.map +1 -0
- package/dist/capabilities/index.d.ts +1 -0
- package/dist/capabilities/index.d.ts.map +1 -1
- package/dist/capabilities/index.js +1 -0
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/llmRedteamCapability.d.ts.map +1 -1
- package/dist/capabilities/llmRedteamCapability.js +47 -0
- package/dist/capabilities/llmRedteamCapability.js.map +1 -1
- package/dist/core/artifactLog.d.ts +82 -0
- package/dist/core/artifactLog.d.ts.map +1 -0
- package/dist/core/artifactLog.js +224 -0
- package/dist/core/artifactLog.js.map +1 -0
- package/dist/core/artifactStore.d.ts +17 -0
- package/dist/core/artifactStore.d.ts.map +1 -1
- package/dist/core/artifactStore.js +22 -0
- package/dist/core/artifactStore.js.map +1 -1
- package/dist/core/cliTriggerHandlers.d.ts +15 -0
- package/dist/core/cliTriggerHandlers.d.ts.map +1 -0
- package/dist/core/cliTriggerHandlers.js +60 -0
- package/dist/core/cliTriggerHandlers.js.map +1 -0
- package/dist/core/hitl.d.ts +4 -1
- package/dist/core/hitl.d.ts.map +1 -1
- package/dist/core/hitl.js +60 -171
- package/dist/core/hitl.js.map +1 -1
- package/dist/core/portalPresence.d.ts +74 -0
- package/dist/core/portalPresence.d.ts.map +1 -0
- package/dist/core/portalPresence.js +187 -0
- package/dist/core/portalPresence.js.map +1 -0
- package/dist/core/updateChecker.d.ts.map +1 -1
- package/dist/core/updateChecker.js +8 -6
- package/dist/core/updateChecker.js.map +1 -1
- package/dist/headless/interactiveShell.js +23 -0
- package/dist/headless/interactiveShell.js.map +1 -1
- package/dist/plugins/tools/mcp/mcpClient.js +1 -1
- package/dist/plugins/tools/mcp/mcpClient.js.map +1 -1
- package/dist/runtime/node.d.ts.map +1 -1
- package/dist/runtime/node.js +2 -2
- package/dist/runtime/node.js.map +1 -1
- package/dist/runtime/phaseEmitter.d.ts +6 -0
- package/dist/runtime/phaseEmitter.d.ts.map +1 -1
- package/dist/runtime/phaseEmitter.js +0 -0
- package/dist/runtime/phaseEmitter.js.map +1 -1
- package/dist/tools/engagementTools.d.ts.map +1 -1
- package/dist/tools/engagementTools.js +73 -1
- package/dist/tools/engagementTools.js.map +1 -1
- package/dist/tools/heliaControl.d.ts +17 -0
- package/dist/tools/heliaControl.d.ts.map +1 -1
- package/dist/tools/heliaControl.js +108 -2
- package/dist/tools/heliaControl.js.map +1 -1
- package/dist/tools/heliaTools.d.ts +22 -0
- package/dist/tools/heliaTools.d.ts.map +1 -0
- package/dist/tools/heliaTools.js +125 -0
- package/dist/tools/heliaTools.js.map +1 -0
- package/dist/tools/interactionTools.d.ts.map +1 -1
- package/dist/tools/interactionTools.js +31 -15
- package/dist/tools/interactionTools.js.map +1 -1
- package/dist/tools/scheduleTools.d.ts.map +1 -1
- package/dist/tools/scheduleTools.js +5 -2
- package/dist/tools/scheduleTools.js.map +1 -1
- package/dist/tools/webTools.js +1 -1
- package/dist/tools/webTools.js.map +1 -1
- package/dist/ui/ink/AskUserMenu.d.ts +16 -0
- package/dist/ui/ink/AskUserMenu.d.ts.map +1 -0
- package/dist/ui/ink/AskUserMenu.js +85 -0
- package/dist/ui/ink/AskUserMenu.js.map +1 -0
- package/dist/ui/ink/HitlDecisionMenu.d.ts +23 -0
- package/dist/ui/ink/HitlDecisionMenu.d.ts.map +1 -0
- package/dist/ui/ink/HitlDecisionMenu.js +124 -0
- package/dist/ui/ink/HitlDecisionMenu.js.map +1 -0
- package/dist/ui/ink/oneShot.d.ts +33 -0
- package/dist/ui/ink/oneShot.d.ts.map +1 -0
- package/dist/ui/ink/oneShot.js +70 -0
- package/dist/ui/ink/oneShot.js.map +1 -0
- package/dist/utils/heliaClient.d.ts +23 -0
- package/dist/utils/heliaClient.d.ts.map +1 -0
- package/dist/utils/heliaClient.js +79 -0
- package/dist/utils/heliaClient.js.map +1 -0
- package/dist/utils/lambdaClient.d.ts.map +1 -1
- package/dist/utils/lambdaClient.js +9 -0
- package/dist/utils/lambdaClient.js.map +1 -1
- package/dist/utils/statusReporter.d.ts +13 -0
- package/dist/utils/statusReporter.d.ts.map +1 -1
- package/dist/utils/statusReporter.js +26 -0
- package/dist/utils/statusReporter.js.map +1 -1
- package/package.json +2 -2
package/dist/core/hitl.js
CHANGED
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
* Pauses AI execution and prompts users for important decision paths
|
|
4
4
|
* This is the ONLY HITL system in the repository
|
|
5
5
|
*/
|
|
6
|
-
import { stdin, stdout } from 'node:process';
|
|
7
|
-
import * as readline from 'node:readline';
|
|
8
6
|
import { EventEmitter } from 'node:events';
|
|
9
7
|
import chalk from 'chalk';
|
|
10
|
-
import {
|
|
8
|
+
import { isShutdownInProgress, onShutdown, installSignalHandlers } from './shutdown.js';
|
|
11
9
|
/**
|
|
12
10
|
* Module-level event bus that fires when a HITL prompt opens or closes. Other
|
|
13
11
|
* subsystems subscribe to:
|
|
@@ -73,190 +71,81 @@ export class HITLSystem {
|
|
|
73
71
|
return this.promptUserForDecision(fullRequest);
|
|
74
72
|
}
|
|
75
73
|
/**
|
|
76
|
-
* Present decision
|
|
74
|
+
* Present the decision via the Ink-rendered HitlDecisionMenu.
|
|
75
|
+
* Replaces the prior chalk + raw-mode arrow-key implementation;
|
|
76
|
+
* Ink owns the alternate-screen frame, the keypress loop, and the
|
|
77
|
+
* custom-input flow.
|
|
77
78
|
*/
|
|
78
79
|
async promptUserForDecision(request) {
|
|
79
|
-
// Ensure signal handlers are installed for Ctrl+C fallback
|
|
80
80
|
installSignalHandlers();
|
|
81
|
-
// Check if shutdown is already in progress
|
|
82
81
|
if (isShutdownInProgress()) {
|
|
83
82
|
const defaultOption = request.defaultOptionId || request.options[0]?.id;
|
|
84
83
|
if (defaultOption)
|
|
85
84
|
return defaultOption;
|
|
86
85
|
throw new Error('Shutdown in progress');
|
|
87
86
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// Snapshot the terminal state *before* we touch it so we can restore
|
|
97
|
-
// exactly what the parent renderer had set up — UnifiedUIRenderer keeps
|
|
98
|
-
// raw mode ON and stdin flowing; clearing those breaks the next prompt.
|
|
99
|
-
const priorRawMode = stdin.isTTY ? Boolean(stdin.isRaw) : false;
|
|
100
|
-
const priorPaused = stdin.isPaused();
|
|
101
|
-
let cleanedUp = false;
|
|
102
|
-
const promptId = request.id;
|
|
103
|
-
activePromptCount += 1;
|
|
104
|
-
hitlEvents.emit('prompt-open', { id: promptId });
|
|
105
|
-
// Single funnel for every exit path so listeners and event counts stay
|
|
106
|
-
// consistent regardless of how the prompt resolves.
|
|
107
|
-
const cleanup = () => {
|
|
108
|
-
if (cleanedUp)
|
|
87
|
+
activePromptCount += 1;
|
|
88
|
+
hitlEvents.emit('prompt-open', { id: request.id });
|
|
89
|
+
const customId = `custom-${Date.now()}`;
|
|
90
|
+
let timer;
|
|
91
|
+
let resolved = false;
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
const finish = (id, userInput) => {
|
|
94
|
+
if (resolved)
|
|
109
95
|
return;
|
|
110
|
-
|
|
111
|
-
if (
|
|
112
|
-
clearTimeout(
|
|
96
|
+
resolved = true;
|
|
97
|
+
if (timer)
|
|
98
|
+
clearTimeout(timer);
|
|
113
99
|
unregisterCleanup();
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
catch { /* ignore */ }
|
|
123
|
-
}
|
|
124
|
-
if (priorPaused) {
|
|
125
|
-
try {
|
|
126
|
-
stdin.pause();
|
|
127
|
-
}
|
|
128
|
-
catch { /* ignore */ }
|
|
129
|
-
}
|
|
130
|
-
this.cleanupReadline();
|
|
100
|
+
const response = {
|
|
101
|
+
requestId: request.id,
|
|
102
|
+
selectedOptionId: id,
|
|
103
|
+
...(userInput ? { userInput } : {}),
|
|
104
|
+
timestamp: new Date(),
|
|
105
|
+
};
|
|
106
|
+
this.recordDecision(response);
|
|
131
107
|
activePromptCount = Math.max(0, activePromptCount - 1);
|
|
132
|
-
hitlEvents.emit('prompt-close', { id:
|
|
108
|
+
hitlEvents.emit('prompt-close', { id: request.id });
|
|
109
|
+
resolve(id);
|
|
133
110
|
};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const timeoutId = this.config.timeoutMs > 0
|
|
137
|
-
? setTimeout(() => {
|
|
138
|
-
// Only honor the timeout if a default option was provided; without
|
|
139
|
-
// one, the prompt is required to wait indefinitely.
|
|
140
|
-
if (!this.config.timeoutDefaultOptionId)
|
|
141
|
-
return;
|
|
142
|
-
console.log(chalk.yellow(`\n⏰ Timeout - auto-selecting default option`));
|
|
143
|
-
cleanup();
|
|
144
|
-
resolve(this.config.timeoutDefaultOptionId);
|
|
145
|
-
}, this.config.timeoutMs)
|
|
146
|
-
: undefined;
|
|
147
|
-
// Render the menu
|
|
148
|
-
const renderMenu = () => {
|
|
149
|
-
// Clear screen and move cursor to top
|
|
150
|
-
stdout.write('\x1b[2J\x1b[H');
|
|
151
|
-
console.log(chalk.bold.cyan('╔═══════════════════════════════════════════════════════════╗'));
|
|
152
|
-
console.log(chalk.bold.cyan('║ HUMAN DECISION REQUIRED ║'));
|
|
153
|
-
console.log(chalk.bold.cyan('╚═══════════════════════════════════════════════════════════╝\n'));
|
|
154
|
-
console.log(chalk.bold.white(`📋 ${request.title}`));
|
|
155
|
-
console.log(chalk.dim(request.description));
|
|
156
|
-
console.log('');
|
|
157
|
-
if (request.context) {
|
|
158
|
-
console.log(chalk.blue('📝 Context:'));
|
|
159
|
-
console.log(chalk.dim(request.context));
|
|
160
|
-
console.log('');
|
|
161
|
-
}
|
|
162
|
-
console.log(chalk.bold.green('🔘 Use ↑↓ arrows to select, Enter to confirm:\n'));
|
|
163
|
-
menuItems.forEach((item, index) => {
|
|
164
|
-
const isSelected = index === selectedIndex;
|
|
165
|
-
const marker = isSelected ? chalk.bold.cyan('▸ ') : ' ';
|
|
166
|
-
const labelStyle = isSelected ? chalk.bold.cyan : chalk.white;
|
|
167
|
-
const descStyle = isSelected ? chalk.cyan : chalk.dim;
|
|
168
|
-
console.log(`${marker}${labelStyle(item.label)}`);
|
|
169
|
-
console.log(` ${descStyle(item.description)}`);
|
|
170
|
-
console.log('');
|
|
171
|
-
});
|
|
172
|
-
console.log(chalk.dim('Press Ctrl+C to cancel'));
|
|
173
|
-
};
|
|
174
|
-
// Handle custom input after selection. We tear down the raw-mode menu
|
|
175
|
-
// listener first, then hand stdin to a one-shot readline. The shared
|
|
176
|
-
// `cleanup()` is deferred until *after* the user submits, so the
|
|
177
|
-
// prompt-open/close pairing stays balanced.
|
|
178
|
-
const handleCustomInput = () => {
|
|
179
|
-
try {
|
|
180
|
-
stdin.removeListener('data', handleKeypress);
|
|
181
|
-
}
|
|
182
|
-
catch { /* ignore */ }
|
|
183
|
-
if (stdin.isTTY) {
|
|
184
|
-
try {
|
|
185
|
-
stdin.setRawMode(false);
|
|
186
|
-
}
|
|
187
|
-
catch { /* ignore */ }
|
|
188
|
-
}
|
|
189
|
-
console.log(chalk.cyan('\n📝 Enter your custom plan or instruction:'));
|
|
190
|
-
const customRl = readline.createInterface({
|
|
191
|
-
input: stdin,
|
|
192
|
-
output: stdout,
|
|
193
|
-
terminal: stdin.isTTY
|
|
194
|
-
});
|
|
195
|
-
customRl.question(chalk.bold.magenta('👉 Your input: '), (customInput) => {
|
|
196
|
-
customRl.close();
|
|
197
|
-
cleanup();
|
|
198
|
-
if (customInput.trim()) {
|
|
199
|
-
console.log(chalk.green(`\n✅ Using custom input: "${customInput.trim()}"`));
|
|
200
|
-
const customOptionId = `custom-${Date.now()}`;
|
|
201
|
-
const response = {
|
|
202
|
-
requestId: request.id,
|
|
203
|
-
selectedOptionId: customOptionId,
|
|
204
|
-
userInput: customInput.trim(),
|
|
205
|
-
timestamp: new Date()
|
|
206
|
-
};
|
|
207
|
-
this.recordDecision(response);
|
|
208
|
-
resolve(customOptionId);
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
console.log(chalk.yellow('⚠️ Empty input, using first option'));
|
|
212
|
-
resolve(request.options[0]?.id || '__custom__');
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
};
|
|
216
|
-
// Take stdin into raw mode for arrow-key navigation. `cleanup()` will
|
|
217
|
-
// restore whatever state the parent renderer had.
|
|
218
|
-
if (stdin.isTTY) {
|
|
219
|
-
stdin.setRawMode(true);
|
|
220
|
-
}
|
|
221
|
-
stdin.resume();
|
|
222
|
-
const handleKeypress = (chunk) => {
|
|
223
|
-
const key = chunk.toString();
|
|
224
|
-
// Ctrl+C
|
|
225
|
-
if (key === '\x03') {
|
|
226
|
-
cleanup();
|
|
227
|
-
console.log(chalk.red('\n❌ Operation cancelled'));
|
|
228
|
-
void authorizedShutdown(130);
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
// Enter key
|
|
232
|
-
if (key === '\r' || key === '\n') {
|
|
233
|
-
const selectedItem = menuItems[selectedIndex];
|
|
234
|
-
if (selectedItem?.isCustom) {
|
|
235
|
-
// handleCustomInput defers cleanup() until after readline returns.
|
|
236
|
-
handleCustomInput();
|
|
237
|
-
}
|
|
238
|
-
else if (selectedItem) {
|
|
239
|
-
cleanup();
|
|
240
|
-
console.log(chalk.green(`\n✅ Selected: ${selectedItem.label}`));
|
|
241
|
-
resolve(selectedItem.id);
|
|
242
|
-
}
|
|
111
|
+
const unregisterCleanup = onShutdown(() => {
|
|
112
|
+
if (resolved)
|
|
243
113
|
return;
|
|
114
|
+
// Shutdown in flight — pick the default and let the caller drain.
|
|
115
|
+
const fallback = this.config.timeoutDefaultOptionId
|
|
116
|
+
|| request.defaultOptionId
|
|
117
|
+
|| request.options[0]?.id
|
|
118
|
+
|| customId;
|
|
119
|
+
finish(fallback);
|
|
120
|
+
});
|
|
121
|
+
if (this.config.timeoutMs > 0 && this.config.timeoutDefaultOptionId) {
|
|
122
|
+
timer = setTimeout(() => {
|
|
123
|
+
if (!resolved)
|
|
124
|
+
finish(this.config.timeoutDefaultOptionId);
|
|
125
|
+
}, this.config.timeoutMs);
|
|
126
|
+
}
|
|
127
|
+
void (async () => {
|
|
128
|
+
const { showHitlDecision } = await import('../ui/ink/HitlDecisionMenu.js');
|
|
129
|
+
const result = await showHitlDecision({
|
|
130
|
+
title: request.title,
|
|
131
|
+
description: request.description,
|
|
132
|
+
context: request.context,
|
|
133
|
+
options: request.options.map((o) => ({
|
|
134
|
+
id: o.id, label: o.label, description: o.description,
|
|
135
|
+
})),
|
|
136
|
+
customId,
|
|
137
|
+
});
|
|
138
|
+
if (result.userInput) {
|
|
139
|
+
finish(result.selectedOptionId, result.userInput);
|
|
244
140
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
// Up arrow or k
|
|
248
|
-
selectedIndex = Math.max(0, selectedIndex - 1);
|
|
249
|
-
renderMenu();
|
|
250
|
-
}
|
|
251
|
-
else if (key === '\x1b[B' || key === 'j') {
|
|
252
|
-
// Down arrow or j
|
|
253
|
-
selectedIndex = Math.min(menuItems.length - 1, selectedIndex + 1);
|
|
254
|
-
renderMenu();
|
|
141
|
+
else {
|
|
142
|
+
finish(result.selectedOptionId);
|
|
255
143
|
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
144
|
+
})().catch(() => {
|
|
145
|
+
// Ink failed to mount (no TTY etc.) — fall back to default.
|
|
146
|
+
const fallback = request.defaultOptionId || request.options[0]?.id || customId;
|
|
147
|
+
finish(fallback);
|
|
148
|
+
});
|
|
260
149
|
});
|
|
261
150
|
}
|
|
262
151
|
cleanupReadline() {
|
package/dist/core/hitl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/core/hitl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portal presence + signal channel for the running CLI.
|
|
3
|
+
*
|
|
4
|
+
* Three integrations live in this module — they share auth / device
|
|
5
|
+
* identity / fire-and-forget posture and stay easier to reason about
|
|
6
|
+
* when bundled together than scattered across the bin entry, the
|
|
7
|
+
* shell, and individual tools.
|
|
8
|
+
*
|
|
9
|
+
* 1. **Device registration + heartbeat.** On launch, the CLI writes
|
|
10
|
+
* a row to `users/{uid}/appDevices/{deviceId}` with profile,
|
|
11
|
+
* version, hostname, pid, cwd. A 30-second heartbeat keeps
|
|
12
|
+
* `lastSeenAt` warm so the portal can render an honest "this CLI
|
|
13
|
+
* is online" pill instead of guessing from the most-recent
|
|
14
|
+
* activity.
|
|
15
|
+
*
|
|
16
|
+
* 2. **Active-prompt broadcast.** When the user submits a prompt to
|
|
17
|
+
* the interactive shell, we append a message row to
|
|
18
|
+
* `users/{uid}/messages/{ts}` with `role: 'user'` and the prompt
|
|
19
|
+
* text. The portal subscribes to that collection and renders a
|
|
20
|
+
* live "currently asking" panel so an operator on a different
|
|
21
|
+
* machine can see what their CLI is mid-work on.
|
|
22
|
+
*
|
|
23
|
+
* 3. **cli_triggers consumer.** The portal queues commands (e.g.
|
|
24
|
+
* "retest this exploit now") into `users/{uid}/cli_triggers/{id}`
|
|
25
|
+
* via the lambda. The running CLI long-polls that queue, claims
|
|
26
|
+
* each row, runs the matching action, and completes. Without this
|
|
27
|
+
* consumer the queue is dead weight — the portal "Retest now"
|
|
28
|
+
* button would write a row that nothing ever picks up.
|
|
29
|
+
*
|
|
30
|
+
* Every call is best-effort: a failed network round-trip never
|
|
31
|
+
* blocks startup or stalls the prompt loop. The lambda's signed-in
|
|
32
|
+
* gate handles auth uniformly.
|
|
33
|
+
*/
|
|
34
|
+
export interface CliDeviceContext {
|
|
35
|
+
deviceId: string;
|
|
36
|
+
profile: string;
|
|
37
|
+
version: string;
|
|
38
|
+
cwd: string;
|
|
39
|
+
pid: number;
|
|
40
|
+
}
|
|
41
|
+
export declare function registerCliDevice(opts: {
|
|
42
|
+
profile: string;
|
|
43
|
+
version: string;
|
|
44
|
+
projectId?: string;
|
|
45
|
+
}): Promise<CliDeviceContext>;
|
|
46
|
+
/**
|
|
47
|
+
* Append a user/assistant message row so the portal can render the
|
|
48
|
+
* "currently asking" panel. The text is truncated server-side too,
|
|
49
|
+
* but trimming up front keeps the wire payload small.
|
|
50
|
+
*/
|
|
51
|
+
export declare function broadcastMessage(role: 'user' | 'assistant', text: string): Promise<void>;
|
|
52
|
+
export interface PendingTrigger {
|
|
53
|
+
id: string;
|
|
54
|
+
kind: string;
|
|
55
|
+
tool?: string | null;
|
|
56
|
+
args?: Record<string, unknown> | null;
|
|
57
|
+
engagementId?: string | null;
|
|
58
|
+
targetId?: string | null;
|
|
59
|
+
}
|
|
60
|
+
export type TriggerHandler = (t: PendingTrigger) => Promise<{
|
|
61
|
+
status: 'done' | 'failed';
|
|
62
|
+
result?: Record<string, unknown>;
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Long-poll `cli_triggers` and dispatch each queued row to the
|
|
66
|
+
* supplied handler. Runs forever (until process exit). Errors in the
|
|
67
|
+
* handler are recorded via cliTriggerComplete with status='failed' so
|
|
68
|
+
* the portal can surface a useful message instead of leaving the
|
|
69
|
+
* trigger spinning.
|
|
70
|
+
*/
|
|
71
|
+
export declare function startTriggerConsumer(handler: TriggerHandler): void;
|
|
72
|
+
export declare function stopTriggerConsumer(): void;
|
|
73
|
+
export declare function _resetForTests(): void;
|
|
74
|
+
//# sourceMappingURL=portalPresence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portalPresence.d.ts","sourceRoot":"","sources":["../../src/core/portalPresence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAuBD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6B5B;AA8BD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9F;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAE7H;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CA4BlE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAUD,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portal presence + signal channel for the running CLI.
|
|
3
|
+
*
|
|
4
|
+
* Three integrations live in this module — they share auth / device
|
|
5
|
+
* identity / fire-and-forget posture and stay easier to reason about
|
|
6
|
+
* when bundled together than scattered across the bin entry, the
|
|
7
|
+
* shell, and individual tools.
|
|
8
|
+
*
|
|
9
|
+
* 1. **Device registration + heartbeat.** On launch, the CLI writes
|
|
10
|
+
* a row to `users/{uid}/appDevices/{deviceId}` with profile,
|
|
11
|
+
* version, hostname, pid, cwd. A 30-second heartbeat keeps
|
|
12
|
+
* `lastSeenAt` warm so the portal can render an honest "this CLI
|
|
13
|
+
* is online" pill instead of guessing from the most-recent
|
|
14
|
+
* activity.
|
|
15
|
+
*
|
|
16
|
+
* 2. **Active-prompt broadcast.** When the user submits a prompt to
|
|
17
|
+
* the interactive shell, we append a message row to
|
|
18
|
+
* `users/{uid}/messages/{ts}` with `role: 'user'` and the prompt
|
|
19
|
+
* text. The portal subscribes to that collection and renders a
|
|
20
|
+
* live "currently asking" panel so an operator on a different
|
|
21
|
+
* machine can see what their CLI is mid-work on.
|
|
22
|
+
*
|
|
23
|
+
* 3. **cli_triggers consumer.** The portal queues commands (e.g.
|
|
24
|
+
* "retest this exploit now") into `users/{uid}/cli_triggers/{id}`
|
|
25
|
+
* via the lambda. The running CLI long-polls that queue, claims
|
|
26
|
+
* each row, runs the matching action, and completes. Without this
|
|
27
|
+
* consumer the queue is dead weight — the portal "Retest now"
|
|
28
|
+
* button would write a row that nothing ever picks up.
|
|
29
|
+
*
|
|
30
|
+
* Every call is best-effort: a failed network round-trip never
|
|
31
|
+
* blocks startup or stalls the prompt loop. The lambda's signed-in
|
|
32
|
+
* gate handles auth uniformly.
|
|
33
|
+
*/
|
|
34
|
+
import { hostname, platform, userInfo } from 'node:os';
|
|
35
|
+
import { createHash } from 'node:crypto';
|
|
36
|
+
import { callLambda } from '../utils/lambdaClient.js';
|
|
37
|
+
let activeContext = null;
|
|
38
|
+
let heartbeatTimer = null;
|
|
39
|
+
let triggerConsumerStopped = false;
|
|
40
|
+
const HEARTBEAT_INTERVAL_MS = 30_000;
|
|
41
|
+
const TRIGGER_POLL_INTERVAL_MS = 4_000;
|
|
42
|
+
/**
|
|
43
|
+
* Stable device id per (host + user + cwd-prefix). Same machine + same
|
|
44
|
+
* user + same project tree resolves to the same row, so multiple CLI
|
|
45
|
+
* launches in the same project replace rather than fork. The hash
|
|
46
|
+
* is truncated to 16 hex (~64 bits) — collision-irrelevant inside a
|
|
47
|
+
* single user namespace.
|
|
48
|
+
*/
|
|
49
|
+
function deriveDeviceId() {
|
|
50
|
+
const host = hostname();
|
|
51
|
+
const user = userInfo().username;
|
|
52
|
+
const cwd = process.cwd();
|
|
53
|
+
return `cli-${createHash('sha256').update(`${host}|${user}|${cwd}`).digest('hex').slice(0, 16)}`;
|
|
54
|
+
}
|
|
55
|
+
export async function registerCliDevice(opts) {
|
|
56
|
+
const deviceId = deriveDeviceId();
|
|
57
|
+
const ctx = {
|
|
58
|
+
deviceId,
|
|
59
|
+
profile: opts.profile,
|
|
60
|
+
version: opts.version,
|
|
61
|
+
cwd: process.cwd(),
|
|
62
|
+
pid: process.pid,
|
|
63
|
+
};
|
|
64
|
+
activeContext = ctx;
|
|
65
|
+
// Fire-and-forget — the portal mirror should never block the agent
|
|
66
|
+
// loop. A failed call retries on the next heartbeat.
|
|
67
|
+
void callLambda('cliDeviceRegister', {
|
|
68
|
+
deviceId,
|
|
69
|
+
kind: 'cli',
|
|
70
|
+
profile: opts.profile,
|
|
71
|
+
version: opts.version,
|
|
72
|
+
platform: platform(),
|
|
73
|
+
hostname: hostname(),
|
|
74
|
+
user: userInfo().username,
|
|
75
|
+
pid: process.pid,
|
|
76
|
+
cwd: process.cwd(),
|
|
77
|
+
projectId: opts.projectId ?? null,
|
|
78
|
+
}).catch(() => { });
|
|
79
|
+
startHeartbeat();
|
|
80
|
+
registerExitHook();
|
|
81
|
+
return ctx;
|
|
82
|
+
}
|
|
83
|
+
function startHeartbeat() {
|
|
84
|
+
if (heartbeatTimer)
|
|
85
|
+
return;
|
|
86
|
+
heartbeatTimer = setInterval(() => {
|
|
87
|
+
if (!activeContext)
|
|
88
|
+
return;
|
|
89
|
+
void callLambda('cliDeviceHeartbeat', {
|
|
90
|
+
deviceId: activeContext.deviceId,
|
|
91
|
+
}).catch(() => { });
|
|
92
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
93
|
+
// Don't keep the event loop alive for the heartbeat alone.
|
|
94
|
+
heartbeatTimer.unref?.();
|
|
95
|
+
}
|
|
96
|
+
function registerExitHook() {
|
|
97
|
+
const markOffline = () => {
|
|
98
|
+
if (!activeContext)
|
|
99
|
+
return;
|
|
100
|
+
// Best-effort — process is exiting, we don't await. The lambda
|
|
101
|
+
// also expires devices whose lastSeenAt is older than 5min, so a
|
|
102
|
+
// missed offline marker isn't fatal.
|
|
103
|
+
void callLambda('cliDeviceHeartbeat', {
|
|
104
|
+
deviceId: activeContext.deviceId,
|
|
105
|
+
offline: true,
|
|
106
|
+
}).catch(() => { });
|
|
107
|
+
};
|
|
108
|
+
process.once('exit', markOffline);
|
|
109
|
+
process.once('SIGINT', markOffline);
|
|
110
|
+
process.once('SIGTERM', markOffline);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Append a user/assistant message row so the portal can render the
|
|
114
|
+
* "currently asking" panel. The text is truncated server-side too,
|
|
115
|
+
* but trimming up front keeps the wire payload small.
|
|
116
|
+
*/
|
|
117
|
+
export async function broadcastMessage(role, text) {
|
|
118
|
+
if (!activeContext)
|
|
119
|
+
return; // not registered yet — startup race, ignore
|
|
120
|
+
const trimmed = (text ?? '').slice(0, 4 * 1024);
|
|
121
|
+
if (!trimmed)
|
|
122
|
+
return;
|
|
123
|
+
void callLambda('cliMessageEmit', {
|
|
124
|
+
deviceId: activeContext.deviceId,
|
|
125
|
+
role,
|
|
126
|
+
text: trimmed,
|
|
127
|
+
}).catch(() => { });
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Long-poll `cli_triggers` and dispatch each queued row to the
|
|
131
|
+
* supplied handler. Runs forever (until process exit). Errors in the
|
|
132
|
+
* handler are recorded via cliTriggerComplete with status='failed' so
|
|
133
|
+
* the portal can surface a useful message instead of leaving the
|
|
134
|
+
* trigger spinning.
|
|
135
|
+
*/
|
|
136
|
+
export function startTriggerConsumer(handler) {
|
|
137
|
+
if (triggerConsumerStopped)
|
|
138
|
+
return;
|
|
139
|
+
void (async () => {
|
|
140
|
+
while (!triggerConsumerStopped) {
|
|
141
|
+
try {
|
|
142
|
+
const r = await callLambda('cliTriggerListPending', {});
|
|
143
|
+
const items = r.ok ? (r.result?.items ?? []) : [];
|
|
144
|
+
for (const item of items) {
|
|
145
|
+
// Race: two CLIs in the same user namespace would both list
|
|
146
|
+
// the same row. cliTriggerClaim is a transaction that flips
|
|
147
|
+
// status='running'; the loser gets failed-precondition and
|
|
148
|
+
// moves on.
|
|
149
|
+
const claim = await callLambda('cliTriggerClaim', { id: item.id });
|
|
150
|
+
if (!claim.ok)
|
|
151
|
+
continue;
|
|
152
|
+
let outcome;
|
|
153
|
+
try {
|
|
154
|
+
outcome = await handler(item);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
outcome = { status: 'failed', result: { error: err.message } };
|
|
158
|
+
}
|
|
159
|
+
await callLambda('cliTriggerComplete', {
|
|
160
|
+
id: item.id, status: outcome.status, result: outcome.result ?? null,
|
|
161
|
+
}).catch(() => { });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (_) { /* ignore — try again next tick */ }
|
|
165
|
+
await sleep(TRIGGER_POLL_INTERVAL_MS);
|
|
166
|
+
}
|
|
167
|
+
})();
|
|
168
|
+
}
|
|
169
|
+
export function stopTriggerConsumer() {
|
|
170
|
+
triggerConsumerStopped = true;
|
|
171
|
+
}
|
|
172
|
+
function sleep(ms) {
|
|
173
|
+
return new Promise((resolve) => {
|
|
174
|
+
const t = setTimeout(resolve, ms);
|
|
175
|
+
t.unref?.();
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// Exposed only so tests can clear module-level state between cases.
|
|
179
|
+
export function _resetForTests() {
|
|
180
|
+
if (heartbeatTimer) {
|
|
181
|
+
clearInterval(heartbeatTimer);
|
|
182
|
+
heartbeatTimer = null;
|
|
183
|
+
}
|
|
184
|
+
activeContext = null;
|
|
185
|
+
triggerConsumerStopped = false;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=portalPresence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portalPresence.js","sourceRoot":"","sources":["../../src/core/portalPresence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateChecker.d.ts","sourceRoot":"","sources":["../../src/core/updateChecker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAWxC;;GAEG;AACH,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"updateChecker.d.ts","sourceRoot":"","sources":["../../src/core/updateChecker.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,12 +32,14 @@ export async function checkForUpdates(currentVersion) {
|
|
|
32
32
|
return updateCheckCache;
|
|
33
33
|
}
|
|
34
34
|
try {
|
|
35
|
-
// CRITICAL: must use the SCOPED package name
|
|
36
|
-
// unscoped `erosolar-coder`
|
|
37
|
-
// published v1.0.86) —
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
35
|
+
// CRITICAL: must use the SCOPED package name `@trenchwork/erosolar`.
|
|
36
|
+
// The unscoped name `erosolar-coder` on npm is a DIFFERENT package
|
|
37
|
+
// by an unrelated author (last published v1.0.86) — not us, not our
|
|
38
|
+
// brand. Querying it returns a stale third-party version that looks
|
|
39
|
+
// "older" than ours, so the update check silently never fires and
|
|
40
|
+
// users sit on outdated builds until they manually reinstall. Real
|
|
41
|
+
// bug we shipped before the package was scoped; do not let a future
|
|
42
|
+
// refactor "simplify" this back to the unscoped name.
|
|
41
43
|
const { stdout } = await execAsync('npm view @trenchwork/erosolar version', {
|
|
42
44
|
timeout: 5000,
|
|
43
45
|
encoding: 'utf8',
|