skydive-cli 0.6.0-beta.7 → 0.6.0-beta.9

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,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import { c as version, s as name, t as createRestClient } from "./rest-CZZGi_Qv.mjs";
3
- import { B as resolveSession$1, C as deleteConfig, D as getPreference, E as getLastSeenVersion, G as setLastSeenVersion, H as saveConfig, I as resolveAppUrl, L as resolveChatAuth, M as getStoredApiKeyId, N as getStoredApiKeyWorkspaceName, O as getPromptHistoryPath, P as getUpdateCheckDisabled, R as resolveConfig, S as PREFERENCES, T as getDefaultAgent, U as saveSession, _ as API_KEYS_URL, b as DEFAULT_API_URL, i as resolveAgent$1, j as getShareMachineDefault, v as API_KEY_FAMILY_PREFIX, w as getConfigPath, y as API_KEY_PREFIX, z as resolveManagementAuth } from "./print-XzAJK-Qm.mjs";
4
- import { A as installAgentAlias, B as resolveWorkspaceId, D as machineOsFromPlatform, E as buildImportSeedPrompt, F as detectShell, I as ensureActiveOrganization, L as getActiveWorkspaceId, M as takenAliasNames, N as SUPPORTED_SHELLS, O as aliasActivationHint, P as defaultInstallEnv, R as getSessionIdentity, V as setActiveWorkspace, c as getAutomaticLogsDir, j as slugifyAliasName, k as dedupeAliasName, l as maybeStartProfiling, o as brandHelpArt, t as installCrashHandler, u as profileDir, w as themes, z as listWorkspaces } from "./install-C6N1tB1e.mjs";
2
+ import { c as version, s as name, t as createRestClient } from "./rest-BMxH9Q6o.mjs";
3
+ import { B as resolveSession$1, C as deleteConfig, D as getPreference, E as getLastSeenVersion, G as setLastSeenVersion, H as saveConfig, I as resolveAppUrl, L as resolveChatAuth, M as getStoredApiKeyId, N as getStoredApiKeyWorkspaceName, O as getPromptHistoryPath, P as getUpdateCheckDisabled, R as resolveConfig, S as PREFERENCES, T as getDefaultAgent, U as saveSession, _ as API_KEYS_URL, b as DEFAULT_API_URL, i as resolveAgent$1, j as getShareMachineDefault, v as API_KEY_FAMILY_PREFIX, w as getConfigPath, y as API_KEY_PREFIX, z as resolveManagementAuth } from "./print-BE0Tra6a.mjs";
4
+ import { A as installAgentAlias, B as resolveWorkspaceId, D as machineOsFromPlatform, E as buildImportSeedPrompt, F as detectShell, I as ensureActiveOrganization, L as getActiveWorkspaceId, M as takenAliasNames, N as SUPPORTED_SHELLS, O as aliasActivationHint, P as defaultInstallEnv, R as getSessionIdentity, V as setActiveWorkspace, c as getAutomaticLogsDir, j as slugifyAliasName, k as dedupeAliasName, l as maybeStartProfiling, o as brandHelpArt, t as installCrashHandler, u as profileDir, w as themes, z as listWorkspaces } from "./install-CE0NYufW.mjs";
5
5
  import { n as printError, r as printTable, t as output } from "./output-C9mb3sUB.mjs";
6
6
  import { t as HttpError } from "./http-error-BF2NZZE3.mjs";
7
7
  import "./billing-blocked-D3l5kJlX.mjs";
8
- import { a as resolveMachineIdentity } from "./client-DykZYZyR.mjs";
8
+ import { a as resolveMachineIdentity } from "./client-D0pppLHZ.mjs";
9
9
  import "./tls-cert-Rua2oV7n.mjs";
10
10
  import { i as grantPortalAccess, n as fetchPortalDevices, o as registerPortalDevice, r as findThisDevice, s as revokePortalAccess } from "./api-BFQ4PQDA.mjs";
