@harness-nexus/cli 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +38 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/acp/adapters.d.ts +7 -0
- package/dist/daemon/acp/adapters.d.ts.map +1 -0
- package/dist/daemon/acp/adapters.js +34 -0
- package/dist/daemon/acp/adapters.js.map +1 -0
- package/dist/daemon/acp/agent-connection.d.ts +45 -0
- package/dist/daemon/acp/agent-connection.d.ts.map +1 -0
- package/dist/daemon/acp/agent-connection.js +158 -0
- package/dist/daemon/acp/agent-connection.js.map +1 -0
- package/dist/daemon/chat.d.ts +22 -0
- package/dist/daemon/chat.d.ts.map +1 -0
- package/dist/daemon/chat.js +280 -0
- package/dist/daemon/chat.js.map +1 -0
- package/dist/daemon/client.d.ts +23 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +117 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/jobs.d.ts +19 -0
- package/dist/daemon/jobs.d.ts.map +1 -0
- package/dist/daemon/jobs.js +65 -0
- package/dist/daemon/jobs.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +481 -0
- package/dist/index.js.map +1 -0
- package/dist/install/adapter-factory.d.ts +24 -0
- package/dist/install/adapter-factory.d.ts.map +1 -0
- package/dist/install/adapter-factory.js +80 -0
- package/dist/install/adapter-factory.js.map +1 -0
- package/dist/install/adapters/codex.d.ts +16 -0
- package/dist/install/adapters/codex.d.ts.map +1 -0
- package/dist/install/adapters/codex.js +172 -0
- package/dist/install/adapters/codex.js.map +1 -0
- package/dist/install/adapters/deepseek.d.ts +26 -0
- package/dist/install/adapters/deepseek.d.ts.map +1 -0
- package/dist/install/adapters/deepseek.js +246 -0
- package/dist/install/adapters/deepseek.js.map +1 -0
- package/dist/install/adapters/hermes.d.ts +16 -0
- package/dist/install/adapters/hermes.d.ts.map +1 -0
- package/dist/install/adapters/hermes.js +267 -0
- package/dist/install/adapters/hermes.js.map +1 -0
- package/dist/install/adapters/stub.d.ts +2 -0
- package/dist/install/adapters/stub.d.ts.map +1 -0
- package/dist/install/adapters/stub.js +22 -0
- package/dist/install/adapters/stub.js.map +1 -0
- package/dist/install/install-state.d.ts +31 -0
- package/dist/install/install-state.d.ts.map +1 -0
- package/dist/install/install-state.js +29 -0
- package/dist/install/install-state.js.map +1 -0
- package/dist/install/installer.d.ts +16 -0
- package/dist/install/installer.d.ts.map +1 -0
- package/dist/install/installer.js +96 -0
- package/dist/install/installer.js.map +1 -0
- package/dist/install/planner.d.ts +26 -0
- package/dist/install/planner.d.ts.map +1 -0
- package/dist/install/planner.js +25 -0
- package/dist/install/planner.js.map +1 -0
- package/dist/install/registry.d.ts +21 -0
- package/dist/install/registry.d.ts.map +1 -0
- package/dist/install/registry.js +31 -0
- package/dist/install/registry.js.map +1 -0
- package/dist/install/resolver.d.ts +15 -0
- package/dist/install/resolver.d.ts.map +1 -0
- package/dist/install/resolver.js +57 -0
- package/dist/install/resolver.js.map +1 -0
- package/dist/install/types.d.ts +93 -0
- package/dist/install/types.d.ts.map +1 -0
- package/dist/install/types.js +2 -0
- package/dist/install/types.js.map +1 -0
- package/dist/install/uninstaller.d.ts +29 -0
- package/dist/install/uninstaller.d.ts.map +1 -0
- package/dist/install/uninstaller.js +107 -0
- package/dist/install/uninstaller.js.map +1 -0
- package/dist/inventory/common.d.ts +86 -0
- package/dist/inventory/common.d.ts.map +1 -0
- package/dist/inventory/common.js +137 -0
- package/dist/inventory/common.js.map +1 -0
- package/dist/inventory/scan.d.ts +23 -0
- package/dist/inventory/scan.d.ts.map +1 -0
- package/dist/inventory/scan.js +117 -0
- package/dist/inventory/scan.js.map +1 -0
- package/dist/inventory/scanners/claude-code.d.ts +3 -0
- package/dist/inventory/scanners/claude-code.d.ts.map +1 -0
- package/dist/inventory/scanners/claude-code.js +191 -0
- package/dist/inventory/scanners/claude-code.js.map +1 -0
- package/dist/inventory/scanners/codex.d.ts +14 -0
- package/dist/inventory/scanners/codex.d.ts.map +1 -0
- package/dist/inventory/scanners/codex.js +201 -0
- package/dist/inventory/scanners/codex.js.map +1 -0
- package/dist/inventory/scanners/deepseek.d.ts +9 -0
- package/dist/inventory/scanners/deepseek.d.ts.map +1 -0
- package/dist/inventory/scanners/deepseek.js +200 -0
- package/dist/inventory/scanners/deepseek.js.map +1 -0
- package/dist/inventory/scanners/hermes.d.ts +3 -0
- package/dist/inventory/scanners/hermes.d.ts.map +1 -0
- package/dist/inventory/scanners/hermes.js +194 -0
- package/dist/inventory/scanners/hermes.js.map +1 -0
- package/dist/inventory/types.d.ts +33 -0
- package/dist/inventory/types.d.ts.map +1 -0
- package/dist/inventory/types.js +2 -0
- package/dist/inventory/types.js.map +1 -0
- package/dist/mcp/serve.d.ts +8 -0
- package/dist/mcp/serve.d.ts.map +1 -0
- package/dist/mcp/serve.js +118 -0
- package/dist/mcp/serve.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { acpPermissionOptionSchema, acpToolCallViewSchema, chatPermissionRespondEventSchema, chatPromptEventSchema, chatSessionCloseEventSchema, chatSessionStartEventSchema, chatTurnCancelEventSchema, } from '@harness-nexus/shared';
|
|
3
|
+
import { AcpAgentConnection } from './acp/agent-connection.js';
|
|
4
|
+
import { resolveAcpCommand } from './acp/adapters.js';
|
|
5
|
+
export function attachChatHandlers(socket, opts = {}) {
|
|
6
|
+
const env = opts.env ?? process.env;
|
|
7
|
+
const sessions = new Map();
|
|
8
|
+
const emitEvent = (sessionId, event) => {
|
|
9
|
+
socket.emit('chat:event', { sessionId, event });
|
|
10
|
+
};
|
|
11
|
+
const teardown = (session, reason) => {
|
|
12
|
+
if (sessions.get(session.sessionId) !== session)
|
|
13
|
+
return;
|
|
14
|
+
sessions.delete(session.sessionId);
|
|
15
|
+
for (const [, p] of session.permissions)
|
|
16
|
+
clearTimeout(p.timer);
|
|
17
|
+
session.permissions.clear();
|
|
18
|
+
session.conn.kill();
|
|
19
|
+
socket.emit('chat:session.closed', { sessionId: session.sessionId, reason });
|
|
20
|
+
};
|
|
21
|
+
// ---- server → daemon: spawn the channel ----
|
|
22
|
+
socket.on('chat:session.start', (payload, ack) => {
|
|
23
|
+
const parsed = chatSessionStartEventSchema.safeParse(payload);
|
|
24
|
+
if (!parsed.success) {
|
|
25
|
+
ack?.({ error: 'proto:invalid' });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
ack?.({ accepted: true });
|
|
29
|
+
const { sessionId, target, cwd } = parsed.data;
|
|
30
|
+
void (async () => {
|
|
31
|
+
const cmd = resolveAcpCommand(target, env);
|
|
32
|
+
if (cmd === null) {
|
|
33
|
+
socket.emit('chat:session.ready', {
|
|
34
|
+
sessionId,
|
|
35
|
+
error: `no ACP adapter for target '${target}'`,
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const { conn, agentInfo } = await AcpAgentConnection.start(cmd.command, cmd.args, {
|
|
41
|
+
cwd,
|
|
42
|
+
...(opts.spawnEnv !== undefined ? { env: opts.spawnEnv } : {}),
|
|
43
|
+
});
|
|
44
|
+
const created = (await conn.request('session/new', { cwd }, 20000));
|
|
45
|
+
const session = {
|
|
46
|
+
sessionId,
|
|
47
|
+
acpSessionId: created?.sessionId ?? sessionId,
|
|
48
|
+
conn,
|
|
49
|
+
busy: false,
|
|
50
|
+
permissions: new Map(),
|
|
51
|
+
};
|
|
52
|
+
sessions.set(sessionId, session);
|
|
53
|
+
wireSession(session, emitEvent);
|
|
54
|
+
conn.onExit(() => {
|
|
55
|
+
// Crash/quit outside our control — end the channel honestly.
|
|
56
|
+
if (sessions.get(sessionId) === session)
|
|
57
|
+
teardown(session, 'agent-exited');
|
|
58
|
+
});
|
|
59
|
+
socket.emit('chat:session.ready', {
|
|
60
|
+
sessionId,
|
|
61
|
+
...(agentInfo.name !== undefined ? { agentName: agentInfo.name } : {}),
|
|
62
|
+
...(agentInfo.version !== undefined ? { agentVersion: agentInfo.version } : {}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
socket.emit('chat:session.ready', {
|
|
67
|
+
sessionId,
|
|
68
|
+
error: e instanceof Error ? e.message : String(e),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
});
|
|
73
|
+
// ---- server → daemon: prompt / cancel / permission / close ----
|
|
74
|
+
socket.on('chat:message.send', (payload, ack) => {
|
|
75
|
+
const parsed = chatPromptEventSchema.safeParse(payload);
|
|
76
|
+
if (!parsed.success) {
|
|
77
|
+
ack?.({ error: 'proto:invalid' });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const session = sessions.get(parsed.data.sessionId);
|
|
81
|
+
if (session === undefined) {
|
|
82
|
+
ack?.({ error: 'unknown-session' });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (session.busy) {
|
|
86
|
+
// Lost the race against the server's busy gate — resync it.
|
|
87
|
+
emitEvent(session.sessionId, { kind: 'session_status', state: 'active' });
|
|
88
|
+
ack?.({ error: 'session-busy' });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
ack?.({ accepted: true });
|
|
92
|
+
void runPrompt(session, parsed.data.prompt, emitEvent, teardown);
|
|
93
|
+
});
|
|
94
|
+
socket.on('chat:turn.cancel', (payload, ack) => {
|
|
95
|
+
const parsed = chatTurnCancelEventSchema.safeParse(payload);
|
|
96
|
+
if (!parsed.success) {
|
|
97
|
+
ack?.({ error: 'proto:invalid' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const session = sessions.get(parsed.data.sessionId);
|
|
101
|
+
if (session === undefined) {
|
|
102
|
+
ack?.({ error: 'unknown-session' });
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
ack?.({ accepted: true });
|
|
106
|
+
// The pending session/prompt resolves as 'cancelled' → turn_result fires.
|
|
107
|
+
void session.conn.request('session/cancel', {}, 5000).catch(() => { });
|
|
108
|
+
});
|
|
109
|
+
socket.on('chat:permission.respond', (payload, ack) => {
|
|
110
|
+
const parsed = chatPermissionRespondEventSchema.safeParse(payload);
|
|
111
|
+
if (!parsed.success) {
|
|
112
|
+
ack?.({ error: 'proto:invalid' });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const session = sessions.get(parsed.data.sessionId);
|
|
116
|
+
if (session === undefined) {
|
|
117
|
+
ack?.({ error: 'unknown-session' });
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const pending = session.permissions.get(parsed.data.requestId);
|
|
121
|
+
if (pending === undefined) {
|
|
122
|
+
ack?.({ error: 'unknown-permission' });
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
ack?.({ accepted: true });
|
|
126
|
+
clearTimeout(pending.timer);
|
|
127
|
+
session.permissions.delete(parsed.data.requestId);
|
|
128
|
+
// optionId is forwarded VERBATIM (a rewritten id counts as a rejection).
|
|
129
|
+
session.conn.respondPermission(pending.jsonrpcId, parsed.data.optionId !== undefined
|
|
130
|
+
? { outcome: 'selected', optionId: parsed.data.optionId }
|
|
131
|
+
: { outcome: 'cancelled' });
|
|
132
|
+
});
|
|
133
|
+
socket.on('chat:session.close', (payload, ack) => {
|
|
134
|
+
const parsed = chatSessionCloseEventSchema.safeParse(payload);
|
|
135
|
+
if (!parsed.success) {
|
|
136
|
+
ack?.({ error: 'proto:invalid' });
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const session = sessions.get(parsed.data.sessionId);
|
|
140
|
+
if (session !== undefined) {
|
|
141
|
+
// Best-effort session/close, then SIGTERM (kill is on a 3s grace).
|
|
142
|
+
void session.conn.request('session/close', {}, 3000).catch(() => { });
|
|
143
|
+
teardown(session, parsed.data.reason ?? 'user');
|
|
144
|
+
}
|
|
145
|
+
ack?.({ closed: true });
|
|
146
|
+
});
|
|
147
|
+
socket.on('disconnect', () => {
|
|
148
|
+
// No resume in v1 — every channel dies with the daemon's connection.
|
|
149
|
+
for (const session of [...sessions.values()])
|
|
150
|
+
teardown(session, 'daemon-disconnected');
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/** Hook ACP frames for one live session onto the semantic stream. */
|
|
154
|
+
function wireSession(session, emitEvent) {
|
|
155
|
+
const { conn } = session;
|
|
156
|
+
conn.setNotificationHandler((method, params) => {
|
|
157
|
+
const mapped = method === 'session/update' ? mapAcpUpdate(params) : null;
|
|
158
|
+
if (mapped !== null)
|
|
159
|
+
emitEvent(session.sessionId, mapped);
|
|
160
|
+
});
|
|
161
|
+
conn.setPermissionHandler((jsonrpcId, params) => {
|
|
162
|
+
const requestId = randomUUID();
|
|
163
|
+
const timer = setTimeout(() => {
|
|
164
|
+
// Belt-and-braces: the server runs its own watchdog; this backstop
|
|
165
|
+
// guarantees the agent never waits forever even if the server is gone.
|
|
166
|
+
session.permissions.delete(requestId);
|
|
167
|
+
conn.respondPermission(jsonrpcId, { outcome: 'cancelled' });
|
|
168
|
+
emitEvent(session.sessionId, {
|
|
169
|
+
kind: 'permission_resolved',
|
|
170
|
+
requestId,
|
|
171
|
+
outcome: 'timeout',
|
|
172
|
+
});
|
|
173
|
+
}, 75000);
|
|
174
|
+
session.permissions.set(requestId, { jsonrpcId, timer });
|
|
175
|
+
emitEvent(session.sessionId, {
|
|
176
|
+
kind: 'permission_request',
|
|
177
|
+
requestId,
|
|
178
|
+
toolCall: toolCallView(params.toolCall),
|
|
179
|
+
options: permissionOptions(params.options),
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
async function runPrompt(session, prompt, emitEvent, teardown) {
|
|
184
|
+
session.busy = true;
|
|
185
|
+
emitEvent(session.sessionId, { kind: 'session_status', state: 'active' });
|
|
186
|
+
try {
|
|
187
|
+
// No client-side timeout: a turn can legitimately run for minutes; the
|
|
188
|
+
// recovery story is cancel or channel close, not a timer.
|
|
189
|
+
const result = (await session.conn.request('session/prompt', { sessionId: session.acpSessionId, prompt }, 30 * 60 * 1000));
|
|
190
|
+
const stopReason = ['end_turn', 'cancelled', 'max_tokens', 'refusal'].includes(result?.stopReason)
|
|
191
|
+
? result.stopReason
|
|
192
|
+
: 'end_turn';
|
|
193
|
+
emitEvent(session.sessionId, { kind: 'turn_result', stopReason });
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
emitEvent(session.sessionId, {
|
|
197
|
+
kind: 'raw',
|
|
198
|
+
method: 'hnx/prompt-error',
|
|
199
|
+
params: { message: e instanceof Error ? e.message : String(e) },
|
|
200
|
+
});
|
|
201
|
+
emitEvent(session.sessionId, { kind: 'turn_result', stopReason: 'end_turn' });
|
|
202
|
+
// The subprocess is unusable — end the channel honestly.
|
|
203
|
+
teardown(session, 'agent-exited');
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
session.busy = false;
|
|
208
|
+
emitEvent(session.sessionId, { kind: 'session_status', state: 'idle' });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/** Map one ACP `session/update` params object; null = drop (user echo). */
|
|
212
|
+
export function mapAcpUpdate(params) {
|
|
213
|
+
const update = (params.update ?? {});
|
|
214
|
+
switch (update.sessionUpdate) {
|
|
215
|
+
case 'agent_message_chunk':
|
|
216
|
+
return { kind: 'message_delta', delta: textOf(update.contentBlock) };
|
|
217
|
+
case 'agent_thought_chunk':
|
|
218
|
+
return { kind: 'thought_delta', delta: textOf(update.contentBlock) };
|
|
219
|
+
case 'tool_call':
|
|
220
|
+
case 'tool_call_update':
|
|
221
|
+
return { kind: 'tool_call', call: toolCallView(update.toolCallUpdate) };
|
|
222
|
+
case 'usage_update': {
|
|
223
|
+
const usage = (update.usage ?? {});
|
|
224
|
+
return {
|
|
225
|
+
kind: 'usage',
|
|
226
|
+
...(typeof usage.inputTokens === 'number' ? { inputTokens: usage.inputTokens } : {}),
|
|
227
|
+
...(typeof usage.outputTokens === 'number' ? { outputTokens: usage.outputTokens } : {}),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
case 'user_message_chunk':
|
|
231
|
+
// The browser echoes the user's message optimistically; there is no
|
|
232
|
+
// replay in v1, so a live echo would double-render.
|
|
233
|
+
return null;
|
|
234
|
+
default:
|
|
235
|
+
return { kind: 'raw', method: 'session/update', params: update };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/** Extract display text from an ACP ContentBlock chunk. */
|
|
239
|
+
export function textOf(contentBlock) {
|
|
240
|
+
const block = (contentBlock ?? {});
|
|
241
|
+
switch (block.type) {
|
|
242
|
+
case 'text':
|
|
243
|
+
return typeof block.text === 'string' ? block.text : '';
|
|
244
|
+
case 'resource_link':
|
|
245
|
+
return `[@${String(block.name ?? '')}](${String(block.uri ?? '')})`;
|
|
246
|
+
case 'image':
|
|
247
|
+
return '[image]';
|
|
248
|
+
case 'audio':
|
|
249
|
+
return '[audio]';
|
|
250
|
+
case 'resource':
|
|
251
|
+
return '[resource]';
|
|
252
|
+
default:
|
|
253
|
+
return '';
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Defensive view of an ACP ToolCallUpdate: shared-schema-validated, falling
|
|
258
|
+
* back to the bare id when an adapter sends something malformed (the server
|
|
259
|
+
* re-validates everything crossing the wire).
|
|
260
|
+
*/
|
|
261
|
+
export function toolCallView(toolCallUpdate) {
|
|
262
|
+
const parsed = acpToolCallViewSchema.safeParse(toolCallUpdate);
|
|
263
|
+
if (parsed.success)
|
|
264
|
+
return parsed.data;
|
|
265
|
+
const t = (toolCallUpdate ?? {});
|
|
266
|
+
return { toolCallId: String(t.toolCallId ?? 'unknown') };
|
|
267
|
+
}
|
|
268
|
+
/** Permission options, shared-schema-validated; malformed entries dropped. */
|
|
269
|
+
function permissionOptions(options) {
|
|
270
|
+
if (!Array.isArray(options))
|
|
271
|
+
return [];
|
|
272
|
+
const out = [];
|
|
273
|
+
for (const o of options) {
|
|
274
|
+
const parsed = acpPermissionOptionSchema.safeParse(o);
|
|
275
|
+
if (parsed.success)
|
|
276
|
+
out.push(parsed.data);
|
|
277
|
+
}
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/daemon/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Client-side daemon version, reported in every `machine:hello`. */
|
|
2
|
+
export declare const DAEMON_VERSION = "0.4.0-c5";
|
|
3
|
+
/** Capabilities this daemon build carries (C3: inventory; C4: deploy; C5: chat). */
|
|
4
|
+
export declare const DAEMON_CAPABILITIES: string[];
|
|
5
|
+
export interface DaemonOptions {
|
|
6
|
+
server: string;
|
|
7
|
+
/** Machine PAT (scopes ['machine-ctl']). */
|
|
8
|
+
token: string;
|
|
9
|
+
machineId: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The on-demand Harness Nexus daemon (Phase 8 C1): connects to the server's
|
|
13
|
+
* `/ctl` namespace, says `machine:hello` on every (re)connect so presence and
|
|
14
|
+
* metadata stay fresh, and stays attached until SIGINT/SIGTERM. Socket.IO
|
|
15
|
+
* handles reconnection with backoff; each reconnect re-runs hello and — since
|
|
16
|
+
* C3 — re-reports every target's inventory (fresh snapshots whenever the
|
|
17
|
+
* daemon comes up).
|
|
18
|
+
*
|
|
19
|
+
* The machine shows online exactly while this process is running — that is
|
|
20
|
+
* the honest-presence contract; MCP serving (C2) does NOT depend on it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runDaemon(options: DaemonOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"AAWA,qEAAqE;AACrE,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0G/D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { arch, hostname, platform } from 'node:os';
|
|
2
|
+
import { io } from 'socket.io-client';
|
|
3
|
+
import { inventoryCollectRequestSchema, inventoryScanRequestSchema, } from '@harness-nexus/shared';
|
|
4
|
+
import { collectItems, scanAllTargets, scanTarget } from '../inventory/scan.js';
|
|
5
|
+
import { attachJobHandlers } from './jobs.js';
|
|
6
|
+
import { attachChatHandlers } from './chat.js';
|
|
7
|
+
/** Client-side daemon version, reported in every `machine:hello`. */
|
|
8
|
+
export const DAEMON_VERSION = '0.4.0-c5';
|
|
9
|
+
/** Capabilities this daemon build carries (C3: inventory; C4: deploy; C5: chat). */
|
|
10
|
+
export const DAEMON_CAPABILITIES = ['inventory', 'deploy', 'chat'];
|
|
11
|
+
/**
|
|
12
|
+
* The on-demand Harness Nexus daemon (Phase 8 C1): connects to the server's
|
|
13
|
+
* `/ctl` namespace, says `machine:hello` on every (re)connect so presence and
|
|
14
|
+
* metadata stay fresh, and stays attached until SIGINT/SIGTERM. Socket.IO
|
|
15
|
+
* handles reconnection with backoff; each reconnect re-runs hello and — since
|
|
16
|
+
* C3 — re-reports every target's inventory (fresh snapshots whenever the
|
|
17
|
+
* daemon comes up).
|
|
18
|
+
*
|
|
19
|
+
* The machine shows online exactly while this process is running — that is
|
|
20
|
+
* the honest-presence contract; MCP serving (C2) does NOT depend on it.
|
|
21
|
+
*/
|
|
22
|
+
export function runDaemon(options) {
|
|
23
|
+
const socket = io(`${options.server}/ctl`, {
|
|
24
|
+
auth: { token: options.token, machineId: options.machineId },
|
|
25
|
+
transports: ['websocket'],
|
|
26
|
+
});
|
|
27
|
+
attachJobHandlers(socket, { server: options.server, token: options.token });
|
|
28
|
+
attachChatHandlers(socket);
|
|
29
|
+
const reportAll = (requestId) => {
|
|
30
|
+
void (async () => {
|
|
31
|
+
for (const snapshot of scanAllTargets()) {
|
|
32
|
+
socket.emit('inventory:report', { ...(requestId ? { requestId } : {}), snapshot });
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
};
|
|
36
|
+
socket.on('connect', () => {
|
|
37
|
+
socket.emit('machine:hello', {
|
|
38
|
+
daemonVersion: DAEMON_VERSION,
|
|
39
|
+
os: platform(),
|
|
40
|
+
arch: arch(),
|
|
41
|
+
hostname: hostname(),
|
|
42
|
+
capabilities: DAEMON_CAPABILITIES,
|
|
43
|
+
}, (res) => {
|
|
44
|
+
const ack = res;
|
|
45
|
+
if (ack && 'error' in ack) {
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
console.error(`hnx daemon: hello rejected: ${ack.error}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// eslint-disable-next-line no-console
|
|
51
|
+
console.log(`hnx daemon: online (proto ${ack.proto}, machine ${ack.machineId})`);
|
|
52
|
+
reportAll();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
socket.on('inventory:scan', (payload, ack) => {
|
|
56
|
+
const parsed = inventoryScanRequestSchema.safeParse(payload);
|
|
57
|
+
if (!parsed.success) {
|
|
58
|
+
ack?.({ error: 'proto:invalid' });
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
ack?.({ accepted: true });
|
|
62
|
+
const { requestId, targets } = parsed.data;
|
|
63
|
+
void (async () => {
|
|
64
|
+
for (const target of targets) {
|
|
65
|
+
try {
|
|
66
|
+
const snapshot = scanTarget(target);
|
|
67
|
+
socket.emit('inventory:report', { requestId, snapshot });
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// No scanner for this target on this build — still report the empty
|
|
71
|
+
// shape so the server's waiter never hangs on it.
|
|
72
|
+
const home = `~/.${target}`;
|
|
73
|
+
socket.emit('inventory:report', {
|
|
74
|
+
requestId,
|
|
75
|
+
snapshot: {
|
|
76
|
+
target,
|
|
77
|
+
scannedAt: new Date().toISOString(),
|
|
78
|
+
agents: [{ name: home, directory: home, profileApplied: false, items: [] }],
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
})();
|
|
84
|
+
});
|
|
85
|
+
socket.on('inventory:collect', (payload, ack) => {
|
|
86
|
+
const parsed = inventoryCollectRequestSchema.safeParse(payload);
|
|
87
|
+
if (!parsed.success) {
|
|
88
|
+
ack?.({ error: 'proto:invalid' });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
ack?.({ accepted: true });
|
|
92
|
+
const { requestId, target, items } = parsed.data;
|
|
93
|
+
void (async () => {
|
|
94
|
+
// Bodies are read fresh (paths re-derived) and secrets redacted
|
|
95
|
+
// daemon-side before anything crosses the wire.
|
|
96
|
+
const payloadItems = await collectItems(target, items);
|
|
97
|
+
socket.emit('inventory:payload', { requestId, items: payloadItems });
|
|
98
|
+
})();
|
|
99
|
+
});
|
|
100
|
+
socket.on('connect_error', (err) => {
|
|
101
|
+
// eslint-disable-next-line no-console
|
|
102
|
+
console.error(`hnx daemon: connection error: ${err.message}`);
|
|
103
|
+
});
|
|
104
|
+
socket.on('disconnect', (reason) => {
|
|
105
|
+
// eslint-disable-next-line no-console
|
|
106
|
+
console.error(`hnx daemon: disconnected (${reason})`);
|
|
107
|
+
});
|
|
108
|
+
return new Promise((resolve) => {
|
|
109
|
+
const stop = () => {
|
|
110
|
+
socket.close();
|
|
111
|
+
resolve();
|
|
112
|
+
};
|
|
113
|
+
process.once('SIGINT', stop);
|
|
114
|
+
process.once('SIGTERM', stop);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Socket } from 'socket.io-client';
|
|
2
|
+
/**
|
|
3
|
+
* Daemon-side job executor (Phase 8 C4). docs/design/phase-8-c4.md.
|
|
4
|
+
*
|
|
5
|
+
* A deploy job is the 3.3 pipeline with a different trigger: fetch the
|
|
6
|
+
* resolved bundle with the machine PAT (`GET /api/client/deploy-bundle` —
|
|
7
|
+
* machine PAT exception #2), plan, apply + ledger, reporting `job:progress`
|
|
8
|
+
* per phase and one terminal `job:result`. Plans are idempotent overwrites,
|
|
9
|
+
* so a redelivered job (server recovered it after a disconnect) simply
|
|
10
|
+
* re-runs. `scan`/`import` job types are reserved by the protocol — C3's
|
|
11
|
+
* interactive flows handle them; arriving here they settle as unsupported.
|
|
12
|
+
*/
|
|
13
|
+
export interface JobExecutorOptions {
|
|
14
|
+
server: string;
|
|
15
|
+
/** The daemon's machine PAT. */
|
|
16
|
+
token: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function attachJobHandlers(socket: Socket, opts: JobExecutorOptions): void;
|
|
19
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/daemon/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAW/C;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAqBhF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jobDispatchEventSchema, deployResultDataSchema, } from '@harness-nexus/shared';
|
|
2
|
+
import { HarnessNexusClient } from '@harness-nexus/sdk';
|
|
3
|
+
import { planInstall } from '../install/planner.js';
|
|
4
|
+
import { applyInstall } from '../install/installer.js';
|
|
5
|
+
export function attachJobHandlers(socket, opts) {
|
|
6
|
+
socket.on('job:dispatch', (payload, ack) => {
|
|
7
|
+
const parsed = jobDispatchEventSchema.safeParse(payload);
|
|
8
|
+
if (!parsed.success) {
|
|
9
|
+
ack?.({ error: 'proto:invalid' });
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
// Ack = ACCEPTED, not completed — the server's dispatched state means
|
|
13
|
+
// "with the daemon", the terminal result arrives separately.
|
|
14
|
+
ack?.({ accepted: true });
|
|
15
|
+
const job = parsed.data.job;
|
|
16
|
+
if (job.type !== 'deploy') {
|
|
17
|
+
socket.emit('job:result', {
|
|
18
|
+
jobId: job.id,
|
|
19
|
+
ok: false,
|
|
20
|
+
error: `job type '${job.type}' is not supported by this daemon`,
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
void runDeploy(socket, opts, job);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async function runDeploy(socket, opts, job) {
|
|
28
|
+
const payload = job.payload;
|
|
29
|
+
const progress = (phase, message) => {
|
|
30
|
+
socket.emit('job:progress', { jobId: job.id, phase, ...(message ? { message } : {}) });
|
|
31
|
+
};
|
|
32
|
+
const result = (ok, extra) => {
|
|
33
|
+
socket.emit('job:result', { jobId: job.id, ok, ...extra });
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
36
|
+
const client = new HarnessNexusClient({ baseUrl: opts.server, token: opts.token });
|
|
37
|
+
progress('resolve', `fetching profile ${payload.profileId}`);
|
|
38
|
+
const bundle = (await client.getDeployBundle(payload.profileId));
|
|
39
|
+
// Adapters read the server base from HN_SERVER when emitting the
|
|
40
|
+
// `hnx mcp serve` shim entry (same as `hnx install`).
|
|
41
|
+
process.env.HN_SERVER = opts.server;
|
|
42
|
+
progress('plan', 'planning install');
|
|
43
|
+
const plan = planInstall(bundle, {
|
|
44
|
+
...(payload.directory ? { input: { outDir: payload.directory } } : {}),
|
|
45
|
+
});
|
|
46
|
+
progress('apply', `writing ${plan.operations.length} operation(s)`);
|
|
47
|
+
applyInstall(plan, {
|
|
48
|
+
profileId: bundle.profile.id,
|
|
49
|
+
profileName: bundle.profile.name,
|
|
50
|
+
profileVersion: bundle.profile.version,
|
|
51
|
+
});
|
|
52
|
+
const data = deployResultDataSchema.parse({
|
|
53
|
+
name: bundle.profile.name,
|
|
54
|
+
directory: plan.targetRoot,
|
|
55
|
+
target: plan.adapter.target,
|
|
56
|
+
profileId: bundle.profile.id,
|
|
57
|
+
...(bundle.profile.version ? { profileVersion: bundle.profile.version } : {}),
|
|
58
|
+
});
|
|
59
|
+
result(true, { data });
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
result(false, { error: e instanceof Error ? e.message : String(e) });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/daemon/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install-pipeline errors. Carry a stable `code` so the CLI can map them to
|
|
3
|
+
* the right exit status / message. See `docs/design/phase-3-install.md` Part 6.
|
|
4
|
+
*/
|
|
5
|
+
export type InstallErrorCode = 'TARGET_UNSUPPORTED' | 'TARGET_MISMATCH' | 'RESOLVE_FAILED' | 'VALIDATION_FAILED' | 'APPLY_FAILED';
|
|
6
|
+
export declare class InstallError extends Error {
|
|
7
|
+
readonly code: InstallErrorCode;
|
|
8
|
+
readonly cause?: unknown | undefined;
|
|
9
|
+
constructor(message: string, code: InstallErrorCode, cause?: unknown | undefined);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,CAAC;AAEnB,qBAAa,YAAa,SAAQ,KAAK;IAGnC,QAAQ,CAAC,IAAI,EAAE,gBAAgB;aACb,KAAK,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,gBAAgB,EACb,KAAK,CAAC,EAAE,OAAO,YAAA;CAKpC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG1B;IACS;IAHpB,YACE,OAAe,EACN,IAAsB,EACb,KAAe;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAkB;QACb,UAAK,GAAL,KAAK,CAAU;QAGjC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|