skydive-cli 0.4.0-beta.1140 → 0.4.0-beta.1173
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,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as ensureActiveOrganization, D as setActiveWorkspace, E as listWorkspaces, O as name, T as getSessionIdentity, a as installCrashHandler, k as version, t as maybeStartProfiling, u as brandHelpArt, w as getActiveWorkspaceId, x as themes } from "./profiler-
|
|
2
|
+
import { C as ensureActiveOrganization, D as setActiveWorkspace, E as listWorkspaces, O as name, T as getSessionIdentity, a as installCrashHandler, k as version, t as maybeStartProfiling, u as brandHelpArt, w as getActiveWorkspaceId, x as themes } from "./profiler-BgGRyc5q.mjs";
|
|
3
3
|
import { A as getStoredApiKeyWorkspaceName, C as getLastSeenVersion, F as resolveManagementAuth, I as resolveSession, M as resolveAppUrl, N as resolveChatAuth, O as getShareMachineDefault, P as resolveConfig, R as saveConfig, S as getConfigPath, T as getPromptHistoryPath, V as setLastSeenVersion, _ as API_KEY_PREFIX, b as PREFERENCES, g as API_KEY_FAMILY_PREFIX, h as API_KEYS_URL, i as resolveAgent, j as getUpdateCheckDisabled, k as getStoredApiKeyId, v as DEFAULT_API_URL, w as getPreference, x as deleteConfig, z as saveSession } from "./print-CswnhVUN.mjs";
|
|
4
4
|
import { n as printError, r as printTable, t as output } from "./output-DYzzdXYV.mjs";
|
|
5
5
|
import { n as createRestClient, t as HttpError } from "./rest-CG7VpQ56.mjs";
|
|
@@ -1514,7 +1514,7 @@ const importCommand = {
|
|
|
1514
1514
|
process.exit(1);
|
|
1515
1515
|
}
|
|
1516
1516
|
}
|
|
1517
|
-
const { runChat } = await import("./boot-
|
|
1517
|
+
const { runChat } = await import("./boot-e-aTvP3w.mjs");
|
|
1518
1518
|
await runChat({
|
|
1519
1519
|
appUrl,
|
|
1520
1520
|
sessionToken: session.value.sessionToken,
|
|
@@ -1926,7 +1926,7 @@ const chatCommand = {
|
|
|
1926
1926
|
sessionToken: auth.value.token,
|
|
1927
1927
|
agentSelector: argv.agent ?? null
|
|
1928
1928
|
});
|
|
1929
|
-
const { runChat } = await import("./boot-
|
|
1929
|
+
const { runChat } = await import("./boot-e-aTvP3w.mjs");
|
|
1930
1930
|
await runChat({
|
|
1931
1931
|
appUrl: auth.value.appUrl,
|
|
1932
1932
|
sessionToken: auth.value.token,
|
|
@@ -2285,7 +2285,7 @@ const switchCommand = {
|
|
|
2285
2285
|
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.");
|
|
2286
2286
|
process.exit(1);
|
|
2287
2287
|
}
|
|
2288
|
-
const { runWorkspacePicker } = await import("./boot-
|
|
2288
|
+
const { runWorkspacePicker } = await import("./boot-e-aTvP3w.mjs");
|
|
2289
2289
|
await runWorkspacePicker(session);
|
|
2290
2290
|
return;
|
|
2291
2291
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { D as setActiveWorkspace, E as listWorkspaces, S as themesForMode, _ as themeForMode, a as installCrashHandler, b as themeVersion, c as MARK_CELLS, d as DEFAULT_THEME_ID, f as applyTheme, g as theme, h as noColorRequested, i as writeArtifact, l as WORDMARK, m as monoTheme, n as profilingEnabled, o as buildCrashReport, p as findTheme, r as record, s as writeCrashReport, v as themeMode, w as getActiveWorkspaceId, y as themeModeFromColorFgBg } from "./profiler-
|
|
2
|
+
import { D as setActiveWorkspace, E as listWorkspaces, S as themesForMode, _ as themeForMode, a as installCrashHandler, b as themeVersion, c as MARK_CELLS, d as DEFAULT_THEME_ID, f as applyTheme, g as theme, h as noColorRequested, i as writeArtifact, l as WORDMARK, m as monoTheme, n as profilingEnabled, o as buildCrashReport, p as findTheme, r as record, s as writeCrashReport, v as themeMode, w as getActiveWorkspaceId, y as themeModeFromColorFgBg } from "./profiler-BgGRyc5q.mjs";
|
|
3
3
|
import { B as saveTheme, D as getSavedTheme, E as getReviewStateDir, L as resolveWebUrl, S as getConfigPath, 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, y as DEFAULT_APP_URL } from "./print-CswnhVUN.mjs";
|
|
4
4
|
import { a as errorMessage, i as sendErrorMessage, n as createRestClient, o as isRecord, r as errorDetail, t as HttpError } from "./rest-CG7VpQ56.mjs";
|
|
5
5
|
import { i as billingBlockedOutcomeFromSendResponse } from "./billing-blocked-CwfG1BTR.mjs";
|
|
@@ -4615,6 +4615,270 @@ function clampItem(item) {
|
|
|
4615
4615
|
}
|
|
4616
4616
|
}
|
|
4617
4617
|
|
|
4618
|
+
//#endregion
|
|
4619
|
+
//#region src/chat/tui/chat/fix-json.ts
|
|
4620
|
+
/**
|
|
4621
|
+
* Implemented as a scanner with additional fixing
|
|
4622
|
+
* that performs a single linear time scan pass over the partial JSON.
|
|
4623
|
+
*
|
|
4624
|
+
* The states should ideally match relevant states from the JSON spec:
|
|
4625
|
+
* https://www.json.org/json-en.html
|
|
4626
|
+
*
|
|
4627
|
+
* Please note that invalid JSON is not considered/covered, because it
|
|
4628
|
+
* is assumed that the resulting JSON will be processed by a standard
|
|
4629
|
+
* JSON parser that will detect any invalid JSON.
|
|
4630
|
+
*/
|
|
4631
|
+
function fixJson(input) {
|
|
4632
|
+
const stack = ["ROOT"];
|
|
4633
|
+
let lastValidIndex = -1;
|
|
4634
|
+
let literalStart = null;
|
|
4635
|
+
function processValueStart(char, i, swapState) {
|
|
4636
|
+
switch (char) {
|
|
4637
|
+
case "\"":
|
|
4638
|
+
lastValidIndex = i;
|
|
4639
|
+
stack.pop();
|
|
4640
|
+
stack.push(swapState);
|
|
4641
|
+
stack.push("INSIDE_STRING");
|
|
4642
|
+
break;
|
|
4643
|
+
case "f":
|
|
4644
|
+
case "t":
|
|
4645
|
+
case "n":
|
|
4646
|
+
lastValidIndex = i;
|
|
4647
|
+
literalStart = i;
|
|
4648
|
+
stack.pop();
|
|
4649
|
+
stack.push(swapState);
|
|
4650
|
+
stack.push("INSIDE_LITERAL");
|
|
4651
|
+
break;
|
|
4652
|
+
case "-":
|
|
4653
|
+
stack.pop();
|
|
4654
|
+
stack.push(swapState);
|
|
4655
|
+
stack.push("INSIDE_NUMBER");
|
|
4656
|
+
break;
|
|
4657
|
+
case "0":
|
|
4658
|
+
case "1":
|
|
4659
|
+
case "2":
|
|
4660
|
+
case "3":
|
|
4661
|
+
case "4":
|
|
4662
|
+
case "5":
|
|
4663
|
+
case "6":
|
|
4664
|
+
case "7":
|
|
4665
|
+
case "8":
|
|
4666
|
+
case "9":
|
|
4667
|
+
lastValidIndex = i;
|
|
4668
|
+
stack.pop();
|
|
4669
|
+
stack.push(swapState);
|
|
4670
|
+
stack.push("INSIDE_NUMBER");
|
|
4671
|
+
break;
|
|
4672
|
+
case "{":
|
|
4673
|
+
lastValidIndex = i;
|
|
4674
|
+
stack.pop();
|
|
4675
|
+
stack.push(swapState);
|
|
4676
|
+
stack.push("INSIDE_OBJECT_START");
|
|
4677
|
+
break;
|
|
4678
|
+
case "[":
|
|
4679
|
+
lastValidIndex = i;
|
|
4680
|
+
stack.pop();
|
|
4681
|
+
stack.push(swapState);
|
|
4682
|
+
stack.push("INSIDE_ARRAY_START");
|
|
4683
|
+
break;
|
|
4684
|
+
}
|
|
4685
|
+
}
|
|
4686
|
+
function processAfterObjectValue(char, i) {
|
|
4687
|
+
switch (char) {
|
|
4688
|
+
case ",":
|
|
4689
|
+
stack.pop();
|
|
4690
|
+
stack.push("INSIDE_OBJECT_AFTER_COMMA");
|
|
4691
|
+
break;
|
|
4692
|
+
case "}":
|
|
4693
|
+
lastValidIndex = i;
|
|
4694
|
+
stack.pop();
|
|
4695
|
+
break;
|
|
4696
|
+
}
|
|
4697
|
+
}
|
|
4698
|
+
function processAfterArrayValue(char, i) {
|
|
4699
|
+
switch (char) {
|
|
4700
|
+
case ",":
|
|
4701
|
+
stack.pop();
|
|
4702
|
+
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
|
4703
|
+
break;
|
|
4704
|
+
case "]":
|
|
4705
|
+
lastValidIndex = i;
|
|
4706
|
+
stack.pop();
|
|
4707
|
+
break;
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4710
|
+
for (let i = 0; i < input.length; i++) {
|
|
4711
|
+
const char = input[i];
|
|
4712
|
+
if (!char) continue;
|
|
4713
|
+
switch (stack[stack.length - 1]) {
|
|
4714
|
+
case "ROOT":
|
|
4715
|
+
processValueStart(char, i, "FINISH");
|
|
4716
|
+
break;
|
|
4717
|
+
case "INSIDE_OBJECT_START":
|
|
4718
|
+
switch (char) {
|
|
4719
|
+
case "\"":
|
|
4720
|
+
stack.pop();
|
|
4721
|
+
stack.push("INSIDE_OBJECT_KEY");
|
|
4722
|
+
break;
|
|
4723
|
+
case "}":
|
|
4724
|
+
lastValidIndex = i;
|
|
4725
|
+
stack.pop();
|
|
4726
|
+
break;
|
|
4727
|
+
}
|
|
4728
|
+
break;
|
|
4729
|
+
case "INSIDE_OBJECT_AFTER_COMMA":
|
|
4730
|
+
switch (char) {
|
|
4731
|
+
case "\"":
|
|
4732
|
+
stack.pop();
|
|
4733
|
+
stack.push("INSIDE_OBJECT_KEY");
|
|
4734
|
+
break;
|
|
4735
|
+
}
|
|
4736
|
+
break;
|
|
4737
|
+
case "INSIDE_OBJECT_KEY":
|
|
4738
|
+
switch (char) {
|
|
4739
|
+
case "\"":
|
|
4740
|
+
stack.pop();
|
|
4741
|
+
stack.push("INSIDE_OBJECT_AFTER_KEY");
|
|
4742
|
+
break;
|
|
4743
|
+
}
|
|
4744
|
+
break;
|
|
4745
|
+
case "INSIDE_OBJECT_AFTER_KEY":
|
|
4746
|
+
switch (char) {
|
|
4747
|
+
case ":":
|
|
4748
|
+
stack.pop();
|
|
4749
|
+
stack.push("INSIDE_OBJECT_BEFORE_VALUE");
|
|
4750
|
+
break;
|
|
4751
|
+
}
|
|
4752
|
+
break;
|
|
4753
|
+
case "INSIDE_OBJECT_BEFORE_VALUE":
|
|
4754
|
+
processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
|
|
4755
|
+
break;
|
|
4756
|
+
case "INSIDE_OBJECT_AFTER_VALUE":
|
|
4757
|
+
processAfterObjectValue(char, i);
|
|
4758
|
+
break;
|
|
4759
|
+
case "INSIDE_STRING":
|
|
4760
|
+
switch (char) {
|
|
4761
|
+
case "\"":
|
|
4762
|
+
stack.pop();
|
|
4763
|
+
lastValidIndex = i;
|
|
4764
|
+
break;
|
|
4765
|
+
case "\\":
|
|
4766
|
+
stack.push("INSIDE_STRING_ESCAPE");
|
|
4767
|
+
break;
|
|
4768
|
+
default: lastValidIndex = i;
|
|
4769
|
+
}
|
|
4770
|
+
break;
|
|
4771
|
+
case "INSIDE_ARRAY_START":
|
|
4772
|
+
switch (char) {
|
|
4773
|
+
case "]":
|
|
4774
|
+
lastValidIndex = i;
|
|
4775
|
+
stack.pop();
|
|
4776
|
+
break;
|
|
4777
|
+
default:
|
|
4778
|
+
lastValidIndex = i;
|
|
4779
|
+
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
|
4780
|
+
break;
|
|
4781
|
+
}
|
|
4782
|
+
break;
|
|
4783
|
+
case "INSIDE_ARRAY_AFTER_VALUE":
|
|
4784
|
+
switch (char) {
|
|
4785
|
+
case ",":
|
|
4786
|
+
stack.pop();
|
|
4787
|
+
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
|
4788
|
+
break;
|
|
4789
|
+
case "]":
|
|
4790
|
+
lastValidIndex = i;
|
|
4791
|
+
stack.pop();
|
|
4792
|
+
break;
|
|
4793
|
+
default:
|
|
4794
|
+
lastValidIndex = i;
|
|
4795
|
+
break;
|
|
4796
|
+
}
|
|
4797
|
+
break;
|
|
4798
|
+
case "INSIDE_ARRAY_AFTER_COMMA":
|
|
4799
|
+
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
|
4800
|
+
break;
|
|
4801
|
+
case "INSIDE_STRING_ESCAPE":
|
|
4802
|
+
stack.pop();
|
|
4803
|
+
lastValidIndex = i;
|
|
4804
|
+
break;
|
|
4805
|
+
case "INSIDE_NUMBER":
|
|
4806
|
+
switch (char) {
|
|
4807
|
+
case "0":
|
|
4808
|
+
case "1":
|
|
4809
|
+
case "2":
|
|
4810
|
+
case "3":
|
|
4811
|
+
case "4":
|
|
4812
|
+
case "5":
|
|
4813
|
+
case "6":
|
|
4814
|
+
case "7":
|
|
4815
|
+
case "8":
|
|
4816
|
+
case "9":
|
|
4817
|
+
lastValidIndex = i;
|
|
4818
|
+
break;
|
|
4819
|
+
case "e":
|
|
4820
|
+
case "E":
|
|
4821
|
+
case "-":
|
|
4822
|
+
case ".": break;
|
|
4823
|
+
case ",":
|
|
4824
|
+
stack.pop();
|
|
4825
|
+
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
|
|
4826
|
+
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
|
|
4827
|
+
break;
|
|
4828
|
+
case "}":
|
|
4829
|
+
stack.pop();
|
|
4830
|
+
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
|
|
4831
|
+
break;
|
|
4832
|
+
case "]":
|
|
4833
|
+
stack.pop();
|
|
4834
|
+
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
|
|
4835
|
+
break;
|
|
4836
|
+
default:
|
|
4837
|
+
stack.pop();
|
|
4838
|
+
break;
|
|
4839
|
+
}
|
|
4840
|
+
break;
|
|
4841
|
+
case "INSIDE_LITERAL": {
|
|
4842
|
+
if (!literalStart) continue;
|
|
4843
|
+
const partialLiteral = input.substring(literalStart, i + 1);
|
|
4844
|
+
if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
|
|
4845
|
+
stack.pop();
|
|
4846
|
+
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") processAfterObjectValue(char, i);
|
|
4847
|
+
else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") processAfterArrayValue(char, i);
|
|
4848
|
+
} else lastValidIndex = i;
|
|
4849
|
+
break;
|
|
4850
|
+
}
|
|
4851
|
+
}
|
|
4852
|
+
}
|
|
4853
|
+
let result = input.slice(0, lastValidIndex + 1);
|
|
4854
|
+
for (let i = stack.length - 1; i >= 0; i--) switch (stack[i]) {
|
|
4855
|
+
case "INSIDE_STRING":
|
|
4856
|
+
result += "\"";
|
|
4857
|
+
break;
|
|
4858
|
+
case "INSIDE_OBJECT_KEY":
|
|
4859
|
+
case "INSIDE_OBJECT_AFTER_KEY":
|
|
4860
|
+
case "INSIDE_OBJECT_AFTER_COMMA":
|
|
4861
|
+
case "INSIDE_OBJECT_START":
|
|
4862
|
+
case "INSIDE_OBJECT_BEFORE_VALUE":
|
|
4863
|
+
case "INSIDE_OBJECT_AFTER_VALUE":
|
|
4864
|
+
result += "}";
|
|
4865
|
+
break;
|
|
4866
|
+
case "INSIDE_ARRAY_START":
|
|
4867
|
+
case "INSIDE_ARRAY_AFTER_COMMA":
|
|
4868
|
+
case "INSIDE_ARRAY_AFTER_VALUE":
|
|
4869
|
+
result += "]";
|
|
4870
|
+
break;
|
|
4871
|
+
case "INSIDE_LITERAL": {
|
|
4872
|
+
if (!literalStart) continue;
|
|
4873
|
+
const partialLiteral = input.substring(literalStart, input.length);
|
|
4874
|
+
if ("true".startsWith(partialLiteral)) result += "true".slice(partialLiteral.length);
|
|
4875
|
+
else if ("false".startsWith(partialLiteral)) result += "false".slice(partialLiteral.length);
|
|
4876
|
+
else if ("null".startsWith(partialLiteral)) result += "null".slice(partialLiteral.length);
|
|
4877
|
+
}
|
|
4878
|
+
}
|
|
4879
|
+
return result;
|
|
4880
|
+
}
|
|
4881
|
+
|
|
4618
4882
|
//#endregion
|
|
4619
4883
|
//#region src/chat/tui/chat/reducer.ts
|
|
4620
4884
|
function str(chunk, key) {
|
|
@@ -4622,6 +4886,24 @@ function str(chunk, key) {
|
|
|
4622
4886
|
return typeof value === "string" ? value : null;
|
|
4623
4887
|
}
|
|
4624
4888
|
/**
|
|
4889
|
+
* Best-effort parse of a tool call's partial arguments while they stream.
|
|
4890
|
+
* `fixJson` (the vercel/ai scanner) closes off the truncated JSON so a
|
|
4891
|
+
* half-arrived `{"command":"npm ins` parses to `{ command: 'npm ins' }`,
|
|
4892
|
+
* letting the renderers show the structured input filling in live rather
|
|
4893
|
+
* than a raw JSON fragment. Returns null until enough has arrived to parse
|
|
4894
|
+
* (or when the text isn't an object/array), so callers keep their raw
|
|
4895
|
+
* `inputText` fallback for the first few characters.
|
|
4896
|
+
*/
|
|
4897
|
+
function parsePartialInput(text) {
|
|
4898
|
+
const trimmed = text.trimStart();
|
|
4899
|
+
if (trimmed[0] !== "{" && trimmed[0] !== "[") return null;
|
|
4900
|
+
try {
|
|
4901
|
+
return JSON.parse(fixJson(text));
|
|
4902
|
+
} catch (_error) {
|
|
4903
|
+
return null;
|
|
4904
|
+
}
|
|
4905
|
+
}
|
|
4906
|
+
/**
|
|
4625
4907
|
* `agentName` is the display name of the agent producing this run's stream.
|
|
4626
4908
|
* It's stamped onto each assistant-origin item so a multi-agent conversation
|
|
4627
4909
|
* can attribute live turns; pass null in a solo thread to leave items
|
|
@@ -4689,10 +4971,17 @@ function applyChunk(items, chunk, agentName = null) {
|
|
|
4689
4971
|
const toolCallId = str(chunk, "toolCallId");
|
|
4690
4972
|
const delta = str(chunk, "inputTextDelta") ?? str(chunk, "delta") ?? "";
|
|
4691
4973
|
if (!toolCallId) return [...items];
|
|
4692
|
-
return items.map((m) =>
|
|
4693
|
-
|
|
4694
|
-
inputText
|
|
4695
|
-
|
|
4974
|
+
return items.map((m) => {
|
|
4975
|
+
if (m.kind !== "tool" || m.id !== toolCallId) return m;
|
|
4976
|
+
const inputText = m.inputText + delta;
|
|
4977
|
+
const parsed = parsePartialInput(inputText);
|
|
4978
|
+
const input = parsed == null ? null : clampPayload(parsed);
|
|
4979
|
+
return {
|
|
4980
|
+
...m,
|
|
4981
|
+
inputText,
|
|
4982
|
+
input
|
|
4983
|
+
};
|
|
4984
|
+
});
|
|
4696
4985
|
}
|
|
4697
4986
|
case "tool-input-available": {
|
|
4698
4987
|
const toolCallId = str(chunk, "toolCallId");
|
|
@@ -5308,13 +5597,14 @@ const MAX_PR_CHIPS = 3;
|
|
|
5308
5597
|
*
|
|
5309
5598
|
* Caps at {@link MAX_PR_CHIPS} shown; any beyond that collapse into a trailing
|
|
5310
5599
|
* `+N` so the footer row can't be flooded by a run that links many PRs. Shows
|
|
5311
|
-
* the most recent (last-seen) PRs, since those are what's in play
|
|
5600
|
+
* the most recent (last-seen) PRs, since those are what's in play, and renders
|
|
5601
|
+
* them newest-first (reverse chronological) so the freshest PR leads the chip.
|
|
5312
5602
|
*/
|
|
5313
5603
|
function prLinksStyledText(prs) {
|
|
5314
5604
|
const dot = fg(theme.dim ?? "#565f89");
|
|
5315
5605
|
const label = fg(theme.muted ?? "#7a7a7a");
|
|
5316
5606
|
const accent = fg(theme.accent ?? "#7aa2f7");
|
|
5317
|
-
const shown = prs.slice(-MAX_PR_CHIPS);
|
|
5607
|
+
const shown = prs.slice(-MAX_PR_CHIPS).reverse();
|
|
5318
5608
|
const overflow = prs.length - shown.length;
|
|
5319
5609
|
const chunks = [dot("· "), label("PR ")];
|
|
5320
5610
|
shown.forEach((pr, i) => {
|