skydive-cli 0.2.0-beta.700 → 0.2.0-beta.713

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/dist/js/bin.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { C as setActiveWorkspace, S as listWorkspaces, T as version, _ as themes, b as getActiveWorkspaceId, o as brandHelpArt, t as installCrashHandler, w as name, x as getSessionIdentity, y as ensureActiveOrganization } from "./install-DVPqms6J.mjs";
3
- import { A as resolveAppUrl, C as getPromptHistoryPath, D as getStoredApiKeyId, E as getShareMachineDefault, F as saveConfig, I as saveSession, M as resolveManagementAuth, N as resolveSession, O as getStoredApiKeyWorkspaceName, R as setLastSeenVersion, S as getLastSeenVersion, _ as API_KEY_PREFIX, b as deleteConfig, g as API_KEY_FAMILY_PREFIX, h as API_KEYS_URL, i as resolveAgent, j as resolveConfig, k as getUpdateCheckDisabled, v as DEFAULT_API_URL, x as getConfigPath } from "./print-CcvhSMi9.mjs";
2
+ import { C as setActiveWorkspace, S as listWorkspaces, T as version, _ as themes, b as getActiveWorkspaceId, o as brandHelpArt, t as installCrashHandler, w as name, x as getSessionIdentity, y as ensureActiveOrganization } from "./install-DqRwUu-M.mjs";
3
+ import { A as resolveAppUrl, C as getPromptHistoryPath, D as getStoredApiKeyId, E as getShareMachineDefault, F as saveConfig, I as saveSession, M as resolveManagementAuth, N as resolveSession, O as getStoredApiKeyWorkspaceName, R as setLastSeenVersion, S as getLastSeenVersion, _ as API_KEY_PREFIX, b as deleteConfig, g as API_KEY_FAMILY_PREFIX, h as API_KEYS_URL, i as resolveAgent, j as resolveConfig, k as getUpdateCheckDisabled, v as DEFAULT_API_URL, x as getConfigPath } from "./print-Cd-bVSEJ.mjs";
4
4
  import { n as printError, r as printTable, t as output } from "./output-DYzzdXYV.mjs";
5
- import { n as createRestClient } from "./rest-B5v4v5ux.mjs";
6
- import { a as registerPortalDevice, i as grantPortalAccess, n as fetchPortalDevices, o as revokePortalAccess, r as findThisDevice, s as machineIdentity } from "./client-DqidlIb-.mjs";
7
- import { c as PORTAL_DAEMON_FLAG, i as queryDaemonStatus, l as daemonPaths, n as ensureDaemonRunning, o as stopDaemon } from "./daemon-mXhmMGsS.mjs";
5
+ import { n as createRestClient, t as HttpError } from "./rest-BlN_uWmL.mjs";
6
+ import { a as registerPortalDevice, i as grantPortalAccess, n as fetchPortalDevices, o as revokePortalAccess, r as findThisDevice, s as machineIdentity } from "./client-Dc7GZ3PG.mjs";
7
+ import { c as PORTAL_DAEMON_FLAG, i as queryDaemonStatus, l as daemonPaths, n as ensureDaemonRunning, o as stopDaemon } from "./daemon-Co4CtpXZ.mjs";
8
8
  import { t as SandboxStream } from "./client-DfcJFEbh.mjs";
9
9
  import { hideBin } from "yargs/helpers";
10
10
  import yargs from "yargs";
@@ -1500,7 +1500,7 @@ const importCommand = {
1500
1500
  process.exit(1);
1501
1501
  }
1502
1502
  }
