@vibgrate/cli 2026.819.1 → 2026.819.2
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/DOCS.md +3 -3
- package/dist/agent-ZJRWCMR6.js +30 -0
- package/dist/{agent-3CKNTCRX.js.map → agent-ZJRWCMR6.js.map} +1 -1
- package/dist/{approvals-DHTG3HI4.js → approvals-YTUXBZWQ.js} +7 -7
- package/dist/{approvals-DHTG3HI4.js.map → approvals-YTUXBZWQ.js.map} +1 -1
- package/dist/attach-WOA25VNH.js +10 -0
- package/dist/{attach-OCQ3I76L.js.map → attach-WOA25VNH.js.map} +1 -1
- package/dist/baseline-TVRRUZGA.js +9 -0
- package/dist/{baseline-QDC6OQ2X.js.map → baseline-TVRRUZGA.js.map} +1 -1
- package/dist/{chunk-NWWLUFN5.js → chunk-24HKTTFV.js} +5 -5
- package/dist/{chunk-NWWLUFN5.js.map → chunk-24HKTTFV.js.map} +1 -1
- package/dist/{chunk-FFY6NW7P.js → chunk-2C4QT5D7.js} +5 -5
- package/dist/{chunk-FFY6NW7P.js.map → chunk-2C4QT5D7.js.map} +1 -1
- package/dist/{chunk-WJYJCDNY.js → chunk-2ZBLZ2S3.js} +13 -13
- package/dist/{chunk-WJYJCDNY.js.map → chunk-2ZBLZ2S3.js.map} +1 -1
- package/dist/{chunk-OV4KGXPD.js → chunk-57ZRSCHY.js} +3 -3
- package/dist/{chunk-OV4KGXPD.js.map → chunk-57ZRSCHY.js.map} +1 -1
- package/dist/{chunk-NDNNOAS6.js → chunk-6H2QV5DR.js} +3 -3
- package/dist/{chunk-NDNNOAS6.js.map → chunk-6H2QV5DR.js.map} +1 -1
- package/dist/{chunk-QMRSCJUN.js → chunk-7BSUPHX6.js} +3 -3
- package/dist/{chunk-QMRSCJUN.js.map → chunk-7BSUPHX6.js.map} +1 -1
- package/dist/{chunk-LJSJX6U4.js → chunk-A3WWRW7U.js} +3 -3
- package/dist/{chunk-LJSJX6U4.js.map → chunk-A3WWRW7U.js.map} +1 -1
- package/dist/{chunk-D44PGMH7.js → chunk-AP3JN33O.js} +12 -12
- package/dist/{chunk-D44PGMH7.js.map → chunk-AP3JN33O.js.map} +1 -1
- package/dist/{chunk-VYSDR2QE.js → chunk-AQZYDFEK.js} +4 -4
- package/dist/{chunk-VYSDR2QE.js.map → chunk-AQZYDFEK.js.map} +1 -1
- package/dist/{chunk-F46Q3AEI.js → chunk-BQ6NTRRK.js} +44 -15
- package/dist/chunk-BQ6NTRRK.js.map +1 -0
- package/dist/{chunk-YIEP5GK5.js → chunk-C2EZIAA3.js} +15 -11
- package/dist/chunk-C2EZIAA3.js.map +1 -0
- package/dist/{chunk-6F52QR6F.js → chunk-CA4YQBA7.js} +4 -4
- package/dist/{chunk-6F52QR6F.js.map → chunk-CA4YQBA7.js.map} +1 -1
- package/dist/{chunk-5O6O7DJH.js → chunk-CBL3VY7J.js} +3 -3
- package/dist/{chunk-5O6O7DJH.js.map → chunk-CBL3VY7J.js.map} +1 -1
- package/dist/{chunk-FQVAQVJV.js → chunk-FCMWHSQ6.js} +3 -3
- package/dist/{chunk-FQVAQVJV.js.map → chunk-FCMWHSQ6.js.map} +1 -1
- package/dist/{chunk-OQT3JBWW.js → chunk-GBXOAO5V.js} +167 -28
- package/dist/chunk-GBXOAO5V.js.map +1 -0
- package/dist/{chunk-JFE7XCAE.js → chunk-IASO2HCI.js} +3 -3
- package/dist/{chunk-JFE7XCAE.js.map → chunk-IASO2HCI.js.map} +1 -1
- package/dist/{chunk-D33M2ARL.js → chunk-IMI2VHHZ.js} +3 -3
- package/dist/{chunk-D33M2ARL.js.map → chunk-IMI2VHHZ.js.map} +1 -1
- package/dist/{chunk-QSLVOVNZ.js → chunk-JPOYXG7Z.js} +10 -10
- package/dist/{chunk-QSLVOVNZ.js.map → chunk-JPOYXG7Z.js.map} +1 -1
- package/dist/{chunk-KFEM6FWP.js → chunk-MMJFHEZ4.js} +4 -4
- package/dist/{chunk-KFEM6FWP.js.map → chunk-MMJFHEZ4.js.map} +1 -1
- package/dist/{chunk-JGBOYZAF.js → chunk-NKKOGJ63.js} +35 -17
- package/dist/chunk-NKKOGJ63.js.map +1 -0
- package/dist/{chunk-7AVYKZEM.js → chunk-NV7XNBX4.js} +4 -4
- package/dist/{chunk-7AVYKZEM.js.map → chunk-NV7XNBX4.js.map} +1 -1
- package/dist/{chunk-4VAA2XSM.js → chunk-OGFOJG4H.js} +6 -6
- package/dist/{chunk-4VAA2XSM.js.map → chunk-OGFOJG4H.js.map} +1 -1
- package/dist/{chunk-NZELMYT4.js → chunk-OLIMW4PQ.js} +8 -56
- package/dist/chunk-OLIMW4PQ.js.map +1 -0
- package/dist/{chunk-EMEMHNE3.js → chunk-PJRPSYFQ.js} +6 -6
- package/dist/{chunk-EMEMHNE3.js.map → chunk-PJRPSYFQ.js.map} +1 -1
- package/dist/{chunk-EI5AKDSC.js → chunk-QE6F62FR.js} +3 -3
- package/dist/{chunk-EI5AKDSC.js.map → chunk-QE6F62FR.js.map} +1 -1
- package/dist/{chunk-5XY4EFR7.js → chunk-R5TQBIR6.js} +3 -3
- package/dist/{chunk-5XY4EFR7.js.map → chunk-R5TQBIR6.js.map} +1 -1
- package/dist/{chunk-TS7STRMI.js → chunk-RTURQXQL.js} +4 -4
- package/dist/{chunk-TS7STRMI.js.map → chunk-RTURQXQL.js.map} +1 -1
- package/dist/{chunk-74UBGF4P.js → chunk-SHD5TCZ5.js} +3 -3
- package/dist/{chunk-74UBGF4P.js.map → chunk-SHD5TCZ5.js.map} +1 -1
- package/dist/{chunk-O5ASXWKF.js → chunk-USPMMVNH.js} +3 -3
- package/dist/{chunk-O5ASXWKF.js.map → chunk-USPMMVNH.js.map} +1 -1
- package/dist/{chunk-E53WBVUQ.js → chunk-VHRSG6CF.js} +3 -3
- package/dist/{chunk-E53WBVUQ.js.map → chunk-VHRSG6CF.js.map} +1 -1
- package/dist/{chunk-I5LP55B6.js → chunk-W44THEXF.js} +3 -3
- package/dist/{chunk-I5LP55B6.js.map → chunk-W44THEXF.js.map} +1 -1
- package/dist/{chunk-EIESBKLW.js → chunk-W6ASIMG5.js} +7 -7
- package/dist/{chunk-EIESBKLW.js.map → chunk-W6ASIMG5.js.map} +1 -1
- package/dist/{chunk-CQDUBAQY.js → chunk-WNKGRXUA.js} +3 -3
- package/dist/{chunk-CQDUBAQY.js.map → chunk-WNKGRXUA.js.map} +1 -1
- package/dist/{chunk-KKQX3F5F.js → chunk-WPLOEFZU.js} +7 -5
- package/dist/chunk-WPLOEFZU.js.map +1 -0
- package/dist/{chunk-FJG5AXKZ.js → chunk-WUFIXAEJ.js} +22 -6
- package/dist/chunk-WUFIXAEJ.js.map +1 -0
- package/dist/{chunk-TS25WFAT.js → chunk-XLQ4YHS3.js} +9 -9
- package/dist/{chunk-TS25WFAT.js.map → chunk-XLQ4YHS3.js.map} +1 -1
- package/dist/{chunk-BWPBB45M.js → chunk-XP6UUCZZ.js} +3 -3
- package/dist/{chunk-BWPBB45M.js.map → chunk-XP6UUCZZ.js.map} +1 -1
- package/dist/{chunk-BPF3YX2U.js → chunk-XQNKCA2J.js} +6 -3
- package/dist/chunk-XQNKCA2J.js.map +1 -0
- package/dist/{chunk-U7A7D2HP.js → chunk-XW2XQM3C.js} +7 -7
- package/dist/{chunk-U7A7D2HP.js.map → chunk-XW2XQM3C.js.map} +1 -1
- package/dist/{chunk-7N4Y3E47.js → chunk-YJYEPYB2.js} +13 -18
- package/dist/chunk-YJYEPYB2.js.map +1 -0
- package/dist/chunk-ZUZHYAJK.js +6 -0
- package/dist/{chunk-DHU3OOEI.js.map → chunk-ZUZHYAJK.js.map} +1 -1
- package/dist/cli.js +104 -94
- package/dist/cli.js.map +1 -1
- package/dist/client-P5XSRFV4.js +8 -0
- package/dist/{client-UQIELEEZ.js.map → client-P5XSRFV4.js.map} +1 -1
- package/dist/{daemon-UNL65PTP.js → daemon-YKOEP3XA.js} +14 -14
- package/dist/{daemon-UNL65PTP.js.map → daemon-YKOEP3XA.js.map} +1 -1
- package/dist/embed-worker-main.js +5 -5
- package/dist/ensure-map-BLRJDO2Y.js +40 -0
- package/dist/{ensure-map-4D2HJ6MA.js.map → ensure-map-BLRJDO2Y.js.map} +1 -1
- package/dist/{federation-SZYVHYB2.js → federation-M4ZNXOPX.js} +5 -5
- package/dist/{federation-SZYVHYB2.js.map → federation-M4ZNXOPX.js.map} +1 -1
- package/dist/git-ref-LMT3EXYY.js +4 -0
- package/dist/{git-ref-RSRAN4OH.js.map → git-ref-LMT3EXYY.js.map} +1 -1
- package/dist/graph-backend-NTYONTWW.js +16 -0
- package/dist/{graph-backend-36EIAAPQ.js.map → graph-backend-NTYONTWW.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +23 -23
- package/dist/{interactive-ZZMHSZ3W.js → interactive-B3WTC7LB.js} +40 -40
- package/dist/{interactive-ZZMHSZ3W.js.map → interactive-B3WTC7LB.js.map} +1 -1
- package/dist/{llm-host-XFYFOAAX.js → llm-host-QVTJJVER.js} +5 -5
- package/dist/{llm-host-XFYFOAAX.js.map → llm-host-QVTJJVER.js.map} +1 -1
- package/dist/load-AJROS77R.js +11 -0
- package/dist/{load-6CYLMUT5.js.map → load-AJROS77R.js.map} +1 -1
- package/dist/local-runtime-GA43KYS5.js +6 -0
- package/dist/{local-runtime-6SNWKSA7.js.map → local-runtime-GA43KYS5.js.map} +1 -1
- package/dist/model-manager-6H3TMZKK.js +10 -0
- package/dist/{model-manager-SXHZ5VD4.js.map → model-manager-6H3TMZKK.js.map} +1 -1
- package/dist/{model-orchestrator-LHYPJBFH.js → model-orchestrator-X3NE3Y2G.js} +6 -6
- package/dist/{model-orchestrator-LHYPJBFH.js.map → model-orchestrator-X3NE3Y2G.js.map} +1 -1
- package/dist/parse-worker.js +2 -2
- package/dist/{paths-62AKTFSR.js → paths-RVK6FKRN.js} +4 -4
- package/dist/{paths-62AKTFSR.js.map → paths-RVK6FKRN.js.map} +1 -1
- package/dist/publish-27S66NOW.js +9 -0
- package/dist/{publish-7YHRTBRA.js.map → publish-27S66NOW.js.map} +1 -1
- package/dist/resolve-gguf-WVKVDN45.js +9 -0
- package/dist/{resolve-gguf-SDIYGGI6.js.map → resolve-gguf-WVKVDN45.js.map} +1 -1
- package/dist/{run-outcome-ADEAKXHH.js → run-outcome-SBBSTSH3.js} +7 -7
- package/dist/{run-outcome-ADEAKXHH.js.map → run-outcome-SBBSTSH3.js.map} +1 -1
- package/dist/runtime-session-JYYKQVDX.js +26 -0
- package/dist/{runtime-session-VNSXQAEO.js.map → runtime-session-JYYKQVDX.js.map} +1 -1
- package/dist/session-2ZMHZ2O6.js +17 -0
- package/dist/{session-3A6LKJHD.js.map → session-2ZMHZ2O6.js.map} +1 -1
- package/dist/{slot-subscription-25GOARW5.js → slot-subscription-C2ZUJED6.js} +5 -5
- package/dist/{slot-subscription-25GOARW5.js.map → slot-subscription-C2ZUJED6.js.map} +1 -1
- package/dist/{stream-json-S2TP2VPU.js → stream-json-ZWGB4C47.js} +17 -17
- package/dist/{stream-json-S2TP2VPU.js.map → stream-json-ZWGB4C47.js.map} +1 -1
- package/dist/version-5QIEUXU6.js +4 -0
- package/dist/{version-SZI6I3A2.js.map → version-5QIEUXU6.js.map} +1 -1
- package/dist/{vg-mcp-bridge-IIBEAOEB.js → vg-mcp-bridge-4FETMJ6M.js} +14 -14
- package/dist/{vg-mcp-bridge-IIBEAOEB.js.map → vg-mcp-bridge-4FETMJ6M.js.map} +1 -1
- package/dist/{vgd-KGXIKGOS.js → vgd-R524P5BJ.js} +13 -13
- package/dist/vgd-R524P5BJ.js.map +1 -0
- package/package.json +1 -1
- package/dist/agent-3CKNTCRX.js +0 -30
- package/dist/attach-OCQ3I76L.js +0 -10
- package/dist/baseline-QDC6OQ2X.js +0 -9
- package/dist/chunk-7N4Y3E47.js.map +0 -1
- package/dist/chunk-BPF3YX2U.js.map +0 -1
- package/dist/chunk-DHU3OOEI.js +0 -6
- package/dist/chunk-F46Q3AEI.js.map +0 -1
- package/dist/chunk-FJG5AXKZ.js.map +0 -1
- package/dist/chunk-JGBOYZAF.js.map +0 -1
- package/dist/chunk-KKQX3F5F.js.map +0 -1
- package/dist/chunk-NZELMYT4.js.map +0 -1
- package/dist/chunk-OQT3JBWW.js.map +0 -1
- package/dist/chunk-YIEP5GK5.js.map +0 -1
- package/dist/client-UQIELEEZ.js +0 -8
- package/dist/ensure-map-4D2HJ6MA.js +0 -40
- package/dist/git-ref-RSRAN4OH.js +0 -4
- package/dist/graph-backend-36EIAAPQ.js +0 -16
- package/dist/load-6CYLMUT5.js +0 -11
- package/dist/local-runtime-6SNWKSA7.js +0 -6
- package/dist/model-manager-SXHZ5VD4.js +0 -10
- package/dist/publish-7YHRTBRA.js +0 -9
- package/dist/resolve-gguf-SDIYGGI6.js +0 -9
- package/dist/runtime-session-VNSXQAEO.js +0 -26
- package/dist/session-3A6LKJHD.js +0 -17
- package/dist/version-SZI6I3A2.js +0 -4
- package/dist/vgd-KGXIKGOS.js.map +0 -1
package/dist/agent-3CKNTCRX.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export { CONTEXT_POLICY_VERSION, DISCOVERY_TOOLS, MUTATION_TOOLS, compact, compactWithModel, runAgent } from './chunk-WJYJCDNY.js';
|
|
2
|
-
import './chunk-543E6WDJ.js';
|
|
3
|
-
import './chunk-D33M2ARL.js';
|
|
4
|
-
import './chunk-VYSDR2QE.js';
|
|
5
|
-
import './chunk-74UBGF4P.js';
|
|
6
|
-
import './chunk-3HNPVXUK.js';
|
|
7
|
-
import './chunk-5HYCB55P.js';
|
|
8
|
-
import './chunk-VIWZ4QT7.js';
|
|
9
|
-
import './chunk-KKQX3F5F.js';
|
|
10
|
-
export { summarizeCapsule } from './chunk-5O6O7DJH.js';
|
|
11
|
-
import './chunk-EZ7UC5Y5.js';
|
|
12
|
-
import './chunk-6BEBJCK4.js';
|
|
13
|
-
import './chunk-J7LKEB2R.js';
|
|
14
|
-
import './chunk-6F52QR6F.js';
|
|
15
|
-
import './chunk-E53WBVUQ.js';
|
|
16
|
-
import './chunk-NDNNOAS6.js';
|
|
17
|
-
import './chunk-FQVAQVJV.js';
|
|
18
|
-
import './chunk-T7RSQ5WD.js';
|
|
19
|
-
import './chunk-6WRG7VDO.js';
|
|
20
|
-
import './chunk-QMRSCJUN.js';
|
|
21
|
-
import './chunk-FFY6NW7P.js';
|
|
22
|
-
import './chunk-MVPRPSXU.js';
|
|
23
|
-
import './chunk-O3LABX6I.js';
|
|
24
|
-
import './chunk-DHU3OOEI.js';
|
|
25
|
-
import './chunk-BWPBB45M.js';
|
|
26
|
-
import './chunk-JFGYT6BI.js';
|
|
27
|
-
import './chunk-BPF3YX2U.js';
|
|
28
|
-
import './chunk-Z6ZWNWWR.js';
|
|
29
|
-
//# sourceMappingURL=agent-3CKNTCRX.js.map
|
|
30
|
-
//# sourceMappingURL=agent-3CKNTCRX.js.map
|
package/dist/attach-OCQ3I76L.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { attachVgd, daemonDisabledReason } from './chunk-4VAA2XSM.js';
|
|
2
|
-
import './chunk-LJSJX6U4.js';
|
|
3
|
-
import './chunk-E53WBVUQ.js';
|
|
4
|
-
import './chunk-NDNNOAS6.js';
|
|
5
|
-
import './chunk-BWPBB45M.js';
|
|
6
|
-
import './chunk-JFGYT6BI.js';
|
|
7
|
-
import './chunk-BPF3YX2U.js';
|
|
8
|
-
import './chunk-Z6ZWNWWR.js';
|
|
9
|
-
//# sourceMappingURL=attach-OCQ3I76L.js.map
|
|
10
|
-
//# sourceMappingURL=attach-OCQ3I76L.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { baselineCommand, runBaseline } from './chunk-5XY4EFR7.js';
|
|
2
|
-
import './chunk-OQT3JBWW.js';
|
|
3
|
-
import './chunk-PVNALGTG.js';
|
|
4
|
-
import './chunk-CRAMOEBE.js';
|
|
5
|
-
import './chunk-T7RSQ5WD.js';
|
|
6
|
-
import './chunk-DHU3OOEI.js';
|
|
7
|
-
import './chunk-Z6ZWNWWR.js';
|
|
8
|
-
//# sourceMappingURL=baseline-QDC6OQ2X.js.map
|
|
9
|
-
//# sourceMappingURL=baseline-QDC6OQ2X.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/code/capability.ts"],"names":[],"mappings":"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","file":"chunk-7N4Y3E47.js","sourcesContent":["/**\n * Local capability + memory pre-flight for `vg code` (VG-CLI-CODE §10).\n *\n * Before we ever pull or run a local model we check the machine can actually\n * hold it: estimate the model's memory footprint from its parameter count and\n * quantization, read available system memory (and GPU VRAM where we can see\n * it), account for models already loaded, and produce a clear go / no-go with\n * actionable suggestions — free memory by unloading a model, pick a smaller\n * quant, or don't install. We never download a model the machine can't run.\n *\n * The estimators and parsers here are pure and unit-tested; the command layer\n * feeds them real `os` memory, `ollama ps`, and (best-effort) `nvidia-smi`\n * output.\n */\n\nconst GiB = 1024 ** 3;\n\n/** Approximate bytes-per-weight for common gguf quantizations. */\nconst QUANT_BYTES_PER_PARAM: Record<string, number> = {\n f16: 2.0, fp16: 2.0, f32: 4.0,\n q8: 1.06, q8_0: 1.06,\n q6: 0.82, q6_k: 0.82,\n q5: 0.7, q5_k_m: 0.72, q5_k_s: 0.68, q5_0: 0.71, q5_1: 0.77,\n q4: 0.58, q4_k_m: 0.6, q4_k_s: 0.56, q4_0: 0.56, q4_1: 0.63,\n q3: 0.46, q3_k_m: 0.48, q3_k_s: 0.44,\n q2: 0.36, q2_k: 0.4,\n};\nconst DEFAULT_QUANT = 'q4_k_m';\n/** Runtime overhead over raw weights: KV cache, context, activations. */\nconst RUNTIME_OVERHEAD = 1.2;\n\nexport interface ModelSizeEstimate {\n /** Parsed parameter count in billions (e.g. 7, 13, 70), or undefined if unknown. */\n paramsB?: number;\n quant: string;\n /** Estimated resident bytes to run the model (weights × quant × overhead). */\n bytes: number;\n /** True when we had to guess the size because the slug didn't state params. */\n guessed: boolean;\n}\n\n/**\n * Estimate a model's memory footprint from its slug/name/tag, e.g.\n * `qwen2.5-coder:7b-instruct-q4_K_M` → ~5 GiB. Falls back to a conservative\n * default size when the parameter count isn't stated.\n */\nexport function estimateModelBytes(slug: string, defaultParamsB = 7): ModelSizeEstimate {\n const lower = slug.toLowerCase();\n const paramMatch = lower.match(/(\\d+(?:\\.\\d+)?)\\s*b\\b/);\n const paramsB = paramMatch ? Number(paramMatch[1]) : undefined;\n const quant = detectQuant(lower);\n const bytesPerParam = QUANT_BYTES_PER_PARAM[quant] ?? QUANT_BYTES_PER_PARAM[DEFAULT_QUANT];\n const effectiveParams = (paramsB ?? defaultParamsB) * 1e9;\n const bytes = Math.round(effectiveParams * bytesPerParam * RUNTIME_OVERHEAD);\n return { paramsB, quant, bytes, guessed: paramsB === undefined };\n}\n\nfunction detectQuant(lower: string): string {\n // Longest key match first so `q4_k_m` beats `q4`.\n const keys = Object.keys(QUANT_BYTES_PER_PARAM).sort((a, b) => b.length - a.length);\n for (const k of keys) if (lower.includes(k)) return k;\n return DEFAULT_QUANT;\n}\n\nexport interface LoadedModel {\n name: string;\n bytes: number;\n}\n\n/**\n * Parse `ollama ps` output into currently-loaded models and their sizes. The\n * table looks like: `NAME ID SIZE PROCESSOR UNTIL` with SIZE like `5.5 GB`.\n */\nexport function parseOllamaPs(stdout: string): LoadedModel[] {\n const lines = stdout.split('\\n').map((l) => l.trim()).filter(Boolean);\n const out: LoadedModel[] = [];\n for (const line of lines) {\n if (/^NAME\\b/i.test(line)) continue; // header\n const sizeMatch = line.match(/(\\d+(?:\\.\\d+)?)\\s*(GB|GiB|MB|MiB|TB)/i);\n const name = line.split(/\\s+/)[0];\n if (!name || !sizeMatch) continue;\n out.push({ name, bytes: toBytes(Number(sizeMatch[1]), sizeMatch[2]) });\n }\n return out;\n}\n\n/** Parse `nvidia-smi --query-gpu=memory.total,memory.used --format=csv,noheader,nounits` (MiB). */\nexport function parseNvidiaSmi(stdout: string): { totalBytes: number; usedBytes: number } | null {\n const line = stdout.split('\\n').map((l) => l.trim()).find(Boolean);\n if (!line) return null;\n const parts = line.split(',').map((p) => Number(p.trim()));\n if (parts.length < 2 || !Number.isFinite(parts[0]) || !Number.isFinite(parts[1])) return null;\n return { totalBytes: parts[0] * 1024 * 1024, usedBytes: parts[1] * 1024 * 1024 };\n}\n\nexport interface SystemMemory {\n totalRamBytes: number;\n /**\n * Bytes available for a new allocation right now (reclaim-aware on macOS/Linux —\n * not bare free pages from `os.freemem()`, which under-reports on macOS).\n */\n freeRamBytes: number;\n /** GPU total/free if a discrete GPU was detected (else undefined → CPU/unified). */\n vramTotalBytes?: number;\n vramFreeBytes?: number;\n loaded: LoadedModel[];\n}\n\nexport interface CapabilityReport {\n model: ModelSizeEstimate;\n /** Bytes available to a new model right now (the larger of free VRAM or free RAM). */\n availableBytes: number;\n /** Bytes available if every currently-loaded model were unloaded. */\n availableIfUnloadedBytes: number;\n canRun: boolean;\n /** True only after unloading currently-loaded models. */\n needsUnload: boolean;\n suggestions: string[];\n loaded: LoadedModel[];\n}\n\n/**\n * Decide whether `model` can run on `sys`, and if not, what to do about it.\n * Prefers GPU memory when a discrete GPU is present, else system RAM (covers\n * Apple-silicon unified memory too). Leaves a safety margin so we don't wedge\n * the machine at 100% memory.\n */\nexport function assessCapability(model: ModelSizeEstimate, sys: SystemMemory): CapabilityReport {\n const useVram = typeof sys.vramTotalBytes === 'number' && sys.vramTotalBytes > 0;\n const free = useVram ? (sys.vramFreeBytes ?? 0) : sys.freeRamBytes;\n const loadedBytes = sys.loaded.reduce((n, m) => n + m.bytes, 0);\n // A margin so we never fill memory completely.\n const margin = Math.min(2 * GiB, (useVram ? sys.vramTotalBytes! : sys.totalRamBytes) * 0.1);\n const available = Math.max(0, free - margin);\n const availableIfUnloaded = Math.max(0, free + loadedBytes - margin);\n\n const need = model.bytes;\n const canRunNow = available >= need;\n const canRunUnloaded = availableIfUnloaded >= need;\n\n const suggestions: string[] = [];\n if (!canRunNow && canRunUnloaded && sys.loaded.length) {\n const biggest = [...sys.loaded].sort((a, b) => b.bytes - a.bytes);\n suggestions.push(`unload a loaded model to free memory (e.g. \\`ollama stop ${biggest[0].name}\\` frees ~${fmt(biggest[0].bytes)})`);\n }\n if (!canRunUnloaded) {\n suggestions.push(`this model needs ~${fmt(need)} but only ~${fmt(availableIfUnloaded)} is available — choose a smaller model or a lower quant (e.g. q4_K_M)`);\n }\n if (model.guessed) {\n suggestions.push(`couldn't read the parameter count from the name — this estimate assumes a ~${(model.bytes / GiB).toFixed(1)} GiB model; verify before pulling`);\n }\n\n return {\n model,\n availableBytes: available,\n availableIfUnloadedBytes: availableIfUnloaded,\n canRun: canRunNow || canRunUnloaded,\n needsUnload: !canRunNow && canRunUnloaded,\n suggestions,\n loaded: sys.loaded,\n };\n}\n\n/** Human-readable byte size. */\nexport function fmt(bytes: number): string {\n if (bytes >= GiB) return `${(bytes / GiB).toFixed(1)} GiB`;\n return `${(bytes / (1024 * 1024)).toFixed(0)} MiB`;\n}\n\nfunction toBytes(n: number, unit: string): number {\n const u = unit.toLowerCase();\n if (u.startsWith('t')) return n * 1000 ** 4;\n if (u.startsWith('g')) return n * (u.includes('i') ? GiB : 1e9);\n if (u.startsWith('m')) return n * (u.includes('i') ? 1024 * 1024 : 1e6);\n return n;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/git-ref.ts"],"names":[],"mappings":"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","file":"chunk-BPF3YX2U.js","sourcesContent":["/**\n * Detect the current git ref for a repository worktree (Fusion §4.1.1).\n *\n * Used to key ActiveGraph slots and on-disk snapshots: one graph per\n * (repositoryId, gitRef), not merely per clone path.\n *\n * Results are cached per absolute root for the process lifetime so a hot path\n * (path resolution, auto-refresh write) never re-spawns `git rev-parse` on\n * every call. The ref only changes when the user checks out another branch —\n * restart `vg serve` (or any long-lived process) after a checkout, same as\n * before this cache existed for slot identity.\n */\n\nimport * as path from 'node:path';\nimport { spawnSync } from 'node:child_process';\n\nexport type GitRefKind = 'branch' | 'detached' | 'none';\n\nexport interface GitRefInfo {\n /** Symbolic branch name, full SHA when detached, or empty when not a git repo. */\n ref: string;\n kind: GitRefKind;\n}\n\nexport type GitRunner = (args: string[], cwd: string) => { stdout: string; status: number };\n\n/** Process-lifetime cache: abs(root) → ref. Bypassed when a custom `run` is passed (tests). */\nconst refCache = new Map<string, GitRefInfo>();\n\n/**\n * Resolve the current branch name, or detached HEAD SHA.\n * Never throws — returns kind `none` when git is missing or the path is not a repo.\n * When `run` is omitted (production), the result is cached per absolute root for\n * the process lifetime. Tests that pass a custom `run` always re-invoke it.\n */\nexport function detectGitRef(root: string, run?: GitRunner): GitRefInfo {\n const useCache = run === undefined;\n const runner = run ?? defaultGitRun;\n const key = useCache ? path.resolve(root) : '';\n if (useCache) {\n const hit = refCache.get(key);\n if (hit) return hit;\n }\n let info: GitRefInfo;\n try {\n const branch = runner(['rev-parse', '--abbrev-ref', 'HEAD'], root);\n if (branch.status !== 0) {\n info = { ref: '', kind: 'none' };\n } else {\n const name = branch.stdout.trim();\n if (!name || name === 'HEAD') {\n const sha = runner(['rev-parse', 'HEAD'], root);\n if (sha.status !== 0 || !sha.stdout.trim()) {\n info = { ref: '', kind: 'none' };\n } else {\n info = { ref: sha.stdout.trim(), kind: 'detached' };\n }\n } else {\n info = { ref: name, kind: 'branch' };\n }\n }\n } catch {\n info = { ref: '', kind: 'none' };\n }\n if (useCache) refCache.set(key, info);\n return info;\n}\n\n/** Tests / rare branch-switch mid-process: drop the cached ref for one root or all. */\nexport function clearDetectGitRefCache(root?: string): void {\n if (root === undefined) refCache.clear();\n else refCache.delete(path.resolve(root));\n}\n\n/**\n * Filesystem-safe snapshot id for a git ref.\n * `main` → `branch-main`; `feature/x` → `branch-feature__x`; SHA → `sha-<40hex>`.\n */\nexport function branchGraphSnapshotId(gitRef: string): string {\n const ref = gitRef.trim();\n if (!ref) return 'current';\n if (/^[0-9a-f]{40}$/i.test(ref)) return `sha-${ref.toLowerCase()}`;\n // Branch names may contain /, spaces, etc. — collapse to a single path segment.\n const safe = ref\n .replace(/\\\\/g, '/')\n .replace(/\\/+/g, '__')\n .replace(/[^A-Za-z0-9._@+-]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .slice(0, 120);\n return `branch-${safe || 'unnamed'}`;\n}\n\n/** Stable cache key for an ActiveGraph slot. */\nexport function activeGraphSlotKey(repositoryId: string, gitRef: string): string {\n return `${repositoryId}::${gitRef.trim() || 'unknown'}`;\n}\n\nfunction defaultGitRun(args: string[], cwd: string): { stdout: string; status: number } {\n const res = spawnSync('git', args, {\n cwd,\n encoding: 'utf8',\n timeout: 5_000,\n maxBuffer: 1024 * 1024,\n });\n return { stdout: res.stdout ?? '', status: res.status ?? 1 };\n}\n"]}
|