skydive-cli 0.6.0-beta.24 → 0.6.0-beta.26
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 +19 -19
- package/dist/js/{boot-CZ_17jJG.mjs → boot-Bwi44na9.mjs} +85 -30
- package/dist/js/{client-CNF1DFAQ.mjs → client-B2QW5YW3.mjs} +1 -1
- package/dist/js/client-DJ-k3tFu.mjs +5 -0
- package/dist/js/{daemon-D4B5LeNQ.mjs → daemon-BVkLmE9i.mjs} +1 -1
- package/dist/js/{daemon-CN5CdzEt.mjs → daemon-CTh9EIaa.mjs} +2 -2
- package/dist/js/daemon-client-6juwWtPE.mjs +8 -0
- package/dist/js/{daemon-client-Eoo24bVH.mjs → daemon-client-DBxd1-Pa.mjs} +1 -1
- package/dist/js/{install-KL5zAlW8.mjs → install-F2CzHVln.mjs} +2 -2
- package/dist/js/{print-Dfj7y9pt.mjs → print-BS_EtAAV.mjs} +2 -2
- package/dist/js/{print-DDI8g0HX.mjs → print-CYg-EpIt.mjs} +1 -1
- package/dist/js/{print-share-Cp-UubZb.mjs → print-share-CHp1Ap1B.mjs} +1 -1
- package/dist/js/{rest-si3NhA-L.mjs → rest-C7ahG6C2.mjs} +17 -8
- package/dist/js/{rest-dBXbTmRP.mjs → rest-CLClexxY.mjs} +1 -1
- package/package.json +5 -5
- package/dist/js/client-CNmM4aEa.mjs +0 -5
- package/dist/js/daemon-client-C7efcR_u.mjs +0 -8
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-
|
|
3
|
-
import { A as getPromptHistoryPath, B as resolveConfig, D as getDefaultAgent, E as getConfigPath, F as getStoredApiKeyWorkspaceName, G as saveSession, H as resolveSession$1, I as getUpdateCheckDisabled, N as getShareMachineDefault, O as getLastSeenVersion, P as getStoredApiKeyId, R as resolveAppUrl, S as DEFAULT_API_URL, T as deleteConfig, V as resolveManagementAuth, W as saveConfig, b as API_KEY_FAMILY_PREFIX, i as resolveAgent$1, k as getPreference, q as setLastSeenVersion, w as PREFERENCES, x as API_KEY_PREFIX, y as API_KEYS_URL, z as resolveChatAuth } from "./print-
|
|
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-
|
|
2
|
+
import { c as version, s as name, t as createRestClient } from "./rest-C7ahG6C2.mjs";
|
|
3
|
+
import { A as getPromptHistoryPath, B as resolveConfig, D as getDefaultAgent, E as getConfigPath, F as getStoredApiKeyWorkspaceName, G as saveSession, H as resolveSession$1, I as getUpdateCheckDisabled, N as getShareMachineDefault, O as getLastSeenVersion, P as getStoredApiKeyId, R as resolveAppUrl, S as DEFAULT_API_URL, T as deleteConfig, V as resolveManagementAuth, W as saveConfig, b as API_KEY_FAMILY_PREFIX, i as resolveAgent$1, k as getPreference, q as setLastSeenVersion, w as PREFERENCES, x as API_KEY_PREFIX, y as API_KEYS_URL, z as resolveChatAuth } from "./print-CYg-EpIt.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-F2CzHVln.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-
|
|
8
|
+
import { a as resolveMachineIdentity } from "./client-B2QW5YW3.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-
|
|
11
|
+
import { d as daemonPaths, i as queryDaemonStatus, n as ensureDaemonRunning, s as stopDaemon, u as PORTAL_DAEMON_FLAG } from "./daemon-BVkLmE9i.mjs";
|
|
12
12
|
import { a as encodeFsRequest, i as decodeFsResponse, n as SANDBOX_STREAM_PATH, r as streamSpecToQuery, t as SandboxStream } from "./client-l6orYfqq.mjs";
|
|
13
13
|
import { hideBin } from "yargs/helpers";
|
|
14
14
|
import yargs from "yargs";
|
|
@@ -1586,7 +1586,7 @@ const importCommand = {
|
|
|
1586
1586
|
process.exit(1);
|
|
1587
1587
|
}
|
|
1588
1588
|
}
|
|
1589
|
-
const { runChat } = await import("./boot-
|
|
1589
|
+
const { runChat } = await import("./boot-Bwi44na9.mjs");
|
|
1590
1590
|
await runChat({
|
|
1591
1591
|
appUrl,
|
|
1592
1592
|
sessionToken: session.value.sessionToken,
|
|
@@ -1616,7 +1616,7 @@ async function runImportPrintMode({ argv, appUrl }) {
|
|
|
1616
1616
|
printError(`${session.error.message} For non-interactive use, run \`skydive auth login --web\` first, or set SKYDIVE_SESSION_TOKEN.`);
|
|
1617
1617
|
process.exit(1);
|
|
1618
1618
|
}
|
|
1619
|
-
const { connectMachineShare } = await import("./print-share-
|
|
1619
|
+
const { connectMachineShare } = await import("./print-share-CHp1Ap1B.mjs");
|
|
1620
1620
|
const machineShare = await connectMachineShare({
|
|
1621
1621
|
appUrl,
|
|
1622
1622
|
sessionToken: session.value.sessionToken,
|
|
@@ -1624,7 +1624,7 @@ async function runImportPrintMode({ argv, appUrl }) {
|
|
|
1624
1624
|
});
|
|
1625
1625
|
const extra = (argv.print ?? "").trim();
|
|
1626
1626
|
const prompt = buildImportSeedPrompt(process.cwd(), machineOsFromPlatform(process.platform)) + (extra ? `\n\nAdditional instructions: ${extra}` : "");
|
|
1627
|
-
const { runPrint } = await import("./print-
|
|
1627
|
+
const { runPrint } = await import("./print-BS_EtAAV.mjs");
|
|
1628
1628
|
try {
|
|
1629
1629
|
const result = await runPrint({
|
|
1630
1630
|
appUrl,
|
|
@@ -2031,7 +2031,7 @@ const chatCommand = {
|
|
|
2031
2031
|
sessionToken: auth.value.token,
|
|
2032
2032
|
agentSelector: argv.agent ?? null
|
|
2033
2033
|
});
|
|
2034
|
-
const { runChat } = await import("./boot-
|
|
2034
|
+
const { runChat } = await import("./boot-Bwi44na9.mjs");
|
|
2035
2035
|
await runChat({
|
|
2036
2036
|
appUrl: auth.value.appUrl,
|
|
2037
2037
|
sessionToken: auth.value.token,
|
|
@@ -2115,7 +2115,7 @@ async function runPrintMode({ argv, appUrl }) {
|
|
|
2115
2115
|
printError(`${auth.error.message} For non-interactive use, run \`skydive auth login\` first, or set SKYDIVE_API_KEY / SKYDIVE_SESSION_TOKEN.`);
|
|
2116
2116
|
process.exit(1);
|
|
2117
2117
|
}
|
|
2118
|
-
const { runPrint, readStdin } = await import("./print-
|
|
2118
|
+
const { runPrint, readStdin } = await import("./print-BS_EtAAV.mjs");
|
|
2119
2119
|
const workspaceId = await resolveWorkspaceFlag({
|
|
2120
2120
|
appUrl,
|
|
2121
2121
|
sessionToken: auth.value.token,
|
|
@@ -2145,7 +2145,7 @@ async function runPrintMode({ argv, appUrl }) {
|
|
|
2145
2145
|
process.exit(1);
|
|
2146
2146
|
}
|
|
2147
2147
|
} else {
|
|
2148
|
-
const { connectMachineShare } = await import("./print-share-
|
|
2148
|
+
const { connectMachineShare } = await import("./print-share-CHp1Ap1B.mjs");
|
|
2149
2149
|
machineShare = await connectMachineShare({
|
|
2150
2150
|
appUrl: auth.value.appUrl,
|
|
2151
2151
|
sessionToken: auth.value.token,
|
|
@@ -2210,7 +2210,7 @@ const getCommand$1 = {
|
|
|
2210
2210
|
printError(`${auth.error.message} Run \`skydive auth login\` first, or set SKYDIVE_API_KEY / SKYDIVE_SESSION_TOKEN.`);
|
|
2211
2211
|
process.exit(1);
|
|
2212
2212
|
}
|
|
2213
|
-
const { messageGet } = await import("./print-
|
|
2213
|
+
const { messageGet } = await import("./print-BS_EtAAV.mjs");
|
|
2214
2214
|
try {
|
|
2215
2215
|
const result = await messageGet({
|
|
2216
2216
|
appUrl: auth.value.appUrl,
|
|
@@ -2413,7 +2413,7 @@ const switchCommand = {
|
|
|
2413
2413
|
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.");
|
|
2414
2414
|
process.exit(1);
|
|
2415
2415
|
}
|
|
2416
|
-
const { runWorkspacePicker } = await import("./boot-
|
|
2416
|
+
const { runWorkspacePicker } = await import("./boot-Bwi44na9.mjs");
|
|
2417
2417
|
await runWorkspacePicker(session);
|
|
2418
2418
|
return;
|
|
2419
2419
|
}
|
|
@@ -2492,7 +2492,7 @@ const openCommand = {
|
|
|
2492
2492
|
const agent = argv.agent ? resolveAgent$1((await fetchPortalDevices(session)).agents, argv.agent) : null;
|
|
2493
2493
|
const cwd = argv.cwd ? path.resolve(argv.cwd) : process.cwd();
|
|
2494
2494
|
const { machineName } = await resolveMachineIdentity(null);
|
|
2495
|
-
const { PortalDaemonClient } = await import("./daemon-client-
|
|
2495
|
+
const { PortalDaemonClient } = await import("./daemon-client-6juwWtPE.mjs");
|
|
2496
2496
|
let lastLine = "";
|
|
2497
2497
|
let signalConnected;
|
|
2498
2498
|
const connected = new Promise((resolve) => {
|
|
@@ -2849,8 +2849,8 @@ const sandboxCommand = {
|
|
|
2849
2849
|
}).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`"),
|
|
2850
2850
|
handler: async (argv) => {
|
|
2851
2851
|
const session = requireSession(argv);
|
|
2852
|
-
const { createRestClient } = await import("./rest-
|
|
2853
|
-
const { resolveAgent } = await import("./print-
|
|
2852
|
+
const { createRestClient } = await import("./rest-CLClexxY.mjs");
|
|
2853
|
+
const { resolveAgent } = await import("./print-BS_EtAAV.mjs");
|
|
2854
2854
|
const client = createRestClient({
|
|
2855
2855
|
appUrl: session.appUrl,
|
|
2856
2856
|
sessionToken: session.sessionToken
|
|
@@ -3121,8 +3121,8 @@ const fsEditCommand = {
|
|
|
3121
3121
|
handler: async (argv) => {
|
|
3122
3122
|
const session = requireSession(argv);
|
|
3123
3123
|
const remotePath = argv.path;
|
|
3124
|
-
const { createRestClient } = await import("./rest-
|
|
3125
|
-
const { resolveAgent } = await import("./print-
|
|
3124
|
+
const { createRestClient } = await import("./rest-CLClexxY.mjs");
|
|
3125
|
+
const { resolveAgent } = await import("./print-BS_EtAAV.mjs");
|
|
3126
3126
|
const client = createRestClient({
|
|
3127
3127
|
appUrl: session.appUrl,
|
|
3128
3128
|
sessionToken: session.sessionToken
|
|
@@ -4575,7 +4575,7 @@ if (process.argv.includes(UPDATE_WORKER_FLAG)) {
|
|
|
4575
4575
|
process.exit(0);
|
|
4576
4576
|
}
|
|
4577
4577
|
if (process.argv.includes(PORTAL_DAEMON_FLAG)) {
|
|
4578
|
-
const { runPortalDaemon } = await import("./daemon-
|
|
4578
|
+
const { runPortalDaemon } = await import("./daemon-CTh9EIaa.mjs");
|
|
4579
4579
|
runPortalDaemon(process.argv);
|
|
4580
4580
|
} else runCli();
|
|
4581
4581
|
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-
|
|
3
|
-
import { C as DEFAULT_APP_URL, E as getConfigPath, K as saveTheme, L as recordDefaultAgent, M as getSavedTheme, S as DEFAULT_API_URL, U as resolveWebUrl, _ as parseConnectCard, c as actionableCardVerb, d as parseOauthConnectParams, f as prioritizeActionableCards, g as computeSettledLabel, h as composeQuestionAnswer, i as resolveAgent, j as getReviewStateDir, l as cardActionErrorMessage, m as resolveConnectUrl, p as reconcileMaskedInput, s as MASK_CHAR, u as parseExternalOauthConnectParams, v as specKeyFor } from "./print-
|
|
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-
|
|
2
|
+
import { a as errorMessage, i as sendErrorMessage, n as errorDetail, o as isRecord, t as createRestClient } from "./rest-C7ahG6C2.mjs";
|
|
3
|
+
import { C as DEFAULT_APP_URL, E as getConfigPath, K as saveTheme, L as recordDefaultAgent, M as getSavedTheme, S as DEFAULT_API_URL, U as resolveWebUrl, _ as parseConnectCard, c as actionableCardVerb, d as parseOauthConnectParams, f as prioritizeActionableCards, g as computeSettledLabel, h as composeQuestionAnswer, i as resolveAgent, j as getReviewStateDir, l as cardActionErrorMessage, m as resolveConnectUrl, p as reconcileMaskedInput, s as MASK_CHAR, u as parseExternalOauthConnectParams, v as specKeyFor } from "./print-CYg-EpIt.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-F2CzHVln.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-
|
|
7
|
+
import { t as PortalClient } from "./client-B2QW5YW3.mjs";
|
|
8
8
|
import { t as defaultTlsCertSource } from "./tls-cert-Rua2oV7n.mjs";
|
|
9
9
|
import "./api-BFQ4PQDA.mjs";
|
|
10
|
-
import "./daemon-
|
|
10
|
+
import "./daemon-BVkLmE9i.mjs";
|
|
11
11
|
import { t as SandboxStream } from "./client-l6orYfqq.mjs";
|
|
12
|
-
import { t as PortalDaemonClient } from "./daemon-client-
|
|
12
|
+
import { t as PortalDaemonClient } from "./daemon-client-DBxd1-Pa.mjs";
|
|
13
13
|
import { t as runRawPtyPassthrough } from "./raw-pty-dndn1Kxc.mjs";
|
|
14
14
|
import * as os$1 from "node:os";
|
|
15
15
|
import { homedir, platform, release, tmpdir } from "node:os";
|
|
@@ -3598,6 +3598,19 @@ function isAgentRunConversation(c) {
|
|
|
3598
3598
|
return !humanChannels.some((human) => human === channel);
|
|
3599
3599
|
}
|
|
3600
3600
|
/**
|
|
3601
|
+
* Whether the signed-in user has their own participant row in this thread,
|
|
3602
|
+
* which is what per-user archive marks. An org admin's list includes every
|
|
3603
|
+
* thread in the org, so it can hold threads they never joined (a Slack thread
|
|
3604
|
+
* between a colleague and the agent, say); on those the server has no row to
|
|
3605
|
+
* mark and refuses, so the UI should not offer archive. Read from
|
|
3606
|
+
* the list row's `viewerParticipates`; an older server omits it, and a
|
|
3607
|
+
* brand-new conversation has no roster yet, so both read as true.
|
|
3608
|
+
*/
|
|
3609
|
+
function viewerIsParticipant(c) {
|
|
3610
|
+
if (isNewConversation(c)) return true;
|
|
3611
|
+
return c.viewerParticipates ?? true;
|
|
3612
|
+
}
|
|
3613
|
+
/**
|
|
3601
3614
|
* The channel a conversation belongs to when it isn't the web channel, else
|
|
3602
3615
|
* null. A brand-new conversation is always web, and the list route reports the
|
|
3603
3616
|
* web channel as either `'web'` or (legacy) null — both mean "post from here".
|
|
@@ -3892,6 +3905,7 @@ function ConversationHome({ agent, initialQuery, conversations, showAutomated, o
|
|
|
3892
3905
|
const highlightRow = rows[clamped];
|
|
3893
3906
|
const highlightArchived = highlightRow?.kind === "conv" && isArchived(highlightRow.hit.item);
|
|
3894
3907
|
const highlightAgentRun = highlightRow?.kind === "conv" && isAgentRunConversation(highlightRow.hit.item);
|
|
3908
|
+
const highlightOutsider = highlightRow?.kind === "conv" && !viewerIsParticipant(highlightRow.hit.item);
|
|
3895
3909
|
const confirmConv = confirmId !== null ? list.find((c) => c.id === confirmId) : void 0;
|
|
3896
3910
|
const searchState = isSearching ? search?.state : void 0;
|
|
3897
3911
|
const searchStatusSegment = !isSearching ? "" : searchState?.kind === "loading" || search === null ? "searching…" : searchState?.kind === "error" ? `search failed: ${searchState.message}` : list.length === 0 ? "no matches" : "";
|
|
@@ -3913,7 +3927,7 @@ function ConversationHome({ agent, initialQuery, conversations, showAutomated, o
|
|
|
3913
3927
|
searchStatusSegment,
|
|
3914
3928
|
enterHint,
|
|
3915
3929
|
"/ search",
|
|
3916
|
-
...highlightAgentRun ? [] : [`ctrl+a ${highlightArchived ? "unarchive" : "archive"}`],
|
|
3930
|
+
...highlightAgentRun || highlightOutsider ? [] : [`ctrl+a ${highlightArchived ? "unarchive" : "archive"}`],
|
|
3917
3931
|
"ctrl+d delete",
|
|
3918
3932
|
`tab ${showAutomated ? "hide" : "show"} agent runs`,
|
|
3919
3933
|
`shift+tab ${showArchived ? "hide" : "show"} archived`,
|
|
@@ -4068,6 +4082,10 @@ function ConversationHome({ agent, initialQuery, conversations, showAutomated, o
|
|
|
4068
4082
|
setError("agent runs can't be archived — ctrl+d deletes");
|
|
4069
4083
|
return;
|
|
4070
4084
|
}
|
|
4085
|
+
if (!viewerIsParticipant(row.hit.item)) {
|
|
4086
|
+
setError("you're not in this thread, so there's nothing to archive");
|
|
4087
|
+
return;
|
|
4088
|
+
}
|
|
4071
4089
|
setError(null);
|
|
4072
4090
|
toggleArchived(row.hit.item);
|
|
4073
4091
|
}
|
|
@@ -8636,9 +8654,19 @@ function formatChatFooterStatus({ runKind, ctrlCArmed, portalOpen, hasPendingSte
|
|
|
8636
8654
|
* appended only once something has chosen one — an agent with no stored level
|
|
8637
8655
|
* runs at the platform default, and naming a level it never picked would be a
|
|
8638
8656
|
* claim the footer can't back.
|
|
8639
|
-
|
|
8640
|
-
|
|
8641
|
-
|
|
8657
|
+
*
|
|
8658
|
+
* A thread that serves its own model reads differently from one following the
|
|
8659
|
+
* agent (ANY-8702): a differing `agentModel` gets a `thread` marker plus the
|
|
8660
|
+
* default it replaces — the "set and not the same as the default" case James
|
|
8661
|
+
* asked the footer to surface. Provenance is derived from the pair, not
|
|
8662
|
+
* carried as a flag (James, #24018 review). When the thread follows the
|
|
8663
|
+
* default — or the server predates pins and sends no `agentModel` — the model
|
|
8664
|
+
* renders bare exactly as before.
|
|
8665
|
+
*/
|
|
8666
|
+
function formatModelHint({ model, effort, agentModel }) {
|
|
8667
|
+
const effortPart = effort ? ` · ${effort}` : "";
|
|
8668
|
+
if (model === null || agentModel === null || agentModel === model) return `ctrl+p · ${model ?? "default"}${effortPart}`;
|
|
8669
|
+
return `ctrl+p · ${model} (thread) · agent default ${agentModel}${effortPart}`;
|
|
8642
8670
|
}
|
|
8643
8671
|
|
|
8644
8672
|
//#endregion
|
|
@@ -10665,8 +10693,11 @@ function ModelSwitcher({ models, initialSavedEfforts, floor, currentModel, curre
|
|
|
10665
10693
|
agentId,
|
|
10666
10694
|
model: model.id,
|
|
10667
10695
|
thinkingLevel: effort
|
|
10668
|
-
})
|
|
10669
|
-
|
|
10696
|
+
}).then((settled) => ({
|
|
10697
|
+
...settled,
|
|
10698
|
+
scope: "agent"
|
|
10699
|
+
}));
|
|
10700
|
+
const pick = conversationId ? await withAgentFallback(() => rest.setConversationModel({
|
|
10670
10701
|
conversationId,
|
|
10671
10702
|
agentId,
|
|
10672
10703
|
model: model.id,
|
|
@@ -10676,9 +10707,10 @@ function ModelSwitcher({ models, initialSavedEfforts, floor, currentModel, curre
|
|
|
10676
10707
|
pinUnsupported: false
|
|
10677
10708
|
};
|
|
10678
10709
|
onModelSelected({
|
|
10679
|
-
model: settled.model ?? model.id,
|
|
10680
|
-
effort: settled.thinkingLevel,
|
|
10681
|
-
pinUnsupported
|
|
10710
|
+
model: pick.settled.model ?? model.id,
|
|
10711
|
+
effort: pick.settled.thinkingLevel,
|
|
10712
|
+
pinUnsupported: pick.pinUnsupported,
|
|
10713
|
+
scope: pick.pinUnsupported ? "agent" : pick.settled.scope
|
|
10682
10714
|
});
|
|
10683
10715
|
} catch (err) {
|
|
10684
10716
|
failed(err);
|
|
@@ -10695,23 +10727,34 @@ function ModelSwitcher({ models, initialSavedEfforts, floor, currentModel, curre
|
|
|
10695
10727
|
});
|
|
10696
10728
|
if (model.id === currentModel) {
|
|
10697
10729
|
let pinUnsupported = false;
|
|
10698
|
-
|
|
10699
|
-
|
|
10700
|
-
|
|
10701
|
-
|
|
10702
|
-
|
|
10703
|
-
|
|
10704
|
-
|
|
10705
|
-
|
|
10706
|
-
|
|
10707
|
-
|
|
10708
|
-
|
|
10709
|
-
|
|
10710
|
-
|
|
10730
|
+
let scope = null;
|
|
10731
|
+
if (conversationId) {
|
|
10732
|
+
const result = await withAgentFallback(() => rest.setConversationModel({
|
|
10733
|
+
conversationId,
|
|
10734
|
+
agentId,
|
|
10735
|
+
model: model.id,
|
|
10736
|
+
thinkingLevel: level
|
|
10737
|
+
}), () => rest.updateAgentEffort({
|
|
10738
|
+
agentId,
|
|
10739
|
+
thinkingLevel: level
|
|
10740
|
+
}).then((settled) => ({
|
|
10741
|
+
...settled,
|
|
10742
|
+
scope: "agent"
|
|
10743
|
+
})));
|
|
10744
|
+
pinUnsupported = result.pinUnsupported;
|
|
10745
|
+
scope = result.settled.scope ?? null;
|
|
10746
|
+
} else {
|
|
10747
|
+
await rest.updateAgentEffort({
|
|
10748
|
+
agentId,
|
|
10749
|
+
thinkingLevel: level
|
|
10750
|
+
});
|
|
10751
|
+
scope = "agent";
|
|
10752
|
+
}
|
|
10711
10753
|
onEffortSelected({
|
|
10712
10754
|
effort: level,
|
|
10713
10755
|
label: effortLabel(model, level),
|
|
10714
|
-
pinUnsupported
|
|
10756
|
+
pinUnsupported,
|
|
10757
|
+
scope
|
|
10715
10758
|
});
|
|
10716
10759
|
return;
|
|
10717
10760
|
}
|
|
@@ -14019,6 +14062,7 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
|
|
|
14019
14062
|
const [model, setModel] = useState(agent.model ?? null);
|
|
14020
14063
|
const [effort, setEffort] = useState(agent.thinkingLevel ?? null);
|
|
14021
14064
|
const [modelLocked, setModelLocked] = useState(agent.modelLocked ?? false);
|
|
14065
|
+
const [agentDefaultModel, setAgentDefaultModel] = useState(agent.model ?? null);
|
|
14022
14066
|
const [cardPickerOpen, setCardPickerOpen] = useState(false);
|
|
14023
14067
|
const [modelPickerView, setModelPickerView] = useState(null);
|
|
14024
14068
|
const modelPickerOpen = modelPickerView !== null;
|
|
@@ -14488,6 +14532,7 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
|
|
|
14488
14532
|
setModel(event.model);
|
|
14489
14533
|
setEffort(event.thinkingLevel ?? null);
|
|
14490
14534
|
setModelLocked(event.modelLocked);
|
|
14535
|
+
setAgentDefaultModel(event.agentModel ?? null);
|
|
14491
14536
|
return;
|
|
14492
14537
|
}
|
|
14493
14538
|
if (event.kind === "conversation" && event.title) setChatTitle(event.title);
|
|
@@ -15193,6 +15238,10 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
|
|
|
15193
15238
|
useStore.getState().showToast({ message: "agent runs can't be archived — ctrl+d in the picker deletes" });
|
|
15194
15239
|
return;
|
|
15195
15240
|
}
|
|
15241
|
+
if (!viewerIsParticipant(conversation)) {
|
|
15242
|
+
useStore.getState().showToast({ message: "you're not in this thread, so there's nothing to archive" });
|
|
15243
|
+
return;
|
|
15244
|
+
}
|
|
15196
15245
|
if (runRef.current.kind !== "idle") {
|
|
15197
15246
|
useStore.getState().showToast({ message: "finish or cancel the run first (ctrl+c)" });
|
|
15198
15247
|
return;
|
|
@@ -15226,6 +15275,7 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
|
|
|
15226
15275
|
askPrompt,
|
|
15227
15276
|
restartConfirm,
|
|
15228
15277
|
agentRunConversation,
|
|
15278
|
+
conversation,
|
|
15229
15279
|
conversationId,
|
|
15230
15280
|
rest,
|
|
15231
15281
|
goTo,
|
|
@@ -16100,7 +16150,11 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
|
|
|
16100
16150
|
cardVerb,
|
|
16101
16151
|
nonWebChannel
|
|
16102
16152
|
]);
|
|
16103
|
-
const modelHint = formatModelHint(
|
|
16153
|
+
const modelHint = formatModelHint({
|
|
16154
|
+
model,
|
|
16155
|
+
effort,
|
|
16156
|
+
agentModel: agentDefaultModel
|
|
16157
|
+
});
|
|
16104
16158
|
if (askPrompt) return /* @__PURE__ */ jsx(AskPicker, {
|
|
16105
16159
|
questions: askPrompt.questions,
|
|
16106
16160
|
onSubmit: (text) => {
|
|
@@ -16132,6 +16186,7 @@ function ChatScreen({ agent, conversation, attachRunId, parentConversationId })
|
|
|
16132
16186
|
onModelSelected: (next) => {
|
|
16133
16187
|
setModel(next.model);
|
|
16134
16188
|
setEffort(next.effort);
|
|
16189
|
+
if (next.scope === "agent") setAgentDefaultModel(next.model);
|
|
16135
16190
|
setModelPickerView(null);
|
|
16136
16191
|
useStore.getState().showToast(next.pinUnsupported ? {
|
|
16137
16192
|
variant: "warning",
|
|
@@ -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 "
|
|
163
|
+
return "1789677433";
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
166
166
|
* Whether a client carrying `mine` should replace a running daemon carrying
|
|
@@ -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-
|
|
2
|
+
import { i as isRecord, n as isNewerBuild, r as portalDaemonBuild, t as PortalClient } from "./client-B2QW5YW3.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,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./client-
|
|
2
|
+
import "./client-B2QW5YW3.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-
|
|
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-BVkLmE9i.mjs";
|
|
6
6
|
|
|
7
7
|
export { runPortalDaemon };
|
|
@@ -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-
|
|
2
|
+
import { d as daemonPaths, f as encodeLine, l as LOCAL_PROTOCOL_VERSION, m as parseDaemonMessage, n as ensureDaemonRunning, p as makeLineParser } from "./daemon-BVkLmE9i.mjs";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { connect } from "node:net";
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { c as version$1 } from "./rest-
|
|
3
|
-
import { E as getConfigPath } from "./print-
|
|
2
|
+
import { c as version$1 } from "./rest-C7ahG6C2.mjs";
|
|
3
|
+
import { E as getConfigPath } from "./print-CYg-EpIt.mjs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { err, ok } from "neverthrow";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./rest-
|
|
3
|
-
import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-
|
|
2
|
+
import "./rest-C7ahG6C2.mjs";
|
|
3
|
+
import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-CYg-EpIt.mjs";
|
|
4
4
|
import "./billing-blocked-D3l5kJlX.mjs";
|
|
5
5
|
|
|
6
6
|
export { messageGet, readStdin, resolveAgent, runPrint };
|
|
@@ -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-
|
|
2
|
+
import { a as errorMessage, i as sendErrorMessage, o as isRecord, t as createRestClient } from "./rest-C7ahG6C2.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";
|
|
@@ -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-
|
|
17
|
+
const { PortalClient } = await import("./client-DJ-k3tFu.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.
|
|
9
|
+
var version = "0.6.0-beta.26";
|
|
10
10
|
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/chat/util.ts
|
|
@@ -303,11 +303,17 @@ function createRestClient({ appUrl, sessionToken, workspaceId }) {
|
|
|
303
303
|
thinkingLevel: agent.thinkingLevel ?? null
|
|
304
304
|
};
|
|
305
305
|
},
|
|
306
|
-
setConversationModel: async ({ conversationId, agentId, model, thinkingLevel }) =>
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
306
|
+
setConversationModel: async ({ conversationId, agentId, model, thinkingLevel }) => {
|
|
307
|
+
const settled = await post(`/api/v1/conversations/${conversationId}/model`, {
|
|
308
|
+
agentId,
|
|
309
|
+
model,
|
|
310
|
+
thinkingLevel
|
|
311
|
+
}, conversationModelResponseSchema);
|
|
312
|
+
return {
|
|
313
|
+
...settled,
|
|
314
|
+
scope: settled.scope ?? null
|
|
315
|
+
};
|
|
316
|
+
},
|
|
311
317
|
updateAgentEffort: async ({ agentId, thinkingLevel }) => {
|
|
312
318
|
const { agent } = await patchAgent(agentId, { thinkingLevel });
|
|
313
319
|
return { thinkingLevel: agent.thinkingLevel ?? null };
|
|
@@ -566,7 +572,8 @@ const freeFloorStateResponseSchema = z.object({ result: z.object({ data: z.objec
|
|
|
566
572
|
}).nullable() }) });
|
|
567
573
|
const conversationModelResponseSchema = z.object({
|
|
568
574
|
model: z.string().nullable(),
|
|
569
|
-
thinkingLevel: z.string().nullable()
|
|
575
|
+
thinkingLevel: z.string().nullable(),
|
|
576
|
+
scope: z.enum(["agent", "conversation"]).nullish()
|
|
570
577
|
});
|
|
571
578
|
const updateAgentResponseSchema = z.object({ agent: z.object({
|
|
572
579
|
model: z.string().nullable().optional(),
|
|
@@ -600,6 +607,7 @@ const conversationSummarySchema = z.object({
|
|
|
600
607
|
channel: z.string().nullable(),
|
|
601
608
|
channelLabel: z.string().nullable(),
|
|
602
609
|
viewerArchivedAt: z.string().nullable().optional(),
|
|
610
|
+
viewerParticipates: z.boolean().optional(),
|
|
603
611
|
unread: z.boolean().optional(),
|
|
604
612
|
agent: conversationAgentSchema,
|
|
605
613
|
agents: z.array(conversationAgentSchema).optional()
|
|
@@ -736,7 +744,8 @@ const conversationStreamEventSchema = z.discriminatedUnion("kind", [
|
|
|
736
744
|
id: z.string(),
|
|
737
745
|
model: z.string().nullable(),
|
|
738
746
|
modelLocked: z.boolean(),
|
|
739
|
-
thinkingLevel: z.string().nullish()
|
|
747
|
+
thinkingLevel: z.string().nullish(),
|
|
748
|
+
agentModel: z.string().nullish()
|
|
740
749
|
}),
|
|
741
750
|
z.object({
|
|
742
751
|
kind: z.literal("run"),
|
|
@@ -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-
|
|
2
|
+
import { i as sendErrorMessage, n as errorDetail, r as filenameFromContentDisposition, t as createRestClient } from "./rest-C7ahG6C2.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.
|
|
3
|
+
"version": "0.6.0-beta.26",
|
|
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.
|
|
75
|
-
"skydive-cli-darwin-x64": "0.6.0-beta.
|
|
76
|
-
"skydive-cli-linux-x64": "0.6.0-beta.
|
|
77
|
-
"skydive-cli-linux-arm64": "0.6.0-beta.
|
|
74
|
+
"skydive-cli-darwin-arm64": "0.6.0-beta.26",
|
|
75
|
+
"skydive-cli-darwin-x64": "0.6.0-beta.26",
|
|
76
|
+
"skydive-cli-linux-x64": "0.6.0-beta.26",
|
|
77
|
+
"skydive-cli-linux-arm64": "0.6.0-beta.26"
|
|
78
78
|
}
|
|
79
79
|
}
|