1503
- const { runChat } = await import("./boot-BLk76r4J.mjs");
1503
+ const { runChat } = await import("./boot-CjKGwVjP.mjs");
1504
1504
  await runChat({
1505
1505
  appUrl,
1506
1506
  sessionToken: session.value.sessionToken,
@@ -1527,7 +1527,7 @@ async function runImportPrintMode({ argv, appUrl }) {
1527
1527
  printError(`${session.error.message} For non-interactive use, run \`skydive auth login --web\` first, or set SKYDIVE_SESSION_TOKEN.`);
1528
1528
  process.exit(1);
1529
1529
  }
1530
- const { connectMachineShare } = await import("./print-share-88a3VFKn.mjs");
1530
+ const { connectMachineShare } = await import("./print-share-7qfpQtWK.mjs");
1531
1531
  const machineShare = await connectMachineShare({
1532
1532
  appUrl,
1533
1533
  sessionToken: session.value.sessionToken,
@@ -1535,7 +1535,7 @@ async function runImportPrintMode({ argv, appUrl }) {
1535
1535
  });
1536
1536
  const extra = (argv.print ?? "").trim();
1537
1537
  const prompt = buildImportSeedPrompt(process.cwd()) + (extra ? `\n\nAdditional instructions: ${extra}` : "");
1538
- const { runPrint } = await import("./print-CXRJLvyp.mjs");
1538
+ const { runPrint } = await import("./print-CPCFci60.mjs");
1539
1539
  try {
1540
1540
  const result = await runPrint({
1541
1541
  appUrl,
@@ -1750,6 +1750,97 @@ const secretsCommand = {
1750
1750
  handler: () => {}
1751
1751
  };
1752
1752
 
1753
+ //#endregion
1754
+ //#region src/auth/agent-workspace.ts
1755
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
1756
+ /**
1757
+ * Cap on concurrent per-workspace probes. An account can be in a lot of
1758
+ * workspaces; firing one request per workspace all at once is a burst the
1759
+ * API (and the user's uplink) doesn't need. Four keeps the common case
1760
+ * (a handful of workspaces) effectively parallel while bounding the worst.
1761
+ */
1762
+ const PROBE_CONCURRENCY = 4;
1763
+ /**
1764
+ * `Promise.all` with at most `limit` tasks in flight — a dependency-free
1765
+ * stand-in for p-queue sized to this one call site. Results keep input
1766
+ * order.
1767
+ */
1768
+ async function mapWithConcurrency(items, limit, fn) {
1769
+ const results = [];
1770
+ const queue = items.entries();
1771
+ const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
1772
+ for (const [index, item] of queue) results[index] = await fn(item);
1773
+ });
1774
+ await Promise.all(workers);
1775
+ return results;
1776
+ }
1777
+ /**
1778
+ * Whether the agent is visible in one workspace, via the typed rest client
1779
+ * scoped with `x-workspace-id` (a per-request override — the session's
1780
+ * persisted active workspace is untouched, so probing is side-effect free).
1781
+ * A miss (404 unknown/hidden, 403 other org) or a network failure is simply
1782
+ * "not here" — if the API is truly unreachable the main request path fails
1783
+ * right after with its own (better) error.
1784
+ */
1785
+ async function probeAgent({ appUrl, sessionToken, agentId, workspaceId }) {
1786
+ const client = createRestClient({
1787
+ appUrl,
1788
+ sessionToken,
1789
+ ...workspaceId ? { workspaceId } : {}
1790
+ });
1791
+ try {
1792
+ return { name: (await client.getAgent({ agentId })).name };
1793
+ } catch (error) {
1794
+ if (error instanceof HttpError) return null;
1795
+ return null;
1796
+ }
1797
+ }
1798
+ async function resolveAgentWorkspace({ appUrl, sessionToken, agentSelector }) {
1799
+ if (!agentSelector || !uuidPattern.test(agentSelector)) return { kind: "active" };
1800
+ if (await probeAgent({
1801
+ appUrl,
1802
+ sessionToken,
1803
+ agentId: agentSelector,
1804
+ workspaceId: null
1805
+ })) return { kind: "active" };
1806
+ const [workspaces, activeId] = await Promise.all([listWorkspaces({
1807
+ appUrl,
1808
+ sessionToken
1809
+ }), getActiveWorkspaceId({
1810
+ appUrl,
1811
+ sessionToken
1812
+ })]);
1813
+ if (workspaces.isErr()) return {
1814
+ kind: "list-failed",
1815
+ message: workspaces.error.message
1816
+ };
1817
+ const found = (await mapWithConcurrency(workspaces.value.filter((w) => activeId.isErr() || w.id !== activeId.value), PROBE_CONCURRENCY, async (workspace) => ({
1818
+ workspace,
1819
+ hit: await probeAgent({
1820
+ appUrl,
1821
+ sessionToken,
1822
+ agentId: agentSelector,
1823
+ workspaceId: workspace.id
1824
+ })
1825
+ }))).find((p) => p.hit !== null);
1826
+ if (!found?.hit) return { kind: "not-found" };
1827
+ const switched = await setActiveWorkspace({
1828
+ appUrl,
1829
+ sessionToken,
1830
+ organizationId: found.workspace.id
1831
+ });
1832
+ if (switched.isErr()) return {
1833
+ kind: "switch-failed",
1834
+ workspace: found.workspace,
1835
+ message: switched.error.message
1836
+ };
1837
+ return {
1838
+ kind: "switched",
1839
+ workspace: found.workspace,
1840
+ agentName: found.hit.name
1841
+ };
1842
+ }
1843
+
1753
1844
  //#endregion
1754
1845
  //#region src/commands/chat.ts
1755
1846
  const chatCommand = {
@@ -1816,7 +1907,12 @@ const chatCommand = {
1816
1907
  printError(`Unknown theme "${themeId}". Valid themes: ${themes.map((t) => t.id).join(", ")}`);
1817
1908
  process.exit(1);
1818
1909
  }
1819
- const { runChat } = await import("./boot-BLk76r4J.mjs");
1910
+ await ensureAgentWorkspace({
1911
+ appUrl,
1912
+ sessionToken: session.value.sessionToken,
1913
+ agentSelector: argv.agent ?? null
1914
+ });
1915
+ const { runChat } = await import("./boot-CjKGwVjP.mjs");
1820
1916
  await runChat({
1821
1917
  appUrl,
1822
1918
  sessionToken: session.value.sessionToken,
@@ -1847,13 +1943,47 @@ function resolveShareMachine(argv) {
1847
1943
  function resolveNewConversation(argv) {
1848
1944
  return argv.new === true && !argv.conversation;
1849
1945
  }
1946
+ /**
1947
+ * Cross-workspace `--agent <uuid>` handling shared by the TUI and -p paths:
1948
+ * on a hit in another workspace, switch to it and say so on stderr (stdout
1949
+ * may carry the -p reply/JSON envelope); when the id matches no workspace on
1950
+ * the account, fail with the two realistic fixes instead of the misleading
1951
+ * "no agent matches" roster error.
1952
+ */
1953
+ async function ensureAgentWorkspace({ appUrl, sessionToken, agentSelector }) {
1954
+ const resolution = await resolveAgentWorkspace({
1955
+ appUrl,
1956
+ sessionToken,
1957
+ agentSelector
1958
+ });
1959
+ if (resolution.kind === "active") return;
1960
+ if (resolution.kind === "switched") {
1961
+ console.error(`Switched workspace to ${resolution.workspace.name} (${resolution.workspace.slug}) — ${resolution.agentName} lives there.`);
1962
+ return;
1963
+ }
1964
+ if (resolution.kind === "list-failed") {
1965
+ printError(`No agent with id ${agentSelector} in the current workspace, and listing your other workspaces failed (${resolution.message}), so it couldn't be searched for elsewhere. Retry, or run \`skydive workspace switch <slug>\` if you know where it lives.`);
1966
+ process.exit(1);
1967
+ }
1968
+ if (resolution.kind === "switch-failed") {
1969
+ printError(`Agent found in workspace ${resolution.workspace.name}, but switching to it failed: ${resolution.message}. Run \`skydive workspace switch ${resolution.workspace.slug}\` and retry.`);
1970
+ process.exit(1);
1971
+ }
1972
+ printError(`No agent with id ${agentSelector} in any workspace on this account. It may belong to a different account — run \`skydive auth login\` with the right one — or the agent may have been archived.`);
1973
+ process.exit(1);
1974
+ }
1850
1975
  async function runPrintMode({ argv, appUrl }) {
1851
1976
  const session = resolveSession({ appUrl });
1852
1977
  if (session.isErr()) {
1853
1978
  printError(`${session.error.message} For non-interactive use, run \`skydive auth login\` first, or set SKYDIVE_SESSION_TOKEN.`);
1854
1979
  process.exit(1);
1855
1980
  }
1856
- const { runPrint, readStdin } = await import("./print-CXRJLvyp.mjs");
1981
+ const { runPrint, readStdin } = await import("./print-CPCFci60.mjs");
1982
+ await ensureAgentWorkspace({
1983
+ appUrl,
1984
+ sessionToken: session.value.sessionToken,
1985
+ agentSelector: argv.agent ?? null
1986
+ });
1857
1987
  let prompt = (argv.print ?? "").trim();
1858
1988
  if (!prompt) {
1859
1989
  if (process.stdin.isTTY) {
@@ -1868,7 +1998,7 @@ async function runPrintMode({ argv, appUrl }) {
1868
1998
  }
1869
1999
  let machineShare = null;
1870
2000
  if (resolveShareMachine(argv)) {
1871
- const { connectMachineShare } = await import("./print-share-88a3VFKn.mjs");
2001
+ const { connectMachineShare } = await import("./print-share-7qfpQtWK.mjs");
1872
2002
  machineShare = await connectMachineShare({
1873
2003
  appUrl,
1874
2004
  sessionToken: session.value.sessionToken,
@@ -1927,7 +2057,7 @@ const getCommand = {
1927
2057
  printError(`${session.error.message} Run \`skydive auth login\` first, or set SKYDIVE_SESSION_TOKEN.`);
1928
2058
  process.exit(1);
1929
2059
  }
1930
- const { messageGet } = await import("./print-CXRJLvyp.mjs");
2060
+ const { messageGet } = await import("./print-CPCFci60.mjs");
1931
2061
  try {
1932
2062
  const result = await messageGet({
1933
2063
  appUrl,
@@ -2124,7 +2254,7 @@ const switchCommand = {
2124
2254
  printError("The workspace picker needs the Bun runtime and it could not be set up automatically. Pass a workspace slug instead, or install Bun and retry.");
2125
2255
  process.exit(1);
2126
2256
  }
2127
- const { runWorkspacePicker } = await import("./boot-BLk76r4J.mjs");
2257
+ const { runWorkspacePicker } = await import("./boot-CjKGwVjP.mjs");
2128
2258
  await runWorkspacePicker(session);
2129
2259
  return;
2130
2260
  }
@@ -2202,7 +2332,7 @@ const openCommand = {
2202
2332
  const agent = argv.agent ? resolveAgent((await fetchPortalDevices(session)).agents, argv.agent) : null;
2203
2333
  const cwd = argv.cwd ? path.resolve(argv.cwd) : process.cwd();
2204
2334
  const { machineName } = machineIdentity();
2205
- const { PortalClient } = await import("./client-Bi6tvlso.mjs");
2335
+ const { PortalClient } = await import("./client-DuwxEDG4.mjs");
2206
2336
  let lastLine = "";
2207
2337
  let signalConnected;
2208
2338
  const connected = new Promise((resolve) => {
@@ -2475,8 +2605,8 @@ const sandboxCommand = {
2475
2605
  }).example("skydive sandbox --agent grace", "Live terminal (Ctrl-] detaches)").example("skydive sandbox --agent grace -- tail -n 50 /tmp/harness.log", "One-shot command (use `--` so its flags reach the sandbox)").example("skydive sandbox --agent grace -- sh -c 'ls /tmp | wc -l'", "Shell features go through an explicit `sh -c`"),
2476
2606
  handler: async (argv) => {
2477
2607
  const session = requireSession(argv);
2478
- const { createRestClient } = await import("./rest-BFuvemde.mjs");
2479
- const { resolveAgent } = await import("./print-CXRJLvyp.mjs");
2608
+ const { createRestClient } = await import("./rest-CDTXCmUb.mjs");
2609
+ const { resolveAgent } = await import("./print-CPCFci60.mjs");
2480
2610
  const client = createRestClient({
2481
2611
  appUrl: session.appUrl,
2482
2612
  sessionToken: session.sessionToken
@@ -3553,7 +3683,7 @@ if (process.argv.includes(UPDATE_WORKER_FLAG)) {
3553
3683
  process.exit(0);
3554
3684
  }
3555
3685
  if (process.argv.includes(PORTAL_DAEMON_FLAG)) {
3556
- const { runPortalDaemon } = await import("./daemon-Dj1iBfMV.mjs");
3686
+ const { runPortalDaemon } = await import("./daemon-Ch_MSDmQ.mjs");
3557
3687
  runPortalDaemon(process.argv);
3558
3688
  } else runCli();
3559
3689
  function runCli() {
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { C as setActiveWorkspace, S as listWorkspaces, a as WORDMARK, b as getActiveWorkspaceId, c as applyTheme, d as noColorRequested, f as theme, g as themeVersion, h as themeModeFromColorFgBg, i as MARK_CELLS, l as findTheme, m as themeMode, n as buildCrashReport, p as themeForMode, r as writeCrashReport, s as DEFAULT_THEME_ID, t as installCrashHandler, u as monoTheme, v as themesForMode } from "./install-DVPqms6J.mjs";
3
- import { L as saveTheme, P as resolveWebUrl, T as getSavedTheme, c as cardActionErrorMessage, d as reconcileMaskedInput, f as resolveConnectUrl, i as resolveAgent, l as parseExternalOauthConnectParams, m as specKeyFor, p as parseConnectCard, s as MASK_CHAR, u as parseOauthConnectParams, v as DEFAULT_API_URL, w as getReviewStateDir, x as getConfigPath, y as DEFAULT_APP_URL } from "./print-CcvhSMi9.mjs";
4
- import { a as errorMessage, i as sendErrorMessage, n as createRestClient, o as isRecord, r as errorDetail, t as HttpError } from "./rest-B5v4v5ux.mjs";
5
- import { t as PortalClient } from "./client-DqidlIb-.mjs";
6
- import { d as makeLineParser, f as parseDaemonMessage, l as daemonPaths, n as ensureDaemonRunning, s as LOCAL_PROTOCOL_VERSION, u as encodeLine } from "./daemon-mXhmMGsS.mjs";
2
+ import { C as setActiveWorkspace, S as listWorkspaces, a as WORDMARK, b as getActiveWorkspaceId, c as applyTheme, d as noColorRequested, f as theme, g as themeVersion, h as themeModeFromColorFgBg, i as MARK_CELLS, l as findTheme, m as themeMode, n as buildCrashReport, p as themeForMode, r as writeCrashReport, s as DEFAULT_THEME_ID, t as installCrashHandler, u as monoTheme, v as themesForMode } from "./install-DqRwUu-M.mjs";
3
+ import { L as saveTheme, P as resolveWebUrl, T as getSavedTheme, c as cardActionErrorMessage, d as reconcileMaskedInput, f as resolveConnectUrl, i as resolveAgent, l as parseExternalOauthConnectParams, m as specKeyFor, p as parseConnectCard, s as MASK_CHAR, u as parseOauthConnectParams, v as DEFAULT_API_URL, w as getReviewStateDir, x as getConfigPath, y as DEFAULT_APP_URL } from "./print-Cd-bVSEJ.mjs";
4
+ import { a as errorMessage, i as sendErrorMessage, n as createRestClient, o as isRecord, r as errorDetail, t as HttpError } from "./rest-BlN_uWmL.mjs";
5
+ import { t as PortalClient } from "./client-Dc7GZ3PG.mjs";
6
+ import { d as makeLineParser, f as parseDaemonMessage, l as daemonPaths, n as ensureDaemonRunning, s as LOCAL_PROTOCOL_VERSION, u as encodeLine } from "./daemon-Co4CtpXZ.mjs";
7
7
  import { t as SandboxStream } from "./client-DfcJFEbh.mjs";
8
8
  import { t as runRawPtyPassthrough } from "./raw-pty-BcjbTjHJ.mjs";
9
9
  import * as os$1 from "node:os";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as errorMessage, t as HttpError } from "./rest-B5v4v5ux.mjs";
2
+ import { a as errorMessage, t as HttpError } from "./rest-BlN_uWmL.mjs";
3
3
  import os from "node:os";
4
4
  import { z } from "zod";
5
5
  import { spawn } from "node:child_process";
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import "./rest-BlN_uWmL.mjs";
3
+ import { t as PortalClient } from "./client-Dc7GZ3PG.mjs";
4
+
5
+ export { PortalClient };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import "./rest-B5v4v5ux.mjs";
3
- import "./client-DqidlIb-.mjs";
4
- import { a as runPortalDaemon, i as queryDaemonStatus, n as ensureDaemonRunning, o as stopDaemon, r as isDaemonListening, t as PortalDaemon } from "./daemon-mXhmMGsS.mjs";
2
+ import "./rest-BlN_uWmL.mjs";
3
+ import "./client-Dc7GZ3PG.mjs";
4
+ import { a as runPortalDaemon, i as queryDaemonStatus, n as ensureDaemonRunning, o as stopDaemon, r as isDaemonListening, t as PortalDaemon } from "./daemon-Co4CtpXZ.mjs";
5
5
 
6
6
  export { runPortalDaemon };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { o as isRecord } from "./rest-B5v4v5ux.mjs";
3
- import { t as PortalClient } from "./client-DqidlIb-.mjs";
2
+ import { o as isRecord } from "./rest-BlN_uWmL.mjs";
3
+ import { t as PortalClient } from "./client-Dc7GZ3PG.mjs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { x as getConfigPath } from "./print-CcvhSMi9.mjs";
2
+ import { x as getConfigPath } from "./print-Cd-bVSEJ.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.2.0-beta.700";
11
+ var version$1 = "0.2.0-beta.713";
12
12
 
13
13
  //#endregion
14
14
  //#region src/auth/organization.ts
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-CcvhSMi9.mjs";
3
- import "./rest-B5v4v5ux.mjs";
2
+ import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-Cd-bVSEJ.mjs";
3
+ import "./rest-BlN_uWmL.mjs";
4
4
 
5
5
  export { messageGet, readStdin, resolveAgent, runPrint };
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as errorMessage, i as sendErrorMessage, n as createRestClient, o as isRecord, t as HttpError } from "./rest-B5v4v5ux.mjs";
2
+ import { a as errorMessage, i as sendErrorMessage, n as createRestClient, o as isRecord, t as HttpError } from "./rest-BlN_uWmL.mjs";
3
3
  import path from "node:path";
4
4
  import Conf from "conf";
5
5
  import { err, ok } from "neverthrow";
@@ -14,7 +14,7 @@ import { n as printError } from "./output-DYzzdXYV.mjs";
14
14
  * the reply (and to --json).
15
15
  */
16
16
  async function connectMachineShare({ appUrl, sessionToken, timeoutHint }) {
17
- const { PortalClient } = await import("./client-Bi6tvlso.mjs");
17
+ const { PortalClient } = await import("./client-DuwxEDG4.mjs");
18
18
  let signalConnected;
19
19
  const connected = new Promise((resolve) => {
20
20
  signalConnected = resolve;
@@ -216,6 +216,13 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
216
216
  const { agent } = await post("/api/v1/agents", { name }, createAgentResponseSchema);
217
217
  return agent;
218
218
  },
219
+ getAgent: async ({ agentId }) => {
220
+ const { agent } = await get(`/api/v1/agents/${encodeURIComponent(agentId)}`, getAgentResponseSchema);
221
+ return {
222
+ id: agent.id,
223
+ name: agent.name
224
+ };
225
+ },
219
226
  suggestAgentIdentity: async () => {
220
227
  const { suggestion } = await get("/api/v1/agents/suggest", suggestAgentResponseSchema);
221
228
  return suggestion;
@@ -439,6 +446,10 @@ const listAgentsResponseSchema = z.object({
439
446
  totalCount: z.number().nullable().optional()
440
447
  });
441
448
  const createAgentResponseSchema = z.object({ agent: agentSummarySchema });
449
+ const getAgentResponseSchema = z.object({ agent: z.object({
450
+ id: z.string(),
451
+ name: z.string()
452
+ }).passthrough() });
442
453
  const agentSuggestionSchema = z.object({ name: z.string() });
443
454
  const suggestAgentResponseSchema = z.object({ suggestion: agentSuggestionSchema.nullable() });
444
455
  const conversationAgentSchema = z.object({
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import { i as sendErrorMessage, n as createRestClient, r as errorDetail, t as HttpError } from "./rest-B5v4v5ux.mjs";
2
+ import { i as sendErrorMessage, n as createRestClient, r as errorDetail, t as HttpError } from "./rest-BlN_uWmL.mjs";
3
3
 
4
4
  export { createRestClient };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skydive-cli",
3
- "version": "0.2.0-beta.700",
3
+ "version": "0.2.0-beta.713",
4
4
  "description": "Skydive CLI — cloud agents from the command line",
5
5
  "homepage": "https://skydive.com",
6
6
  "license": "MIT",
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./rest-B5v4v5ux.mjs";
3
- import { t as PortalClient } from "./client-DqidlIb-.mjs";
4
-
5
- export { PortalClient };