11
- import { d as daemonPaths, i as queryDaemonStatus, n as ensureDaemonRunning, s as stopDaemon, u as PORTAL_DAEMON_FLAG } from "./daemon-BNXG3RB6.mjs";
11
+ import { d as daemonPaths, i as queryDaemonStatus, n as ensureDaemonRunning, s as stopDaemon, u as PORTAL_DAEMON_FLAG } from "./daemon-Cz-Djnrc.mjs";
12
12
  import { a as encodeFsRequest, i as decodeFsResponse, n as SANDBOX_STREAM_PATH, r as streamSpecToQuery, t as SandboxStream } from "./client-Btq6bMzX.mjs";
13
13
  import { hideBin } from "yargs/helpers";
14
14
  import yargs from "yargs";
@@ -1584,7 +1584,7 @@ const importCommand = {
1584
1584
  process.exit(1);
1585
1585
  }
1586
1586
  }
1587
- const { runChat } = await import("./boot-DiAn0opu.mjs");
1587
+ const { runChat } = await import("./boot-DC7sjQ8r.mjs");
1588
1588
  await runChat({
1589
1589
  appUrl,
1590
1590
  sessionToken: session.value.sessionToken,
@@ -1614,7 +1614,7 @@ async function runImportPrintMode({ argv, appUrl }) {
1614
1614
  printError(`${session.error.message} For non-interactive use, run \`skydive auth login --web\` first, or set SKYDIVE_SESSION_TOKEN.`);
1615
1615
  process.exit(1);
1616
1616
  }
1617
- const { connectMachineShare } = await import("./print-share-D0w_kMAd.mjs");
1617
+ const { connectMachineShare } = await import("./print-share-BMWUv28a.mjs");
1618
1618
  const machineShare = await connectMachineShare({
1619
1619
  appUrl,
1620
1620
  sessionToken: session.value.sessionToken,
@@ -1622,7 +1622,7 @@ async function runImportPrintMode({ argv, appUrl }) {
1622
1622
  });
1623
1623
  const extra = (argv.print ?? "").trim();
1624
1624
  const prompt = buildImportSeedPrompt(process.cwd(), machineOsFromPlatform(process.platform)) + (extra ? `\n\nAdditional instructions: ${extra}` : "");
1625
- const { runPrint } = await import("./print-BtbEJTmz.mjs");
1625
+ const { runPrint } = await import("./print-paALo0wI.mjs");
1626
1626
  try {
1627
1627
  const result = await runPrint({
1628
1628
  appUrl,
@@ -2029,7 +2029,7 @@ const chatCommand = {
2029
2029
  sessionToken: auth.value.token,
2030
2030
  agentSelector: argv.agent ?? null
2031
2031
  });
2032
- const { runChat } = await import("./boot-DiAn0opu.mjs");
2032
+ const { runChat } = await import("./boot-DC7sjQ8r.mjs");
2033
2033
  await runChat({
2034
2034
  appUrl: auth.value.appUrl,
2035
2035
  sessionToken: auth.value.token,
@@ -2113,7 +2113,7 @@ async function runPrintMode({ argv, appUrl }) {
2113
2113
  printError(`${auth.error.message} For non-interactive use, run \`skydive auth login\` first, or set SKYDIVE_API_KEY / SKYDIVE_SESSION_TOKEN.`);
2114
2114
  process.exit(1);
2115
2115
  }
2116
- const { runPrint, readStdin } = await import("./print-BtbEJTmz.mjs");
2116
+ const { runPrint, readStdin } = await import("./print-paALo0wI.mjs");
2117
2117
  const workspaceId = await resolveWorkspaceFlag({
2118
2118
  appUrl,
2119
2119
  sessionToken: auth.value.token,
@@ -2143,7 +2143,7 @@ async function runPrintMode({ argv, appUrl }) {
2143
2143
  process.exit(1);
2144
2144
  }
2145
2145
  } else {
2146
- const { connectMachineShare } = await import("./print-share-D0w_kMAd.mjs");
2146
+ const { connectMachineShare } = await import("./print-share-BMWUv28a.mjs");
2147
2147
  machineShare = await connectMachineShare({
2148
2148
  appUrl: auth.value.appUrl,
2149
2149
  sessionToken: auth.value.token,
@@ -2208,7 +2208,7 @@ const getCommand$1 = {
2208
2208
  printError(`${auth.error.message} Run \`skydive auth login\` first, or set SKYDIVE_API_KEY / SKYDIVE_SESSION_TOKEN.`);
2209
2209
  process.exit(1);
2210
2210
  }
2211
- const { messageGet } = await import("./print-BtbEJTmz.mjs");
2211
+ const { messageGet } = await import("./print-paALo0wI.mjs");
2212
2212
  try {
2213
2213
  const result = await messageGet({
2214
2214
  appUrl: auth.value.appUrl,
@@ -2411,7 +2411,7 @@ const switchCommand = {
2411
2411
  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.");
2412
2412
  process.exit(1);
2413
2413
  }
2414
- const { runWorkspacePicker } = await import("./boot-DiAn0opu.mjs");
2414
+ const { runWorkspacePicker } = await import("./boot-DC7sjQ8r.mjs");
2415
2415
  await runWorkspacePicker(session);
2416
2416
  return;
2417
2417
  }
@@ -2490,7 +2490,7 @@ const openCommand = {
2490
2490
  const agent = argv.agent ? resolveAgent$1((await fetchPortalDevices(session)).agents, argv.agent) : null;
2491
2491
  const cwd = argv.cwd ? path.resolve(argv.cwd) : process.cwd();
2492
2492
  const { machineName } = await resolveMachineIdentity(null);
2493
- const { PortalDaemonClient } = await import("./daemon-client-BFy1PEMN.mjs");
2493
+ const { PortalDaemonClient } = await import("./daemon-client-D2Glwyc1.mjs");
2494
2494
  let lastLine = "";
2495
2495
  let signalConnected;
2496
2496
  const connected = new Promise((resolve) => {
@@ -2847,8 +2847,8 @@ const sandboxCommand = {
2847
2847
  }).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`"),
2848
2848
  handler: async (argv) => {
2849
2849
  const session = requireSession(argv);
2850
- const { createRestClient } = await import("./rest-CM-E0YSf.mjs");
2851
- const { resolveAgent } = await import("./print-BtbEJTmz.mjs");
2850
+ const { createRestClient } = await import("./rest-SLdqVeJj.mjs");
2851
+ const { resolveAgent } = await import("./print-paALo0wI.mjs");
2852
2852
  const client = createRestClient({
2853
2853
  appUrl: session.appUrl,
2854
2854
  sessionToken: session.sessionToken
@@ -3119,8 +3119,8 @@ const fsEditCommand = {
3119
3119
  handler: async (argv) => {
3120
3120
  const session = requireSession(argv);
3121
3121
  const remotePath = argv.path;
3122
- const { createRestClient } = await import("./rest-CM-E0YSf.mjs");
3123
- const { resolveAgent } = await import("./print-BtbEJTmz.mjs");
3122
+ const { createRestClient } = await import("./rest-SLdqVeJj.mjs");
3123
+ const { resolveAgent } = await import("./print-paALo0wI.mjs");
3124
3124
  const client = createRestClient({
3125
3125
  appUrl: session.appUrl,
3126
3126
  sessionToken: session.sessionToken
@@ -4573,7 +4573,7 @@ if (process.argv.includes(UPDATE_WORKER_FLAG)) {
4573
4573
  process.exit(0);
4574
4574
  }
4575
4575
  if (process.argv.includes(PORTAL_DAEMON_FLAG)) {
4576
- const { runPortalDaemon } = await import("./daemon-CQ6MTh6u.mjs");
4576
+ const { runPortalDaemon } = await import("./daemon-CMt9g6xD.mjs");
4577
4577
  runPortalDaemon(process.argv);
4578
4578
  } else runCli();
4579
4579
  function runCli() {
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import { a as errorMessage, i as sendErrorMessage, n as errorDetail, o as isRecord, t as createRestClient } from "./rest-CZZGi_Qv.mjs";
3
- import { A as getSavedTheme, F as recordDefaultAgent, V as resolveWebUrl, W as saveTheme, b as DEFAULT_API_URL, c as cardActionErrorMessage, d as reconcileMaskedInput, f as resolveConnectUrl, g as specKeyFor, h as parseConnectCard, i as resolveAgent, k as getReviewStateDir, l as parseExternalOauthConnectParams, m as computeSettledLabel, p as composeQuestionAnswer, s as MASK_CHAR, u as parseOauthConnectParams, w as getConfigPath, x as DEFAULT_APP_URL } from "./print-XzAJK-Qm.mjs";
4
- import { A as installAgentAlias, C as themeVersion, D as machineOsFromPlatform, F as detectShell, L as getActiveWorkspaceId, M as takenAliasNames, O as aliasActivationHint, S as themeModeFromColorFgBg, T as themesForMode, V as setActiveWorkspace, _ as monoTheme, a as WORDMARK, b as themeForMode, d as profilingEnabled, f as record, g as findTheme, h as applyTheme, i as MARK_CELLS, j as slugifyAliasName, k as dedupeAliasName, m as DEFAULT_THEME_ID, n as buildCrashReport, p as writeArtifact, r as writeCrashReport, s as splashFitsWidth, t as installCrashHandler, v as noColorRequested, x as themeMode, y as theme, z as listWorkspaces } from "./install-C6N1tB1e.mjs";
2
+ import { a as errorMessage, i as sendErrorMessage, n as errorDetail, o as isRecord, t as createRestClient } from "./rest-BMxH9Q6o.mjs";
3
+ import { A as getSavedTheme, F as recordDefaultAgent, V as resolveWebUrl, W as saveTheme, b as DEFAULT_API_URL, c as cardActionErrorMessage, d as reconcileMaskedInput, f as resolveConnectUrl, g as specKeyFor, h as parseConnectCard, i as resolveAgent, k as getReviewStateDir, l as parseExternalOauthConnectParams, m as computeSettledLabel, p as composeQuestionAnswer, s as MASK_CHAR, u as parseOauthConnectParams, w as getConfigPath, x as DEFAULT_APP_URL } from "./print-BE0Tra6a.mjs";
4
+ import { A as installAgentAlias, C as themeVersion, D as machineOsFromPlatform, F as detectShell, L as getActiveWorkspaceId, M as takenAliasNames, O as aliasActivationHint, S as themeModeFromColorFgBg, T as themesForMode, V as setActiveWorkspace, _ as monoTheme, a as WORDMARK, b as themeForMode, d as profilingEnabled, f as record, g as findTheme, h as applyTheme, i as MARK_CELLS, j as slugifyAliasName, k as dedupeAliasName, m as DEFAULT_THEME_ID, n as buildCrashReport, p as writeArtifact, r as writeCrashReport, s as splashFitsWidth, t as installCrashHandler, v as noColorRequested, x as themeMode, y as theme, z as listWorkspaces } from "./install-CE0NYufW.mjs";
5
5
  import { t as HttpError } from "./http-error-BF2NZZE3.mjs";
6
6
  import { i as billingBlockedOutcomeFromSendResponse } from "./billing-blocked-D3l5kJlX.mjs";
7
- import { t as PortalClient } from "./client-DykZYZyR.mjs";
7
+ import { t as PortalClient } from "./client-D0pppLHZ.mjs";
8
8
  import { t as defaultTlsCertSource } from "./tls-cert-Rua2oV7n.mjs";
9
9
  import "./api-BFQ4PQDA.mjs";
10
- import "./daemon-BNXG3RB6.mjs";
10
+ import "./daemon-Cz-Djnrc.mjs";
11
11
  import { t as SandboxStream } from "./client-Btq6bMzX.mjs";
12
- import { t as PortalDaemonClient } from "./daemon-client-C-m-YATb.mjs";
12
+ import { t as PortalDaemonClient } from "./daemon-client-BxrwMtkv.mjs";
13
13
  import { t as runRawPtyPassthrough } from "./raw-pty-D5PhKZSl.mjs";
14
14
  import * as os$1 from "node:os";
15
15
  import { homedir, platform, release, tmpdir } from "node:os";
@@ -9724,18 +9724,45 @@ function effortLabel(model, level) {
9724
9724
  //#endregion
9725
9725
  //#region src/chat/tui/screens/model-picker.tsx
9726
9726
  /**
9727
+ * A 404 from the pin route means the server predates it, not that the pick
9728
+ * failed: the canary CLI publishes from trunk minutes after a merge while
9729
+ * the API rides the release train, so for that gap production has no
9730
+ * `POST /conversations/:id/model` (ANY-8191). Fall back to the agent-wide
9731
+ * write the switcher used before pins existed — a pick that lands with a
9732
+ * notice beats a dead switcher.
9733
+ */
9734
+ async function withAgentFallback(pin, agentWide) {
9735
+ try {
9736
+ return {
9737
+ settled: await pin(),
9738
+ pinUnsupported: false
9739
+ };
9740
+ } catch (err) {
9741
+ if (!(err instanceof HttpError) || err.status !== 404) throw err;
9742
+ return {
9743
+ settled: await agentWide(),
9744
+ pinUnsupported: true
9745
+ };
9746
+ }
9747
+ }
9748
+ /**
9727
9749
  * In-chat model switcher (opened with ctrl+p, or `/model`). Rendered as an
9728
9750
  * overlay in place of the transcript+composer while the chat screen stays
9729
9751
  * mounted, so the conversation, input draft, and any live run survive picking
9730
9752
  * a model.
9731
9753
  *
9732
- * Selecting a model PATCHes the agent, which changes the model for the
9733
- * agent's next run (send carries no per-message model). `tab` on a reasoning
9734
- * model opens its effort list instead, which is also where `/effort` lands
9735
- * directly. Both callbacks hand the settled values back to the chat screen so
9736
- * its status line updates without a round-trip.
9754
+ * Where a pick LANDS depends on whether the conversation exists yet
9755
+ * (ANY-4652). In a live thread it pins the model to that thread alone, so the
9756
+ * other sessions you have open keep the model they were already using. Before
9757
+ * the first message there is no thread to pin, so the pick moves the agent's
9758
+ * own default and therefore seeds the conversation about to start — the
9759
+ * ChatGPT/Claude behaviour.
9760
+ *
9761
+ * `tab` on a reasoning model opens its effort list instead, which is also
9762
+ * where `/effort` lands directly. Both callbacks hand the settled values back
9763
+ * to the chat screen so its status line updates without a round-trip.
9737
9764
  */
9738
- function ModelPicker({ agentId, currentModel, currentEffort, modelLocked, initialView, onModelSelected, onEffortSelected, onCancel }) {
9765
+ function ModelPicker({ agentId, conversationId, currentModel, currentEffort, modelLocked, initialView, onModelSelected, onEffortSelected, onCancel }) {
9739
9766
  const rest = useStore((s) => s.rest);
9740
9767
  const [state, setState] = useState({ kind: "loading" });
9741
9768
  useEffect(() => {
@@ -9784,6 +9811,7 @@ function ModelPicker({ agentId, currentModel, currentEffort, modelLocked, initia
9784
9811
  modelLocked,
9785
9812
  initialView,
9786
9813
  agentId,
9814
+ conversationId,
9787
9815
  onModelSelected,
9788
9816
  onEffortSelected,
9789
9817
  onCancel
@@ -9815,7 +9843,7 @@ function ModelPickerFrame({ hint, children }) {
9815
9843
  ]
9816
9844
  });
9817
9845
  }
9818
- function ModelSwitcher({ models, initialSavedEfforts, currentModel, currentEffort, modelLocked, initialView, agentId, onModelSelected, onEffortSelected, onCancel }) {
9846
+ function ModelSwitcher({ models, initialSavedEfforts, currentModel, currentEffort, modelLocked, initialView, agentId, conversationId, onModelSelected, onEffortSelected, onCancel }) {
9819
9847
  const rest = useStore((s) => s.rest);
9820
9848
  const [savedEfforts, setSavedEfforts] = useState(initialSavedEfforts);
9821
9849
  const [view, setView] = useState(() => {
@@ -9851,14 +9879,24 @@ function ModelSwitcher({ models, initialSavedEfforts, currentModel, currentEffor
9851
9879
  setSaving(true);
9852
9880
  setSaveError(null);
9853
9881
  try {
9854
- const settled = await rest.updateAgentModel({
9882
+ const agentWide = () => rest.updateAgentModel({
9855
9883
  agentId,
9856
9884
  model: model.id,
9857
9885
  thinkingLevel: effort
9858
9886
  });
9887
+ const { settled, pinUnsupported } = conversationId ? await withAgentFallback(() => rest.setConversationModel({
9888
+ conversationId,
9889
+ agentId,
9890
+ model: model.id,
9891
+ thinkingLevel: effort
9892
+ }), agentWide) : {
9893
+ settled: await agentWide(),
9894
+ pinUnsupported: false
9895
+ };
9859
9896
  onModelSelected({
9860
9897
  model: settled.model ?? model.id,
9861
- effort: settled.thinkingLevel
9898
+ effort: settled.thinkingLevel,
9899
+ pinUnsupported
9862
9900
  });
9863
9901
  } catch (err) {
9864
9902
  failed(err);
@@ -9874,13 +9912,24 @@ function ModelSwitcher({ models, initialSavedEfforts, currentModel, currentEffor
9874
9912
  thinkingLevel: level
9875
9913
  });
9876
9914
  if (model.id === currentModel) {
9877
- await rest.updateAgentEffort({
9915
+ let pinUnsupported = false;
9916
+ if (conversationId) ({pinUnsupported} = await withAgentFallback(() => rest.setConversationModel({
9917
+ conversationId,
9918
+ agentId,
9919
+ model: model.id,
9920
+ thinkingLevel: level
9921
+ }), () => rest.updateAgentEffort({
9922
+ agentId,
9923
+ thinkingLevel: level
9924
+ })));
9925
+ else await rest.updateAgentEffort({
9878
9926
  agentId,
9879
9927
  thinkingLevel: level
9880
9928
  });
9881
9929
  onEffortSelected({
9882
9930
  effort: level,
9883
- label: effortLabel(model, level)
9931
+ label: effortLabel(model, level),
9932
+ pinUnsupported
9884
9933
  });
9885
9934
  return;
9886
9935
  }
@@ -15321,6 +15370,7 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
15321
15370
  });
15322
15371
  if (modelPickerView) return /* @__PURE__ */ jsx(ModelPicker, {
15323
15372
  agentId: agent.id,
15373
+ conversationId,
15324
15374
  currentModel: model,
15325
15375
  currentEffort: effort,
15326
15376
  modelLocked,
@@ -15329,7 +15379,10 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
15329
15379
  setModel(next.model);
15330
15380
  setEffort(next.effort);
15331
15381
  setModelPickerView(null);
15332
- useStore.getState().showToast({
15382
+ useStore.getState().showToast(next.pinUnsupported ? {
15383
+ variant: "warning",
15384
+ message: `model changed to ${next.model} for all conversations — the server doesn't support per-conversation picks yet`
15385
+ } : {
15333
15386
  variant: "success",
15334
15387
  message: `model changed to ${next.model}`
15335
15388
  });
@@ -15337,7 +15390,10 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
15337
15390
  onEffortSelected: (next) => {
15338
15391
  setEffort(next.effort);
15339
15392
  setModelPickerView(null);
15340
- useStore.getState().showToast({
15393
+ useStore.getState().showToast(next.pinUnsupported ? {
15394
+ variant: "warning",
15395
+ message: `effort changed to ${next.label} for all conversations — the server doesn't support per-conversation picks yet`
15396
+ } : {
15341
15397
  variant: "success",
15342
15398
  message: `effort changed to ${next.label}`
15343
15399
  });
@@ -160,7 +160,7 @@ function errorMessage(err) {
160
160
  * the commit time of the built tree is one monotonic clock they share.
161
161
  */
162
162
  function portalDaemonBuild() {
163
- return "1787870817";
163
+ return "1787903367";
164
164
  }
165
165
  /**
166
166
  * Whether a client carrying `mine` should replace a running daemon carrying
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { t as PortalClient } from "./client-D0pppLHZ.mjs";
3
+ import "./api-BFQ4PQDA.mjs";
4
+
5
+ export { PortalClient };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import "./client-DykZYZyR.mjs";
2
+ import "./client-D0pppLHZ.mjs";
3
3
  import "./tls-cert-Rua2oV7n.mjs";
4
4
  import "./api-BFQ4PQDA.mjs";
5
- import { a as runPortalDaemon, c as stopDaemonForHandoff, i as queryDaemonStatus, n as ensureDaemonRunning, o as startPortalDaemon, r as isDaemonListening, s as stopDaemon, t as PortalDaemon } from "./daemon-BNXG3RB6.mjs";
5
+ import { a as runPortalDaemon, c as stopDaemonForHandoff, i as queryDaemonStatus, n as ensureDaemonRunning, o as startPortalDaemon, r as isDaemonListening, s as stopDaemon, t as PortalDaemon } from "./daemon-Cz-Djnrc.mjs";
6
6
 
7
7
  export { runPortalDaemon };
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as isRecord, n as isNewerBuild, r as portalDaemonBuild, t as PortalClient } from "./client-DykZYZyR.mjs";
2
+ import { i as isRecord, n as isNewerBuild, r as portalDaemonBuild, t as PortalClient } from "./client-D0pppLHZ.mjs";
3
3
  import { t as defaultTlsCertSource } from "./tls-cert-Rua2oV7n.mjs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { d as daemonPaths, f as encodeLine, l as LOCAL_PROTOCOL_VERSION, m as parseDaemonMessage, n as ensureDaemonRunning, p as makeLineParser } from "./daemon-BNXG3RB6.mjs";
2
+ import { d as daemonPaths, f as encodeLine, l as LOCAL_PROTOCOL_VERSION, m as parseDaemonMessage, n as ensureDaemonRunning, p as makeLineParser } from "./daemon-Cz-Djnrc.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { connect } from "node:net";
5
5
 
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import "./client-D0pppLHZ.mjs";
3
+ import "./tls-cert-Rua2oV7n.mjs";
4
+ import "./api-BFQ4PQDA.mjs";
5
+ import "./daemon-Cz-Djnrc.mjs";
6
+ import { t as PortalDaemonClient } from "./daemon-client-BxrwMtkv.mjs";
7
+
8
+ export { PortalDaemonClient };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { c as version$1 } from "./rest-CZZGi_Qv.mjs";
3
- import { w as getConfigPath } from "./print-XzAJK-Qm.mjs";
2
+ import { c as version$1 } from "./rest-BMxH9Q6o.mjs";
3
+ import { w as getConfigPath } from "./print-BE0Tra6a.mjs";
4
4
  import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { err, ok } from "neverthrow";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as errorMessage, i as sendErrorMessage, o as isRecord, t as createRestClient } from "./rest-CZZGi_Qv.mjs";
2
+ import { a as errorMessage, i as sendErrorMessage, o as isRecord, t as createRestClient } from "./rest-BMxH9Q6o.mjs";
3
3
  import { t as HttpError } from "./http-error-BF2NZZE3.mjs";
4
4
  import { i as billingBlockedOutcomeFromSendResponse, n as BillingBlockedError } from "./billing-blocked-D3l5kJlX.mjs";
5
5
  import path from "node:path";
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import "./rest-CZZGi_Qv.mjs";
3
- import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-XzAJK-Qm.mjs";
2
+ import "./rest-BMxH9Q6o.mjs";
3
+ import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-BE0Tra6a.mjs";
4
4
  import "./billing-blocked-D3l5kJlX.mjs";
5
5
 
6
6
  export { messageGet, readStdin, resolveAgent, runPrint };
@@ -14,7 +14,7 @@ import { n as printError } from "./output-C9mb3sUB.mjs";
14
14
  * the reply (and to --json).
15
15
  */
16
16
  async function connectMachineShare({ appUrl, sessionToken, timeoutHint }) {
17
- const { PortalClient } = await import("./client-BGaWO7fg.mjs");
17
+ const { PortalClient } = await import("./client-DVGOp6Xw.mjs");
18
18
  const { defaultTlsCertSource } = await import("./tls-cert-BpCaD5AT.mjs");
19
19
  let signalConnected;
20
20
  const connected = new Promise((resolve) => {
@@ -6,7 +6,7 @@ import { createParser } from "eventsource-parser";
6
6
 
7
7
  //#region package.json
8
8
  var name = "skydive-cli";
9
- var version = "0.6.0-beta.7";
9
+ var version = "0.6.0-beta.9";
10
10
 
11
11
  //#endregion
12
12
  //#region src/chat/util.ts
@@ -295,6 +295,11 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
295
295
  thinkingLevel: agent.thinkingLevel ?? null
296
296
  };
297
297
  },
298
+ setConversationModel: async ({ conversationId, agentId, model, thinkingLevel }) => post(`/api/v1/conversations/${conversationId}/model`, {
299
+ agentId,
300
+ model,
301
+ thinkingLevel
302
+ }, conversationModelResponseSchema),
298
303
  updateAgentEffort: async ({ agentId, thinkingLevel }) => {
299
304
  const { agent } = await patchAgent(agentId, { thinkingLevel });
300
305
  return { thinkingLevel: agent.thinkingLevel ?? null };
@@ -541,6 +546,10 @@ const platformModelSchema = z.object({
541
546
  }).passthrough();
542
547
  const listModelsResponseSchema = z.object({ models: z.array(platformModelSchema) });
543
548
  const modelEffortPreferencesResponseSchema = z.object({ modelConfigOverrides: z.record(z.string(), z.object({ thinkingLevel: z.string().optional() })).optional() });
549
+ const conversationModelResponseSchema = z.object({
550
+ model: z.string().nullable(),
551
+ thinkingLevel: z.string().nullable()
552
+ });
544
553
  const updateAgentResponseSchema = z.object({ agent: z.object({
545
554
  model: z.string().nullable().optional(),
546
555
  thinkingLevel: z.string().nullable().optional()
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as sendErrorMessage, n as errorDetail, r as filenameFromContentDisposition, t as createRestClient } from "./rest-CZZGi_Qv.mjs";
2
+ import { i as sendErrorMessage, n as errorDetail, r as filenameFromContentDisposition, t as createRestClient } from "./rest-BMxH9Q6o.mjs";
3
3
  import { t as HttpError } from "./http-error-BF2NZZE3.mjs";
4
4
  import "./billing-blocked-D3l5kJlX.mjs";
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skydive-cli",
3
- "version": "0.6.0-beta.7",
3
+ "version": "0.6.0-beta.9",
4
4
  "description": "Skydive CLI — cloud agents from the command line",
5
5
  "homepage": "https://skydive.com",
6
6
  "license": "MIT",
@@ -71,9 +71,9 @@
71
71
  },
72
72
  "//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.",
73
73
  "optionalDependencies": {
74
- "skydive-cli-darwin-arm64": "0.6.0-beta.7",
75
- "skydive-cli-darwin-x64": "0.6.0-beta.7",
76
- "skydive-cli-linux-x64": "0.6.0-beta.7",
77
- "skydive-cli-linux-arm64": "0.6.0-beta.7"
74
+ "skydive-cli-darwin-arm64": "0.6.0-beta.9",
75
+ "skydive-cli-darwin-x64": "0.6.0-beta.9",
76
+ "skydive-cli-linux-x64": "0.6.0-beta.9",
77
+ "skydive-cli-linux-arm64": "0.6.0-beta.9"
78
78
  }
79
79
  }
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import { t as PortalClient } from "./client-DykZYZyR.mjs";
3
- import "./api-BFQ4PQDA.mjs";
4
-
5
- export { PortalClient };
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./client-DykZYZyR.mjs";
3
- import "./tls-cert-Rua2oV7n.mjs";
4
- import "./api-BFQ4PQDA.mjs";
5
- import "./daemon-BNXG3RB6.mjs";
6
- import { t as PortalDaemonClient } from "./daemon-client-C-m-YATb.mjs";
7
-
8
- export { PortalDaemonClient };