turbollm 1.13.2 → 1.13.4
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/README.md +3 -2
- package/dist/{chunk-HQ76BEUS.js → chunk-FJDRILNH.js} +33 -25
- package/dist/{chunk-HOKZAC3U.js → chunk-Y3TMLJQD.js} +43 -5
- package/dist/cli.js +1631 -1413
- package/dist/code-routes.js +1 -1
- package/dist/code-run-manager.js +1 -1
- package/dist/{factory-7ITNXXOI.js → factory-NOUUQICH.js} +1 -1
- package/dist/webdist/assets/{AgentEditPage-DS2SLHM_.js → AgentEditPage-B_Oyad8i.js} +1 -1
- package/dist/webdist/assets/{ChatScreen-COYA_6ek.js → ChatScreen-rdVNApWK.js} +1 -1
- package/dist/webdist/assets/CodeComposer-CbHakcaM.js +1 -0
- package/dist/webdist/assets/{CodeHomeScreen-Csc_MF8U.js → CodeHomeScreen-Cq8dvLJw.js} +1 -1
- package/dist/webdist/assets/{CodeSessionScreen-6E3XY4su.js → CodeSessionScreen-BMWUwoOk.js} +1 -1
- package/dist/webdist/assets/{CustomizeScreen-CFr1srQu.js → CustomizeScreen-tG_5_KBB.js} +1 -1
- package/dist/webdist/assets/{EnginesScreen-D2keJZ8l.js → EnginesScreen-CR_UoUaB.js} +1 -1
- package/dist/webdist/assets/HardwareSection-CpQNd_Xs.js +1 -0
- package/dist/webdist/assets/ModelDetailDialog-CEnsN-3_.js +1 -0
- package/dist/webdist/assets/{ModelLoadMenu-Bk0HSsac.js → ModelLoadMenu-CZahEXnE.js} +1 -1
- package/dist/webdist/assets/{ModelsScreen-BSnFI83c.js → ModelsScreen-Bt3A9dPj.js} +2 -2
- package/dist/webdist/assets/OnboardingScreen-C-8oeohL.js +1 -0
- package/dist/webdist/assets/{RoutineEditPage-C0GmeKlu.js → RoutineEditPage-BFdPO8HK.js} +1 -1
- package/dist/webdist/assets/{RoutinesPanel-CZ7kGceG.js → RoutinesPanel-CczgDeDo.js} +1 -1
- package/dist/webdist/assets/{SettingsScreen-BnC6qSFo.js → SettingsScreen-Cfir9Qv2.js} +1 -1
- package/dist/webdist/assets/{SidebarResizeHandle-D-1cxpNM.js → SidebarResizeHandle-C3yIrqyN.js} +2 -2
- package/dist/webdist/assets/{SkillEditPage-BFnoGYE4.js → SkillEditPage-BjQ1GW3m.js} +1 -1
- package/dist/webdist/assets/{ToolApprovalBar-gBl1Pne_.js → ToolApprovalBar-Ct_AQhnn.js} +3 -3
- package/dist/webdist/assets/WorkspaceScreen-CX0-T_Ow.js +1 -0
- package/dist/webdist/assets/{abnfDiagram-N423BO3Z-B-yxOJAr.js → abnfDiagram-N423BO3Z-8mheSXfK.js} +1 -1
- package/dist/webdist/assets/{agent-api-1EptCITO.js → agent-api-BM-J1Wrf.js} +1 -1
- package/dist/webdist/assets/{alert-dialog-DId8mvnn.js → alert-dialog-MwW9OeMc.js} +1 -1
- package/dist/webdist/assets/{arc-CmG0J3F-.js → arc-D8wGLUJm.js} +1 -1
- package/dist/webdist/assets/{architectureDiagram-T3A2C74G-CLcR4aXc.js → architectureDiagram-T3A2C74G-DnXEnFCT.js} +1 -1
- package/dist/webdist/assets/{blockDiagram-VBNYF7ZC-ImyoZH5n.js → blockDiagram-VBNYF7ZC-CjrNObWJ.js} +1 -1
- package/dist/webdist/assets/{c4Diagram-5PPSVZJV-Dn1etOjf.js → c4Diagram-5PPSVZJV-rOplY4oF.js} +1 -1
- package/dist/webdist/assets/channel-DQ5IQYoe.js +1 -0
- package/dist/webdist/assets/{chat-api-CCZfNFmH.js → chat-api-M-jb3zIo.js} +1 -1
- package/dist/webdist/assets/{chat-queries-6aDORXMQ.js → chat-queries-gefwNcXI.js} +1 -1
- package/dist/webdist/assets/{chevron-down-CquxAQxl.js → chevron-down-CMga8iLs.js} +1 -1
- package/dist/webdist/assets/{chevron-left-irxTskG3.js → chevron-left-DoI4O7KB.js} +1 -1
- package/dist/webdist/assets/{chevron-right-BxDhzUZl.js → chevron-right-3lWKkk-t.js} +1 -1
- package/dist/webdist/assets/{chunk-2GRJ4B5K-et7nGso8.js → chunk-2GRJ4B5K-C4WOz2xX.js} +1 -1
- package/dist/webdist/assets/{chunk-2Q5K7J3B-C7vz-PvX.js → chunk-2Q5K7J3B-mSa_Img1.js} +1 -1
- package/dist/webdist/assets/{chunk-5RXB4S5H-DWdBsuyj.js → chunk-5RXB4S5H-C7jRw5h5.js} +1 -1
- package/dist/webdist/assets/{chunk-5VM5RSS4-DqfZvvbb.js → chunk-5VM5RSS4-DKWm-OU6.js} +1 -1
- package/dist/webdist/assets/{chunk-6Q2QTUOP-qF-CNBFu.js → chunk-6Q2QTUOP-CMa2t8k1.js} +1 -1
- package/dist/webdist/assets/{chunk-GF5L2VYU-CrVRwghC.js → chunk-GF5L2VYU-BC13P15T.js} +1 -1
- package/dist/webdist/assets/{chunk-JWPE2WC7-BRr2laYf.js → chunk-JWPE2WC7-KFnKvup9.js} +1 -1
- package/dist/webdist/assets/{chunk-KBJHAD2P-JxaAF9FJ.js → chunk-KBJHAD2P-i5P3oFwD.js} +1 -1
- package/dist/webdist/assets/{chunk-RYQCIY6F-W9k-woT3.js → chunk-RYQCIY6F-DDA4G6lG.js} +1 -1
- package/dist/webdist/assets/{chunk-XXDRQBXY-BEf2Mob4.js → chunk-XXDRQBXY-DJp5qHVT.js} +1 -1
- package/dist/webdist/assets/{circle-check-oj-qQsUY.js → circle-check-Be8IcbM3.js} +1 -1
- package/dist/webdist/assets/{circle-x-gGXzROsQ.js → circle-x-RTp0NMzc.js} +1 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-DLmqdq0b.js +1 -0
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-DLmqdq0b.js +1 -0
- package/dist/webdist/assets/{collapsible-DL9VySa3.js → collapsible-Ufi2wYVR.js} +1 -1
- package/dist/webdist/assets/{cose-bilkent-JH36ORCC-tkfBcHU9.js → cose-bilkent-JH36ORCC-BwIdg8OQ.js} +1 -1
- package/dist/webdist/assets/{cynefin-VYW2F7L2-zJZI0irR.js → cynefin-VYW2F7L2-DPPOp6Z0.js} +1 -1
- package/dist/webdist/assets/{cynefinDiagram-MW4NZA55-BbH3UWYG.js → cynefinDiagram-MW4NZA55-CJztcIBi.js} +1 -1
- package/dist/webdist/assets/{dagre-VZM6K2ZE-DyC5hntE.js → dagre-VZM6K2ZE-CyMugmI-.js} +1 -1
- package/dist/webdist/assets/{diagram-7IWD3JNH-Cn3vmigd.js → diagram-7IWD3JNH-BRDFU1Ve.js} +1 -1
- package/dist/webdist/assets/{diagram-B4RE2ZJO-DzIzUUTv.js → diagram-B4RE2ZJO-CNNoJqRt.js} +1 -1
- package/dist/webdist/assets/{diagram-LBJQPF4R-BbtaHnkO.js → diagram-LBJQPF4R-CdKfkenV.js} +1 -1
- package/dist/webdist/assets/{diagram-Q27KOJAE-CFenKIgI.js → diagram-Q27KOJAE-B-PXWstV.js} +1 -1
- package/dist/webdist/assets/{diagram-UB23O5K3-CuyPU_Mu.js → diagram-UB23O5K3-BP86wZxq.js} +1 -1
- package/dist/webdist/assets/{dropdown-menu-Be7l1fxe.js → dropdown-menu-CpDtWx6l.js} +1 -1
- package/dist/webdist/assets/{ebnfDiagram-BXEA7PRR-DOODd0MH.js → ebnfDiagram-BXEA7PRR-D5Eh3L4_.js} +1 -1
- package/dist/webdist/assets/{erDiagram-JOGREHBK-Dcr04SmE.js → erDiagram-JOGREHBK-gz0ckR6a.js} +1 -1
- package/dist/webdist/assets/{file-text-FE03rWAa.js → file-text-LLb7mRJz.js} +1 -1
- package/dist/webdist/assets/{flowDiagram-UKHOOZJN-Bz7rFGfl.js → flowDiagram-UKHOOZJN-BoO4mRIW.js} +1 -1
- package/dist/webdist/assets/{folder-input-D15LVeML.js → folder-input-K6hmSR6r.js} +1 -1
- package/dist/webdist/assets/{folder-plus-DzkiCb2B.js → folder-plus-aD2Jwv9p.js} +1 -1
- package/dist/webdist/assets/{ganttDiagram-PKOTCBZU-Bj_ZOPAJ.js → ganttDiagram-PKOTCBZU-BMsGQluI.js} +1 -1
- package/dist/webdist/assets/{git-branch-HP8nxDTj.js → git-branch-Sc-xALja.js} +1 -1
- package/dist/webdist/assets/{gitGraphDiagram-DS77QQ5N-8baKuWz3.js → gitGraphDiagram-DS77QQ5N-BVhg-gBA.js} +1 -1
- package/dist/webdist/assets/{globe-r-Gk9vO_.js → globe-MUKwb-dG.js} +1 -1
- package/dist/webdist/assets/{index-DWD1Hz6g.js → index-Ds6wWiqZ.js} +4 -4
- package/dist/webdist/assets/{infoDiagram-6WML65LV-CZh4edQp.js → infoDiagram-6WML65LV-CfU2f-Uu.js} +1 -1
- package/dist/webdist/assets/{ishikawaDiagram-WSZJBQD7-BT7RJUZO.js → ishikawaDiagram-WSZJBQD7-DBINljMd.js} +1 -1
- package/dist/webdist/assets/{journeyDiagram-NVQOT4AX-Brz2ooLj.js → journeyDiagram-NVQOT4AX-CPv0nvnF.js} +1 -1
- package/dist/webdist/assets/{kanban-definition-27J2QSJJ-ByeIutfh.js → kanban-definition-27J2QSJJ-Bs8oqG4V.js} +1 -1
- package/dist/webdist/assets/{linear-Bfr0xFLl.js → linear-fvd8Xavw.js} +1 -1
- package/dist/webdist/assets/{lock-CKcOp4XJ.js → lock-CBkKIocw.js} +1 -1
- package/dist/webdist/assets/{mermaid.core-D-E5f09M.js → mermaid.core-gqQ7djSV.js} +4 -4
- package/dist/webdist/assets/{mindmap-definition-FAOFIHXS-hrzHqptK.js → mindmap-definition-FAOFIHXS-Uo84SPEc.js} +1 -1
- package/dist/webdist/assets/{monitor--WNtubB8.js → monitor--8CDFQE2.js} +1 -1
- package/dist/webdist/assets/{pegDiagram-VL7TDLO6-B441EsMI.js → pegDiagram-VL7TDLO6-jriZE8ux.js} +1 -1
- package/dist/webdist/assets/{pencil-DLms_KS_.js → pencil-CAi7QQGw.js} +1 -1
- package/dist/webdist/assets/{pieDiagram-7S7Q4E2Y-ByhCEyi1.js → pieDiagram-7S7Q4E2Y-BiG1Sd1C.js} +1 -1
- package/dist/webdist/assets/{quadrantDiagram-CIZ2JOQS-BoVd-30d.js → quadrantDiagram-CIZ2JOQS-CONf7VBs.js} +1 -1
- package/dist/webdist/assets/{railroadDiagram-AXF67PYL-2uvCDUaS.js → railroadDiagram-AXF67PYL-DnSHrg9g.js} +1 -1
- package/dist/webdist/assets/{refresh-cw-BZK9PNk2.js → refresh-cw-C8ASJbnJ.js} +1 -1
- package/dist/webdist/assets/{remote-failure-BUHwngKj.js → remote-failure-Ded7cLzQ.js} +1 -1
- package/dist/webdist/assets/{requirementDiagram-LRYGKXZP-BgJIRdwB.js → requirementDiagram-LRYGKXZP-Bfofmv9M.js} +1 -1
- package/dist/webdist/assets/{rocket-CZ554uI4.js → rocket-Dtd3N1ug.js} +1 -1
- package/dist/webdist/assets/{rotate-ccw-CYnZI5-z.js → rotate-ccw-CDwuwLJa.js} +1 -1
- package/dist/webdist/assets/{sankeyDiagram-W5VNT64P-Owz2xIZe.js → sankeyDiagram-W5VNT64P-oPlm8mDh.js} +1 -1
- package/dist/webdist/assets/{sequenceDiagram-SI44F4Z6-DaoxE-fa.js → sequenceDiagram-SI44F4Z6-BtT__Yqq.js} +1 -1
- package/dist/webdist/assets/{sheet-Df9khmUy.js → sheet-DjzHbzW-.js} +1 -1
- package/dist/webdist/assets/{sizeCapture-X5ZJPWSS-dcdfbtqP.js → sizeCapture-X5ZJPWSS-BFILTo7Y.js} +1 -1
- package/dist/webdist/assets/{skeleton-Duv5iwwK.js → skeleton-BLTjOhUM.js} +1 -1
- package/dist/webdist/assets/{sliders-horizontal-Cr87JkWR.js → sliders-horizontal-Drc70pwd.js} +1 -1
- package/dist/webdist/assets/{sparkles-Cz9OBDET.js → sparkles-DOWtXMA_.js} +1 -1
- package/dist/webdist/assets/{star-DdqpME5N.js → star-BK1xduRz.js} +1 -1
- package/dist/webdist/assets/{stateDiagram-OKZ733FA-CXX12BPj.js → stateDiagram-OKZ733FA-i7_MQ41r.js} +1 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-C2DpmYiV.js +1 -0
- package/dist/webdist/assets/{swimlanes-SLNWSIFB-fq1Cou-U.js → swimlanes-SLNWSIFB-C-5GR5Xz.js} +2 -2
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-qpyaWHDD.js +8 -0
- package/dist/webdist/assets/{switch-C6JFP8Mz.js → switch-A6PlBbDB.js} +1 -1
- package/dist/webdist/assets/{terminal-BsWKdFvy.js → terminal-DbMd2MTp.js} +1 -1
- package/dist/webdist/assets/{timeline-definition-Z64GVDOM-BvUBrPbD.js → timeline-definition-Z64GVDOM-JBq4cqJK.js} +1 -1
- package/dist/webdist/assets/{trash-2-B4G2scm5.js → trash-2-Dlh7WyjL.js} +1 -1
- package/dist/webdist/assets/{vennDiagram-T6HMQDX7-CEeg53T_.js → vennDiagram-T6HMQDX7-B7KEc4eo.js} +1 -1
- package/dist/webdist/assets/{wardleyDiagram-T6FBY63Y-C7jkNVGw.js → wardleyDiagram-T6FBY63Y-CnFAa_TS.js} +1 -1
- package/dist/webdist/assets/{wrench-8U77f_Yu.js → wrench-D2_hKxSu.js} +1 -1
- package/dist/webdist/assets/{xychartDiagram-ELKLHX3M-BqzboKBI.js → xychartDiagram-ELKLHX3M-CVx7qiTK.js} +1 -1
- package/dist/webdist/index.html +1 -1
- package/package.json +1 -1
- package/dist/webdist/assets/CodeComposer-DMDibXma.js +0 -1
- package/dist/webdist/assets/HardwareSection-CE799Eq2.js +0 -1
- package/dist/webdist/assets/ModelDetailDialog-BQCs3W1u.js +0 -1
- package/dist/webdist/assets/OnboardingScreen-T-PZwwoj.js +0 -1
- package/dist/webdist/assets/WorkspaceScreen-B52K9UEq.js +0 -1
- package/dist/webdist/assets/channel-BwZvGoK9.js +0 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-DzGOglmc.js +0 -1
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-DzGOglmc.js +0 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-Cm8sAKH-.js +0 -1
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-BEleuPZP.js +0 -8
package/README.md
CHANGED
|
@@ -443,8 +443,9 @@ connected); **Remove** undoes it.
|
|
|
443
443
|
|
|
444
444
|
- A **persistent bottom strip** on every screen shows real-time CPU, RAM, GPU and VRAM — values
|
|
445
445
|
and percentages — pulled from `nvidia-smi`, WDDM counters, `rocm-smi`, AMD sysfs, `ioreg`,
|
|
446
|
-
or `/proc` on Linux. Clicking the bar opens detailed gauges and sparklines in Settings → System
|
|
447
|
-
|
|
446
|
+
or `/proc` on Linux. Clicking the bar opens detailed gauges and sparklines in Settings → System,
|
|
447
|
+
including live **disk I/O** (read/write MB/s) and a **shared/spilled VRAM** figure that shows
|
|
448
|
+
when a discrete GPU has spilled into system memory. Toggle it off entirely from Settings → General.
|
|
448
449
|
- **Engines → Monitor** puts the live engine log and those same hardware gauges on one
|
|
449
450
|
always-visible split screen, plus a second, LM Studio-style **developer request log**: every
|
|
450
451
|
completion the daemon serves — external API clients, Code sessions, in-app Chat — with
|
|
@@ -1162,11 +1162,11 @@ async function buildOpencodeConfigContent(base, apiKey, modelKey, modelName, mcp
|
|
|
1162
1162
|
function piArgs(ctx) {
|
|
1163
1163
|
return ["--provider", "turbollm", "--model", ctx.pinnedModel, "--api-key", ctx.authToken];
|
|
1164
1164
|
}
|
|
1165
|
-
var realRunCommand = (bin, args) => new Promise((
|
|
1165
|
+
var realRunCommand = (bin, args) => new Promise((resolve4) => {
|
|
1166
1166
|
const resolved = resolveExecutable(bin);
|
|
1167
1167
|
const child = requiresShell(resolved) ? spawn2(buildShellCommand(bin, args), { shell: true, stdio: "ignore" }) : spawn2(resolved ?? bin, args, { stdio: "ignore" });
|
|
1168
|
-
child.on("error", () =>
|
|
1169
|
-
child.on("exit", (code) =>
|
|
1168
|
+
child.on("error", () => resolve4(false));
|
|
1169
|
+
child.on("exit", (code) => resolve4(code === 0));
|
|
1170
1170
|
});
|
|
1171
1171
|
async function prepareHermes(base, _apiKey, modelKey, _modelName, run = realRunCommand) {
|
|
1172
1172
|
const sets = [
|
|
@@ -1285,14 +1285,14 @@ var WORKTREES_SUBDIR = join9(".turbollm", "worktrees");
|
|
|
1285
1285
|
var EXCLUDE_LINE = "/.turbollm/";
|
|
1286
1286
|
var MAX_BRANCH_SUFFIX = 20;
|
|
1287
1287
|
function runGit(cwd, args, timeoutMs = 3e4) {
|
|
1288
|
-
return new Promise((
|
|
1288
|
+
return new Promise((resolve4) => {
|
|
1289
1289
|
let stdout = "";
|
|
1290
1290
|
let stderr = "";
|
|
1291
1291
|
let settled = false;
|
|
1292
1292
|
const done = (r) => {
|
|
1293
1293
|
if (!settled) {
|
|
1294
1294
|
settled = true;
|
|
1295
|
-
|
|
1295
|
+
resolve4(r);
|
|
1296
1296
|
}
|
|
1297
1297
|
};
|
|
1298
1298
|
try {
|
|
@@ -1519,6 +1519,14 @@ import { readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdirSy
|
|
|
1519
1519
|
import { join as join10 } from "path";
|
|
1520
1520
|
var BENCH_RATE_LIMIT_MS = 60 * 60 * 1e3;
|
|
1521
1521
|
|
|
1522
|
+
// src/models/scanner.ts
|
|
1523
|
+
import { existsSync as existsSync7, lstatSync, readdirSync as readdirSync5, readFileSync as readFileSync7, realpathSync as realpathSync2, rmSync as rmSync4, writeFileSync as writeFileSync6 } from "fs";
|
|
1524
|
+
import { readdir, realpath, stat } from "fs/promises";
|
|
1525
|
+
import { basename as basename2, dirname as dirname4, isAbsolute, join as join11, relative, resolve as resolve2, sep as sep2 } from "path";
|
|
1526
|
+
|
|
1527
|
+
// src/gguf/gguf.ts
|
|
1528
|
+
import { closeSync, openSync, readSync } from "fs";
|
|
1529
|
+
|
|
1522
1530
|
// src/models/profile.ts
|
|
1523
1531
|
var ROCM_APU_NOMMAP_MIN_BYTES = 30 * 1024 ** 3;
|
|
1524
1532
|
|
|
@@ -1588,7 +1596,7 @@ async function autoTitleFromConversation(d, convId) {
|
|
|
1588
1596
|
}
|
|
1589
1597
|
|
|
1590
1598
|
// src/code/code-session.ts
|
|
1591
|
-
import { join as
|
|
1599
|
+
import { join as join12, resolve as resolve3 } from "path";
|
|
1592
1600
|
import { readFile as readFile3 } from "fs/promises";
|
|
1593
1601
|
import { Type, Unsafe } from "typebox";
|
|
1594
1602
|
import {
|
|
@@ -1610,7 +1618,7 @@ import { spawn as spawn4 } from "child_process";
|
|
|
1610
1618
|
import { getShellConfig } from "@earendil-works/pi-coding-agent";
|
|
1611
1619
|
var EXIT_STDIO_GRACE_MS = 100;
|
|
1612
1620
|
function waitForChildProcess(child) {
|
|
1613
|
-
return new Promise((
|
|
1621
|
+
return new Promise((resolve4, reject) => {
|
|
1614
1622
|
let settled = false;
|
|
1615
1623
|
let exited = false;
|
|
1616
1624
|
let exitCode = null;
|
|
@@ -1636,7 +1644,7 @@ function waitForChildProcess(child) {
|
|
|
1636
1644
|
cleanup();
|
|
1637
1645
|
child.stdout?.destroy();
|
|
1638
1646
|
child.stderr?.destroy();
|
|
1639
|
-
|
|
1647
|
+
resolve4(code);
|
|
1640
1648
|
};
|
|
1641
1649
|
const maybeFinalizeAfterExit = () => {
|
|
1642
1650
|
if (!exited || settled) return;
|
|
@@ -1688,11 +1696,11 @@ function isAlive(pid) {
|
|
|
1688
1696
|
}
|
|
1689
1697
|
}
|
|
1690
1698
|
function sleep(ms) {
|
|
1691
|
-
return new Promise((
|
|
1699
|
+
return new Promise((resolve4) => setTimeout(resolve4, ms));
|
|
1692
1700
|
}
|
|
1693
1701
|
async function killDescendantsViaWmi(rootPid) {
|
|
1694
1702
|
const psScript = `$all = Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId; $ids = @(${rootPid}); $frontier = @(${rootPid}); for ($i = 0; $i -lt 8; $i++) { $children = $all | Where-Object { $frontier -contains $_.ParentProcessId } | Select-Object -ExpandProperty ProcessId; if (-not $children) { break }; $ids += $children; $frontier = $children }; $ids | Select-Object -Unique | ForEach-Object { Write-Output $_ }`;
|
|
1695
|
-
const pids = await new Promise((
|
|
1703
|
+
const pids = await new Promise((resolve4) => {
|
|
1696
1704
|
const proc = spawn4("powershell", ["-NoProfile", "-NonInteractive", "-Command", psScript], {
|
|
1697
1705
|
stdio: ["ignore", "pipe", "ignore"],
|
|
1698
1706
|
windowsHide: true
|
|
@@ -1703,9 +1711,9 @@ async function killDescendantsViaWmi(rootPid) {
|
|
|
1703
1711
|
});
|
|
1704
1712
|
proc.on("close", () => {
|
|
1705
1713
|
const found = out.split(/\r?\n/).map((l) => Number(l.trim())).filter((n) => Number.isInteger(n) && n > 0);
|
|
1706
|
-
|
|
1714
|
+
resolve4([...new Set(found)]);
|
|
1707
1715
|
});
|
|
1708
|
-
proc.on("error", () =>
|
|
1716
|
+
proc.on("error", () => resolve4([]));
|
|
1709
1717
|
});
|
|
1710
1718
|
for (const pid of pids) {
|
|
1711
1719
|
try {
|
|
@@ -2038,10 +2046,10 @@ var LspClient = class {
|
|
|
2038
2046
|
const npxCmd = process.platform === "win32" ? "npx.cmd" : "npx";
|
|
2039
2047
|
const proc = spawn5(npxCmd, this.spec.npxArgs, npxSpawnOptions(this.rootDir));
|
|
2040
2048
|
this.proc = proc;
|
|
2041
|
-
const spawnFailure = new Promise((
|
|
2042
|
-
proc.once("error", (e) =>
|
|
2049
|
+
const spawnFailure = new Promise((resolve4) => {
|
|
2050
|
+
proc.once("error", (e) => resolve4(e instanceof Error ? e.message : String(e)));
|
|
2043
2051
|
proc.once("exit", (code) => {
|
|
2044
|
-
if (!this.ready)
|
|
2052
|
+
if (!this.ready) resolve4(`server exited early (code ${code})`);
|
|
2045
2053
|
});
|
|
2046
2054
|
});
|
|
2047
2055
|
const conn = createMessageConnection(new StreamMessageReader(proc.stdout), new StreamMessageWriter(proc.stdin));
|
|
@@ -2073,7 +2081,7 @@ var LspClient = class {
|
|
|
2073
2081
|
// repo doesn't have typescript installed yet, e.g. a brand-new project.
|
|
2074
2082
|
...fallbackTsserverPath ? { initializationOptions: { tsserver: { path: fallbackTsserverPath } } } : {}
|
|
2075
2083
|
});
|
|
2076
|
-
const timeout = new Promise((
|
|
2084
|
+
const timeout = new Promise((resolve4) => setTimeout(() => resolve4("timeout"), INITIALIZE_TIMEOUT_MS));
|
|
2077
2085
|
const result = await Promise.race([initialize.then(() => "ok"), spawnFailure.then((e) => `error:${e}`), timeout]);
|
|
2078
2086
|
if (result === "timeout") throw new Error(`${this.spec.language} language server did not initialize within ${INITIALIZE_TIMEOUT_MS}ms`);
|
|
2079
2087
|
if (result.startsWith("error:")) throw new Error(result.slice("error:".length));
|
|
@@ -2098,9 +2106,9 @@ var LspClient = class {
|
|
|
2098
2106
|
const uri = toFileUri(path);
|
|
2099
2107
|
const version = (this.docVersionByUri.get(uri) ?? 0) + 1;
|
|
2100
2108
|
this.docVersionByUri.set(uri, version);
|
|
2101
|
-
const waitForPush = new Promise((
|
|
2109
|
+
const waitForPush = new Promise((resolve4) => {
|
|
2102
2110
|
const list = this.waitersByUri.get(uri) ?? [];
|
|
2103
|
-
list.push(
|
|
2111
|
+
list.push(resolve4);
|
|
2104
2112
|
this.waitersByUri.set(uri, list);
|
|
2105
2113
|
});
|
|
2106
2114
|
if (version === 1) {
|
|
@@ -2110,7 +2118,7 @@ var LspClient = class {
|
|
|
2110
2118
|
this.conn.sendNotification("textDocument/didChange", { textDocument: { uri, version }, contentChanges: [{ text }] }).catch(() => {
|
|
2111
2119
|
});
|
|
2112
2120
|
}
|
|
2113
|
-
await Promise.race([waitForPush, new Promise((
|
|
2121
|
+
await Promise.race([waitForPush, new Promise((resolve4) => setTimeout(resolve4, DIAGNOSTICS_WAIT_MS))]);
|
|
2114
2122
|
return this.diagnosticsByUri.get(uri) ?? [];
|
|
2115
2123
|
}
|
|
2116
2124
|
dispose() {
|
|
@@ -2410,7 +2418,7 @@ async function runCodeSession(params) {
|
|
|
2410
2418
|
console.warn(`[code-session] history seed for session ${sessionId} produced ${sessionManager.getEntries().length}/${expectedEntries} expected entries \u2014 falling back to a plain-text history prefix on this turn's prompt`);
|
|
2411
2419
|
task = `${HISTORY_FALLBACK_PREFIX}${renderHistoryFallbackText(summaryText, priorMessages)}${HISTORY_FALLBACK_SUFFIX}${rawTask}`;
|
|
2412
2420
|
}
|
|
2413
|
-
const agentDir =
|
|
2421
|
+
const agentDir = join12(d.store.dir(), "pi-agent");
|
|
2414
2422
|
modelRegistry.registerProvider("local", {
|
|
2415
2423
|
...upstream.provider,
|
|
2416
2424
|
api: "openai-completions",
|
|
@@ -2537,7 +2545,7 @@ async function runCodeSession(params) {
|
|
|
2537
2545
|
await sink({ event: "tool_call", data });
|
|
2538
2546
|
});
|
|
2539
2547
|
};
|
|
2540
|
-
const skillAgentDir =
|
|
2548
|
+
const skillAgentDir = join12(d.store.dir(), "pi-agent");
|
|
2541
2549
|
const skillResourceLoader = new DefaultResourceLoader({
|
|
2542
2550
|
cwd: repoRoot,
|
|
2543
2551
|
agentDir: skillAgentDir,
|
|
@@ -2678,7 +2686,7 @@ async function runCodeSession(params) {
|
|
|
2678
2686
|
await sink({ event: "tool_call", data });
|
|
2679
2687
|
});
|
|
2680
2688
|
};
|
|
2681
|
-
const subAgentDir =
|
|
2689
|
+
const subAgentDir = join12(d.store.dir(), "pi-agent");
|
|
2682
2690
|
const subResourceLoader = new DefaultResourceLoader({
|
|
2683
2691
|
cwd: repoRoot,
|
|
2684
2692
|
agentDir: subAgentDir,
|
|
@@ -2893,7 +2901,7 @@ async function runCodeSession(params) {
|
|
|
2893
2901
|
const spec = relPath ? lspSpecForPath(relPath) : null;
|
|
2894
2902
|
if (spec) {
|
|
2895
2903
|
try {
|
|
2896
|
-
const absPath =
|
|
2904
|
+
const absPath = resolve3(repoRoot, relPath);
|
|
2897
2905
|
const content = await readFile3(absPath, "utf8");
|
|
2898
2906
|
const diagnostics = await getLspClient(spec).getDiagnostics(absPath, content);
|
|
2899
2907
|
if (diagnostics.length > 0) {
|
|
@@ -3333,7 +3341,7 @@ async function compactCodeSession(params) {
|
|
|
3333
3341
|
return payload;
|
|
3334
3342
|
});
|
|
3335
3343
|
};
|
|
3336
|
-
const compactAgentDir =
|
|
3344
|
+
const compactAgentDir = join12(d.store.dir(), "pi-agent");
|
|
3337
3345
|
const compactResourceLoader = new DefaultResourceLoader({
|
|
3338
3346
|
cwd: repoRoot,
|
|
3339
3347
|
agentDir: compactAgentDir,
|
|
@@ -3432,7 +3440,7 @@ async function lookbackPreCompactionHistory(params) {
|
|
|
3432
3440
|
return payload;
|
|
3433
3441
|
});
|
|
3434
3442
|
};
|
|
3435
|
-
const lookbackAgentDir =
|
|
3443
|
+
const lookbackAgentDir = join12(d.store.dir(), "pi-agent");
|
|
3436
3444
|
const lookbackResourceLoader = new DefaultResourceLoader({
|
|
3437
3445
|
cwd: repoRoot,
|
|
3438
3446
|
agentDir: lookbackAgentDir,
|
|
@@ -65,7 +65,17 @@ function availableBackends(tag = LLAMA_BUILD) {
|
|
|
65
65
|
if (a === "arm64") return [def("cpu", "CPU", `llama-${tag}-bin-win-cpu-arm64.zip`)];
|
|
66
66
|
return [
|
|
67
67
|
def("cuda", "CUDA (NVIDIA)", `llama-${tag}-bin-win-cuda-${CUDA_VER}-x64.zip`, `cudart-llama-bin-win-cuda-${CUDA_VER}-x64.zip`),
|
|
68
|
-
|
|
68
|
+
// Upstream has renamed this archive at least once (`*-bin-win-hip-radeon-x64.zip` →
|
|
69
|
+
// `*-bin-win-rocm-<toolkit-ver>-x64.zip`, GitHub #220) without any deprecation window,
|
|
70
|
+
// so the literal name below is only a fallback label — assetPatterns resolves the
|
|
71
|
+
// real filename from the release's own asset list at download time and survives the
|
|
72
|
+
// next rename too.
|
|
73
|
+
{
|
|
74
|
+
id: "rocm",
|
|
75
|
+
label: "ROCm / HIP (AMD Radeon)",
|
|
76
|
+
assets: [`llama-${tag}-bin-win-hip-radeon-x64.zip`],
|
|
77
|
+
assetPatterns: [/^llama-.+-bin-win-(?:hip-radeon|rocm-[\d.]+)-x64\.zip$/i]
|
|
78
|
+
},
|
|
69
79
|
def("sycl", "SYCL (Intel)", `llama-${tag}-bin-win-sycl-x64.zip`),
|
|
70
80
|
def("vulkan", "Vulkan (any GPU)", `llama-${tag}-bin-win-vulkan-x64.zip`),
|
|
71
81
|
def("cpu", "CPU", `llama-${tag}-bin-win-cpu-x64.zip`)
|
|
@@ -236,12 +246,30 @@ async function provisionBackend(enginesRoot, backend, tag, onProgress, signal) {
|
|
|
236
246
|
}
|
|
237
247
|
mkdirSync(destDir, { recursive: true });
|
|
238
248
|
const parts = backend.assets.length;
|
|
249
|
+
const tmpPaths = [];
|
|
239
250
|
try {
|
|
240
251
|
for (let i = 0; i < parts; i++) {
|
|
241
|
-
const asset = backend.assets[i];
|
|
242
252
|
const part = i + 1;
|
|
243
|
-
const
|
|
244
|
-
|
|
253
|
+
const pattern = backend.assetPatterns?.[i];
|
|
254
|
+
let assetName = backend.assets[i];
|
|
255
|
+
let url;
|
|
256
|
+
if (backend.downloadBaseUrl) {
|
|
257
|
+
url = `${backend.downloadBaseUrl}/${assetName}`;
|
|
258
|
+
} else {
|
|
259
|
+
const repo = backend.repo ?? REPO;
|
|
260
|
+
const releaseTag = backend.releaseTag ?? tag;
|
|
261
|
+
if (pattern) {
|
|
262
|
+
const releaseAssets = await releaseAssetsForTag(repo, releaseTag, signal);
|
|
263
|
+
const found = releaseAssets.find((a) => pattern.test(a.name));
|
|
264
|
+
if (!found) throw new Error(`no release asset matching ${pattern} in ${repo}@${releaseTag}`);
|
|
265
|
+
assetName = found.name;
|
|
266
|
+
url = found.browser_download_url;
|
|
267
|
+
} else {
|
|
268
|
+
url = `https://github.com/${repo}/releases/download/${releaseTag}/${assetName}`;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const tmp = join(enginesRoot, assetName);
|
|
272
|
+
tmpPaths.push(tmp);
|
|
245
273
|
onProgress?.({ phase: "downloading", pct: 0, part, parts });
|
|
246
274
|
await downloadFile(url, tmp, (p) => onProgress?.({ ...p, part, parts }), signal);
|
|
247
275
|
onProgress?.({ phase: "extracting", pct: -1, part, parts });
|
|
@@ -249,7 +277,7 @@ async function provisionBackend(enginesRoot, backend, tag, onProgress, signal) {
|
|
|
249
277
|
rmSync(tmp, { force: true });
|
|
250
278
|
}
|
|
251
279
|
} catch (e) {
|
|
252
|
-
for (const
|
|
280
|
+
for (const tmp of tmpPaths) rmSync(tmp, { force: true });
|
|
253
281
|
rmSync(destDir, { recursive: true, force: true });
|
|
254
282
|
throw e;
|
|
255
283
|
}
|
|
@@ -347,6 +375,16 @@ async function latestBuildTagRelease(repo, signal) {
|
|
|
347
375
|
}
|
|
348
376
|
return best;
|
|
349
377
|
}
|
|
378
|
+
async function releaseAssetsForTag(repo, tag, signal) {
|
|
379
|
+
const res = await fetch(`https://api.github.com/repos/${repo}/releases/tags/${encodeURIComponent(tag)}`, {
|
|
380
|
+
headers: githubHeaders(),
|
|
381
|
+
signal
|
|
382
|
+
});
|
|
383
|
+
if (isRateLimited(res)) throw new GithubRateLimitError(repo);
|
|
384
|
+
if (!res.ok) throw new Error(`could not query ${repo} release ${tag}: HTTP ${res.status}`);
|
|
385
|
+
const data = await res.json();
|
|
386
|
+
return data.assets ?? [];
|
|
387
|
+
}
|
|
350
388
|
async function latestCommitSha(repo, branch = "", signal) {
|
|
351
389
|
const ref = branch.trim() ? encodeURIComponent(branch.trim()) : "HEAD";
|
|
352
390
|
const res = await fetch(`https://api.github.com/repos/${repo}/commits/${ref}`, {
|