@qredence/fleet 0.9.0 → 0.10.0
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/CHANGELOG.md +59 -0
- package/dist/web/client/assets/{agents-CGjUBYX7.js → agents-BMQXA18L.js} +2 -2
- package/dist/web/client/assets/{agents-page-CTuFJL9H.js → agents-page-D2soW46O.js} +1 -1
- package/dist/web/client/assets/{chat-queries-CfZiupub.js → chat-queries-ty76G6rK.js} +1 -1
- package/dist/web/client/assets/{connectors-CFxLqG2x.js → connectors-E4KW6hBL.js} +2 -2
- package/dist/web/client/assets/{connectors-page-DQJdoAnl.js → connectors-page-CDzzjCIJ.js} +1 -1
- package/dist/web/client/assets/globals-DDDleTbS.css +2 -0
- package/dist/web/client/assets/{index-C9FHZDGw.js → index-Cf8tRpHL.js} +2 -2
- package/dist/web/client/assets/{mcp-connections-section-DEo6Kemv.js → mcp-connections-section-BsNhp1b2.js} +2 -2
- package/dist/web/client/assets/routes--tnF7d6H.js +14 -0
- package/dist/web/client/assets/settings-dialog-BomLOETY.js +3 -0
- package/dist/web/client/bundle-budget.json +5 -5
- package/dist/web/server/{_tanstack-start-manifest_v-B6ne-00G-OFX7UD4K.js → _tanstack-start-manifest_v-Io433TLr-YWPNQWQI.js} +7 -7
- package/dist/web/server/{agents-BwzqhPjK-ANFHE5AG.js → agents-DOgCHixY-KUZP2VDO.js} +2 -2
- package/dist/web/server/{agents-page-DEqPV-eG-BR5MR74O.js → agents-page-BdiR9H8w-M6X6SXMF.js} +3 -3
- package/dist/web/server/{artifacts-panel-DLO8OfXb-B2ZWCDFP.js → artifacts-panel-cYqS54cM-K6SF3K6W.js} +5 -5
- package/dist/web/server/{chat-command-palette-CaDQAMAu-KDH7BTDS.js → chat-command-palette-BDnwcymZ-DSTFIAOD.js} +5 -5
- package/dist/web/server/{chunk-HUHUPGHT.js → chunk-2OC2FKHR.js} +5 -5
- package/dist/web/server/{chunk-V2GCVTDP.js → chunk-37EK2TYH.js} +33 -48
- package/dist/web/server/{chunk-TOJA3X5N.js → chunk-BLGKLQJG.js} +16 -5
- package/dist/web/server/{chunk-TQ2RECTH.js → chunk-C5XHGLET.js} +1 -1
- package/dist/web/server/{chunk-B5FKCW75.js → chunk-FI3UF2GW.js} +4 -4
- package/dist/web/server/{chunk-UDUG3MYZ.js → chunk-NSFKPEFI.js} +2 -2
- package/dist/web/server/{chunk-KDCSEISZ.js → chunk-NZCEQWK2.js} +2 -1
- package/dist/web/server/{chunk-VM3U6PUU.js → chunk-QOZCYKMA.js} +2 -2
- package/dist/web/server/{chunk-6AFVCERK.js → chunk-RHJEOG37.js} +4 -4
- package/dist/web/server/{chunk-TTNONWZZ.js → chunk-W2GI7NRX.js} +893 -672
- package/dist/web/server/{chunk-5IE54MRG.js → chunk-W7GGECTL.js} +3 -3
- package/dist/web/server/{connectors-C0xm91Ss-DJVBGD73.js → connectors-Dv_uPdv0-2X5VWQXK.js} +2 -2
- package/dist/web/server/{connectors-page-B6tJNZ6c-R5K4NSAT.js → connectors-page-DW75T-uH-EKRHUZ6K.js} +4 -4
- package/dist/web/server/{create-project-dialog-PFPHHWIV-GH7JR5IK.js → create-project-dialog-BS5Sva46-BO4RLW2Q.js} +5 -5
- package/dist/web/server/{openui-renderer-B9D8-Av--LFZP4U5V.js → openui-renderer-Q31y65CQ-QNVSP4NN.js} +4 -4
- package/dist/web/server/{resources-panel-CTzOOKPz-5G6RS2D6.js → resources-panel-CH8sG0Od-4BZN6SLY.js} +6 -6
- package/dist/web/server/{router-CnBux_Ld-YTVBMJFL.js → router-8EzTM9Eq-COVGJKKX.js} +2 -2
- package/dist/web/server/{routes-BUGzvQoO-WW43X7W2.js → routes-88H0fiN3-WIAZJ3RT.js} +4 -4
- package/dist/web/server/server.js +2 -2
- package/dist/web/server/{session-activity-panel-f0d3fCm7-I6L5IKFQ.js → session-activity-panel-CgSOde03-B5RCAGB4.js} +6 -6
- package/dist/web/server/{session-reasoning-panel-QIt_xjP0-FKJWMNHO.js → session-reasoning-panel-Dmny6YTk-D3HQV2YB.js} +5 -5
- package/dist/web/server/{session-tool-renderer-Cg_ZPHxS-BNQKNJNZ.js → session-tool-renderer-BrnTO2w3-V6EE6AB2.js} +5 -5
- package/dist/web/server/{session-tree-panel-B--el8O5-NZOZJM5L.js → session-tree-panel-BEqR_cAJ-TZS7VRCB.js} +5 -5
- package/dist/web/server/{settings-dialog-D_eJN2ia-W47Y474K.js → settings-dialog-DkesVBrS-BAAA3YNU.js} +145 -66
- package/dist/web/server/{subagent-chat-panel-C9nWP21E-D5C2TTYD.js → subagent-chat-panel-Bfmt1bCE-DKDVH3NJ.js} +8 -8
- package/dist/web/server/{subagents-panel-fAKvBNRG-O7QHXNE2.js → subagents-panel-ChJDDvad-GNCHDTPB.js} +8 -8
- package/dist/web/server/{workspace-panel-CZMNMU63-SYOSM3B7.js → workspace-panel-Cij_JylD-WPYSV5FA.js} +6 -6
- package/package.json +1 -1
- package/dist/web/client/assets/globals-DJhWyayo.css +0 -2
- package/dist/web/client/assets/routes-ja_liP8Z.js +0 -14
- package/dist/web/client/assets/settings-dialog-DiikSLhF.js +0 -1
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
RowSurface,
|
|
5
5
|
SettingsCommitActions,
|
|
6
6
|
SettingsPane
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BLGKLQJG.js";
|
|
8
8
|
import {
|
|
9
9
|
Spinner
|
|
10
10
|
} from "./chunk-AXN2OBPF.js";
|
|
@@ -50,11 +50,11 @@ import {
|
|
|
50
50
|
formatProviderLabel,
|
|
51
51
|
useChatPanelDataContext,
|
|
52
52
|
useSettingsActionsContext
|
|
53
|
-
} from "./chunk-
|
|
54
|
-
import "./chunk-
|
|
53
|
+
} from "./chunk-37EK2TYH.js";
|
|
54
|
+
import "./chunk-QOZCYKMA.js";
|
|
55
55
|
import "./chunk-5MOXRFX6.js";
|
|
56
56
|
import "./chunk-RX2ZJARF.js";
|
|
57
|
-
import "./chunk-
|
|
57
|
+
import "./chunk-C5XHGLET.js";
|
|
58
58
|
import "./chunk-CE7U5QB2.js";
|
|
59
59
|
import {
|
|
60
60
|
applyUiPreferencesToDocument,
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
readUiPreferences,
|
|
65
65
|
writeUiPreferences
|
|
66
66
|
} from "./chunk-6GYLXDX3.js";
|
|
67
|
-
import "./chunk-
|
|
67
|
+
import "./chunk-NZCEQWK2.js";
|
|
68
68
|
import "./chunk-7DQQMT5V.js";
|
|
69
69
|
import "./chunk-BD7YKYWL.js";
|
|
70
70
|
import {
|
|
@@ -133,7 +133,7 @@ import {
|
|
|
133
133
|
__export
|
|
134
134
|
} from "./chunk-CZ7CSFO4.js";
|
|
135
135
|
|
|
136
|
-
// web/app/dist/server/assets/settings-dialog-
|
|
136
|
+
// web/app/dist/server/assets/settings-dialog-DkesVBrS.js
|
|
137
137
|
import { createContext as createContext4, forwardRef as forwardRef7, useCallback, useContext as useContext4, useEffect as useEffect2, useId, useMemo as useMemo3, useRef as useRef4, useState as useState2 } from "react";
|
|
138
138
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
139
139
|
|
|
@@ -1100,7 +1100,7 @@ var ScrollAreaCorner = /* @__PURE__ */ React9.forwardRef(function ScrollAreaCorn
|
|
|
1100
1100
|
});
|
|
1101
1101
|
if (process.env.NODE_ENV !== "production") ScrollAreaCorner.displayName = "ScrollAreaCorner";
|
|
1102
1102
|
|
|
1103
|
-
// web/app/dist/server/assets/settings-dialog-
|
|
1103
|
+
// web/app/dist/server/assets/settings-dialog-DkesVBrS.js
|
|
1104
1104
|
function isFieldInvalid(value, attemptedSave, required = true) {
|
|
1105
1105
|
return attemptedSave && required && value.trim().length === 0;
|
|
1106
1106
|
}
|
|
@@ -1360,6 +1360,46 @@ function AddModelsDialog({ configuredProviderIds, discoverableProviderIds, disco
|
|
|
1360
1360
|
const [filter, setFilter] = useState2("");
|
|
1361
1361
|
const [selectedKeys, setSelectedKeys] = useState2(/* @__PURE__ */ new Set());
|
|
1362
1362
|
const normalizedFilter = filter.trim().toLowerCase();
|
|
1363
|
+
const [discovery, setDiscovery] = useState2({});
|
|
1364
|
+
const discoveryRef = useRef4(discovery);
|
|
1365
|
+
const discoverCallback = useRef4(onDiscoverProvider);
|
|
1366
|
+
useEffect2(() => {
|
|
1367
|
+
discoverCallback.current = onDiscoverProvider;
|
|
1368
|
+
}, [onDiscoverProvider]);
|
|
1369
|
+
const refreshProvider = useCallback(async (id, force = false) => {
|
|
1370
|
+
const previous = discoveryRef.current[id];
|
|
1371
|
+
if (previous?.loading || !force && previous?.updatedAt && Date.now() - previous.updatedAt < 6e4) return;
|
|
1372
|
+
const update = (value) => {
|
|
1373
|
+
discoveryRef.current = {
|
|
1374
|
+
...discoveryRef.current,
|
|
1375
|
+
[id]: value ?? {}
|
|
1376
|
+
};
|
|
1377
|
+
setDiscovery(discoveryRef.current);
|
|
1378
|
+
};
|
|
1379
|
+
update({
|
|
1380
|
+
...previous,
|
|
1381
|
+
loading: true,
|
|
1382
|
+
error: false
|
|
1383
|
+
});
|
|
1384
|
+
try {
|
|
1385
|
+
await discoverCallback.current(id);
|
|
1386
|
+
update({ updatedAt: Date.now() });
|
|
1387
|
+
} catch {
|
|
1388
|
+
update({
|
|
1389
|
+
loading: false,
|
|
1390
|
+
error: true
|
|
1391
|
+
});
|
|
1392
|
+
}
|
|
1393
|
+
}, []);
|
|
1394
|
+
const discoveryIds = [...discoverableProviderIds ?? []].filter((id) => configuredProviderIds.has(id)).sort((a, b) => a.localeCompare(b)).join("\n");
|
|
1395
|
+
useEffect2(() => {
|
|
1396
|
+
if (!open) return;
|
|
1397
|
+
for (const id of discoveryIds.split("\n").filter(Boolean)) refreshProvider(id);
|
|
1398
|
+
}, [
|
|
1399
|
+
open,
|
|
1400
|
+
discoveryIds,
|
|
1401
|
+
refreshProvider
|
|
1402
|
+
]);
|
|
1363
1403
|
const candidateModels = useMemo3(() => {
|
|
1364
1404
|
return modelOptions.filter((model) => {
|
|
1365
1405
|
if (!configuredProviderIds.has(model.provider)) return false;
|
|
@@ -1405,49 +1445,61 @@ function AddModelsDialog({ configuredProviderIds, discoverableProviderIds, disco
|
|
|
1405
1445
|
const confirmAdd = () => {
|
|
1406
1446
|
const selected = candidateModels.filter((model) => selectedKeys.has(model.id));
|
|
1407
1447
|
if (selected.length > 0) onAddModels(selected);
|
|
1448
|
+
setSelectedKeys(/* @__PURE__ */ new Set());
|
|
1408
1449
|
onOpenChange(false);
|
|
1409
1450
|
};
|
|
1410
1451
|
return /* @__PURE__ */ jsx(Dialog$1, {
|
|
1411
1452
|
open,
|
|
1412
|
-
onOpenChange
|
|
1453
|
+
onOpenChange: (next) => {
|
|
1454
|
+
if (!next) setSelectedKeys(/* @__PURE__ */ new Set());
|
|
1455
|
+
onOpenChange(next);
|
|
1456
|
+
},
|
|
1413
1457
|
children: /* @__PURE__ */ jsxs(DialogContent, {
|
|
1414
|
-
className: "max-w-lg",
|
|
1458
|
+
className: "flex max-h-[calc(100dvh-2rem)] min-w-0 max-w-[calc(100%-2rem)] sm:max-w-lg flex-col overflow-hidden",
|
|
1415
1459
|
children: [
|
|
1416
|
-
/* @__PURE__ */ jsxs(DialogHeader, {
|
|
1417
|
-
|
|
1418
|
-
" ",
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1460
|
+
/* @__PURE__ */ jsxs(DialogHeader, {
|
|
1461
|
+
className: "shrink-0",
|
|
1462
|
+
children: [/* @__PURE__ */ jsx(DialogTitle, { children: "Add models" }), /* @__PURE__ */ jsxs(DialogDescription, { children: [
|
|
1463
|
+
"Pick models discovered from your configured providers. For OpenAI Chat Completions, refresh runs",
|
|
1464
|
+
" ",
|
|
1465
|
+
/* @__PURE__ */ jsxs("span", {
|
|
1466
|
+
className: "font-medium",
|
|
1467
|
+
children: ["GET ", "{baseUrl}/models"]
|
|
1468
|
+
}),
|
|
1469
|
+
"."
|
|
1470
|
+
] })]
|
|
1471
|
+
}),
|
|
1425
1472
|
/* @__PURE__ */ jsx("div", {
|
|
1426
|
-
className: "
|
|
1427
|
-
children:
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
"
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1473
|
+
className: "max-h-28 shrink-0 overflow-y-auto",
|
|
1474
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
1475
|
+
className: "flex min-w-0 flex-wrap gap-1.5 [&_button]:max-w-full [&_button]:h-auto [&_button]:whitespace-normal [&_button]:break-words",
|
|
1476
|
+
children: discoverableProviders.map((providerId) => {
|
|
1477
|
+
const discovering = discovery[providerId]?.loading ?? discoveringProviderId === providerId;
|
|
1478
|
+
const activeCount = activeCountByProvider.get(providerId) ?? 0;
|
|
1479
|
+
return /* @__PURE__ */ jsxs(Button$1, {
|
|
1480
|
+
type: "button",
|
|
1481
|
+
variant: "outline",
|
|
1482
|
+
size: "compact",
|
|
1483
|
+
disabled: discovering,
|
|
1484
|
+
onClick: () => {
|
|
1485
|
+
refreshProvider(providerId, true);
|
|
1486
|
+
},
|
|
1487
|
+
children: [
|
|
1488
|
+
discovering ? /* @__PURE__ */ jsx(Spinner, { "data-icon": "inline-start" }) : /* @__PURE__ */ jsx(RefreshCw, { "data-icon": "inline-start" }),
|
|
1489
|
+
"Refresh ",
|
|
1490
|
+
providerLabel(providerId),
|
|
1491
|
+
discovery[providerId]?.error ? " \xB7 Refresh failed (stale)" : "",
|
|
1492
|
+
activeCount > 0 ? /* @__PURE__ */ jsxs("span", {
|
|
1493
|
+
className: "tabular-nums text-muted-foreground",
|
|
1494
|
+
children: [
|
|
1495
|
+
"\xB7 ",
|
|
1496
|
+
activeCount,
|
|
1497
|
+
" active"
|
|
1498
|
+
]
|
|
1499
|
+
}) : null
|
|
1500
|
+
]
|
|
1501
|
+
}, providerId);
|
|
1502
|
+
})
|
|
1451
1503
|
})
|
|
1452
1504
|
}),
|
|
1453
1505
|
/* @__PURE__ */ jsxs(InputGroup, { children: [/* @__PURE__ */ jsx(InputGroupAddon, {
|
|
@@ -1460,10 +1512,11 @@ function AddModelsDialog({ configuredProviderIds, discoverableProviderIds, disco
|
|
|
1460
1512
|
placeholder: "Search discovered models\u2026"
|
|
1461
1513
|
})] }),
|
|
1462
1514
|
/* @__PURE__ */ jsx("div", {
|
|
1463
|
-
className: "
|
|
1515
|
+
className: "min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-contain",
|
|
1516
|
+
"aria-live": "polite",
|
|
1464
1517
|
children: groupedCandidates.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
1465
1518
|
className: "py-6 text-center text-xs text-pretty text-muted-foreground",
|
|
1466
|
-
children: candidateModels.length === 0 && !normalizedFilter ? "
|
|
1519
|
+
children: Object.values(discovery).some((state) => state.loading) ? "Loading models\u2026" : candidateModels.length === 0 && !normalizedFilter ? "No additional models available. Providers may have returned an empty list or all models are already enabled." : "No models match your search."
|
|
1467
1520
|
}) : /* @__PURE__ */ jsx("div", {
|
|
1468
1521
|
className: "flex flex-col gap-3",
|
|
1469
1522
|
children: groupedCandidates.map(([provider, models]) => /* @__PURE__ */ jsxs("div", {
|
|
@@ -1514,7 +1567,7 @@ function AddModelsDialog({ configuredProviderIds, discoverableProviderIds, disco
|
|
|
1514
1567
|
})
|
|
1515
1568
|
}),
|
|
1516
1569
|
/* @__PURE__ */ jsxs("div", {
|
|
1517
|
-
className: "flex items-center justify-end gap-1.5",
|
|
1570
|
+
className: "flex shrink-0 items-center justify-end gap-1.5",
|
|
1518
1571
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
1519
1572
|
type: "button",
|
|
1520
1573
|
variant: "ghost",
|
|
@@ -1824,9 +1877,22 @@ function ProviderOAuthTerminalFallback({ provider }) {
|
|
|
1824
1877
|
children: /* @__PURE__ */ jsxs(AlertDescription, {
|
|
1825
1878
|
className: "text-xs text-pretty",
|
|
1826
1879
|
children: [
|
|
1827
|
-
"
|
|
1880
|
+
"Sign-in has to run inside Prime Agent. In a terminal, start Prime Agent against the same account as Fleet, then run ",
|
|
1881
|
+
/* @__PURE__ */ jsx("code", {
|
|
1882
|
+
className: "rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground",
|
|
1883
|
+
children: "/login"
|
|
1884
|
+
}),
|
|
1885
|
+
" ",
|
|
1886
|
+
"and choose ",
|
|
1828
1887
|
provider.name,
|
|
1829
|
-
"
|
|
1888
|
+
". Fleet reads the stored credential on every request, so a restart is not needed. If Fleet uses a non-default account directory, start Prime Agent with the same",
|
|
1889
|
+
" ",
|
|
1890
|
+
/* @__PURE__ */ jsx("code", {
|
|
1891
|
+
className: "rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground",
|
|
1892
|
+
children: "PRIME_AGENT_CODING_AGENT_DIR"
|
|
1893
|
+
}),
|
|
1894
|
+
" ",
|
|
1895
|
+
"it uses."
|
|
1830
1896
|
]
|
|
1831
1897
|
})
|
|
1832
1898
|
});
|
|
@@ -1868,7 +1934,7 @@ function useProviderCredentialsController({ onRemoveProvider, onUpdateProvider,
|
|
|
1868
1934
|
}, [activeProviders, searchQuery]);
|
|
1869
1935
|
const filteredPickerAvailable = useMemo3(() => {
|
|
1870
1936
|
const query = addPickerQuery.trim().toLowerCase();
|
|
1871
|
-
return unconfiguredProviders.filter((provider) => providerMatchesQuery(provider, query));
|
|
1937
|
+
return unconfiguredProviders.filter((provider) => providerMatchesQuery(provider, query)).sort((a, b) => a.id === "custom" ? -1 : b.id === "custom" ? 1 : a.name.localeCompare(b.name));
|
|
1872
1938
|
}, [addPickerQuery, unconfiguredProviders]);
|
|
1873
1939
|
const filteredPickerConfigured = useMemo3(() => {
|
|
1874
1940
|
const query = addPickerQuery.trim().toLowerCase();
|
|
@@ -2075,7 +2141,7 @@ function AddProviderPickerPanel({ addPickerQuery, credentialProvidersLength, fil
|
|
|
2075
2141
|
children: "Add provider"
|
|
2076
2142
|
}), /* @__PURE__ */ jsx("p", {
|
|
2077
2143
|
className: "text-xs text-pretty text-muted-foreground",
|
|
2078
|
-
children: "Choose a provider to
|
|
2144
|
+
children: "Choose a provider to save credentials in Prime Agent\u2019s auth.json."
|
|
2079
2145
|
})]
|
|
2080
2146
|
})]
|
|
2081
2147
|
}),
|
|
@@ -2408,13 +2474,13 @@ function ProviderCredentialsSection({ isLoading, isPending, onRemoveProvider, on
|
|
|
2408
2474
|
return /* @__PURE__ */ jsxs(SettingsPane, {
|
|
2409
2475
|
title: "Providers",
|
|
2410
2476
|
description: /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
2411
|
-
"
|
|
2477
|
+
"Provider credentials are stored in Prime Agent\u2019s",
|
|
2412
2478
|
" ",
|
|
2413
2479
|
/* @__PURE__ */ jsx("code", {
|
|
2414
2480
|
className: "rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground",
|
|
2415
|
-
children: ".
|
|
2481
|
+
children: "auth.json"
|
|
2416
2482
|
}),
|
|
2417
|
-
".
|
|
2483
|
+
". Custom providers and model definitions are stored in models.json. Enabled models and defaults are saved in settings.json, or the existing project settings file."
|
|
2418
2484
|
] }),
|
|
2419
2485
|
children: [addPickerOpen ? /* @__PURE__ */ jsx(AddProviderPickerPanel, {
|
|
2420
2486
|
addPickerQuery,
|
|
@@ -2608,7 +2674,7 @@ function sanitizeStringList(values) {
|
|
|
2608
2674
|
}
|
|
2609
2675
|
function useModelDefaultsForm({ draft, setDraft, updateDraft, settings, providers, models, modelCatalog, onDiscoverModels, saveSettings, setSavingSection }) {
|
|
2610
2676
|
const [modelFilter, setModelFilter] = useState2("");
|
|
2611
|
-
const [discoveredModels, setDiscoveredModels] = useState2(
|
|
2677
|
+
const [discoveredModels, setDiscoveredModels] = useState2({});
|
|
2612
2678
|
const [discoveringProviderId, setDiscoveringProviderId] = useState2(null);
|
|
2613
2679
|
const lastCommittedModelSettings = useRef4(null);
|
|
2614
2680
|
const configuredProviderIds = useMemo3(() => {
|
|
@@ -2619,13 +2685,24 @@ function useModelDefaultsForm({ draft, setDraft, updateDraft, settings, provider
|
|
|
2619
2685
|
const catalogModels = modelCatalog ?? models;
|
|
2620
2686
|
const modelOptions = useMemo3(() => {
|
|
2621
2687
|
const byId = /* @__PURE__ */ new Map();
|
|
2622
|
-
|
|
2623
|
-
for (const model of
|
|
2688
|
+
const catalogById = new Map(catalogModels.map((model) => [model.id, model]));
|
|
2689
|
+
for (const model of catalogModels) {
|
|
2690
|
+
if (Object.hasOwn(discoveredModels, model.provider) && !isModelEnabled(model, draft?.enabledModels)) continue;
|
|
2691
|
+
if (configuredProviderIds.has(model.provider) && model.available !== false) byId.set(model.id, model);
|
|
2692
|
+
}
|
|
2693
|
+
for (const model of Object.values(discoveredModels).flat()) if (configuredProviderIds.has(model.provider) && model.available !== false) {
|
|
2694
|
+
const existing = catalogById.get(model.id);
|
|
2695
|
+
byId.set(model.id, existing ? {
|
|
2696
|
+
...model,
|
|
2697
|
+
...existing
|
|
2698
|
+
} : model);
|
|
2699
|
+
}
|
|
2624
2700
|
return [...byId.values()];
|
|
2625
2701
|
}, [
|
|
2626
2702
|
catalogModels,
|
|
2627
2703
|
configuredProviderIds,
|
|
2628
|
-
discoveredModels
|
|
2704
|
+
discoveredModels,
|
|
2705
|
+
draft?.enabledModels
|
|
2629
2706
|
]);
|
|
2630
2707
|
const modelBaseline = lastCommittedModelSettings.current ?? (settings ? comparableModelSettings(settings.effective) : null);
|
|
2631
2708
|
const modelDirty = !!draft && !!modelBaseline && !sameJson(comparableModelSettings(draft), modelBaseline);
|
|
@@ -2701,11 +2778,10 @@ function useModelDefaultsForm({ draft, setDraft, updateDraft, settings, provider
|
|
|
2701
2778
|
setDiscoveringProviderId(providerId);
|
|
2702
2779
|
try {
|
|
2703
2780
|
const discovered = await onDiscoverModels(providerId);
|
|
2704
|
-
setDiscoveredModels((current) => {
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
});
|
|
2781
|
+
setDiscoveredModels((current) => ({
|
|
2782
|
+
...current,
|
|
2783
|
+
[providerId]: discovered
|
|
2784
|
+
}));
|
|
2709
2785
|
} finally {
|
|
2710
2786
|
setDiscoveringProviderId(null);
|
|
2711
2787
|
}
|
|
@@ -3412,7 +3488,7 @@ var ScrollArea$1 = forwardRef7(({ className, children, viewportClassName, orient
|
|
|
3412
3488
|
"data-slot": "scroll-area-viewport",
|
|
3413
3489
|
className: cn("size-full rounded-[inherit]", viewportClassName),
|
|
3414
3490
|
children: /* @__PURE__ */ jsx(index_parts_exports.Content, {
|
|
3415
|
-
className: cn(orientation2 === "vertical" && "w-full min-w-full"),
|
|
3491
|
+
className: cn(orientation2 === "vertical" && "block! w-full min-w-0! max-w-full"),
|
|
3416
3492
|
children
|
|
3417
3493
|
})
|
|
3418
3494
|
}),
|
|
@@ -3444,6 +3520,7 @@ function useSettingsForm() {
|
|
|
3444
3520
|
const { models, resources } = useChatPanelDataContext();
|
|
3445
3521
|
const [draft, setDraft] = useState2(null);
|
|
3446
3522
|
const [savingSection, setSavingSection] = useState2(null);
|
|
3523
|
+
const syncedSettings = useRef4(void 0);
|
|
3447
3524
|
const resourceSummary = summarizeResources(resources);
|
|
3448
3525
|
const updateDraft = (updater) => {
|
|
3449
3526
|
setDraft((current) => current ? updater(current) : current);
|
|
@@ -3471,9 +3548,10 @@ function useSettingsForm() {
|
|
|
3471
3548
|
setDraft(settings.effective);
|
|
3472
3549
|
};
|
|
3473
3550
|
useEffect2(() => {
|
|
3474
|
-
if (!settings) return;
|
|
3551
|
+
if (!settings || syncedSettings.current === settings) return;
|
|
3475
3552
|
const nextDraft = settings.effective;
|
|
3476
3553
|
if (draft && hasUnsavedChanges) return;
|
|
3554
|
+
syncedSettings.current = settings;
|
|
3477
3555
|
if (draft && sameJson(draft, nextDraft)) return;
|
|
3478
3556
|
setDraft(nextDraft);
|
|
3479
3557
|
}, [
|
|
@@ -3931,13 +4009,14 @@ function SettingsDialogBody({ initialTab, onCloseAttemptRef, onOpenChange }) {
|
|
|
3931
4009
|
})
|
|
3932
4010
|
}),
|
|
3933
4011
|
/* @__PURE__ */ jsx(ScrollArea$1, {
|
|
3934
|
-
className: "min-h-0 w-full flex-1",
|
|
4012
|
+
className: "min-h-0 min-w-0 w-full flex-1",
|
|
4013
|
+
viewportClassName: "overflow-x-hidden",
|
|
3935
4014
|
children: /* @__PURE__ */ jsx("div", {
|
|
3936
4015
|
id: `panel-${activeTab}`,
|
|
3937
4016
|
role: "tabpanel",
|
|
3938
4017
|
"aria-label": activeSection.title,
|
|
3939
4018
|
tabIndex: 0,
|
|
3940
|
-
className: "w-full p-
|
|
4019
|
+
className: "min-w-0 w-full max-w-full p-4 outline-none [overflow-wrap:anywhere] sm:p-6",
|
|
3941
4020
|
children: paneContent
|
|
3942
4021
|
})
|
|
3943
4022
|
})
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SubagentTranscriptView
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-RHJEOG37.js";
|
|
4
|
+
import "./chunk-W7GGECTL.js";
|
|
5
|
+
import "./chunk-FI3UF2GW.js";
|
|
6
6
|
import "./chunk-R4BS3KYI.js";
|
|
7
7
|
import "./chunk-KBMRRJQN.js";
|
|
8
8
|
import {
|
|
9
9
|
PromptInput
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-37EK2TYH.js";
|
|
11
|
+
import "./chunk-QOZCYKMA.js";
|
|
12
12
|
import "./chunk-5MOXRFX6.js";
|
|
13
13
|
import "./chunk-RX2ZJARF.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-C5XHGLET.js";
|
|
15
15
|
import "./chunk-CE7U5QB2.js";
|
|
16
16
|
import "./chunk-6GYLXDX3.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-NZCEQWK2.js";
|
|
18
18
|
import "./chunk-7DQQMT5V.js";
|
|
19
19
|
import "./chunk-BD7YKYWL.js";
|
|
20
20
|
import "./chunk-TXZDDJCT.js";
|
|
@@ -32,7 +32,7 @@ import "./chunk-DP65WGRD.js";
|
|
|
32
32
|
import "./chunk-IGN54DHU.js";
|
|
33
33
|
import "./chunk-CZ7CSFO4.js";
|
|
34
34
|
|
|
35
|
-
// web/app/dist/server/assets/subagent-chat-panel-
|
|
35
|
+
// web/app/dist/server/assets/subagent-chat-panel-Bfmt1bCE.js
|
|
36
36
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
37
37
|
function SubagentComposer({ disabled, sending, onSend, onStop, placeholder = "Message this subagent\u2026 (Enter to steer)" }) {
|
|
38
38
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SubagentTranscriptView
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-RHJEOG37.js";
|
|
4
|
+
import "./chunk-W7GGECTL.js";
|
|
5
|
+
import "./chunk-FI3UF2GW.js";
|
|
6
6
|
import "./chunk-R4BS3KYI.js";
|
|
7
7
|
import "./chunk-KBMRRJQN.js";
|
|
8
8
|
import {
|
|
9
9
|
orderedRlmChildren,
|
|
10
10
|
rlmStatusIcon
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-37EK2TYH.js";
|
|
12
|
+
import "./chunk-QOZCYKMA.js";
|
|
13
13
|
import "./chunk-5MOXRFX6.js";
|
|
14
14
|
import "./chunk-RX2ZJARF.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-C5XHGLET.js";
|
|
16
16
|
import "./chunk-CE7U5QB2.js";
|
|
17
17
|
import "./chunk-6GYLXDX3.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-NZCEQWK2.js";
|
|
19
19
|
import "./chunk-7DQQMT5V.js";
|
|
20
20
|
import "./chunk-BD7YKYWL.js";
|
|
21
21
|
import "./chunk-TXZDDJCT.js";
|
|
@@ -39,7 +39,7 @@ import "./chunk-DP65WGRD.js";
|
|
|
39
39
|
import "./chunk-IGN54DHU.js";
|
|
40
40
|
import "./chunk-CZ7CSFO4.js";
|
|
41
41
|
|
|
42
|
-
// web/app/dist/server/assets/subagents-panel-
|
|
42
|
+
// web/app/dist/server/assets/subagents-panel-ChJDDvad.js
|
|
43
43
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
44
44
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
45
45
|
function SubagentsPanelContent({ agents, loadSession, onOpenTab, parentSessionId, tree }) {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ResourceNotice,
|
|
4
4
|
WorkspacePreviewSkeleton,
|
|
5
5
|
WorkspaceSkeleton
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NSFKPEFI.js";
|
|
7
7
|
import {
|
|
8
8
|
LazyMarkdown,
|
|
9
9
|
WORKSPACE_SPLIT_GAP_RESET,
|
|
@@ -14,18 +14,18 @@ import {
|
|
|
14
14
|
readStoredWidth,
|
|
15
15
|
startHorizontalResize,
|
|
16
16
|
storeStoredWidth
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-37EK2TYH.js";
|
|
18
|
+
import "./chunk-QOZCYKMA.js";
|
|
19
19
|
import "./chunk-5MOXRFX6.js";
|
|
20
20
|
import {
|
|
21
21
|
EASE_OUT,
|
|
22
22
|
SPRING_LAYOUT,
|
|
23
23
|
SPRING_SWAP
|
|
24
24
|
} from "./chunk-RX2ZJARF.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-C5XHGLET.js";
|
|
26
26
|
import "./chunk-CE7U5QB2.js";
|
|
27
27
|
import "./chunk-6GYLXDX3.js";
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-NZCEQWK2.js";
|
|
29
29
|
import {
|
|
30
30
|
AnimatePresence,
|
|
31
31
|
m,
|
|
@@ -51,7 +51,7 @@ import "./chunk-35RIM6VP.js";
|
|
|
51
51
|
import "./chunk-NXAVRSI5.js";
|
|
52
52
|
import "./chunk-CZ7CSFO4.js";
|
|
53
53
|
|
|
54
|
-
// web/app/dist/server/assets/workspace-panel-
|
|
54
|
+
// web/app/dist/server/assets/workspace-panel-Cij_JylD.js
|
|
55
55
|
import { Children, Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useId, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
56
56
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
57
57
|
var variants = {
|