@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.

Files changed (98) hide show
  1. package/README.md +219 -170
  2. package/SECURITY.md +28 -6
  3. package/agents/engagement-delivery.rules.json +7 -0
  4. package/agents/variant-research.rules.json +7 -0
  5. package/dist/bin/erosolar.js +192 -85
  6. package/dist/bin/erosolar.js.map +1 -1
  7. package/dist/capabilities/_opsContext.d.ts +65 -1
  8. package/dist/capabilities/_opsContext.d.ts.map +1 -1
  9. package/dist/capabilities/_opsContext.js +43 -0
  10. package/dist/capabilities/_opsContext.js.map +1 -1
  11. package/dist/capabilities/heliaCapability.d.ts +15 -0
  12. package/dist/capabilities/heliaCapability.d.ts.map +1 -0
  13. package/dist/capabilities/heliaCapability.js +34 -0
  14. package/dist/capabilities/heliaCapability.js.map +1 -0
  15. package/dist/capabilities/index.d.ts +1 -0
  16. package/dist/capabilities/index.d.ts.map +1 -1
  17. package/dist/capabilities/index.js +1 -0
  18. package/dist/capabilities/index.js.map +1 -1
  19. package/dist/capabilities/llmRedteamCapability.d.ts.map +1 -1
  20. package/dist/capabilities/llmRedteamCapability.js +47 -0
  21. package/dist/capabilities/llmRedteamCapability.js.map +1 -1
  22. package/dist/core/artifactLog.d.ts +82 -0
  23. package/dist/core/artifactLog.d.ts.map +1 -0
  24. package/dist/core/artifactLog.js +224 -0
  25. package/dist/core/artifactLog.js.map +1 -0
  26. package/dist/core/artifactStore.d.ts +17 -0
  27. package/dist/core/artifactStore.d.ts.map +1 -1
  28. package/dist/core/artifactStore.js +22 -0
  29. package/dist/core/artifactStore.js.map +1 -1
  30. package/dist/core/cliTriggerHandlers.d.ts +15 -0
  31. package/dist/core/cliTriggerHandlers.d.ts.map +1 -0
  32. package/dist/core/cliTriggerHandlers.js +60 -0
  33. package/dist/core/cliTriggerHandlers.js.map +1 -0
  34. package/dist/core/hitl.d.ts +4 -1
  35. package/dist/core/hitl.d.ts.map +1 -1
  36. package/dist/core/hitl.js +60 -171
  37. package/dist/core/hitl.js.map +1 -1
  38. package/dist/core/portalPresence.d.ts +74 -0
  39. package/dist/core/portalPresence.d.ts.map +1 -0
  40. package/dist/core/portalPresence.js +187 -0
  41. package/dist/core/portalPresence.js.map +1 -0
  42. package/dist/core/updateChecker.d.ts.map +1 -1
  43. package/dist/core/updateChecker.js +8 -6
  44. package/dist/core/updateChecker.js.map +1 -1
  45. package/dist/headless/interactiveShell.js +23 -0
  46. package/dist/headless/interactiveShell.js.map +1 -1
  47. package/dist/plugins/tools/mcp/mcpClient.js +1 -1
  48. package/dist/plugins/tools/mcp/mcpClient.js.map +1 -1
  49. package/dist/runtime/node.d.ts.map +1 -1
  50. package/dist/runtime/node.js +2 -2
  51. package/dist/runtime/node.js.map +1 -1
  52. package/dist/runtime/phaseEmitter.d.ts +6 -0
  53. package/dist/runtime/phaseEmitter.d.ts.map +1 -1
  54. package/dist/runtime/phaseEmitter.js +0 -0
  55. package/dist/runtime/phaseEmitter.js.map +1 -1
  56. package/dist/tools/engagementTools.d.ts.map +1 -1
  57. package/dist/tools/engagementTools.js +73 -1
  58. package/dist/tools/engagementTools.js.map +1 -1
  59. package/dist/tools/heliaControl.d.ts +17 -0
  60. package/dist/tools/heliaControl.d.ts.map +1 -1
  61. package/dist/tools/heliaControl.js +108 -2
  62. package/dist/tools/heliaControl.js.map +1 -1
  63. package/dist/tools/heliaTools.d.ts +22 -0
  64. package/dist/tools/heliaTools.d.ts.map +1 -0
  65. package/dist/tools/heliaTools.js +125 -0
  66. package/dist/tools/heliaTools.js.map +1 -0
  67. package/dist/tools/interactionTools.d.ts.map +1 -1
  68. package/dist/tools/interactionTools.js +31 -15
  69. package/dist/tools/interactionTools.js.map +1 -1
  70. package/dist/tools/scheduleTools.d.ts.map +1 -1
  71. package/dist/tools/scheduleTools.js +5 -2
  72. package/dist/tools/scheduleTools.js.map +1 -1
  73. package/dist/tools/webTools.js +1 -1
  74. package/dist/tools/webTools.js.map +1 -1
  75. package/dist/ui/ink/AskUserMenu.d.ts +16 -0
  76. package/dist/ui/ink/AskUserMenu.d.ts.map +1 -0
  77. package/dist/ui/ink/AskUserMenu.js +85 -0
  78. package/dist/ui/ink/AskUserMenu.js.map +1 -0
  79. package/dist/ui/ink/HitlDecisionMenu.d.ts +23 -0
  80. package/dist/ui/ink/HitlDecisionMenu.d.ts.map +1 -0
  81. package/dist/ui/ink/HitlDecisionMenu.js +124 -0
  82. package/dist/ui/ink/HitlDecisionMenu.js.map +1 -0
  83. package/dist/ui/ink/oneShot.d.ts +33 -0
  84. package/dist/ui/ink/oneShot.d.ts.map +1 -0
  85. package/dist/ui/ink/oneShot.js +70 -0
  86. package/dist/ui/ink/oneShot.js.map +1 -0
  87. package/dist/utils/heliaClient.d.ts +23 -0
  88. package/dist/utils/heliaClient.d.ts.map +1 -0
  89. package/dist/utils/heliaClient.js +79 -0
  90. package/dist/utils/heliaClient.js.map +1 -0
  91. package/dist/utils/lambdaClient.d.ts.map +1 -1
  92. package/dist/utils/lambdaClient.js +9 -0
  93. package/dist/utils/lambdaClient.js.map +1 -1
  94. package/dist/utils/statusReporter.d.ts +13 -0
  95. package/dist/utils/statusReporter.d.ts.map +1 -1
  96. package/dist/utils/statusReporter.js +26 -0
  97. package/dist/utils/statusReporter.js.map +1 -1
  98. 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 { authorizedShutdown, isShutdownInProgress, onShutdown, installSignalHandlers } from './shutdown.js';
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 to user and wait for input using interactive arrow-key selection
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
- // Build menu items: all options + "Enter your own" at the end
89
- const menuItems = [
90
- ...request.options.map(opt => ({ id: opt.id, label: opt.label, description: opt.description })),
91
- { id: '__custom__', label: 'Enter your own', description: 'Type a custom plan, instruction, or alternative approach', isCustom: true }
92
- ];
93
- // Start selection on "Enter your own" (last item)
94
- let selectedIndex = menuItems.length - 1;
95
- return new Promise((resolve, _reject) => {
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
- cleanedUp = true;
111
- if (timeoutId)
112
- clearTimeout(timeoutId);
96
+ resolved = true;
97
+ if (timer)
98
+ clearTimeout(timer);
113
99
  unregisterCleanup();
114
- try {
115
- stdin.removeListener('data', handleKeypress);
116
- }
117
- catch { /* ignore */ }
118
- if (stdin.isTTY) {
119
- try {
120
- stdin.setRawMode(priorRawMode);
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: promptId });
108
+ hitlEvents.emit('prompt-close', { id: request.id });
109
+ resolve(id);
133
110
  };
134
- // Register cleanup callback for graceful shutdown
135
- const unregisterCleanup = onShutdown(() => { cleanup(); });
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
- // Arrow keys (escape sequences)
246
- if (key === '\x1b[A' || key === 'k') {
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
- stdin.on('data', handleKeypress);
258
- // Initial render
259
- renderMenu();
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() {
@@ -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":"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"}
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. There's a separate
36
- // unscoped `erosolar-coder` package on npm (someone else's, last
37
- // published v1.0.86) — querying that returns a stale version that
38
- // looks "older" than ours, so the update check silently never
39
- // fires and users sit on outdated versions until they manually
40
- // reinstall. Bug shipped before the package was scoped.
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',