skydive-cli 0.2.0-beta.587 → 0.2.0-beta.595
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/{api-BHq-5eW_.mjs → api-CQXTPT-p.mjs} +1 -1
- package/dist/js/bin.mjs +15 -15
- package/dist/js/{boot-BZUWp0ve.mjs → boot-BY_wmF2R.mjs} +170 -7
- package/dist/js/{client-t6GmE8TI.mjs → client-BwMzD7Iw.mjs} +1 -1
- package/dist/js/client-C9p4ta7J.mjs +6 -0
- package/dist/js/{print-Chg635Ye.mjs → print-D0SpmKCV.mjs} +2 -2
- package/dist/js/{print-XvAHDKqu.mjs → print-SAL2aiGh.mjs} +1 -1
- package/dist/js/{print-share-DT89ADa6.mjs → print-share-CzS5Y6De.mjs} +1 -1
- package/dist/js/{rest-DZnAT7BG.mjs → rest-BMh7CURU.mjs} +23 -9
- package/dist/js/{rest-Ci_yRwoi.mjs → rest-DPta4XUe.mjs} +1 -1
- package/package.json +1 -1
- package/dist/js/client-CRAGDqp0.mjs +0 -6
package/dist/js/bin.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { A as getPromptHistoryPath, B as resolveSession, C as API_KEY_PREFIX, D as deleteConfig, E as DEFAULT_WEB_URL, F as getStoredApiKeyWorkspaceName, G as setLastSeenVersion, H as saveConfig, I as getUpdateCheckDisabled, L as resolveAppUrl, N as getShareMachineDefault, O as getConfigPath, P as getStoredApiKeyId, R as resolveConfig, S as API_KEY_FAMILY_PREFIX, U as saveSession, _ as getActiveWorkspaceId, b as setActiveWorkspace, g as ensureActiveOrganization, k as getLastSeenVersion, m as themes, r as brandHelpArt, v as getSessionIdentity, w as DEFAULT_API_URL, x as API_KEYS_URL, y as listWorkspaces, z as resolveManagementAuth } from "./brand-BVALAEf1.mjs";
|
|
3
3
|
import { n as printError, r as printTable, t as output } from "./output-B4cW10Ph.mjs";
|
|
4
|
-
import { n as createRestClient } from "./rest-
|
|
5
|
-
import { i as resolveAgent } from "./print-
|
|
6
|
-
import { a as registerPortalDevice, c as machineIdentity, n as findThisDevice, o as revokePortalAccess, r as grantPortalAccess, t as fetchPortalDevices } from "./api-
|
|
4
|
+
import { n as createRestClient } from "./rest-BMh7CURU.mjs";
|
|
5
|
+
import { i as resolveAgent } from "./print-SAL2aiGh.mjs";
|
|
6
|
+
import { a as registerPortalDevice, c as machineIdentity, n as findThisDevice, o as revokePortalAccess, r as grantPortalAccess, t as fetchPortalDevices } from "./api-CQXTPT-p.mjs";
|
|
7
7
|
import { t as SandboxStream } from "./client-CpEvH2Pq.mjs";
|
|
8
8
|
import { hideBin } from "yargs/helpers";
|
|
9
9
|
import yargs from "yargs";
|
|
@@ -20,7 +20,7 @@ import semver from "semver";
|
|
|
20
20
|
|
|
21
21
|
//#region package.json
|
|
22
22
|
var name = "skydive-cli";
|
|
23
|
-
var version = "0.2.0-beta.
|
|
23
|
+
var version = "0.2.0-beta.595";
|
|
24
24
|
|
|
25
25
|
//#endregion
|
|
26
26
|
//#region src/types.ts
|
|
@@ -1200,7 +1200,7 @@ const importCommand = {
|
|
|
1200
1200
|
process.exit(1);
|
|
1201
1201
|
}
|
|
1202
1202
|
}
|
|
1203
|
-
const { runChat } = await import("./boot-
|
|
1203
|
+
const { runChat } = await import("./boot-BY_wmF2R.mjs");
|
|
1204
1204
|
await runChat({
|
|
1205
1205
|
appUrl,
|
|
1206
1206
|
sessionToken: session.value.sessionToken,
|
|
@@ -1226,7 +1226,7 @@ async function runImportPrintMode({ argv, appUrl }) {
|
|
|
1226
1226
|
printError(`${session.error.message} For non-interactive use, run \`skydive auth login --web\` first, or set SKYDIVE_SESSION_TOKEN.`);
|
|
1227
1227
|
process.exit(1);
|
|
1228
1228
|
}
|
|
1229
|
-
const { connectMachineShare } = await import("./print-share-
|
|
1229
|
+
const { connectMachineShare } = await import("./print-share-CzS5Y6De.mjs");
|
|
1230
1230
|
const machineShare = await connectMachineShare({
|
|
1231
1231
|
appUrl,
|
|
1232
1232
|
sessionToken: session.value.sessionToken,
|
|
@@ -1234,7 +1234,7 @@ async function runImportPrintMode({ argv, appUrl }) {
|
|
|
1234
1234
|
});
|
|
1235
1235
|
const extra = (argv.print ?? "").trim();
|
|
1236
1236
|
const prompt = buildImportSeedPrompt(process.cwd()) + (extra ? `\n\nAdditional instructions: ${extra}` : "");
|
|
1237
|
-
const { runPrint } = await import("./print-
|
|
1237
|
+
const { runPrint } = await import("./print-D0SpmKCV.mjs");
|
|
1238
1238
|
try {
|
|
1239
1239
|
const result = await runPrint({
|
|
1240
1240
|
appUrl,
|
|
@@ -1511,7 +1511,7 @@ const chatCommand = {
|
|
|
1511
1511
|
printError(`Unknown theme "${themeId}". Valid themes: ${themes.map((t) => t.id).join(", ")}`);
|
|
1512
1512
|
process.exit(1);
|
|
1513
1513
|
}
|
|
1514
|
-
const { runChat } = await import("./boot-
|
|
1514
|
+
const { runChat } = await import("./boot-BY_wmF2R.mjs");
|
|
1515
1515
|
await runChat({
|
|
1516
1516
|
appUrl,
|
|
1517
1517
|
sessionToken: session.value.sessionToken,
|
|
@@ -1539,7 +1539,7 @@ async function runPrintMode({ argv, appUrl }) {
|
|
|
1539
1539
|
printError(`${session.error.message} For non-interactive use, run \`skydive auth login\` first, or set SKYDIVE_SESSION_TOKEN.`);
|
|
1540
1540
|
process.exit(1);
|
|
1541
1541
|
}
|
|
1542
|
-
const { runPrint, readStdin } = await import("./print-
|
|
1542
|
+
const { runPrint, readStdin } = await import("./print-D0SpmKCV.mjs");
|
|
1543
1543
|
let prompt = (argv.print ?? "").trim();
|
|
1544
1544
|
if (!prompt) {
|
|
1545
1545
|
if (process.stdin.isTTY) {
|
|
@@ -1554,7 +1554,7 @@ async function runPrintMode({ argv, appUrl }) {
|
|
|
1554
1554
|
}
|
|
1555
1555
|
let machineShare = null;
|
|
1556
1556
|
if (resolveShareMachine(argv)) {
|
|
1557
|
-
const { connectMachineShare } = await import("./print-share-
|
|
1557
|
+
const { connectMachineShare } = await import("./print-share-CzS5Y6De.mjs");
|
|
1558
1558
|
machineShare = await connectMachineShare({
|
|
1559
1559
|
appUrl,
|
|
1560
1560
|
sessionToken: session.value.sessionToken,
|
|
@@ -1613,7 +1613,7 @@ const getCommand = {
|
|
|
1613
1613
|
printError(`${session.error.message} Run \`skydive auth login\` first, or set SKYDIVE_SESSION_TOKEN.`);
|
|
1614
1614
|
process.exit(1);
|
|
1615
1615
|
}
|
|
1616
|
-
const { messageGet } = await import("./print-
|
|
1616
|
+
const { messageGet } = await import("./print-D0SpmKCV.mjs");
|
|
1617
1617
|
try {
|
|
1618
1618
|
const result = await messageGet({
|
|
1619
1619
|
appUrl,
|
|
@@ -1810,7 +1810,7 @@ const switchCommand = {
|
|
|
1810
1810
|
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.");
|
|
1811
1811
|
process.exit(1);
|
|
1812
1812
|
}
|
|
1813
|
-
const { runWorkspacePicker } = await import("./boot-
|
|
1813
|
+
const { runWorkspacePicker } = await import("./boot-BY_wmF2R.mjs");
|
|
1814
1814
|
await runWorkspacePicker(session);
|
|
1815
1815
|
return;
|
|
1816
1816
|
}
|
|
@@ -1888,7 +1888,7 @@ const openCommand = {
|
|
|
1888
1888
|
const agent = argv.agent ? resolveAgent((await fetchPortalDevices(session)).agents, argv.agent) : null;
|
|
1889
1889
|
const cwd = argv.cwd ? path.resolve(argv.cwd) : process.cwd();
|
|
1890
1890
|
const { machineName } = machineIdentity();
|
|
1891
|
-
const { PortalClient } = await import("./client-
|
|
1891
|
+
const { PortalClient } = await import("./client-C9p4ta7J.mjs");
|
|
1892
1892
|
let lastLine = "";
|
|
1893
1893
|
let signalConnected;
|
|
1894
1894
|
const connected = new Promise((resolve) => {
|
|
@@ -2060,8 +2060,8 @@ const sandboxCommand = {
|
|
|
2060
2060
|
}).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`"),
|
|
2061
2061
|
handler: async (argv) => {
|
|
2062
2062
|
const session = requireSession(argv);
|
|
2063
|
-
const { createRestClient } = await import("./rest-
|
|
2064
|
-
const { resolveAgent } = await import("./print-
|
|
2063
|
+
const { createRestClient } = await import("./rest-DPta4XUe.mjs");
|
|
2064
|
+
const { resolveAgent } = await import("./print-D0SpmKCV.mjs");
|
|
2065
2065
|
const client = createRestClient({
|
|
2066
2066
|
appUrl: session.appUrl,
|
|
2067
2067
|
sessionToken: session.sessionToken
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { M as getSavedTheme, O as getConfigPath, T as DEFAULT_APP_URL, V as resolveWebUrl, W as saveTheme, _ as getActiveWorkspaceId, a as applyTheme, b as setActiveWorkspace, c as noColorRequested, d as themeMode, f as themeModeFromColorFgBg, h as themesForMode, i as DEFAULT_THEME_ID, j as getReviewStateDir, l as theme, n as WORDMARK, o as findTheme, p as themeVersion, s as monoTheme, t as MARK_CELLS, u as themeForMode, w as DEFAULT_API_URL, y as listWorkspaces } from "./brand-BVALAEf1.mjs";
|
|
3
|
-
import { n as createRestClient, r as errorDetail, t as HttpError } from "./rest-
|
|
3
|
+
import { n as createRestClient, r as errorDetail, t as HttpError } from "./rest-BMh7CURU.mjs";
|
|
4
4
|
import { n as isRecord, t as errorMessage } from "./util-CeisaZVY.mjs";
|
|
5
|
-
import { 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 } from "./print-
|
|
6
|
-
import "./api-
|
|
5
|
+
import { 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 } from "./print-SAL2aiGh.mjs";
|
|
6
|
+
import "./api-CQXTPT-p.mjs";
|
|
7
7
|
import { t as SandboxStream } from "./client-CpEvH2Pq.mjs";
|
|
8
|
-
import { t as PortalClient } from "./client-
|
|
8
|
+
import { t as PortalClient } from "./client-BwMzD7Iw.mjs";
|
|
9
9
|
import { t as runRawPtyPassthrough } from "./raw-pty-GAvxm2ol.mjs";
|
|
10
10
|
import * as os$1 from "node:os";
|
|
11
11
|
import { homedir, platform, release, tmpdir } from "node:os";
|
|
@@ -4320,6 +4320,74 @@ function TodoCardView({ todos, isActive }) {
|
|
|
4320
4320
|
});
|
|
4321
4321
|
}
|
|
4322
4322
|
|
|
4323
|
+
//#endregion
|
|
4324
|
+
//#region src/chat/tui/chat/use-compaction.ts
|
|
4325
|
+
const COMPACTING_INDICATOR_TIMEOUT_MS = 12e4;
|
|
4326
|
+
/**
|
|
4327
|
+
* Owns everything about manual conversation compaction (`/compact`): the
|
|
4328
|
+
* persistent "compacting…" indicator state, the fire-and-forget command, the
|
|
4329
|
+
* reaction to conversation-stream `compaction` events, and the safety timeout
|
|
4330
|
+
* that clears a stranded `started` so the indicator can never pin forever.
|
|
4331
|
+
*
|
|
4332
|
+
* The screen keeps a single `streamConversation` subscription (which also
|
|
4333
|
+
* carries `run`/`conversation` events), so compaction events arrive there and
|
|
4334
|
+
* are forwarded in via {@link UseCompaction.onCompactionEvent} rather than this
|
|
4335
|
+
* hook opening its own stream.
|
|
4336
|
+
*/
|
|
4337
|
+
function useCompaction({ rest, conversationId }) {
|
|
4338
|
+
const [compacting, setCompacting] = useState(false);
|
|
4339
|
+
const timerRef = useRef(null);
|
|
4340
|
+
const clearTimer = useCallback(() => {
|
|
4341
|
+
if (timerRef.current) {
|
|
4342
|
+
clearTimeout(timerRef.current);
|
|
4343
|
+
timerRef.current = null;
|
|
4344
|
+
}
|
|
4345
|
+
}, []);
|
|
4346
|
+
const armIndicator = useCallback(() => {
|
|
4347
|
+
clearTimer();
|
|
4348
|
+
setCompacting(true);
|
|
4349
|
+
timerRef.current = setTimeout(() => setCompacting(false), COMPACTING_INDICATOR_TIMEOUT_MS);
|
|
4350
|
+
}, [clearTimer]);
|
|
4351
|
+
const onCompactionEvent = useCallback((status) => {
|
|
4352
|
+
if (status === "started") {
|
|
4353
|
+
armIndicator();
|
|
4354
|
+
return;
|
|
4355
|
+
}
|
|
4356
|
+
clearTimer();
|
|
4357
|
+
setCompacting(false);
|
|
4358
|
+
if (status === "failed") useStore.getState().showToast({
|
|
4359
|
+
variant: "error",
|
|
4360
|
+
message: "compaction failed"
|
|
4361
|
+
});
|
|
4362
|
+
}, [armIndicator, clearTimer]);
|
|
4363
|
+
const compactConversation = useCallback(() => {
|
|
4364
|
+
if (!rest || !conversationId) {
|
|
4365
|
+
useStore.getState().showToast({ message: "nothing to compact yet — send a message first" });
|
|
4366
|
+
return;
|
|
4367
|
+
}
|
|
4368
|
+
armIndicator();
|
|
4369
|
+
rest.compactConversation({ conversationId }).catch((err) => {
|
|
4370
|
+
clearTimer();
|
|
4371
|
+
setCompacting(false);
|
|
4372
|
+
useStore.getState().showToast({
|
|
4373
|
+
variant: "error",
|
|
4374
|
+
message: `couldn't compact: ${errorDetail(err)}`
|
|
4375
|
+
});
|
|
4376
|
+
});
|
|
4377
|
+
}, [
|
|
4378
|
+
rest,
|
|
4379
|
+
conversationId,
|
|
4380
|
+
armIndicator,
|
|
4381
|
+
clearTimer
|
|
4382
|
+
]);
|
|
4383
|
+
useEffect(() => clearTimer, [clearTimer]);
|
|
4384
|
+
return {
|
|
4385
|
+
compacting,
|
|
4386
|
+
compactConversation,
|
|
4387
|
+
onCompactionEvent
|
|
4388
|
+
};
|
|
4389
|
+
}
|
|
4390
|
+
|
|
4323
4391
|
//#endregion
|
|
4324
4392
|
//#region src/chat/tui/chat/footer-hints.ts
|
|
4325
4393
|
/** Build the chat footer copy independently of its colors and layout. */
|
|
@@ -5209,6 +5277,20 @@ const slashCommands = [
|
|
|
5209
5277
|
description: "copy the agent's last message to the clipboard",
|
|
5210
5278
|
action: { kind: "copy" }
|
|
5211
5279
|
},
|
|
5280
|
+
{
|
|
5281
|
+
name: "portal",
|
|
5282
|
+
aliases: ["local"],
|
|
5283
|
+
argsHint: null,
|
|
5284
|
+
description: "allow this agent to access your computer",
|
|
5285
|
+
action: { kind: "portal" }
|
|
5286
|
+
},
|
|
5287
|
+
{
|
|
5288
|
+
name: "compact",
|
|
5289
|
+
aliases: [],
|
|
5290
|
+
argsHint: null,
|
|
5291
|
+
description: "summarize older turns to free up context now",
|
|
5292
|
+
action: { kind: "compact" }
|
|
5293
|
+
},
|
|
5212
5294
|
{
|
|
5213
5295
|
name: "help",
|
|
5214
5296
|
aliases: [],
|
|
@@ -8268,6 +8350,8 @@ function routeInput(raw) {
|
|
|
8268
8350
|
case "browser":
|
|
8269
8351
|
case "connect":
|
|
8270
8352
|
case "copy":
|
|
8353
|
+
case "portal":
|
|
8354
|
+
case "compact":
|
|
8271
8355
|
case "help":
|
|
8272
8356
|
case "quit": return { kind: action.kind };
|
|
8273
8357
|
default: {
|
|
@@ -8460,6 +8544,10 @@ function ChatScreen({ agent, conversation }) {
|
|
|
8460
8544
|
const agentHost = useAgentHost();
|
|
8461
8545
|
const nonWebChannel = nonWebChannelLabel(conversation);
|
|
8462
8546
|
const [conversationId, setConversationId] = useState(initialConversationId);
|
|
8547
|
+
const { compacting, compactConversation, onCompactionEvent } = useCompaction({
|
|
8548
|
+
rest,
|
|
8549
|
+
conversationId
|
|
8550
|
+
});
|
|
8463
8551
|
const [items, setItems] = useState([]);
|
|
8464
8552
|
const [todos, setTodos] = useState(null);
|
|
8465
8553
|
const [planHidden, setPlanHidden] = useState(false);
|
|
@@ -8724,15 +8812,22 @@ function ChatScreen({ agent, conversation }) {
|
|
|
8724
8812
|
attachToRun(event.runId, null, parseStampMs(event.createdAt));
|
|
8725
8813
|
return;
|
|
8726
8814
|
}
|
|
8727
|
-
if (event.
|
|
8815
|
+
if (event.kind === "compaction") {
|
|
8816
|
+
onCompactionEvent(event.status);
|
|
8817
|
+
return;
|
|
8818
|
+
}
|
|
8819
|
+
if (event.kind === "conversation" && event.title) setChatTitle(event.title);
|
|
8728
8820
|
}
|
|
8729
8821
|
}).catch(() => {});
|
|
8730
|
-
return () =>
|
|
8822
|
+
return () => {
|
|
8823
|
+
abort.abort();
|
|
8824
|
+
};
|
|
8731
8825
|
}, [
|
|
8732
8826
|
rest,
|
|
8733
8827
|
conversationId,
|
|
8734
8828
|
setChatTitle,
|
|
8735
|
-
attachToRun
|
|
8829
|
+
attachToRun,
|
|
8830
|
+
onCompactionEvent
|
|
8736
8831
|
]);
|
|
8737
8832
|
const sendContent = useCallback(async (content, staged, opts) => {
|
|
8738
8833
|
if (!rest) return;
|
|
@@ -8851,6 +8946,7 @@ function ChatScreen({ agent, conversation }) {
|
|
|
8851
8946
|
portalStatus,
|
|
8852
8947
|
portalClient,
|
|
8853
8948
|
agent.id,
|
|
8949
|
+
agent.name,
|
|
8854
8950
|
sendContent
|
|
8855
8951
|
]);
|
|
8856
8952
|
const cancelLatestSteer = useCallback(() => {
|
|
@@ -9446,6 +9542,48 @@ function ChatScreen({ agent, conversation }) {
|
|
|
9446
9542
|
setPortalPrompt(null);
|
|
9447
9543
|
useStore.getState().showToast({ message: "kept this machine private" });
|
|
9448
9544
|
}, [agent.id, setPortalPrompt]);
|
|
9545
|
+
const openPortalAccess = useCallback(() => {
|
|
9546
|
+
if (!portalClient) {
|
|
9547
|
+
useStore.getState().showToast({ message: "local access is unavailable in this session" });
|
|
9548
|
+
return;
|
|
9549
|
+
}
|
|
9550
|
+
switch (portal.status) {
|
|
9551
|
+
case "off":
|
|
9552
|
+
declinedRef.current.delete(agent.id);
|
|
9553
|
+
portalClient.enable();
|
|
9554
|
+
useStore.getState().showToast({ message: "enabling local access on this machine…" });
|
|
9555
|
+
break;
|
|
9556
|
+
case "connecting":
|
|
9557
|
+
useStore.getState().showToast({ message: "local access is still connecting…" });
|
|
9558
|
+
break;
|
|
9559
|
+
case "connected":
|
|
9560
|
+
if (portal.grantedAgentIds.includes(agent.id)) {
|
|
9561
|
+
useStore.getState().showToast({ message: `${agent.name} can already run commands on this machine` });
|
|
9562
|
+
break;
|
|
9563
|
+
}
|
|
9564
|
+
declinedRef.current.delete(agent.id);
|
|
9565
|
+
setPortalPrompt({
|
|
9566
|
+
agentId: agent.id,
|
|
9567
|
+
agentName: agent.name
|
|
9568
|
+
});
|
|
9569
|
+
break;
|
|
9570
|
+
case "error":
|
|
9571
|
+
useStore.getState().showToast({ message: portal.error ? `local access error: ${portal.error}` : "local access hit an error" });
|
|
9572
|
+
break;
|
|
9573
|
+
default: {
|
|
9574
|
+
const exhaustive = portal.status;
|
|
9575
|
+
throw new Error(`unhandled portal status: ${String(exhaustive)}`);
|
|
9576
|
+
}
|
|
9577
|
+
}
|
|
9578
|
+
}, [
|
|
9579
|
+
portalClient,
|
|
9580
|
+
portal.status,
|
|
9581
|
+
portal.grantedAgentIds,
|
|
9582
|
+
portal.error,
|
|
9583
|
+
agent.id,
|
|
9584
|
+
agent.name,
|
|
9585
|
+
setPortalPrompt
|
|
9586
|
+
]);
|
|
9449
9587
|
const executeLine = useCallback((content, staged) => {
|
|
9450
9588
|
if (!content && staged.length === 0) return;
|
|
9451
9589
|
const routed = routeInput(content);
|
|
@@ -9531,6 +9669,12 @@ function ChatScreen({ agent, conversation }) {
|
|
|
9531
9669
|
case "copy":
|
|
9532
9670
|
copyLastMessage();
|
|
9533
9671
|
break;
|
|
9672
|
+
case "portal":
|
|
9673
|
+
openPortalAccess();
|
|
9674
|
+
break;
|
|
9675
|
+
case "compact":
|
|
9676
|
+
compactConversation();
|
|
9677
|
+
break;
|
|
9534
9678
|
case "connect":
|
|
9535
9679
|
if (!promptForCards()) useStore.getState().showToast({ message: "no connect card waiting for action" });
|
|
9536
9680
|
break;
|
|
@@ -9564,6 +9708,8 @@ function ChatScreen({ agent, conversation }) {
|
|
|
9564
9708
|
toggleShare,
|
|
9565
9709
|
openInBrowser,
|
|
9566
9710
|
copyLastMessage,
|
|
9711
|
+
openPortalAccess,
|
|
9712
|
+
compactConversation,
|
|
9567
9713
|
quit,
|
|
9568
9714
|
sendContent,
|
|
9569
9715
|
goTo,
|
|
@@ -9989,6 +10135,23 @@ function ChatScreen({ agent, conversation }) {
|
|
|
9989
10135
|
todos,
|
|
9990
10136
|
isActive: run.kind !== "idle"
|
|
9991
10137
|
}) : null,
|
|
10138
|
+
compacting ? /* @__PURE__ */ jsxs("box", {
|
|
10139
|
+
style: {
|
|
10140
|
+
flexDirection: "row",
|
|
10141
|
+
paddingLeft: 1,
|
|
10142
|
+
paddingRight: 1,
|
|
10143
|
+
height: 1,
|
|
10144
|
+
flexShrink: 0,
|
|
10145
|
+
marginTop: 1
|
|
10146
|
+
},
|
|
10147
|
+
children: [/* @__PURE__ */ jsx("text", {
|
|
10148
|
+
fg: theme.accent,
|
|
10149
|
+
children: "● compacting conversation…"
|
|
10150
|
+
}), /* @__PURE__ */ jsxs("text", {
|
|
10151
|
+
fg: theme.dim,
|
|
10152
|
+
children: [" ", "you can keep typing"]
|
|
10153
|
+
})]
|
|
10154
|
+
}) : null,
|
|
9992
10155
|
pendingVisible ? /* @__PURE__ */ jsxs("box", {
|
|
9993
10156
|
style: {
|
|
9994
10157
|
paddingLeft: 1,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { t as errorMessage } from "./util-CeisaZVY.mjs";
|
|
3
|
-
import { c as machineIdentity, i as mintPortalDeviceToken, l as portalWsUrl, n as findThisDevice, r as grantPortalAccess, s as buildEnv, t as fetchPortalDevices } from "./api-
|
|
3
|
+
import { c as machineIdentity, i as mintPortalDeviceToken, l as portalWsUrl, n as findThisDevice, r as grantPortalAccess, s as buildEnv, t as fetchPortalDevices } from "./api-CQXTPT-p.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { spawn } from "node:child_process";
|
|
6
6
|
import { WebSocket } from "ws";
|
|
@@ -1,5 +1,5 @@
|
|
|
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-BMh7CURU.mjs";
|
|
3
|
+
import { a as runPrint, i as resolveAgent, n as messageGet, o as toPrintError, r as readStdin, t as collectRunText } from "./print-SAL2aiGh.mjs";
|
|
4
4
|
|
|
5
5
|
export { messageGet, readStdin, resolveAgent, runPrint };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as createRestClient, t as HttpError } from "./rest-
|
|
2
|
+
import { n as createRestClient, t as HttpError } from "./rest-BMh7CURU.mjs";
|
|
3
3
|
import { n as isRecord, t as errorMessage } from "./util-CeisaZVY.mjs";
|
|
4
4
|
import stableStringify from "safe-stable-stringify";
|
|
5
5
|
|
|
@@ -14,7 +14,7 @@ import { n as printError } from "./output-B4cW10Ph.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-C9p4ta7J.mjs");
|
|
18
18
|
let signalConnected;
|
|
19
19
|
const connected = new Promise((resolve) => {
|
|
20
20
|
signalConnected = resolve;
|
|
@@ -227,6 +227,9 @@ function createRestClient({ appUrl, sessionToken }) {
|
|
|
227
227
|
const { conversation } = await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}/fork`, {}, forkConversationResponseSchema);
|
|
228
228
|
return conversation;
|
|
229
229
|
},
|
|
230
|
+
compactConversation: async ({ conversationId }) => {
|
|
231
|
+
await post(`/api/v1/conversations/${encodeURIComponent(conversationId)}/compact`, {}, z.object({ status: z.string() }));
|
|
232
|
+
},
|
|
230
233
|
deleteConversation: async ({ conversationId }) => {
|
|
231
234
|
await del(`/api/v1/conversations/${encodeURIComponent(conversationId)}`);
|
|
232
235
|
},
|
|
@@ -462,15 +465,26 @@ const runStreamEventSchema = z.union([z.object({
|
|
|
462
465
|
error: z.string().nullish()
|
|
463
466
|
})]);
|
|
464
467
|
const streamErrorSchema = z.object({ error: z.string() });
|
|
465
|
-
const conversationStreamEventSchema = z.discriminatedUnion("kind", [
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
468
|
+
const conversationStreamEventSchema = z.discriminatedUnion("kind", [
|
|
469
|
+
z.object({
|
|
470
|
+
kind: z.literal("conversation"),
|
|
471
|
+
id: z.string(),
|
|
472
|
+
title: z.string().nullable()
|
|
473
|
+
}),
|
|
474
|
+
z.object({
|
|
475
|
+
kind: z.literal("run"),
|
|
476
|
+
runId: z.string(),
|
|
477
|
+
createdAt: z.string().nullish()
|
|
478
|
+
}),
|
|
479
|
+
z.object({
|
|
480
|
+
kind: z.literal("compaction"),
|
|
481
|
+
status: z.enum([
|
|
482
|
+
"started",
|
|
483
|
+
"completed",
|
|
484
|
+
"failed"
|
|
485
|
+
])
|
|
486
|
+
})
|
|
487
|
+
]);
|
|
474
488
|
|
|
475
489
|
//#endregion
|
|
476
490
|
export { createRestClient as n, errorDetail as r, HttpError as t };
|
package/package.json
CHANGED