skydive-cli 0.5.0-beta.3 → 0.5.0-beta.30

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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { S as getConfigPath } from "./print-CbayCa87.mjs";
2
+ import { C as getConfigPath } from "./print-DYiQC5IW.mjs";
3
3
  import os from "node:os";
4
4
  import path from "node:path";
5
5
  import { err, ok } from "neverthrow";
@@ -8,7 +8,7 @@ import fs from "node:fs";
8
8
 
9
9
  //#region package.json
10
10
  var name = "skydive-cli";
11
- var version$1 = "0.5.0-beta.3";
11
+ var version$1 = "0.5.0-beta.30";
12
12
 
13
13
  //#endregion
14
14
  //#region src/auth/organization.ts
@@ -32,6 +32,32 @@ async function listWorkspaces({ appUrl, sessionToken }) {
32
32
  }
33
33
  }
34
34
  /**
35
+ * Match a workspace selector against a roster the way `workspace switch` does:
36
+ * exact id first, then case-insensitive slug, then case-insensitive name.
37
+ * Returns null when nothing matches. Pure — the caller owns fetching and error
38
+ * messaging.
39
+ */
40
+ function matchWorkspace(workspaces, selector) {
41
+ const needle = selector.trim().toLowerCase();
42
+ return workspaces.find((w) => w.id === selector) ?? workspaces.find((w) => w.slug.toLowerCase() === needle) ?? workspaces.find((w) => w.name.toLowerCase() === needle) ?? null;
43
+ }
44
+ /**
45
+ * Resolve a workspace selector (slug, name, or id) to its id by listing the
46
+ * account's workspaces and matching. Used by any command that takes a
47
+ * `--workspace` flag to scope requests without persisting an active-workspace
48
+ * switch.
49
+ */
50
+ async function resolveWorkspaceId({ appUrl, sessionToken, selector }) {
51
+ const workspaces = await listWorkspaces({
52
+ appUrl,
53
+ sessionToken
54
+ });
55
+ if (workspaces.isErr()) return err(workspaces.error);
56
+ const match = matchWorkspace(workspaces.value, selector);
57
+ if (!match) return err({ message: `No workspace matches "${selector}". Run \`skydive workspace list\` to see available workspaces.` });
58
+ return ok(match);
59
+ }
60
+ /**
35
61
  * Resolve who the current chat session belongs to: the signed-in user's
36
62
  * email/name and the active workspace. Used by `auth status` so a user running
37
63
  * multiple accounts can answer "am I logged into the right one?" without
@@ -125,6 +151,223 @@ async function ensureActiveOrganization({ appUrl, sessionToken }) {
125
151
  });
126
152
  }
127
153
 
154
+ //#endregion
155
+ //#region src/shell/shell-env.ts
156
+ /**
157
+ * Shared, dependency-light shell primitives used by anything that edits the
158
+ * user's shell startup files — `completion install` and `agents alias`. Kept
159
+ * free of yargs and the CLI's output layer so the TUI can import it without
160
+ * dragging command machinery into its bundle or creating a TUI -> commands
161
+ * import cycle.
162
+ */
163
+ const SUPPORTED_SHELLS = [
164
+ "bash",
165
+ "zsh",
166
+ "fish"
167
+ ];
168
+ const defaultInstallEnv = () => ({
169
+ home: os.homedir(),
170
+ platform: process.platform,
171
+ env: process.env,
172
+ exists: fs.existsSync
173
+ });
174
+ /**
175
+ * The shell to act on when the user didn't name one. `$SHELL` is the only
176
+ * signal available: an install runs as a child process, so the invoking
177
+ * shell's own variables (`$ZSH_VERSION`, `$FISH_VERSION`) aren't visible here.
178
+ */
179
+ function detectShell(env = process.env) {
180
+ const shell = env["SHELL"];
181
+ if (!shell) return null;
182
+ const name = path.basename(shell);
183
+ return SUPPORTED_SHELLS.find((candidate) => name === candidate) ?? null;
184
+ }
185
+
186
+ //#endregion
187
+ //#region src/commands/agent-alias.ts
188
+ /**
189
+ * Shell aliases that point a friendly command name at a specific agent's chat.
190
+ *
191
+ * When someone creates an agent named "Ripple", they almost always want to
192
+ * reach it again by typing `ripple`, not `skydive chat --agent <uuid>`. This
193
+ * module writes a managed alias block into the user's shell startup file so
194
+ * `ripple` opens that agent. It reuses the same shell detection and startup-file
195
+ * machinery as `completion install` (imported from ./completion), so the two
196
+ * features agree on which file to touch and how to detect the shell.
197
+ *
198
+ * The alias always targets the agent **id**, never its name: names are not
199
+ * unique and can be renamed, so an id keeps `ripple` pointed at the same agent
200
+ * even if a second "Ripple" is created later or this one is renamed.
201
+ */
202
+ /**
203
+ * Turn a display name into a shell-safe alias token: lowercase, non-alnum runs
204
+ * collapsed to a single hyphen, leading/trailing hyphens trimmed. "Ripple" ->
205
+ * "ripple", "My Agent" -> "my-agent", "Ripple 2.0" -> "ripple-2-0".
206
+ *
207
+ * A leading digit is prefixed with `a-` because bash rejects an alias name that
208
+ * starts with a digit (`alias 2fast=...` is a syntax error). An empty result
209
+ * (a name that was all punctuation) falls back to "agent" so callers always get
210
+ * a usable token to offer or dedupe from.
211
+ */
212
+ function slugifyAliasName(name) {
213
+ const slug = name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
214
+ if (!slug) return "agent";
215
+ return /^[0-9]/.test(slug) ? `a-${slug}` : slug;
216
+ }
217
+ /**
218
+ * The alias token to actually install, given a preferred token and the set of
219
+ * names already taken (existing aliases, and — the caller's choice — commands
220
+ * on PATH). Prefers the clean token; on a collision appends the lowest integer
221
+ * that frees it: `ripple` -> `ripple2` -> `ripple3`. Matching is
222
+ * case-insensitive because shells treat `Ripple` and `ripple` as distinct
223
+ * aliases but a user typing one means the other.
224
+ */
225
+ function dedupeAliasName(preferred, taken) {
226
+ const takenLower = new Set(Array.from(taken, (t) => t.trim().toLowerCase()).filter(Boolean));
227
+ if (!takenLower.has(preferred.toLowerCase())) return preferred;
228
+ for (let n = 2;; n += 1) {
229
+ const candidate = `${preferred}${n}`;
230
+ if (!takenLower.has(candidate.toLowerCase())) return candidate;
231
+ }
232
+ }
233
+ /** The startup file an alias block belongs in, per shell. */
234
+ function aliasTarget(shell, deps = defaultInstallEnv()) {
235
+ const { home, platform, env, exists } = deps;
236
+ if (shell === "fish") {
237
+ const configHome = env["XDG_CONFIG_HOME"] || path.join(home, ".config");
238
+ return path.join(configHome, "fish", "config.fish");
239
+ }
240
+ if (shell === "zsh") {
241
+ const zdotdir = env["ZDOTDIR"] || home;
242
+ return path.join(zdotdir, ".zshrc");
243
+ }
244
+ const rc = path.join(home, ".bashrc");
245
+ const profile = path.join(home, ".bash_profile");
246
+ const preferred = platform === "darwin" ? profile : rc;
247
+ const alternate = platform === "darwin" ? rc : profile;
248
+ if (!exists(preferred) && exists(alternate)) return alternate;
249
+ return preferred;
250
+ }
251
+ const BLOCK_START = "###-begin-skydive-agent-aliases-###";
252
+ const BLOCK_END = "###-end-skydive-agent-aliases-###";
253
+ const aliasLine = (entry) => {
254
+ const ws = entry.workspaceId ? ` --workspace ${entry.workspaceId}` : "";
255
+ return `alias ${entry.alias}='skydive chat --agent ${entry.agentId}${ws} --new' # skydive-agent:${entry.agentId}`;
256
+ };
257
+ /**
258
+ * Parse the alias entries already inside the managed block. Used to merge a new
259
+ * alias with existing ones and to answer "is this token taken?". Tolerant of
260
+ * hand-edits: only well-formed lines carrying our trailing marker are read
261
+ * back; anything else in the block is preserved verbatim on rewrite.
262
+ */
263
+ function parseAliasBlock(existing) {
264
+ const start = existing.indexOf(BLOCK_START);
265
+ const end = existing.indexOf(BLOCK_END);
266
+ if (start === -1 || end <= start) return [];
267
+ const body = existing.slice(start + 35, end);
268
+ const entries = [];
269
+ for (const line of body.split("\n")) {
270
+ const match = line.match(/^alias\s+([^=]+)=.*# skydive-agent:([0-9a-f-]+)\s*$/i);
271
+ if (match?.[1] && match[2]) {
272
+ const wsMatch = line.match(/--workspace\s+(\S+)/);
273
+ entries.push({
274
+ alias: match[1].trim(),
275
+ agentId: match[2],
276
+ workspaceId: wsMatch?.[1]
277
+ });
278
+ }
279
+ }
280
+ return entries;
281
+ }
282
+ /**
283
+ * Merge `entry` into the managed alias block of `existing`, returning the new
284
+ * file contents. Idempotent: re-installing the same alias for the same agent is
285
+ * a no-op edit; a new agent id adds a line; an existing agent id has its alias
286
+ * token refreshed. The block is created if absent.
287
+ */
288
+ function spliceAliasBlock(existing, entry) {
289
+ const current = parseAliasBlock(existing).filter((e) => e.agentId !== entry.agentId);
290
+ current.push(entry);
291
+ current.sort((a, b) => a.alias.localeCompare(b.alias));
292
+ const block = [
293
+ BLOCK_START,
294
+ "# skydive agent aliases, managed by `skydive agents alias`. Edits between",
295
+ "# these markers are overwritten when an alias is added or refreshed.",
296
+ ...current.map(aliasLine),
297
+ BLOCK_END
298
+ ].join("\n");
299
+ const start = existing.indexOf(BLOCK_START);
300
+ const endMarker = BLOCK_END;
301
+ const end = existing.indexOf(endMarker);
302
+ if (start !== -1 && end > start) return `${existing.slice(0, start)}${block}\n${existing.slice(end + 33).replace(/^\n/, "")}`;
303
+ return `${existing}${existing === "" || existing.endsWith("\n\n") ? "" : "\n"}\n${block}\n`;
304
+ }
305
+ /**
306
+ * Write (or refresh) an agent alias in the user's shell startup file. Returns
307
+ * the resolved shell, file, and the alias token actually used. Does not dedupe
308
+ * on its own — pass a token already reconciled with `takenAliasNames` so the
309
+ * caller controls the suggestion UX.
310
+ */
311
+ function installAgentAlias(input, deps = defaultInstallEnv()) {
312
+ const target = aliasTarget(input.shell, deps);
313
+ const existing = deps.exists(target) ? fs.readFileSync(target, "utf8") : "";
314
+ const contents = spliceAliasBlock(existing, {
315
+ alias: input.alias,
316
+ agentId: input.agentId,
317
+ workspaceId: input.workspaceId
318
+ });
319
+ fs.mkdirSync(path.dirname(target), { recursive: true });
320
+ fs.writeFileSync(target, contents, "utf8");
321
+ return {
322
+ shell: input.shell,
323
+ path: target,
324
+ alias: input.alias,
325
+ agentId: input.agentId,
326
+ updated: existing.includes(BLOCK_START)
327
+ };
328
+ }
329
+ /**
330
+ * Alias tokens already defined in our managed block of the given shell's
331
+ * startup file. The dedupe source: a fresh install shouldn't collide with an
332
+ * alias we wrote for another agent. (We don't try to read the user's own
333
+ * hand-written aliases or PATH — a shell child process can't see the parent's
334
+ * live alias table, and probing PATH is noisy; the dedupe covers our own
335
+ * blocks, which is where real collisions come from in practice.)
336
+ */
337
+ function takenAliasNames(shell, deps = defaultInstallEnv()) {
338
+ const target = aliasTarget(shell, deps);
339
+ if (!deps.exists(target)) return [];
340
+ return parseAliasBlock(fs.readFileSync(target, "utf8")).map((e) => e.alias);
341
+ }
342
+ /** What the user must do before the alias works in the shell they're in. */
343
+ function aliasActivationHint(result) {
344
+ return result.shell === "fish" ? "Open a new fish shell to use it." : `Open a new shell, or run: source ${result.path}`;
345
+ }
346
+
347
+ //#endregion
348
+ //#region src/chat/import-seed.ts
349
+ /** Map `process.platform` to the OS family used by the seed prompts. Every
350
+ * non-`win32` platform Node runs on (darwin, linux, the BSDs) is POSIX. */
351
+ function machineOsFromPlatform(platform) {
352
+ return platform === "win32" ? "windows" : "posix";
353
+ }
354
+ /** One clause describing the machine's shell/paths so the agent's discovery
355
+ * sweep uses the right conventions instead of guessing. */
356
+ function osHint(os) {
357
+ return os === "windows" ? "This machine is Windows, so use PowerShell and Windows paths (%USERPROFILE%, backslashes)." : "This machine is POSIX (macOS/Linux), so use a POSIX shell and paths (~, forward slashes).";
358
+ }
359
+ /**
360
+ * The first message of an explicit `skydive import` conversation, sent as the
361
+ * user. Frames the migration and points the agent at its import-config skill.
362
+ */
363
+ function buildImportSeedPrompt(projectDir, os) {
364
+ return [
365
+ "I'm migrating from another coding agent. Import my setup from this machine.",
366
+ "",
367
+ `Use your import-config skill. I ran this from \`${projectDir}\`, so start there and in my home directory. ${osHint(os)} Don't assume one tool — do the discovery sweep so you catch whatever I actually use (Claude Code, Cursor, Codex, Gemini CLI, Copilot, Windsurf, Cline, OpenCode, Aider, and any nested AGENTS.md). Show me the plan first: everything you found, what you'll bring over, where it lands in you, and anything you're leaving out (credentials especially). Then wait for my OK before committing anything.`
368
+ ].join("\n");
369
+ }
370
+
128
371
  //#endregion
129
372
  //#region src/chat/tui/theme.ts
130
373
  const tokyonight = {
@@ -907,6 +1150,17 @@ const WORDMARK = [
907
1150
  "███████║██║ ██╗ ██║ ██████╔╝██║ ╚████╔╝ ███████╗",
908
1151
  "╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝"
909
1152
  ];
1153
+ /** Columns between the pinwheel and the wordmark. */
1154
+ const SPLASH_GAP = 3;
1155
+ /** Columns the full mark + wordmark occupies (no chrome). */
1156
+ const SPLASH_WIDTH = MARK_WIDTH + SPLASH_GAP + WORDMARK.reduce((max, line) => Math.max(max, line.length), 0);
1157
+ /** Extra columns around the splash: `skydive --help` indents by 2, the TUI
1158
+ * app pads 1 on each side. Same number, so one threshold covers both. */
1159
+ const SPLASH_CHROME = 2;
1160
+ /** Whether the full splash fits on one line of `columns` without wrapping. */
1161
+ function splashFitsWidth(columns) {
1162
+ return columns >= SPLASH_WIDTH + SPLASH_CHROME;
1163
+ }
910
1164
  const RESET = "\x1B[0m";
911
1165
  function hexToRgb(hex) {
912
1166
  const n = Number.parseInt(hex.slice(1), 16);
@@ -933,7 +1187,7 @@ function markLinesAnsi() {
933
1187
  function brandHelpArt(stream = process.stdout) {
934
1188
  if (!stream.isTTY) return "";
935
1189
  const truecolor = (typeof stream.getColorDepth === "function" ? stream.getColorDepth() : 1) >= 24;
936
- if ((stream.columns ?? 80) < 66) return truecolor ? `\n ${sgr("✦", BRAND_ACCENT)} Skydive\n` : "\n ✦ Skydive\n";
1190
+ if (!splashFitsWidth(stream.columns ?? 80)) return truecolor ? `\n ${sgr("✦", BRAND_ACCENT)} Skydive\n` : "\n ✦ Skydive\n";
937
1191
  if (!truecolor) return `\n${WORDMARK.map((l) => ` ${l}`).join("\n")}\n`;
938
1192
  const mark = markLinesAnsi();
939
1193
  const word = [...WORDMARK];
@@ -1264,4 +1518,4 @@ function maybeStartProfiling(argv, cliVersion) {
1264
1518
  }
1265
1519
 
1266
1520
  //#endregion
1267
- export { ensureActiveOrganization as C, setActiveWorkspace as D, listWorkspaces as E, name as O, themesForMode as S, getSessionIdentity as T, themeForMode as _, installCrashHandler as a, themeVersion as b, MARK_CELLS as c, DEFAULT_THEME_ID as d, applyTheme as f, theme as g, noColorRequested as h, writeArtifact as i, version$1 as k, WORDMARK as l, monoTheme as m, profilingEnabled as n, buildCrashReport as o, findTheme as p, record as r, writeCrashReport as s, maybeStartProfiling as t, brandHelpArt as u, themeMode as v, getActiveWorkspaceId as w, themes as x, themeModeFromColorFgBg as y };
1521
+ export { takenAliasNames as A, name as B, themesForMode as C, dedupeAliasName as D, aliasActivationHint as E, getActiveWorkspaceId as F, getSessionIdentity as I, listWorkspaces as L, defaultInstallEnv as M, detectShell as N, installAgentAlias as O, ensureActiveOrganization as P, resolveWorkspaceId as R, themes as S, machineOsFromPlatform as T, version$1 as V, theme as _, installCrashHandler as a, themeModeFromColorFgBg as b, MARK_CELLS as c, splashFitsWidth as d, DEFAULT_THEME_ID as f, noColorRequested as g, monoTheme as h, writeArtifact as i, SUPPORTED_SHELLS as j, slugifyAliasName as k, WORDMARK as l, findTheme as m, profilingEnabled as n, buildCrashReport as o, applyTheme as p, record as r, writeCrashReport as s, maybeStartProfiling as t, brandHelpArt as u, themeForMode as v, buildImportSeedPrompt as w, themeVersion as x, themeMode as y, setActiveWorkspace as z };
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as SandboxStream } from "./client-Cn2af31H.mjs";
2
+ import { t as SandboxStream } from "./client-c4c5MmgN.mjs";
3
3
 
4
4
  //#region src/chat/sandbox/raw-pty.ts
5
5
  /**
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import "./client-c4c5MmgN.mjs";
3
+ import { t as runRawPtyPassthrough } from "./raw-pty-DY4KelZW.mjs";
4
+
5
+ export { runRawPtyPassthrough };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { t as HttpError } from "./http-error-DzyrsLAZ.mjs";
3
- import { n as errorDetail, r as sendErrorMessage, t as createRestClient } from "./rest-BY2nADw5.mjs";
3
+ import { n as errorDetail, r as sendErrorMessage, t as createRestClient } from "./rest-xXfqT4SX.mjs";
4
4
  import "./billing-blocked-2wju4gC_.mjs";
5
5
 
6
6
  export { createRestClient };
@@ -193,13 +193,14 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
193
193
  }
194
194
  };
195
195
  return {
196
- listAgents: async ({ scope, onPage }) => {
196
+ listAgents: async ({ scope, onPage, limit }) => {
197
197
  const all = [];
198
198
  let cursor;
199
- const maxAgents = 2e3;
199
+ const maxAgents = limit ?? 2e3;
200
+ const pageSize = Math.min(100, maxAgents);
200
201
  do {
201
202
  const params = new URLSearchParams({
202
- limit: "100",
203
+ limit: String(pageSize),
203
204
  scope,
204
205
  sort: "mine_first_usage",
205
206
  includeStats: "false"
@@ -213,16 +214,23 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
213
214
  return all;
214
215
  },
215
216
  createAgent: async ({ name }) => {
216
- const { agent } = await post("/api/v1/agents", { name }, createAgentResponseSchema);
217
+ const { agent } = await post("/api/v1/agents", name == null ? {} : { name }, createAgentResponseSchema);
217
218
  return agent;
218
219
  },
219
- getAgent: async ({ agentId }) => {
220
- const { agent } = await get(`/api/v1/agents/${encodeURIComponent(agentId)}`, getAgentResponseSchema);
220
+ createOnboardingConversation: async ({ agentId, projectDir, os }) => {
221
+ const result = await post(`/api/v1/agents/${encodeURIComponent(agentId)}/onboarding-conversation`, {
222
+ projectDir,
223
+ os
224
+ }, onboardingConversationResponseSchema);
221
225
  return {
222
- id: agent.id,
223
- name: agent.name
226
+ conversationId: result.conversationId,
227
+ runId: result.runId
224
228
  };
225
229
  },
230
+ getAgent: async ({ agentId }) => {
231
+ const { agent } = await get(`/api/v1/agents/${encodeURIComponent(agentId)}`, getAgentResponseSchema);
232
+ return agent;
233
+ },
226
234
  suggestAgentIdentity: async () => {
227
235
  const { suggestion } = await get("/api/v1/agents/suggest", suggestAgentResponseSchema);
228
236
  return suggestion;
@@ -331,6 +339,9 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
331
339
  setConversationArchived: async ({ conversationId, archived }) => {
332
340
  await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}/archive`, { archived }, z.object({ archived: z.boolean() }));
333
341
  },
342
+ markConversationRead: async ({ conversationId }) => {
343
+ await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}/read`, {}, z.object({ read: z.boolean() }));
344
+ },
334
345
  renameConversation: async ({ conversationId, title }) => {
335
346
  await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}`, { title }, z.object({ conversation: z.object({ id: z.string() }) }), "PATCH");
336
347
  },
@@ -352,6 +363,7 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
352
363
  const { authorizationUrl } = await post("/api/v1/external-oauth/connect", input, externalOauthConnectResponseSchema);
353
364
  return { authorizationUrl: authorizationUrl ?? null };
354
365
  },
366
+ decideComputeRequest: async ({ requestId, decision }) => post(`/api/v1/compute-requests/${encodeURIComponent(requestId)}/decision`, { decision }, computeDecisionResponseSchema),
355
367
  fulfillCredential: async ({ url, body }) => {
356
368
  const target = new URL(url, appUrl).toString();
357
369
  const res = await fetch(target, {
@@ -453,10 +465,11 @@ const listAgentsResponseSchema = z.object({
453
465
  totalCount: z.number().nullable().optional()
454
466
  });
455
467
  const createAgentResponseSchema = z.object({ agent: agentSummarySchema });
456
- const getAgentResponseSchema = z.object({ agent: z.object({
457
- id: z.string(),
458
- name: z.string()
459
- }).passthrough() });
468
+ const onboardingConversationResponseSchema = z.object({
469
+ conversationId: z.string(),
470
+ runId: z.string().nullable()
471
+ });
472
+ const getAgentResponseSchema = z.object({ agent: agentSummarySchema });
460
473
  const agentSuggestionSchema = z.object({ name: z.string() });
461
474
  const suggestAgentResponseSchema = z.object({ suggestion: agentSuggestionSchema.nullable() });
462
475
  const conversationAgentSchema = z.object({
@@ -474,6 +487,7 @@ const conversationSummarySchema = z.object({
474
487
  channel: z.string().nullable(),
475
488
  channelLabel: z.string().nullable(),
476
489
  viewerArchivedAt: z.string().nullable().optional(),
490
+ unread: z.boolean().optional(),
477
491
  agent: conversationAgentSchema,
478
492
  agents: z.array(conversationAgentSchema).optional()
479
493
  });
@@ -569,6 +583,7 @@ const finalizeResponseSchema = z.object({
569
583
  });
570
584
  const oauthConnectResponseSchema = z.object({ connectLink: z.string() }).passthrough();
571
585
  const externalOauthConnectResponseSchema = z.object({ authorizationUrl: z.string().optional() }).passthrough();
586
+ const computeDecisionResponseSchema = z.object({ status: z.string() }).passthrough();
572
587
  const runStreamEventSchema = z.union([z.object({
573
588
  kind: z.literal("chunk"),
574
589
  chunk: z.record(z.unknown())
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skydive-cli",
3
- "version": "0.5.0-beta.3",
3
+ "version": "0.5.0-beta.30",
4
4
  "description": "Skydive CLI — cloud agents from the command line",
5
5
  "homepage": "https://skydive.com",
6
6
  "license": "MIT",
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import { t as PortalClient } from "./client-Dd5sMXPv.mjs";
3
-
4
- export { PortalClient };
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./client-Dd5sMXPv.mjs";
3
- import "./daemon-Bq93vOIk.mjs";
4
- import { t as PortalDaemonClient } from "./daemon-client-Bewt98dE.mjs";
5
-
6
- export { PortalDaemonClient };
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./client-Cn2af31H.mjs";
3
- import { t as runRawPtyPassthrough } from "./raw-pty-B6mAroiI.mjs";
4
-
5
- export { runRawPtyPassthrough };