@zonko-ai/harbor 0.1.0
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/README.md +15 -0
- package/dist/api.d.ts +53 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +842 -0
- package/dist/api.js.map +1 -0
- package/dist/capabilities.d.ts +5 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +308 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/dist/dev.d.ts +14 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +203 -0
- package/dist/dev.js.map +1 -0
- package/dist/foreground.d.ts +13 -0
- package/dist/foreground.d.ts.map +1 -0
- package/dist/foreground.js +54 -0
- package/dist/foreground.js.map +1 -0
- package/dist/import-openapi.d.ts +12 -0
- package/dist/import-openapi.d.ts.map +1 -0
- package/dist/import-openapi.js +488 -0
- package/dist/import-openapi.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +941 -0
- package/dist/index.js.map +1 -0
- package/dist/local-config.d.ts +12 -0
- package/dist/local-config.d.ts.map +1 -0
- package/dist/local-config.js +93 -0
- package/dist/local-config.js.map +1 -0
- package/dist/local-daemon-entry.d.ts +2 -0
- package/dist/local-daemon-entry.d.ts.map +1 -0
- package/dist/local-daemon-entry.js +545 -0
- package/dist/local-daemon-entry.js.map +1 -0
- package/dist/local-daemon.d.ts +58 -0
- package/dist/local-daemon.d.ts.map +1 -0
- package/dist/local-daemon.js +385 -0
- package/dist/local-daemon.js.map +1 -0
- package/dist/mcp/api-client.d.ts +72 -0
- package/dist/mcp/api-client.d.ts.map +1 -0
- package/dist/mcp/api-client.js +210 -0
- package/dist/mcp/api-client.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +18 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/schema.d.ts +3 -0
- package/dist/mcp/schema.d.ts.map +1 -0
- package/dist/mcp/schema.js +95 -0
- package/dist/mcp/schema.js.map +1 -0
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +57 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +54 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/output-download.d.ts +8 -0
- package/dist/output-download.d.ts.map +1 -0
- package/dist/output-download.js +210 -0
- package/dist/output-download.js.map +1 -0
- package/dist/output.d.ts +124 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +752 -0
- package/dist/output.js.map +1 -0
- package/dist/passthrough.d.ts +15 -0
- package/dist/passthrough.d.ts.map +1 -0
- package/dist/passthrough.js +68 -0
- package/dist/passthrough.js.map +1 -0
- package/dist/runtime-attribution.d.ts +5 -0
- package/dist/runtime-attribution.d.ts.map +1 -0
- package/dist/runtime-attribution.js +86 -0
- package/dist/runtime-attribution.js.map +1 -0
- package/dist/state.d.ts +56 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +374 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +284 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import { openSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { request as httpRequest } from 'node:http';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { dirname } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { CLI_PACKAGE_VERSION } from './constants.js';
|
|
8
|
+
import { findWorkspaceRoot, getHarborPaths, getProfile, isDaemonManagedProfile, isDaemonManagedProfileSlug } from './state.js';
|
|
9
|
+
export const LOCAL_DAEMON_PROTOCOL = 1;
|
|
10
|
+
export const LOCAL_DAEMON_STATE_SCHEMA_VERSION = 1;
|
|
11
|
+
const LOCAL_DAEMON_PROFILE = 'local';
|
|
12
|
+
const DEFAULT_REMOTE_API_URL = process.env.HARBOR_REMOTE_API_URL ?? 'https://api.tryharbor.ai';
|
|
13
|
+
const DEFAULT_REMOTE_AUTH_URL = process.env.HARBOR_REMOTE_AUTH_URL ?? 'https://dash.tryharbor.ai/login';
|
|
14
|
+
const LOCAL_DAEMON_WAIT_TIMEOUT_MS = 15_000;
|
|
15
|
+
export class LocalRuntimeError extends Error {
|
|
16
|
+
code;
|
|
17
|
+
status;
|
|
18
|
+
constructor(code, message, status = 1) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.code = code;
|
|
21
|
+
this.status = status;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const LOCAL_RUNTIME_ROOT_COMMANDS = new Set([
|
|
25
|
+
'auth',
|
|
26
|
+
'status',
|
|
27
|
+
'ls',
|
|
28
|
+
'inspect',
|
|
29
|
+
'approve',
|
|
30
|
+
'secrets',
|
|
31
|
+
'services',
|
|
32
|
+
]);
|
|
33
|
+
const DEV_LIFECYCLE_COMMANDS = new Set(['up', 'down']);
|
|
34
|
+
const DEV_DEBUG_COMMANDS = new Set(['status', 'logs']);
|
|
35
|
+
const parseCommandPath = (argv = process.argv.slice(2)) => {
|
|
36
|
+
const parts = [];
|
|
37
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
38
|
+
const arg = argv[index];
|
|
39
|
+
if (arg === '--profile') {
|
|
40
|
+
index += 1;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (arg.startsWith('--profile=')) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (arg.startsWith('-')) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
parts.push(arg);
|
|
50
|
+
if (parts.length === 2) {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return parts;
|
|
55
|
+
};
|
|
56
|
+
export const classifyCommandForLocalRuntime = (argv = process.argv.slice(2)) => {
|
|
57
|
+
const [first, second] = parseCommandPath(argv);
|
|
58
|
+
if (first === 'dev' && second && DEV_LIFECYCLE_COMMANDS.has(second)) {
|
|
59
|
+
return 'daemon_lifecycle';
|
|
60
|
+
}
|
|
61
|
+
if (first === 'dev' && second && DEV_DEBUG_COMMANDS.has(second)) {
|
|
62
|
+
return 'daemon_debug';
|
|
63
|
+
}
|
|
64
|
+
if (!first || first === 'profile' || first === 'mcp') {
|
|
65
|
+
return 'neutral';
|
|
66
|
+
}
|
|
67
|
+
if (first.includes('.')) {
|
|
68
|
+
return 'local_runtime';
|
|
69
|
+
}
|
|
70
|
+
return LOCAL_RUNTIME_ROOT_COMMANDS.has(first) ? 'local_runtime' : 'neutral';
|
|
71
|
+
};
|
|
72
|
+
const compareVersion = (left, right) => {
|
|
73
|
+
const leftParts = left.split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
74
|
+
const rightParts = right.split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
75
|
+
const length = Math.max(leftParts.length, rightParts.length);
|
|
76
|
+
for (let index = 0; index < length; index += 1) {
|
|
77
|
+
const leftValue = leftParts[index] ?? 0;
|
|
78
|
+
const rightValue = rightParts[index] ?? 0;
|
|
79
|
+
if (leftValue > rightValue) {
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
if (leftValue < rightValue) {
|
|
83
|
+
return -1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return 0;
|
|
87
|
+
};
|
|
88
|
+
const processIsRunning = (pid) => {
|
|
89
|
+
if (!pid || !Number.isInteger(pid) || pid <= 0) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
process.kill(pid, 0);
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const readPidFile = (path) => {
|
|
101
|
+
if (!existsSync(path)) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const parsed = Number.parseInt(readFileSync(path, 'utf8').trim(), 10);
|
|
105
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
|
|
106
|
+
};
|
|
107
|
+
const normalizeDaemonError = (payload, fallbackCode, fallbackMessage, status) => {
|
|
108
|
+
if (typeof payload === 'object' && payload !== null) {
|
|
109
|
+
const record = payload;
|
|
110
|
+
const error = typeof record.error === 'object' && record.error !== null ? record.error : null;
|
|
111
|
+
const code = typeof record.code === 'string'
|
|
112
|
+
? record.code
|
|
113
|
+
: typeof error?.code === 'string'
|
|
114
|
+
? error.code
|
|
115
|
+
: fallbackCode;
|
|
116
|
+
const message = typeof record.message === 'string'
|
|
117
|
+
? record.message
|
|
118
|
+
: typeof error?.message === 'string'
|
|
119
|
+
? error.message
|
|
120
|
+
: fallbackMessage;
|
|
121
|
+
return new LocalRuntimeError(code, message, status);
|
|
122
|
+
}
|
|
123
|
+
return new LocalRuntimeError(fallbackCode, fallbackMessage, status);
|
|
124
|
+
};
|
|
125
|
+
const requestLocalDaemon = async (method, path, body, options = {}) => {
|
|
126
|
+
const socketPath = getHarborPaths(LOCAL_DAEMON_PROFILE).daemonSocketFile;
|
|
127
|
+
return await new Promise((resolve, reject) => {
|
|
128
|
+
const request = httpRequest({
|
|
129
|
+
socketPath,
|
|
130
|
+
path,
|
|
131
|
+
method,
|
|
132
|
+
headers: body ? { 'content-type': 'application/json' } : undefined,
|
|
133
|
+
timeout: options.timeoutMs ?? 2_000,
|
|
134
|
+
}, (response) => {
|
|
135
|
+
let payload = '';
|
|
136
|
+
response.setEncoding('utf8');
|
|
137
|
+
response.on('data', (chunk) => {
|
|
138
|
+
payload += chunk;
|
|
139
|
+
});
|
|
140
|
+
response.on('end', () => {
|
|
141
|
+
const parsed = payload.length > 0 ? JSON.parse(payload) : null;
|
|
142
|
+
if ((response.statusCode ?? 500) >= 400) {
|
|
143
|
+
reject(normalizeDaemonError(parsed, 'daemon_request_failed', 'Local Harbor daemon request failed.', response.statusCode ?? 500));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
resolve(parsed);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
request.on('timeout', () => {
|
|
150
|
+
request.destroy(new LocalRuntimeError('daemon_timeout', 'Timed out waiting for the local Harbor daemon.'));
|
|
151
|
+
});
|
|
152
|
+
request.on('error', (error) => {
|
|
153
|
+
const code = typeof error.code === 'string' ? error.code : null;
|
|
154
|
+
if (options.allowUnavailable && (code === 'ENOENT' || code === 'ECONNREFUSED' || code === 'ECONNRESET')) {
|
|
155
|
+
resolve(null);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
reject(new LocalRuntimeError('daemon_unavailable', 'Local Harbor is not running. Start it with `harbor dev up`.', 503));
|
|
159
|
+
});
|
|
160
|
+
if (body !== undefined) {
|
|
161
|
+
request.write(JSON.stringify(body));
|
|
162
|
+
}
|
|
163
|
+
request.end();
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
const handshakeOnce = async () => await requestLocalDaemon('POST', '/_harbor/handshake', {
|
|
167
|
+
profile_slug: LOCAL_DAEMON_PROFILE,
|
|
168
|
+
supported_daemon_protocols: [LOCAL_DAEMON_PROTOCOL],
|
|
169
|
+
cli_package_version: CLI_PACKAGE_VERSION,
|
|
170
|
+
}, { allowUnavailable: true, timeoutMs: 2_000 });
|
|
171
|
+
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
172
|
+
const resolveDaemonCommand = () => {
|
|
173
|
+
const jsEntry = fileURLToPath(new URL('./local-daemon-entry.js', import.meta.url));
|
|
174
|
+
if (existsSync(jsEntry)) {
|
|
175
|
+
return {
|
|
176
|
+
command: process.execPath,
|
|
177
|
+
args: [jsEntry],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const tsEntry = fileURLToPath(new URL('./local-daemon-entry.ts', import.meta.url));
|
|
181
|
+
if (existsSync(tsEntry)) {
|
|
182
|
+
return {
|
|
183
|
+
command: 'pnpm',
|
|
184
|
+
args: ['exec', 'tsx', tsEntry],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
throw new LocalRuntimeError('daemon_entry_missing', 'Could not find the local Harbor daemon entrypoint.');
|
|
188
|
+
};
|
|
189
|
+
const spawnLocalDaemon = () => {
|
|
190
|
+
if (process.platform === 'win32') {
|
|
191
|
+
throw new LocalRuntimeError('local_runtime_unsupported', 'Local Harbor daemon mode is only supported on macOS and Linux.');
|
|
192
|
+
}
|
|
193
|
+
const paths = getHarborPaths(LOCAL_DAEMON_PROFILE);
|
|
194
|
+
const existingPid = readPidFile(paths.daemonPidFile);
|
|
195
|
+
if (processIsRunning(existingPid)) {
|
|
196
|
+
return existingPid;
|
|
197
|
+
}
|
|
198
|
+
mkdirSync(dirname(paths.daemonLogFile), { recursive: true });
|
|
199
|
+
mkdirSync(dirname(paths.daemonSocketFile), { recursive: true });
|
|
200
|
+
const profile = getProfile(LOCAL_DAEMON_PROFILE);
|
|
201
|
+
const targetApiUrl = profile.api_url ?? DEFAULT_REMOTE_API_URL;
|
|
202
|
+
const targetAuthUrl = profile.auth_url ?? DEFAULT_REMOTE_AUTH_URL;
|
|
203
|
+
const launch = resolveDaemonCommand();
|
|
204
|
+
const daemonLogFd = openSync(paths.daemonLogFile, 'a', 0o600);
|
|
205
|
+
const child = spawn(launch.command, launch.args, {
|
|
206
|
+
cwd: findWorkspaceRoot(),
|
|
207
|
+
detached: true,
|
|
208
|
+
stdio: ['ignore', daemonLogFd, daemonLogFd],
|
|
209
|
+
env: {
|
|
210
|
+
...process.env,
|
|
211
|
+
HARBOR_LOCAL_DAEMON_PROFILE: LOCAL_DAEMON_PROFILE,
|
|
212
|
+
HARBOR_DAEMON_REMOTE_API_URL: targetApiUrl,
|
|
213
|
+
HARBOR_DAEMON_REMOTE_AUTH_URL: targetAuthUrl,
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
if (child.pid) {
|
|
217
|
+
const pidText = `${child.pid}\n`;
|
|
218
|
+
writeFileSync(paths.daemonPidFile, pidText, { mode: 0o600 });
|
|
219
|
+
writeFileSync(paths.daemonLockFile, pidText, { mode: 0o600 });
|
|
220
|
+
}
|
|
221
|
+
child.unref();
|
|
222
|
+
return child.pid ?? null;
|
|
223
|
+
};
|
|
224
|
+
const assertDaemonCompatibility = (handshake) => {
|
|
225
|
+
if (handshake.profile_slug !== LOCAL_DAEMON_PROFILE) {
|
|
226
|
+
throw new LocalRuntimeError('daemon_profile_mismatch', `Local Harbor daemon is bound to profile ${handshake.profile_slug}.`, 409);
|
|
227
|
+
}
|
|
228
|
+
if (handshake.selected_daemon_protocol !== LOCAL_DAEMON_PROTOCOL) {
|
|
229
|
+
throw new LocalRuntimeError('daemon_protocol_incompatible', 'Local Harbor daemon protocol is incompatible with this CLI.', 409);
|
|
230
|
+
}
|
|
231
|
+
if (handshake.state_schema_version > LOCAL_DAEMON_STATE_SCHEMA_VERSION) {
|
|
232
|
+
throw new LocalRuntimeError('daemon_state_schema_incompatible', 'Local Harbor daemon state is newer than this CLI can read.', 409);
|
|
233
|
+
}
|
|
234
|
+
if (compareVersion(handshake.daemon_package_version, CLI_PACKAGE_VERSION) < 0) {
|
|
235
|
+
throw new LocalRuntimeError('daemon_update_required', 'Local Harbor daemon is older than this CLI. Run `harbor dev down` and then `harbor dev up`.', 409);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
const waitForDaemonReady = async (startIfNeeded, timeoutMs = LOCAL_DAEMON_WAIT_TIMEOUT_MS) => {
|
|
239
|
+
const deadline = Date.now() + timeoutMs;
|
|
240
|
+
let spawned = false;
|
|
241
|
+
while (Date.now() < deadline) {
|
|
242
|
+
const handshake = await handshakeOnce();
|
|
243
|
+
if (handshake) {
|
|
244
|
+
assertDaemonCompatibility(handshake);
|
|
245
|
+
if (handshake.ready_state === 'ready') {
|
|
246
|
+
return handshake;
|
|
247
|
+
}
|
|
248
|
+
if (handshake.ready_state === 'updating') {
|
|
249
|
+
throw new LocalRuntimeError('daemon_updating', 'Local Harbor daemon is updating. Retry in a moment.', 409);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else if (startIfNeeded && !spawned) {
|
|
253
|
+
spawnLocalDaemon();
|
|
254
|
+
spawned = true;
|
|
255
|
+
}
|
|
256
|
+
await wait(200);
|
|
257
|
+
}
|
|
258
|
+
const status = await requestLocalDaemon('GET', '/_harbor/status', undefined, { allowUnavailable: true, timeoutMs: 2_000 });
|
|
259
|
+
if (status?.bootstrap_error) {
|
|
260
|
+
throw new LocalRuntimeError('daemon_bootstrap_failed', `Local Harbor daemon failed: ${status.bootstrap_error}`, 502);
|
|
261
|
+
}
|
|
262
|
+
throw new LocalRuntimeError('daemon_start_timeout', 'Timed out waiting for the local Harbor runtime to become ready.', 504);
|
|
263
|
+
};
|
|
264
|
+
export const ensureLocalRuntime = async () => {
|
|
265
|
+
const profile = getProfile();
|
|
266
|
+
if (!isDaemonManagedProfile(profile)) {
|
|
267
|
+
return profile;
|
|
268
|
+
}
|
|
269
|
+
await waitForDaemonReady(true);
|
|
270
|
+
return getProfile();
|
|
271
|
+
};
|
|
272
|
+
export const ensureLocalRuntimeForCommand = async (argv = process.argv.slice(2)) => {
|
|
273
|
+
const profile = getProfile();
|
|
274
|
+
if (!isDaemonManagedProfile(profile)) {
|
|
275
|
+
return profile;
|
|
276
|
+
}
|
|
277
|
+
if (classifyCommandForLocalRuntime(argv) !== 'local_runtime') {
|
|
278
|
+
return profile;
|
|
279
|
+
}
|
|
280
|
+
return ensureLocalRuntime();
|
|
281
|
+
};
|
|
282
|
+
export const ensureLocalDevCommandProfile = () => {
|
|
283
|
+
if (!isDaemonManagedProfileSlug(getProfile().profile_slug)) {
|
|
284
|
+
throw new LocalRuntimeError('local_profile_required', 'Daemon lifecycle commands only support the local profile.');
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
export const persistLocalProfileSessionState = async (updates) => {
|
|
288
|
+
const profile = getProfile();
|
|
289
|
+
if (!isDaemonManagedProfile(profile)) {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
await ensureLocalRuntime();
|
|
293
|
+
await requestLocalDaemon('POST', '/_harbor/session', updates, { timeoutMs: 5_000 });
|
|
294
|
+
return true;
|
|
295
|
+
};
|
|
296
|
+
export const fetchLocalDaemonStatus = async (startIfNeeded = false) => {
|
|
297
|
+
const paths = getHarborPaths(LOCAL_DAEMON_PROFILE);
|
|
298
|
+
const handshake = startIfNeeded ? await waitForDaemonReady(true) : null;
|
|
299
|
+
const status = await requestLocalDaemon('GET', '/_harbor/status', undefined, { allowUnavailable: true, timeoutMs: 5_000 });
|
|
300
|
+
if (status) {
|
|
301
|
+
return status;
|
|
302
|
+
}
|
|
303
|
+
if (!handshake) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
return {
|
|
307
|
+
...handshake,
|
|
308
|
+
api_manifest_revision: null,
|
|
309
|
+
last_ready_at: null,
|
|
310
|
+
bootstrap_error: null,
|
|
311
|
+
paths: {
|
|
312
|
+
socket: paths.daemonSocketFile,
|
|
313
|
+
state: paths.localStateFile,
|
|
314
|
+
daemon_log: paths.daemonLogFile,
|
|
315
|
+
api_log: paths.apiLogFile,
|
|
316
|
+
runner_log: paths.runnerLogFile,
|
|
317
|
+
},
|
|
318
|
+
managed_children: {
|
|
319
|
+
api: { pid: null, running: false },
|
|
320
|
+
runner: { pid: null, running: false },
|
|
321
|
+
},
|
|
322
|
+
};
|
|
323
|
+
};
|
|
324
|
+
const cleanupEphemeralRunFiles = () => {
|
|
325
|
+
const paths = getHarborPaths(LOCAL_DAEMON_PROFILE);
|
|
326
|
+
for (const path of [
|
|
327
|
+
paths.daemonSocketFile,
|
|
328
|
+
paths.daemonPidFile,
|
|
329
|
+
paths.daemonLockFile,
|
|
330
|
+
paths.apiPidFile,
|
|
331
|
+
paths.runnerPidFile,
|
|
332
|
+
paths.updateIntentFile,
|
|
333
|
+
]) {
|
|
334
|
+
rmSync(path, { force: true });
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
export const stopLocalRuntime = async () => {
|
|
338
|
+
const status = await requestLocalDaemon('POST', '/_harbor/down', undefined, { allowUnavailable: true, timeoutMs: 5_000 });
|
|
339
|
+
if (status) {
|
|
340
|
+
return status;
|
|
341
|
+
}
|
|
342
|
+
const pid = readPidFile(getHarborPaths(LOCAL_DAEMON_PROFILE).daemonPidFile);
|
|
343
|
+
if (processIsRunning(pid)) {
|
|
344
|
+
process.kill(pid, 'SIGTERM');
|
|
345
|
+
for (let attempt = 0; attempt < 20; attempt += 1) {
|
|
346
|
+
if (!processIsRunning(pid)) {
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
await wait(150);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
cleanupEphemeralRunFiles();
|
|
353
|
+
return { status: 'stopped' };
|
|
354
|
+
};
|
|
355
|
+
export const requestLocalApiViaDaemon = async (method, path, body, headers, auth = 'session', timeoutMs = 10_000) => {
|
|
356
|
+
const response = await requestLocalDaemon('POST', '/_harbor/request', {
|
|
357
|
+
method,
|
|
358
|
+
path,
|
|
359
|
+
body,
|
|
360
|
+
headers,
|
|
361
|
+
auth,
|
|
362
|
+
timeout_ms: timeoutMs,
|
|
363
|
+
}, { timeoutMs: timeoutMs + 1_000 });
|
|
364
|
+
if (!response) {
|
|
365
|
+
throw new LocalRuntimeError('daemon_unavailable', 'Local Harbor daemon is not running.', 503);
|
|
366
|
+
}
|
|
367
|
+
return response;
|
|
368
|
+
};
|
|
369
|
+
export const readLocalDaemonLog = (component, lines = 40) => {
|
|
370
|
+
const paths = getHarborPaths(LOCAL_DAEMON_PROFILE);
|
|
371
|
+
const path = component === 'daemon' ? paths.daemonLogFile : component === 'api' ? paths.apiLogFile : paths.runnerLogFile;
|
|
372
|
+
if (!existsSync(path)) {
|
|
373
|
+
return {
|
|
374
|
+
path,
|
|
375
|
+
lines: [],
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
const content = readFileSync(path, 'utf8').trimEnd();
|
|
379
|
+
const allLines = content.length > 0 ? content.split(/\r?\n/) : [];
|
|
380
|
+
return {
|
|
381
|
+
path,
|
|
382
|
+
lines: allLines.slice(Math.max(0, allLines.length - lines)),
|
|
383
|
+
};
|
|
384
|
+
};
|
|
385
|
+
//# sourceMappingURL=local-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-daemon.js","sourceRoot":"","sources":["../src/local-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export interface HarborSnapshot {
|
|
2
|
+
capability: {
|
|
3
|
+
slug: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
category: string;
|
|
7
|
+
};
|
|
8
|
+
contract: {
|
|
9
|
+
input_schema: Record<string, unknown>;
|
|
10
|
+
output_schema: Record<string, unknown>;
|
|
11
|
+
execution_mode: string;
|
|
12
|
+
};
|
|
13
|
+
binding: {
|
|
14
|
+
adapter_type: string;
|
|
15
|
+
config: Record<string, unknown>;
|
|
16
|
+
};
|
|
17
|
+
surface: {
|
|
18
|
+
mcp?: {
|
|
19
|
+
tool_name?: string;
|
|
20
|
+
title?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface HarborCatalogCapability {
|
|
26
|
+
slug: string;
|
|
27
|
+
snapshot: HarborSnapshot;
|
|
28
|
+
}
|
|
29
|
+
export interface HarborExecutionStart {
|
|
30
|
+
status: string;
|
|
31
|
+
execution_id: string | null;
|
|
32
|
+
capability: string | null;
|
|
33
|
+
state: string | null;
|
|
34
|
+
}
|
|
35
|
+
export interface HarborExecutionEvent {
|
|
36
|
+
sequence?: number;
|
|
37
|
+
kind?: string;
|
|
38
|
+
message: string;
|
|
39
|
+
payload_json?: unknown;
|
|
40
|
+
occurred_at?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface HarborExecutionLogs {
|
|
43
|
+
execution_id: string;
|
|
44
|
+
state?: string | null;
|
|
45
|
+
exit_code?: number | null;
|
|
46
|
+
error_code?: string | null;
|
|
47
|
+
error_message?: string | null;
|
|
48
|
+
started_at?: string | null;
|
|
49
|
+
completed_at?: string | null;
|
|
50
|
+
events: HarborExecutionEvent[];
|
|
51
|
+
}
|
|
52
|
+
export declare class HarborApiError extends Error {
|
|
53
|
+
readonly status: number;
|
|
54
|
+
readonly code: string;
|
|
55
|
+
readonly payload?: unknown | undefined;
|
|
56
|
+
constructor(status: number, code: string, message: string, payload?: unknown | undefined);
|
|
57
|
+
}
|
|
58
|
+
export declare class HarborApiClient {
|
|
59
|
+
readonly baseUrl: string;
|
|
60
|
+
readonly agentToken: string;
|
|
61
|
+
constructor();
|
|
62
|
+
private request;
|
|
63
|
+
fetchCatalog(): Promise<HarborCatalogCapability[]>;
|
|
64
|
+
startExecution(capabilitySlug: string, input: Record<string, unknown>, timeoutMs: number): Promise<HarborExecutionStart>;
|
|
65
|
+
fetchExecutionLogs(executionId: string, options?: {
|
|
66
|
+
follow?: boolean;
|
|
67
|
+
after?: number;
|
|
68
|
+
waitMs?: number;
|
|
69
|
+
}): Promise<HarborExecutionLogs>;
|
|
70
|
+
isTerminalState(state: string | null | undefined): boolean;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/mcp/api-client.ts"],"names":[],"mappings":"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"}
|