skydive-cli 0.5.0-beta.4 → 0.5.0-beta.41
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/CHANGELOG.md +8 -0
- package/README.md +35 -4
- package/dist/js/api-DQCaztBg.mjs +315 -0
- package/dist/js/{billing-blocked-Dgu5-oDy.mjs → billing-blocked-SE6tySLd.mjs} +1 -1
- package/dist/js/bin.mjs +655 -278
- package/dist/js/{boot-B_93T51X.mjs → boot-B1Y1D48W.mjs} +2980 -823
- package/dist/js/chunk-BbwQpWto.mjs +33 -0
- package/dist/js/{client-Cn2af31H.mjs → client-Btq6bMzX.mjs} +108 -2
- package/dist/js/client-DCwVlAal.mjs +5 -0
- package/dist/js/{client-Dd5sMXPv.mjs → client-DMYwKALl.mjs} +348 -141
- package/dist/js/daemon-By-I_HVM.mjs +7 -0
- package/dist/js/{daemon-BYlIJN6x.mjs → daemon-D8WoX21I.mjs} +43 -7
- package/dist/js/{daemon-client-DPjmvIDE.mjs → daemon-client-Bp5DMeIi.mjs} +12 -8
- package/dist/js/daemon-client-_SVAskeO.mjs +8 -0
- package/dist/js/dist-CRtjM7ba.mjs +1750 -0
- package/dist/js/forward-zwB55Bls.mjs +208 -0
- package/dist/js/{profiler-RmWjKIHD.mjs → install-BkMcGVYS.mjs} +529 -211
- package/dist/js/launcher.mjs +49 -0
- package/dist/js/localhost-cert-Bn-UBUmj.mjs +67 -0
- package/dist/js/{print-ba_0hiV9.mjs → print-BAmEefvX.mjs} +3 -3
- package/dist/js/{print-CbayCa87.mjs → print-CwbdwCeQ.mjs} +213 -37
- package/dist/js/{print-share-uwUG16Ov.mjs → print-share-azWHVxpt.mjs} +8 -2
- package/dist/js/raw-pty-Ci2qFR9F.mjs +5 -0
- package/dist/js/{raw-pty-B6mAroiI.mjs → raw-pty-D5PhKZSl.mjs} +1 -1
- package/dist/js/rest-B5DVQ1LM.mjs +6 -0
- package/dist/js/{rest-BY2nADw5.mjs → rest-Bbe-RhMy.mjs} +105 -25
- package/dist/js/tls-cert-CLgSQALB.mjs +4 -0
- package/dist/js/tls-cert-CV-pwxVN.mjs +67 -0
- package/package.json +11 -4
- package/dist/js/client-DZstLQ_1.mjs +0 -4
- package/dist/js/daemon-CBvFKDpy.mjs +0 -5
- package/dist/js/daemon-client-Z4Ce4zf-.mjs +0 -6
- package/dist/js/raw-pty-3EkG-jjH.mjs +0 -5
- package/dist/js/rest-DADJh0bi.mjs +0 -6
- /package/dist/js/{billing-blocked-2wju4gC_.mjs → billing-blocked-D3l5kJlX.mjs} +0 -0
- /package/dist/js/{http-error-DzyrsLAZ.mjs → http-error-UHH3mVBF.mjs} +0 -0
- /package/dist/js/{output-DYzzdXYV.mjs → output-wY0VQDea.mjs} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as HttpError } from "./http-error-
|
|
3
|
-
import { a as billingBlockedOutcomeSchema } from "./billing-blocked-
|
|
2
|
+
import { t as HttpError } from "./http-error-UHH3mVBF.mjs";
|
|
3
|
+
import { a as billingBlockedOutcomeSchema } from "./billing-blocked-D3l5kJlX.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { createParser } from "eventsource-parser";
|
|
6
6
|
|
|
@@ -124,6 +124,13 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
124
124
|
if (!res.ok) throw new HttpError(res.status, await res.text().catch(() => ""));
|
|
125
125
|
return schema.parse(await res.json());
|
|
126
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* The agent PATCH is a merge: only the keys present are written, so each
|
|
129
|
+
* caller sends exactly the settings it means to change.
|
|
130
|
+
*/
|
|
131
|
+
function patchAgent(agentId, body) {
|
|
132
|
+
return post(`/api/v1/agents/${encodeURIComponent(agentId)}`, body, updateAgentResponseSchema, "PATCH");
|
|
133
|
+
}
|
|
127
134
|
async function del(path) {
|
|
128
135
|
const res = await fetch(`${appUrl}${path}`, {
|
|
129
136
|
method: "DELETE",
|
|
@@ -193,13 +200,14 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
193
200
|
}
|
|
194
201
|
};
|
|
195
202
|
return {
|
|
196
|
-
listAgents: async ({ scope, onPage }) => {
|
|
203
|
+
listAgents: async ({ scope, onPage, limit }) => {
|
|
197
204
|
const all = [];
|
|
198
205
|
let cursor;
|
|
199
|
-
const maxAgents = 2e3;
|
|
206
|
+
const maxAgents = limit ?? 2e3;
|
|
207
|
+
const pageSize = Math.min(100, maxAgents);
|
|
200
208
|
do {
|
|
201
209
|
const params = new URLSearchParams({
|
|
202
|
-
limit:
|
|
210
|
+
limit: String(pageSize),
|
|
203
211
|
scope,
|
|
204
212
|
sort: "mine_first_usage",
|
|
205
213
|
includeStats: "false"
|
|
@@ -213,16 +221,23 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
213
221
|
return all;
|
|
214
222
|
},
|
|
215
223
|
createAgent: async ({ name }) => {
|
|
216
|
-
const { agent } = await post("/api/v1/agents", { name }, createAgentResponseSchema);
|
|
224
|
+
const { agent } = await post("/api/v1/agents", name == null ? {} : { name }, createAgentResponseSchema);
|
|
217
225
|
return agent;
|
|
218
226
|
},
|
|
219
|
-
|
|
220
|
-
const
|
|
227
|
+
createOnboardingConversation: async ({ agentId, projectDir, os }) => {
|
|
228
|
+
const result = await post(`/api/v1/agents/${encodeURIComponent(agentId)}/onboarding-conversation`, {
|
|
229
|
+
projectDir,
|
|
230
|
+
os
|
|
231
|
+
}, onboardingConversationResponseSchema);
|
|
221
232
|
return {
|
|
222
|
-
|
|
223
|
-
|
|
233
|
+
conversationId: result.conversationId,
|
|
234
|
+
runId: result.runId
|
|
224
235
|
};
|
|
225
236
|
},
|
|
237
|
+
getAgent: async ({ agentId }) => {
|
|
238
|
+
const { agent } = await get(`/api/v1/agents/${encodeURIComponent(agentId)}`, getAgentResponseSchema);
|
|
239
|
+
return agent;
|
|
240
|
+
},
|
|
226
241
|
suggestAgentIdentity: async () => {
|
|
227
242
|
const { suggestion } = await get("/api/v1/agents/suggest", suggestAgentResponseSchema);
|
|
228
243
|
return suggestion;
|
|
@@ -235,9 +250,31 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
235
250
|
const { models } = await get("/api/v1/models", listModelsResponseSchema);
|
|
236
251
|
return models;
|
|
237
252
|
},
|
|
238
|
-
|
|
239
|
-
const {
|
|
240
|
-
|
|
253
|
+
listModelEfforts: async () => {
|
|
254
|
+
const { modelConfigOverrides } = await get("/api/v1/models/preferred", modelEffortPreferencesResponseSchema);
|
|
255
|
+
const efforts = {};
|
|
256
|
+
for (const [modelId, config] of Object.entries(modelConfigOverrides ?? {})) if (config.thinkingLevel) efforts[modelId] = config.thinkingLevel;
|
|
257
|
+
return efforts;
|
|
258
|
+
},
|
|
259
|
+
setModelEffort: async ({ modelId, thinkingLevel }) => {
|
|
260
|
+
await post("/api/v1/models/config", {
|
|
261
|
+
modelId,
|
|
262
|
+
config: { thinkingLevel }
|
|
263
|
+
}, z.unknown(), "PATCH");
|
|
264
|
+
},
|
|
265
|
+
updateAgentModel: async ({ agentId, model, thinkingLevel }) => {
|
|
266
|
+
const { agent } = await patchAgent(agentId, {
|
|
267
|
+
model,
|
|
268
|
+
thinkingLevel
|
|
269
|
+
});
|
|
270
|
+
return {
|
|
271
|
+
model: agent.model ?? null,
|
|
272
|
+
thinkingLevel: agent.thinkingLevel ?? null
|
|
273
|
+
};
|
|
274
|
+
},
|
|
275
|
+
updateAgentEffort: async ({ agentId, thinkingLevel }) => {
|
|
276
|
+
const { agent } = await patchAgent(agentId, { thinkingLevel });
|
|
277
|
+
return { thinkingLevel: agent.thinkingLevel ?? null };
|
|
241
278
|
},
|
|
242
279
|
listConversations: async ({ agentId, limit, channels, archived, query, onPage }) => {
|
|
243
280
|
const trimmedQuery = query?.trim();
|
|
@@ -262,9 +299,17 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
262
299
|
} while (cursor && all.length < maxConversations);
|
|
263
300
|
return limit ? all.slice(0, limit) : all;
|
|
264
301
|
},
|
|
265
|
-
listMessages: async ({ conversationId }) => {
|
|
266
|
-
const
|
|
267
|
-
|
|
302
|
+
listMessages: async ({ conversationId, limit, before }) => {
|
|
303
|
+
const params = new URLSearchParams();
|
|
304
|
+
if (limit !== void 0) params.set("limit", String(limit));
|
|
305
|
+
if (before !== void 0) params.set("before", before);
|
|
306
|
+
const query = params.toString();
|
|
307
|
+
const { messages, hasMore, nextBefore } = await get(`/api/v1/conversations/${encodeURIComponent(conversationId)}/messages${query ? `?${query}` : ""}`, listMessagesResponseSchema);
|
|
308
|
+
return {
|
|
309
|
+
messages,
|
|
310
|
+
hasMore: hasMore ?? false,
|
|
311
|
+
nextBefore: nextBefore ?? null
|
|
312
|
+
};
|
|
268
313
|
},
|
|
269
314
|
listWorkspaceFiles: async ({ agentId }) => {
|
|
270
315
|
const { files } = await get(`/api/v1/workspace-files?${new URLSearchParams({ agentId }).toString()}`, listWorkspaceFilesResponseSchema);
|
|
@@ -291,6 +336,13 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
291
336
|
const { result } = await get(`/api/v1/trpc/v2.subagentTasks.list?input=${encodeURIComponent(JSON.stringify({ conversationId }))}`, subagentTasksResponseSchema);
|
|
292
337
|
return new Map(result.data.subagentTasks.map((task) => [task.id, task]));
|
|
293
338
|
},
|
|
339
|
+
computeLiveStats: async (agentId) => {
|
|
340
|
+
const { stats } = await get(`/api/v1/compute/live-stats?agentId=${encodeURIComponent(agentId)}`, liveStatsResponseSchema);
|
|
341
|
+
return stats;
|
|
342
|
+
},
|
|
343
|
+
restartAgent: async (agentId) => {
|
|
344
|
+
await post(`/api/v1/agents/${encodeURIComponent(agentId)}/restart`, {}, z.object({ ok: z.boolean() }));
|
|
345
|
+
},
|
|
294
346
|
uploadAttachment: async ({ agentId, fileName, mediaType, data }) => {
|
|
295
347
|
const size = data.byteLength;
|
|
296
348
|
const presign = await post("/api/v1/attachments/presign", {
|
|
@@ -331,6 +383,9 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
331
383
|
setConversationArchived: async ({ conversationId, archived }) => {
|
|
332
384
|
await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}/archive`, { archived }, z.object({ archived: z.boolean() }));
|
|
333
385
|
},
|
|
386
|
+
markConversationRead: async ({ conversationId }) => {
|
|
387
|
+
await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}/read`, {}, z.object({ read: z.boolean() }));
|
|
388
|
+
},
|
|
334
389
|
renameConversation: async ({ conversationId, title }) => {
|
|
335
390
|
await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}`, { title }, z.object({ conversation: z.object({ id: z.string() }) }), "PATCH");
|
|
336
391
|
},
|
|
@@ -352,6 +407,7 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
352
407
|
const { authorizationUrl } = await post("/api/v1/external-oauth/connect", input, externalOauthConnectResponseSchema);
|
|
353
408
|
return { authorizationUrl: authorizationUrl ?? null };
|
|
354
409
|
},
|
|
410
|
+
decideComputeRequest: async ({ requestId, decision }) => post(`/api/v1/compute-requests/${encodeURIComponent(requestId)}/decision`, { decision }, computeDecisionResponseSchema),
|
|
355
411
|
fulfillCredential: async ({ url, body }) => {
|
|
356
412
|
const target = new URL(url, appUrl).toString();
|
|
357
413
|
const res = await fetch(target, {
|
|
@@ -436,27 +492,35 @@ const agentSummarySchema = z.object({
|
|
|
436
492
|
createdAt: z.string(),
|
|
437
493
|
creatorName: z.string().nullable().optional(),
|
|
438
494
|
model: z.string().nullable().optional(),
|
|
439
|
-
modelLocked: z.boolean().optional()
|
|
495
|
+
modelLocked: z.boolean().optional(),
|
|
496
|
+
thinkingLevel: z.string().nullable().optional()
|
|
440
497
|
});
|
|
441
498
|
const platformModelSchema = z.object({
|
|
442
499
|
id: z.string(),
|
|
443
500
|
displayName: z.string(),
|
|
444
501
|
providerDisplay: z.string().optional(),
|
|
445
502
|
reasoning: z.boolean().optional(),
|
|
446
|
-
compliant: z.boolean().optional()
|
|
503
|
+
compliant: z.boolean().optional(),
|
|
504
|
+
thinkingLevels: z.array(z.string()).optional(),
|
|
505
|
+
thinkingLevelLabels: z.record(z.string(), z.string()).optional()
|
|
447
506
|
}).passthrough();
|
|
448
507
|
const listModelsResponseSchema = z.object({ models: z.array(platformModelSchema) });
|
|
449
|
-
const
|
|
508
|
+
const modelEffortPreferencesResponseSchema = z.object({ modelConfigOverrides: z.record(z.string(), z.object({ thinkingLevel: z.string().optional() })).optional() });
|
|
509
|
+
const updateAgentResponseSchema = z.object({ agent: z.object({
|
|
510
|
+
model: z.string().nullable().optional(),
|
|
511
|
+
thinkingLevel: z.string().nullable().optional()
|
|
512
|
+
}).passthrough() });
|
|
450
513
|
const listAgentsResponseSchema = z.object({
|
|
451
514
|
agents: z.array(agentSummarySchema),
|
|
452
515
|
nextCursor: z.string().nullable().optional(),
|
|
453
516
|
totalCount: z.number().nullable().optional()
|
|
454
517
|
});
|
|
455
518
|
const createAgentResponseSchema = z.object({ agent: agentSummarySchema });
|
|
456
|
-
const
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
})
|
|
519
|
+
const onboardingConversationResponseSchema = z.object({
|
|
520
|
+
conversationId: z.string(),
|
|
521
|
+
runId: z.string().nullable()
|
|
522
|
+
});
|
|
523
|
+
const getAgentResponseSchema = z.object({ agent: agentSummarySchema });
|
|
460
524
|
const agentSuggestionSchema = z.object({ name: z.string() });
|
|
461
525
|
const suggestAgentResponseSchema = z.object({ suggestion: agentSuggestionSchema.nullable() });
|
|
462
526
|
const conversationAgentSchema = z.object({
|
|
@@ -474,6 +538,7 @@ const conversationSummarySchema = z.object({
|
|
|
474
538
|
channel: z.string().nullable(),
|
|
475
539
|
channelLabel: z.string().nullable(),
|
|
476
540
|
viewerArchivedAt: z.string().nullable().optional(),
|
|
541
|
+
unread: z.boolean().optional(),
|
|
477
542
|
agent: conversationAgentSchema,
|
|
478
543
|
agents: z.array(conversationAgentSchema).optional()
|
|
479
544
|
});
|
|
@@ -535,7 +600,20 @@ const subagentTaskSnapshotSchema = z.object({
|
|
|
535
600
|
completedAt: z.string().nullable()
|
|
536
601
|
});
|
|
537
602
|
const subagentTasksResponseSchema = z.object({ result: z.object({ data: z.object({ subagentTasks: z.array(subagentTaskSnapshotSchema) }) }) });
|
|
538
|
-
const
|
|
603
|
+
const liveStatsResponseSchema = z.object({ stats: z.object({
|
|
604
|
+
sampledAt: z.number(),
|
|
605
|
+
cpuUsedPct: z.number(),
|
|
606
|
+
cpuCount: z.number(),
|
|
607
|
+
memUsedBytes: z.number(),
|
|
608
|
+
memTotalBytes: z.number(),
|
|
609
|
+
diskUsedBytes: z.number(),
|
|
610
|
+
diskTotalBytes: z.number()
|
|
611
|
+
}).nullable() });
|
|
612
|
+
const listMessagesResponseSchema = z.object({
|
|
613
|
+
messages: z.array(uiMessageSchema),
|
|
614
|
+
hasMore: z.boolean().optional(),
|
|
615
|
+
nextBefore: z.string().nullish()
|
|
616
|
+
});
|
|
539
617
|
const workspaceFileSchema = z.object({
|
|
540
618
|
id: z.string(),
|
|
541
619
|
path: z.string(),
|
|
@@ -569,6 +647,7 @@ const finalizeResponseSchema = z.object({
|
|
|
569
647
|
});
|
|
570
648
|
const oauthConnectResponseSchema = z.object({ connectLink: z.string() }).passthrough();
|
|
571
649
|
const externalOauthConnectResponseSchema = z.object({ authorizationUrl: z.string().optional() }).passthrough();
|
|
650
|
+
const computeDecisionResponseSchema = z.object({ status: z.string() }).passthrough();
|
|
572
651
|
const runStreamEventSchema = z.union([z.object({
|
|
573
652
|
kind: z.literal("chunk"),
|
|
574
653
|
chunk: z.record(z.unknown())
|
|
@@ -589,7 +668,8 @@ const conversationStreamEventSchema = z.discriminatedUnion("kind", [
|
|
|
589
668
|
kind: z.literal("agent"),
|
|
590
669
|
id: z.string(),
|
|
591
670
|
model: z.string().nullable(),
|
|
592
|
-
modelLocked: z.boolean()
|
|
671
|
+
modelLocked: z.boolean(),
|
|
672
|
+
thinkingLevel: z.string().nullish()
|
|
593
673
|
}),
|
|
594
674
|
z.object({
|
|
595
675
|
kind: z.literal("run"),
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import dns from "node:dns";
|
|
4
|
+
|
|
5
|
+
//#region ../portal-daemon/src/tls-cert.ts
|
|
6
|
+
/**
|
|
7
|
+
* File-backed cert source, configured by environment:
|
|
8
|
+
* SKYDIVE_PORTAL_TLS_KEY / SKYDIVE_PORTAL_TLS_CERT (PEM file paths) and
|
|
9
|
+
* SKYDIVE_PORTAL_TLS_HOST (the name the cert covers). All three or nothing —
|
|
10
|
+
* a partial configuration is reported once and treated as absent, so a typo
|
|
11
|
+
* degrades to today's behavior instead of a crash loop.
|
|
12
|
+
*/
|
|
13
|
+
function envTlsCertSource(env, log) {
|
|
14
|
+
return async () => {
|
|
15
|
+
const keyPath = env.SKYDIVE_PORTAL_TLS_KEY;
|
|
16
|
+
const certPath = env.SKYDIVE_PORTAL_TLS_CERT;
|
|
17
|
+
const hostname = env.SKYDIVE_PORTAL_TLS_HOST;
|
|
18
|
+
if (!keyPath && !certPath && !hostname) return null;
|
|
19
|
+
if (!keyPath || !certPath || !hostname) {
|
|
20
|
+
log("forward: SKYDIVE_PORTAL_TLS_KEY, SKYDIVE_PORTAL_TLS_CERT and SKYDIVE_PORTAL_TLS_HOST must all be set to enable the TLS origin; continuing with http only");
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const [key, cert] = await Promise.all([readFile(keyPath, "utf8"), readFile(certPath, "utf8")]);
|
|
25
|
+
return {
|
|
26
|
+
key,
|
|
27
|
+
cert,
|
|
28
|
+
hostname
|
|
29
|
+
};
|
|
30
|
+
} catch (err) {
|
|
31
|
+
log(`forward: could not read TLS key/cert (${err instanceof Error ? err.message : String(err)}); continuing with http only`);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The default cert source for both tunnel surfaces: an explicit env/file
|
|
38
|
+
* configuration wins (BYO cert — also the escape hatch for machines where the
|
|
39
|
+
* trust prompt is unwanted, e.g. CI), otherwise the fully automatic
|
|
40
|
+
* devcert-backed localhost source.
|
|
41
|
+
*/
|
|
42
|
+
function defaultTlsCertSource(env, log) {
|
|
43
|
+
const fromEnv = envTlsCertSource(env, log);
|
|
44
|
+
return async () => {
|
|
45
|
+
if (env.SKYDIVE_PORTAL_TLS_KEY || env.SKYDIVE_PORTAL_TLS_CERT || env.SKYDIVE_PORTAL_TLS_HOST) return fromEnv();
|
|
46
|
+
const { localhostCertSource } = await import("./localhost-cert-Bn-UBUmj.mjs");
|
|
47
|
+
return localhostCertSource(log)();
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Detect resolver-level DNS rebind protection: some routers/resolvers refuse
|
|
52
|
+
* public names that answer with loopback addresses (Plex documents this exact
|
|
53
|
+
* failure for *.plex.direct). The https origin simply won't resolve for such
|
|
54
|
+
* users — warn with the cause, and leave the http origin (unaffected) as the
|
|
55
|
+
* fallback. Never fatal: the browser may use a different resolver than the
|
|
56
|
+
* OS, so we start the listener regardless.
|
|
57
|
+
*/
|
|
58
|
+
async function warnOnRebindProtection(hostname, log) {
|
|
59
|
+
try {
|
|
60
|
+
if (!(await dns.promises.lookup(hostname, { all: true })).some((a) => a.address === "127.0.0.1" || a.address === "::1")) log(`forward: ${hostname} did not resolve to 127.0.0.1 — a resolver on this network may block public names pointing at loopback (DNS rebind protection). The https origin may not work here; http://localhost is unaffected.`);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
log(`forward: ${hostname} did not resolve (${error instanceof Error ? error.message : String(error)}) — a resolver on this network may block public names pointing at loopback (DNS rebind protection). The https origin may not work here; http://localhost is unaffected.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { envTlsCertSource as n, warnOnRebindProtection as r, defaultTlsCertSource as t };
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skydive-cli",
|
|
3
|
-
"version": "0.5.0-beta.
|
|
3
|
+
"version": "0.5.0-beta.41",
|
|
4
4
|
"description": "Skydive CLI — cloud agents from the command line",
|
|
5
5
|
"homepage": "https://skydive.com",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
8
|
-
"skydive": "./dist/js/
|
|
8
|
+
"skydive": "./dist/js/launcher.mjs"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"type": "module",
|
|
14
14
|
"exports": {
|
|
15
|
-
"./bin": "./dist/js/bin.mjs"
|
|
15
|
+
"./bin": "./dist/js/bin.mjs",
|
|
16
|
+
"./launcher": "./dist/js/launcher.mjs"
|
|
16
17
|
},
|
|
17
18
|
"publishConfig": {
|
|
18
19
|
"access": "public",
|
|
@@ -41,7 +42,6 @@
|
|
|
41
42
|
"react-devtools-core": "^7.0.1",
|
|
42
43
|
"safe-stable-stringify": "^2.3.1",
|
|
43
44
|
"semver": "^7.7.4",
|
|
44
|
-
"shell-quote": "1.9.0",
|
|
45
45
|
"web-tree-sitter": "0.25.10",
|
|
46
46
|
"ws": "^8.21.0",
|
|
47
47
|
"yargs": "^17.7.2",
|
|
@@ -66,5 +66,12 @@
|
|
|
66
66
|
"engines": {
|
|
67
67
|
"bun": ">=1.3.14",
|
|
68
68
|
"node": ">=20.0.0"
|
|
69
|
+
},
|
|
70
|
+
"//optionalDependencies": "The per-platform binary packages (skydive-cli-<os>-<arch>) are INTENTIONALLY not committed here. They are published by release-skydive-cli-binaries.yml and injected — pinned to the exact version being published — into the published launcher's optionalDependencies at release time (scripts/prepare-platform-packages.mjs --pin-version, run in release-skydive-cli.yml). Committing them would make `yarn install` try to resolve versions that only exist post-publish, breaking local dev and CI. npm installs of a published skydive-cli still get them (os/cpu-gated); the launcher (src/launcher.ts) resolves and execs the matching one. Local dev never needs them: it runs the JS bundle or `build:binary` directly.",
|
|
71
|
+
"optionalDependencies": {
|
|
72
|
+
"skydive-cli-darwin-arm64": "0.5.0-beta.41",
|
|
73
|
+
"skydive-cli-darwin-x64": "0.5.0-beta.41",
|
|
74
|
+
"skydive-cli-linux-x64": "0.5.0-beta.41",
|
|
75
|
+
"skydive-cli-linux-arm64": "0.5.0-beta.41"
|
|
69
76
|
}
|
|
70
77
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import "./client-Dd5sMXPv.mjs";
|
|
3
|
-
import { a as runPortalDaemon, i as queryDaemonStatus, n as ensureDaemonRunning, o as startPortalDaemon, r as isDaemonListening, s as stopDaemon, t as PortalDaemon } from "./daemon-BYlIJN6x.mjs";
|
|
4
|
-
|
|
5
|
-
export { runPortalDaemon };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|