pi-zro-provider 1.3.13 → 1.3.15
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 +12 -1
- package/deprecated-models.json +30 -0
- package/index.ts +58 -11
- package/models.json +2 -2
- package/package.json +9 -9
- package/status.ts +79 -13
- package/tests/status.smoke.ts +55 -10
- package/bun.lock +0 -342
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ _GLM-5.2, Kimi K3, and DeepSeek V4 / V4.1 Flash — run through the Zro inferenc
|
|
|
15
15
|
|
|
16
16
|
## Features
|
|
17
17
|
|
|
18
|
-
- **
|
|
18
|
+
- **9+ AI Models** — GLM-5.2 (default), Kimi K3, DeepSeek V4 Flash, and DeepSeek V4.1 Flash, straight from Zro's production catalog
|
|
19
19
|
- **Native reasoning effort** — every model ships an endpoint-verified `piLevel` → level-id map (`glm-5.2`, `glm-5.3-flash`, `deepseek-v4-flash-0731`: full `off`–`max` ladder; `deepseek-v4.1-flash`: `low`/`high`/`max` — catalog has no `none`, and `xhigh`/`max` both send `max`; `kimi-k3`: `low`/`high`/`max` — the proxy rejects `medium` there), so `/thinking low` etc. maps exactly to what the Zro proxy accepts. Quirks: `glm-5.3-flash` silently disables thinking at `low`, so `minimal`/`low` map to `minimal`; `glm-5.3` mirrors flash's full ladder — Z.ai officially removed `none` for the 5.3 family, but the proxy accepts it and streams cleanly (occasionally a short chain-of-thought preamble surfaces in `content` before the answer), and `xhigh`/`max` both send `max`
|
|
20
20
|
- **OpenAI-compatible API** at `https://zro.moonmath.ai/v1`
|
|
21
21
|
- **Official catalog sync** from Zro's `/api/cli/models` endpoint — same one `zro models` uses
|
|
@@ -30,6 +30,7 @@ _GLM-5.2, Kimi K3, and DeepSeek V4 / V4.1 Flash — run through the Zro inferenc
|
|
|
30
30
|
| DeepSeek V4 Flash | Text | 1.0M | 384K | $0.14 | $0.28 |
|
|
31
31
|
| DeepSeek V4.1 Flash | Text + Image | 1.0M | 384K | $0.14 | $0.28 |
|
|
32
32
|
| Dolly 1 | Text | 1.0M | 64K | — | — |
|
|
33
|
+
| Dolly 1 Security | Text | 1.0M | 64K | — | — |
|
|
33
34
|
| GLM-5.2 | Text | 524K | 64K | $1.10 | $4.00 |
|
|
34
35
|
| GLM-5.3 | Text | 1.0M | 131K | $1.40 | $4.40 |
|
|
35
36
|
| GLM-5.3 Flash | Text + Image | 1.0M | 64K | $0.15 | $0.50 |
|
|
@@ -148,6 +149,7 @@ Edit `~/.pi/agent/extensions/zro.json` or run `/zro-status`:
|
|
|
148
149
|
| `account` | `widget` \| `statusbar` \| `off` | `widget` |
|
|
149
150
|
| `hideOnOtherProvider` | `true` \| `false` | `true` |
|
|
150
151
|
| `lowBalanceUsd` | number \| `null` | `10` |
|
|
152
|
+
| `glyphs` | `auto` \| `unicode` \| `ascii` | `auto` |
|
|
151
153
|
|
|
152
154
|
Non-interactive toggles:
|
|
153
155
|
|
|
@@ -156,10 +158,19 @@ Non-interactive toggles:
|
|
|
156
158
|
/zro-status account widget|statusbar|off
|
|
157
159
|
/zro-status hide true|false
|
|
158
160
|
/zro-status lowBalance 25|off
|
|
161
|
+
/zro-status glyphs auto|unicode|ascii
|
|
159
162
|
/zro-status refresh
|
|
160
163
|
/zro-status reset
|
|
161
164
|
```
|
|
162
165
|
|
|
166
|
+
`glyphs: "auto"` swaps the emoji footer glyphs (bolt, gem, warn, separator) for ASCII equivalents on
|
|
167
|
+
legacy terminals (mintty/Cygwin), whose cell-width tables can disagree with the
|
|
168
|
+
extension's width math. On those terminals a full-width widget line can wrap
|
|
169
|
+
physically, which desynchronizes pi's renderer and leaves stale rows behind.
|
|
170
|
+
The widget also never paints the terminal's last column, and clamps an explicit
|
|
171
|
+
`unicode` choice to ASCII on legacy terminals; the statusbar is not edge-padded
|
|
172
|
+
and always honors the exact choice.
|
|
173
|
+
|
|
163
174
|
|
|
164
175
|
## Authentication
|
|
165
176
|
|
package/deprecated-models.json
CHANGED
|
@@ -29,5 +29,35 @@
|
|
|
29
29
|
"maxTokensField": "max_tokens"
|
|
30
30
|
},
|
|
31
31
|
"deprecatedAt": "2026-09-12T02:00:31.341Z"
|
|
32
|
+
},
|
|
33
|
+
"dolly1": {
|
|
34
|
+
"id": "dolly1",
|
|
35
|
+
"name": "Dolly 1",
|
|
36
|
+
"reasoning": true,
|
|
37
|
+
"thinkingLevelMap": {
|
|
38
|
+
"off": "none",
|
|
39
|
+
"minimal": null,
|
|
40
|
+
"low": null,
|
|
41
|
+
"medium": null,
|
|
42
|
+
"high": "high",
|
|
43
|
+
"xhigh": "max"
|
|
44
|
+
},
|
|
45
|
+
"input": [
|
|
46
|
+
"text"
|
|
47
|
+
],
|
|
48
|
+
"cost": {
|
|
49
|
+
"input": 0,
|
|
50
|
+
"output": 0,
|
|
51
|
+
"cacheRead": 0,
|
|
52
|
+
"cacheWrite": 0
|
|
53
|
+
},
|
|
54
|
+
"contextWindow": 1048576,
|
|
55
|
+
"maxTokens": 64000,
|
|
56
|
+
"compat": {
|
|
57
|
+
"supportsDeveloperRole": false,
|
|
58
|
+
"supportsReasoningEffort": true,
|
|
59
|
+
"maxTokensField": "max_tokens"
|
|
60
|
+
},
|
|
61
|
+
"deprecatedAt": "2026-09-15T02:00:30.252Z"
|
|
32
62
|
}
|
|
33
63
|
}
|
package/index.ts
CHANGED
|
@@ -53,7 +53,8 @@
|
|
|
53
53
|
* "session": "widget", // "widget" | "statusbar" | "off"
|
|
54
54
|
* "account": "widget", // "widget" | "statusbar" | "off"
|
|
55
55
|
* "hideOnOtherProvider": true, // hide when a non-Zro model is active
|
|
56
|
-
* "lowBalanceUsd": 10
|
|
56
|
+
* "lowBalanceUsd": 10, // warn threshold, null/false disables
|
|
57
|
+
* "glyphs": "auto" // "auto" | "unicode" | "ascii"
|
|
57
58
|
* }
|
|
58
59
|
*
|
|
59
60
|
* - "widget" (default): rendered in the below-editor status line
|
|
@@ -65,6 +66,14 @@
|
|
|
65
66
|
* /zro-status account widget|statusbar|off
|
|
66
67
|
* /zro-status hide true|false
|
|
67
68
|
* /zro-status lowBalance <usd>|off
|
|
69
|
+
* /zro-status glyphs auto|unicode|ascii
|
|
70
|
+
*
|
|
71
|
+
* - glyphs "auto" swaps the emoji footer glyphs (bolt, gem, warn) for
|
|
72
|
+
* terminals (mintty/Cygwin), whose cell-width tables disagree with the
|
|
73
|
+
* width math and wrap the full-width widget line. "unicode"/"ascii"
|
|
74
|
+
* force a set. The widget never paints the terminal's last column, and
|
|
75
|
+
* clamps an explicit "unicode" to ASCII on legacy terminals; the
|
|
76
|
+
* statusbar is not edge-padded and honors the explicit choice.
|
|
68
77
|
* /zro-status refresh (re-fetch account status now)
|
|
69
78
|
* /zro-status reset
|
|
70
79
|
*
|
|
@@ -105,8 +114,11 @@ import {
|
|
|
105
114
|
EMPTY_SESSION_STATS,
|
|
106
115
|
StatusLineWidget,
|
|
107
116
|
accountHasData,
|
|
117
|
+
resolveGlyphSet,
|
|
118
|
+
resolveWidgetGlyphSet,
|
|
108
119
|
type AccountState,
|
|
109
120
|
type SessionStats,
|
|
121
|
+
type GlyphSet,
|
|
110
122
|
type StatusConfig,
|
|
111
123
|
} from "./status";
|
|
112
124
|
import fs from "fs";
|
|
@@ -467,6 +479,7 @@ function writeStatusConfig(): void {
|
|
|
467
479
|
raw.account = statusConfig.account;
|
|
468
480
|
raw.hideOnOtherProvider = statusConfig.hideOnOtherProvider;
|
|
469
481
|
raw.lowBalanceUsd = statusConfig.lowBalanceUsd;
|
|
482
|
+
raw.glyphs = statusConfig.glyphs;
|
|
470
483
|
fs.mkdirSync(path.dirname(CONFIG_PATH), { recursive: true });
|
|
471
484
|
fs.writeFileSync(CONFIG_PATH, JSON.stringify(raw, null, 2) + "\n");
|
|
472
485
|
} catch {
|
|
@@ -494,6 +507,7 @@ let sessionStartedAt = 0;
|
|
|
494
507
|
let pendingSawUsage = false;
|
|
495
508
|
let pendingSawOutOfCredits = false;
|
|
496
509
|
let outOfCreditsNotified = false;
|
|
510
|
+
let widgetGlyphClampNotified = false;
|
|
497
511
|
|
|
498
512
|
const teeReaders = new Set<Promise<void>>();
|
|
499
513
|
|
|
@@ -760,21 +774,32 @@ function renderStatus(ctx: ExtensionContext): void {
|
|
|
760
774
|
}
|
|
761
775
|
|
|
762
776
|
const hasActivity = sessionStats.requests > 0 || sessionStats.spend > 0;
|
|
763
|
-
|
|
777
|
+
// Legacy terminals measure ⚡ ◆ ⚠ with their own cell tables; the widget
|
|
778
|
+
// clamps to ASCII there, the statusbar keeps the user's explicit choice.
|
|
779
|
+
const glyphs = resolveGlyphSet(statusConfig.glyphs);
|
|
780
|
+
const widgetGlyphs = resolveWidgetGlyphSet(statusConfig.glyphs);
|
|
781
|
+
const widgetClamped = widgetGlyphs !== glyphs;
|
|
782
|
+
if (widgetClamped && !widgetGlyphClampNotified && ctx.hasUI) {
|
|
783
|
+
widgetGlyphClampNotified = true;
|
|
784
|
+
ctx.ui.notify("Zro: widget glyphs stay ASCII on this terminal — unicode ⚡ ◆ ⚠ overflow legacy mintty/Cygwin cell widths. Statusbar is unaffected.", "info");
|
|
785
|
+
}
|
|
764
786
|
// Show only after Zro activity this session (like pi-neuralwatt):
|
|
765
787
|
// no empty-gap line on fresh sessions, no stale account glare on other
|
|
766
788
|
// providers' sessions.
|
|
767
789
|
const accountVisible = statusConfig.account !== "off" && accountHasData(account) && hasActivity;
|
|
768
790
|
const lowBalance =
|
|
769
791
|
statusConfig.lowBalanceUsd !== null && account.availableUsd !== null && account.availableUsd <= statusConfig.lowBalanceUsd;
|
|
770
|
-
const
|
|
792
|
+
const sessionLine = statusConfig.session !== "off" ? buildSessionLine(sessionStats, glyphs) : undefined;
|
|
793
|
+
const accTiers = accountVisible ? buildAccountTiers(account, lowBalance, glyphs) : [];
|
|
794
|
+
const sessionLineW = widgetClamped && statusConfig.session !== "off" ? buildSessionLine(sessionStats, widgetGlyphs) : sessionLine;
|
|
795
|
+
const accTiersW = widgetClamped && accountVisible ? buildAccountTiers(account, lowBalance, widgetGlyphs) : accTiers;
|
|
771
796
|
|
|
772
797
|
// Status bar (built-in footer slots)
|
|
773
798
|
const sBar = statusConfig.session === "statusbar" ? sessionLine : undefined;
|
|
774
799
|
const aBar = statusConfig.account === "statusbar" && accountVisible ? accTiers[0] : undefined;
|
|
775
800
|
if (sBar && aBar) {
|
|
776
801
|
// Combined to avoid eating two footer slots
|
|
777
|
-
ctx.ui.setStatus(STATUS_KEY_SESSION, ctx.ui.theme.fg(lowBalance ? "warning" : "dim", `${sBar}
|
|
802
|
+
ctx.ui.setStatus(STATUS_KEY_SESSION, ctx.ui.theme.fg(lowBalance ? "warning" : "dim", `${sBar} ${glyphs.sep} ${aBar}`));
|
|
778
803
|
ctx.ui.setStatus(STATUS_KEY_ACCOUNT, undefined);
|
|
779
804
|
} else {
|
|
780
805
|
ctx.ui.setStatus(STATUS_KEY_SESSION, sBar ? ctx.ui.theme.fg("dim", sBar) : undefined);
|
|
@@ -782,17 +807,17 @@ function renderStatus(ctx: ExtensionContext): void {
|
|
|
782
807
|
}
|
|
783
808
|
|
|
784
809
|
// Below-editor widget (two-zone, width-aware)
|
|
785
|
-
const leftW = statusConfig.session === "widget" ?
|
|
786
|
-
const rightW = statusConfig.account === "widget" && accountVisible ?
|
|
810
|
+
const leftW = statusConfig.session === "widget" ? sessionLineW : undefined;
|
|
811
|
+
const rightW = statusConfig.account === "widget" && accountVisible ? accTiersW : undefined;
|
|
787
812
|
if (leftW !== undefined || (rightW !== undefined && rightW.length > 0)) {
|
|
788
813
|
ctx.ui.setWidget(
|
|
789
814
|
WIDGET_KEY,
|
|
790
|
-
(_tui: any, theme: any) => new StatusLineWidget(theme, leftW ?? "", rightW ?? [], lowBalance),
|
|
815
|
+
(_tui: any, theme: any) => new StatusLineWidget(theme, leftW ?? "", rightW ?? [], lowBalance, widgetGlyphs),
|
|
791
816
|
{ placement: "belowEditor" },
|
|
792
817
|
);
|
|
793
|
-
|
|
818
|
+
} else {
|
|
794
819
|
ctx.ui.setWidget(WIDGET_KEY, undefined);
|
|
795
|
-
|
|
820
|
+
}
|
|
796
821
|
}
|
|
797
822
|
|
|
798
823
|
function resetStatusState(): void {
|
|
@@ -842,11 +867,11 @@ function commitPending(ctx: ExtensionContext): void {
|
|
|
842
867
|
|
|
843
868
|
function statusSummary(): string {
|
|
844
869
|
const lb = statusConfig.lowBalanceUsd === null ? "off" : `${statusConfig.lowBalanceUsd}`;
|
|
845
|
-
return `session=${statusConfig.session}, account=${statusConfig.account}, hideOnOtherProvider=${statusConfig.hideOnOtherProvider}, lowBalanceUsd=${lb}`;
|
|
870
|
+
return `session=${statusConfig.session}, account=${statusConfig.account}, hideOnOtherProvider=${statusConfig.hideOnOtherProvider}, lowBalanceUsd=${lb}, glyphs=${statusConfig.glyphs}`;
|
|
846
871
|
}
|
|
847
872
|
|
|
848
873
|
const STATUS_USAGE =
|
|
849
|
-
"Usage: /zro-status [session|account widget|statusbar|off · hide true|false · lowBalance <usd>|off · refresh · reset]";
|
|
874
|
+
"Usage: /zro-status [session|account widget|statusbar|off · hide true|false · lowBalance <usd>|off · glyphs auto|unicode|ascii · refresh · reset]";
|
|
850
875
|
|
|
851
876
|
async function handleStatusCommand(args: string, ctx: ExtensionContext): Promise<void> {
|
|
852
877
|
const tokens = args.trim().split(/\s+/).filter(Boolean);
|
|
@@ -926,12 +951,26 @@ async function handleStatusCommand(args: string, ctx: ExtensionContext): Promise
|
|
|
926
951
|
return;
|
|
927
952
|
}
|
|
928
953
|
|
|
954
|
+
if (key === "glyphs" && tokens.length === 2) {
|
|
955
|
+
if (value !== "auto" && value !== "unicode" && value !== "ascii") {
|
|
956
|
+
ctx.ui.notify(STATUS_USAGE, "error");
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
statusConfig.glyphs = value;
|
|
960
|
+
writeStatusConfig();
|
|
961
|
+
updateStatus(ctx);
|
|
962
|
+
ctx.ui.notify(`Zro status. ${statusSummary()}`, "info");
|
|
963
|
+
return;
|
|
964
|
+
}
|
|
965
|
+
|
|
929
966
|
ctx.ui.notify(STATUS_USAGE, "error");
|
|
930
967
|
}
|
|
931
968
|
|
|
932
969
|
async function configureStatusInteractive(ctx: ExtensionContext): Promise<void> {
|
|
933
970
|
const modes = ["widget", "statusbar", "off"] as const;
|
|
934
971
|
const nextMode = (m: string) => modes[(modes.indexOf(m as any) + 1) % modes.length];
|
|
972
|
+
const glyphModes = ["auto", "unicode", "ascii"] as const;
|
|
973
|
+
const nextGlyphMode = () => glyphModes[(glyphModes.indexOf(statusConfig.glyphs as any) + 1) % glyphModes.length];
|
|
935
974
|
|
|
936
975
|
for (;;) {
|
|
937
976
|
const lb = statusConfig.lowBalanceUsd === null ? "off" : `$${statusConfig.lowBalanceUsd}`;
|
|
@@ -939,6 +978,7 @@ async function configureStatusInteractive(ctx: ExtensionContext): Promise<void>
|
|
|
939
978
|
const accountOpt = `Account line (plan/balance/packs/activity): ${statusConfig.account}`;
|
|
940
979
|
const hideOpt = `Hide on other providers: ${statusConfig.hideOnOtherProvider ? "on" : "off"}`;
|
|
941
980
|
const lbOpt = `Low-balance warning: ${lb}`;
|
|
981
|
+
const glyphOpt = `Glyphs (legacy terminals): ${statusConfig.glyphs}`;
|
|
942
982
|
const refreshOpt = "Refresh account status now";
|
|
943
983
|
const doneOpt = "Done";
|
|
944
984
|
|
|
@@ -947,6 +987,7 @@ async function configureStatusInteractive(ctx: ExtensionContext): Promise<void>
|
|
|
947
987
|
accountOpt,
|
|
948
988
|
hideOpt,
|
|
949
989
|
lbOpt,
|
|
990
|
+
glyphOpt,
|
|
950
991
|
refreshOpt,
|
|
951
992
|
doneOpt,
|
|
952
993
|
]);
|
|
@@ -986,6 +1027,12 @@ async function configureStatusInteractive(ctx: ExtensionContext): Promise<void>
|
|
|
986
1027
|
}
|
|
987
1028
|
continue;
|
|
988
1029
|
}
|
|
1030
|
+
if (choice === glyphOpt) {
|
|
1031
|
+
statusConfig.glyphs = nextGlyphMode();
|
|
1032
|
+
writeStatusConfig();
|
|
1033
|
+
updateStatus(ctx);
|
|
1034
|
+
continue;
|
|
1035
|
+
}
|
|
989
1036
|
if (choice === refreshOpt) {
|
|
990
1037
|
metaFetched = false;
|
|
991
1038
|
await refreshAccountStatus(cachedApiKey, statusAbort?.signal ?? undefined, true);
|
package/models.json
CHANGED
package/package.json
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-zro-provider",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.15",
|
|
4
4
|
"description": "Zro provider extension for pi - GLM-5.2, GLM-5.3 Flash, Kimi K3, DeepSeek V4 Flash & DeepSeek V4.1 Flash through the Zro inference endpoint",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"clean": "echo 'nothing to clean'",
|
|
9
|
+
"build": "echo 'nothing to build'",
|
|
10
|
+
"check": "tsc --noEmit && node tests/status.smoke.ts",
|
|
11
|
+
"smoke": "node tests/status.smoke.ts",
|
|
12
|
+
"update-models": "node scripts/update-models.js"
|
|
13
|
+
},
|
|
7
14
|
"keywords": [
|
|
8
15
|
"pi",
|
|
9
16
|
"extension",
|
|
@@ -30,12 +37,5 @@
|
|
|
30
37
|
"@earendil-works/pi-coding-agent": "0.85.1",
|
|
31
38
|
"@types/node": "^24.10.1",
|
|
32
39
|
"typescript": "6.0.3"
|
|
33
|
-
},
|
|
34
|
-
"scripts": {
|
|
35
|
-
"clean": "echo 'nothing to clean'",
|
|
36
|
-
"build": "echo 'nothing to build'",
|
|
37
|
-
"check": "tsc --noEmit && node tests/status.smoke.ts",
|
|
38
|
-
"smoke": "node tests/status.smoke.ts",
|
|
39
|
-
"update-models": "node scripts/update-models.js"
|
|
40
40
|
}
|
|
41
|
-
}
|
|
41
|
+
}
|
package/status.ts
CHANGED
|
@@ -15,15 +15,68 @@
|
|
|
15
15
|
* that fits the remaining width, and as a last resort truncates the minimal
|
|
16
16
|
* tier. Width math counts only terminal-visible columns (ANSI-aware, wide
|
|
17
17
|
* glyphs like ⚡ ⚠ measure 2 columns).
|
|
18
|
+
*
|
|
19
|
+
* Terminal safety (legacy terminals, mintty/Cygwin):
|
|
20
|
+
* - Glyphs degrade to ASCII when auto-detection matches a legacy terminal
|
|
21
|
+
* or when the glyphs config asks for it (see GlyphMode). Older mintty
|
|
22
|
+
* builds measure ⚡ ◆ ⚠ with cell tables that disagree with the ones
|
|
23
|
+
* above; the statusbar absorbs that (its lines are not edge-padded) but
|
|
24
|
+
* the full-width widget line wraps, which desyncs pi's row bookkeeping.
|
|
25
|
+
* - render() budgets width − 1, so the widget never paints the terminal's
|
|
26
|
+
* last column (the classic pending-wrap hazard).
|
|
18
27
|
*/
|
|
19
28
|
|
|
20
29
|
export type DisplayMode = "widget" | "statusbar" | "off";
|
|
21
30
|
|
|
31
|
+
export type GlyphMode = "auto" | "unicode" | "ascii";
|
|
32
|
+
|
|
33
|
+
export interface GlyphSet {
|
|
34
|
+
bolt: string;
|
|
35
|
+
gem: string;
|
|
36
|
+
warn: string;
|
|
37
|
+
sep: string;
|
|
38
|
+
ellipsis: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const UNICODE_GLYPHS: GlyphSet = { bolt: "⚡", gem: "◆", warn: "⚠", sep: "·", ellipsis: "…" };
|
|
42
|
+
export const ASCII_GLYPHS: GlyphSet = { bolt: "*", gem: "+", warn: "!", sep: "-", ellipsis: "..." };
|
|
43
|
+
|
|
44
|
+
/** True for terminals whose cell-width tables are known to disagree with the
|
|
45
|
+
* width math below (older mintty/Cygwin builds). */
|
|
46
|
+
export function detectLegacyTerminal(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
47
|
+
const termProgram = env.TERM_PROGRAM ?? "";
|
|
48
|
+
const term = env.TERM ?? "";
|
|
49
|
+
return (
|
|
50
|
+
termProgram === "mintty" ||
|
|
51
|
+
termProgram === "cygwin" ||
|
|
52
|
+
termProgram === "msys" ||
|
|
53
|
+
term.startsWith("cygwin") ||
|
|
54
|
+
term.startsWith("msys")
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function resolveGlyphSet(mode: GlyphMode, env: NodeJS.ProcessEnv = process.env): GlyphSet {
|
|
59
|
+
if (mode === "unicode") return UNICODE_GLYPHS;
|
|
60
|
+
if (mode === "ascii") return ASCII_GLYPHS;
|
|
61
|
+
return detectLegacyTerminal(env) ? ASCII_GLYPHS : UNICODE_GLYPHS;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Widget content is edge-padded to the terminal width, so a glyph the
|
|
65
|
+
* terminal measures wider than termVisWidth() does wraps the line and
|
|
66
|
+
* corrupts pi's differential renderer. An explicit "unicode" choice is
|
|
67
|
+
* therefore clamped to ASCII for widget content on legacy terminals;
|
|
68
|
+
* statusbar content is not edge-padded and keeps the caller's choice. */
|
|
69
|
+
export function resolveWidgetGlyphSet(mode: GlyphMode, env: NodeJS.ProcessEnv = process.env): GlyphSet {
|
|
70
|
+
if (mode === "unicode" && detectLegacyTerminal(env)) return ASCII_GLYPHS;
|
|
71
|
+
return resolveGlyphSet(mode, env);
|
|
72
|
+
}
|
|
73
|
+
|
|
22
74
|
export interface StatusConfig {
|
|
23
75
|
session: DisplayMode;
|
|
24
76
|
account: DisplayMode;
|
|
25
77
|
hideOnOtherProvider: boolean;
|
|
26
78
|
lowBalanceUsd: number | null;
|
|
79
|
+
glyphs: GlyphMode;
|
|
27
80
|
}
|
|
28
81
|
|
|
29
82
|
export const DEFAULT_STATUS_CONFIG: StatusConfig = {
|
|
@@ -31,14 +84,20 @@ export const DEFAULT_STATUS_CONFIG: StatusConfig = {
|
|
|
31
84
|
account: "widget",
|
|
32
85
|
hideOnOtherProvider: true,
|
|
33
86
|
lowBalanceUsd: 10,
|
|
87
|
+
glyphs: "auto",
|
|
34
88
|
};
|
|
35
89
|
|
|
36
90
|
const VALID_MODES = new Set<string>(["widget", "statusbar", "off"]);
|
|
91
|
+
const VALID_GLYPH_MODES = new Set<string>(["auto", "unicode", "ascii"]);
|
|
37
92
|
|
|
38
93
|
function coerceMode(value: unknown, fallback: DisplayMode): DisplayMode {
|
|
39
94
|
return typeof value === "string" && VALID_MODES.has(value) ? (value as DisplayMode) : fallback;
|
|
40
95
|
}
|
|
41
96
|
|
|
97
|
+
function coerceGlyphMode(value: unknown, fallback: GlyphMode): GlyphMode {
|
|
98
|
+
return typeof value === "string" && VALID_GLYPH_MODES.has(value) ? (value as GlyphMode) : fallback;
|
|
99
|
+
}
|
|
100
|
+
|
|
42
101
|
export function coerceStatusConfig(raw: unknown): StatusConfig {
|
|
43
102
|
const d = DEFAULT_STATUS_CONFIG;
|
|
44
103
|
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return { ...d };
|
|
@@ -53,6 +112,7 @@ export function coerceStatusConfig(raw: unknown): StatusConfig {
|
|
|
53
112
|
: r.lowBalanceUsd === null || r.lowBalanceUsd === false
|
|
54
113
|
? null
|
|
55
114
|
: d.lowBalanceUsd,
|
|
115
|
+
glyphs: coerceGlyphMode(r.glyphs, d.glyphs),
|
|
56
116
|
};
|
|
57
117
|
}
|
|
58
118
|
|
|
@@ -139,13 +199,13 @@ export function formatCount(n: number): string {
|
|
|
139
199
|
}
|
|
140
200
|
|
|
141
201
|
// Line builders
|
|
142
|
-
export function buildSessionLine(stats: SessionStats): string | undefined {
|
|
202
|
+
export function buildSessionLine(stats: SessionStats, glyphs: GlyphSet = UNICODE_GLYPHS): string | undefined {
|
|
143
203
|
if (stats.requests <= 0 && stats.spend <= 0) return undefined;
|
|
144
204
|
const atoms: string[] = [];
|
|
145
205
|
if (stats.spend > 0) atoms.push(formatUsd(stats.spend));
|
|
146
206
|
atoms.push(`${stats.requests} req`);
|
|
147
207
|
if (stats.elapsedMs > 0) atoms.push(formatDuration(stats.elapsedMs));
|
|
148
|
-
return
|
|
208
|
+
return `${glyphs.bolt} ${atoms.join(` ${glyphs.sep} `)}`;
|
|
149
209
|
}
|
|
150
210
|
|
|
151
211
|
export function accountHasData(acc: AccountState): boolean {
|
|
@@ -160,8 +220,8 @@ export function accountHasData(acc: AccountState): boolean {
|
|
|
160
220
|
);
|
|
161
221
|
}
|
|
162
222
|
|
|
163
|
-
export function buildAccountTiers(acc: AccountState, lowBalance: boolean): string[] {
|
|
164
|
-
const gem = lowBalance ?
|
|
223
|
+
export function buildAccountTiers(acc: AccountState, lowBalance: boolean, glyphs: GlyphSet = UNICODE_GLYPHS): string[] {
|
|
224
|
+
const gem = lowBalance ? `${glyphs.warn} ${glyphs.gem}` : glyphs.gem;
|
|
165
225
|
const bal = acc.availableUsd !== null ? `${gem} ${formatUsd(acc.availableUsd)} avail` : undefined;
|
|
166
226
|
const plan = acc.planName?.trim() || undefined;
|
|
167
227
|
const pack = acc.usagePackUsd !== null && acc.usagePackUsd > 0 ? `${formatUsd(acc.usagePackUsd)} pack` : undefined;
|
|
@@ -171,7 +231,7 @@ export function buildAccountTiers(acc: AccountState, lowBalance: boolean): strin
|
|
|
171
231
|
const head = [plan, bal].filter((p): p is string => !!p).join(" ") || undefined;
|
|
172
232
|
const numOnly = acc.availableUsd !== null ? formatUsd(acc.availableUsd) : undefined;
|
|
173
233
|
|
|
174
|
-
const join = (parts: (string | undefined)[]) => parts.filter((p): p is string => !!p).join(
|
|
234
|
+
const join = (parts: (string | undefined)[]) => parts.filter((p): p is string => !!p).join(` ${glyphs.sep} `);
|
|
175
235
|
|
|
176
236
|
const tiers: string[] = [
|
|
177
237
|
join([head, pack, actTok, actReq, rate]),
|
|
@@ -233,7 +293,7 @@ export function termVisWidth(str: string): number {
|
|
|
233
293
|
return width;
|
|
234
294
|
}
|
|
235
295
|
|
|
236
|
-
export function truncateAnsi(str: string, maxCols: number): string {
|
|
296
|
+
export function truncateAnsi(str: string, maxCols: number, ellipsis = "…"): string {
|
|
237
297
|
if (maxCols <= 0) return "";
|
|
238
298
|
if (termVisWidth(str) <= maxCols) return str;
|
|
239
299
|
let result = "";
|
|
@@ -263,7 +323,7 @@ export function truncateAnsi(str: string, maxCols: number): string {
|
|
|
263
323
|
visWidth += charWidth;
|
|
264
324
|
i += cp > 0xffff ? 2 : 1;
|
|
265
325
|
}
|
|
266
|
-
return result +
|
|
326
|
+
return result + ellipsis;
|
|
267
327
|
}
|
|
268
328
|
|
|
269
329
|
export interface LineTheme {
|
|
@@ -275,35 +335,41 @@ export class StatusLineWidget {
|
|
|
275
335
|
private leftRaw: string;
|
|
276
336
|
private rightTiers: string[];
|
|
277
337
|
private rightWarn: boolean;
|
|
338
|
+
private glyphs: GlyphSet;
|
|
278
339
|
|
|
279
|
-
constructor(theme: LineTheme, leftRaw: string, rightTiers: string[] = [], rightWarn = false) {
|
|
340
|
+
constructor(theme: LineTheme, leftRaw: string, rightTiers: string[] = [], rightWarn = false, glyphs: GlyphSet = UNICODE_GLYPHS) {
|
|
280
341
|
this.theme = theme;
|
|
281
342
|
this.leftRaw = leftRaw;
|
|
282
343
|
this.rightTiers = rightTiers;
|
|
283
344
|
this.rightWarn = rightWarn;
|
|
345
|
+
this.glyphs = glyphs;
|
|
284
346
|
}
|
|
285
347
|
|
|
286
348
|
invalidate(): void {}
|
|
287
349
|
|
|
288
350
|
render(width: number): string[] {
|
|
351
|
+
// Never paint the terminal's last column: writing the final cell marks a
|
|
352
|
+
// pending wrap on legacy terminals, and any real-vs-table width
|
|
353
|
+
// disagreement then scrolls the frame and desyncs pi's row bookkeeping.
|
|
354
|
+
const w = Math.max(1, width - 1);
|
|
289
355
|
const leftVis = termVisWidth(this.leftRaw);
|
|
290
|
-
if (leftVis >
|
|
291
|
-
return [this.theme.fg("dim", truncateAnsi(this.leftRaw,
|
|
356
|
+
if (leftVis > w) {
|
|
357
|
+
return [this.theme.fg("dim", truncateAnsi(this.leftRaw, w, this.glyphs.ellipsis))];
|
|
292
358
|
}
|
|
293
359
|
|
|
294
360
|
const rightColor = this.rightWarn ? "warning" : "dim";
|
|
295
361
|
const themedLeft = this.theme.fg("dim", this.leftRaw);
|
|
296
|
-
const budget =
|
|
362
|
+
const budget = w - leftVis - 1;
|
|
297
363
|
|
|
298
364
|
for (const tier of this.rightTiers) {
|
|
299
365
|
if (termVisWidth(tier) <= budget) {
|
|
300
366
|
const themedRight = this.theme.fg(rightColor, tier);
|
|
301
|
-
const pad =
|
|
367
|
+
const pad = w - termVisWidth(themedLeft) - termVisWidth(themedRight);
|
|
302
368
|
return [themedLeft + " ".repeat(Math.max(1, pad)) + themedRight];
|
|
303
369
|
}
|
|
304
370
|
}
|
|
305
371
|
|
|
306
|
-
const pad =
|
|
372
|
+
const pad = w - termVisWidth(themedLeft);
|
|
307
373
|
return [themedLeft + " ".repeat(Math.max(0, pad))];
|
|
308
374
|
}
|
|
309
375
|
}
|
package/tests/status.smoke.ts
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import assert from "node:assert/strict";
|
|
8
8
|
import {
|
|
9
|
+
ASCII_GLYPHS,
|
|
9
10
|
EMPTY_ACCOUNT,
|
|
10
11
|
StatusLineWidget,
|
|
11
12
|
accountHasData,
|
|
13
|
+
detectLegacyTerminal,
|
|
12
14
|
applyOptimisticSpend,
|
|
13
15
|
buildAccountTiers,
|
|
14
16
|
buildSessionLine,
|
|
@@ -17,6 +19,9 @@ import {
|
|
|
17
19
|
formatDuration,
|
|
18
20
|
formatTokens,
|
|
19
21
|
formatUsd,
|
|
22
|
+
resolveGlyphSet,
|
|
23
|
+
resolveWidgetGlyphSet,
|
|
24
|
+
UNICODE_GLYPHS,
|
|
20
25
|
termVisWidth,
|
|
21
26
|
truncateAnsi,
|
|
22
27
|
type AccountState,
|
|
@@ -103,36 +108,38 @@ assert.equal(truncateAnsi("abc", 0), "");
|
|
|
103
108
|
const left = buildSessionLine({ requests: 7, spend: 0.42, elapsedMs: 0 })!;
|
|
104
109
|
const widget = new StatusLineWidget(fakeTheme, left, tiers, false);
|
|
105
110
|
|
|
106
|
-
// Wide: full tier, left-right justified
|
|
111
|
+
// Wide: full tier, left-right justified at width − 1 (the widget never
|
|
112
|
+
// paints the terminal's last column — legacy terminals treat that cell as a
|
|
113
|
+
// pending wrap).
|
|
107
114
|
const wide = widget.render(80);
|
|
108
115
|
assert.equal(wide.length, 1);
|
|
109
|
-
assert.equal(termVisWidth(wide[0]),
|
|
110
|
-
assert.ok(stripAnsi(wide[0]).startsWith("
|
|
116
|
+
assert.equal(termVisWidth(wide[0]), 79);
|
|
117
|
+
assert.ok(stripAnsi(wide[0]).startsWith("\u26A1 $0.42"));
|
|
111
118
|
assert.ok(stripAnsi(wide[0]).endsWith("996/1k"));
|
|
112
119
|
|
|
113
|
-
// Medium: drops to a compressed tier, still exactly width
|
|
120
|
+
// Medium: drops to a compressed tier, still exactly width − 1
|
|
114
121
|
const med = widget.render(52);
|
|
115
|
-
assert.equal(termVisWidth(med[0]),
|
|
122
|
+
assert.equal(termVisWidth(med[0]), 51);
|
|
116
123
|
assert.ok(!stripAnsi(med[0]).includes("tok/30d"), "compressed tiers drop tokens activity first");
|
|
117
124
|
|
|
118
125
|
// Narrow: no tier fits → left only, padded
|
|
119
126
|
const narrow = widget.render(termVisWidth(left) + 3);
|
|
120
|
-
assert.equal(termVisWidth(narrow[0]), termVisWidth(left) +
|
|
121
|
-
assert.ok(stripAnsi(narrow[0]).startsWith("
|
|
127
|
+
assert.equal(termVisWidth(narrow[0]), termVisWidth(left) + 2);
|
|
128
|
+
assert.ok(stripAnsi(narrow[0]).startsWith("\u26A1"));
|
|
122
129
|
assert.ok(!stripAnsi(narrow[0]).includes("◆"));
|
|
123
130
|
|
|
124
131
|
// Narrower than left itself: truncation never overflows (crash guard)
|
|
125
132
|
const tiny = widget.render(10);
|
|
126
|
-
assert.equal(termVisWidth(tiny[0]),
|
|
133
|
+
assert.equal(termVisWidth(tiny[0]), 9);
|
|
127
134
|
|
|
128
135
|
// Left empty (session gated) → right-aligned account line
|
|
129
136
|
const rightOnly = new StatusLineWidget(fakeTheme, "", tiers, false);
|
|
130
137
|
const ro = rightOnly.render(70);
|
|
131
|
-
assert.equal(termVisWidth(ro[0]),
|
|
138
|
+
assert.equal(termVisWidth(ro[0]), 69);
|
|
132
139
|
assert.ok(stripAnsi(ro[0]).endsWith("996/1k"));
|
|
133
140
|
|
|
134
141
|
// No data at all
|
|
135
|
-
assert.deepEqual(new StatusLineWidget(fakeTheme, "", [], false).render(40), [fakeTheme.fg("dim", "") + " ".repeat(
|
|
142
|
+
assert.deepEqual(new StatusLineWidget(fakeTheme, "", [], false).render(40), [fakeTheme.fg("dim", "") + " ".repeat(39)]);
|
|
136
143
|
|
|
137
144
|
// Warning color wired through
|
|
138
145
|
const warn = new StatusLineWidget(fakeTheme, "", buildAccountTiers(acc({ availableUsd: 5 }), true), true);
|
|
@@ -149,21 +156,59 @@ assert.deepEqual(coerceStatusConfig(undefined), {
|
|
|
149
156
|
account: "widget",
|
|
150
157
|
hideOnOtherProvider: true,
|
|
151
158
|
lowBalanceUsd: 10,
|
|
159
|
+
glyphs: "auto",
|
|
152
160
|
});
|
|
153
161
|
assert.deepEqual(coerceStatusConfig({ session: "bogus", lowBalanceUsd: -3 }), {
|
|
154
162
|
session: "widget",
|
|
155
163
|
account: "widget",
|
|
156
164
|
hideOnOtherProvider: true,
|
|
157
165
|
lowBalanceUsd: 10,
|
|
166
|
+
glyphs: "auto",
|
|
158
167
|
});
|
|
159
168
|
assert.deepEqual(coerceStatusConfig({ session: "statusbar", account: "off", hideOnOtherProvider: false, lowBalanceUsd: null }), {
|
|
160
169
|
session: "statusbar",
|
|
161
170
|
account: "off",
|
|
162
171
|
hideOnOtherProvider: false,
|
|
163
172
|
lowBalanceUsd: null,
|
|
173
|
+
glyphs: "auto",
|
|
164
174
|
});
|
|
165
175
|
assert.equal(coerceStatusConfig({ lowBalanceUsd: 42 }).lowBalanceUsd, 42);
|
|
166
176
|
assert.equal(coerceStatusConfig({ lowBalanceUsd: false }).lowBalanceUsd, null);
|
|
167
177
|
assert.deepEqual(coerceStatusConfig(null).session, "widget");
|
|
168
178
|
|
|
179
|
+
// ── legacy-terminal glyph policy ──
|
|
180
|
+
const mintty = { TERM_PROGRAM: "mintty", TERM: "xterm" } as NodeJS.ProcessEnv;
|
|
181
|
+
const cygwin = { TERM: "cygwin" } as NodeJS.ProcessEnv;
|
|
182
|
+
const wt = { TERM_PROGRAM: "Windows_Terminal", TERM: "xterm-256color" } as NodeJS.ProcessEnv;
|
|
183
|
+
assert.equal(detectLegacyTerminal(mintty), true);
|
|
184
|
+
assert.equal(detectLegacyTerminal(cygwin), true);
|
|
185
|
+
assert.equal(detectLegacyTerminal(wt), false);
|
|
186
|
+
assert.equal(detectLegacyTerminal({} as NodeJS.ProcessEnv), false);
|
|
187
|
+
|
|
188
|
+
assert.equal(resolveGlyphSet("auto", wt), UNICODE_GLYPHS);
|
|
189
|
+
assert.equal(resolveGlyphSet("auto", mintty), ASCII_GLYPHS);
|
|
190
|
+
assert.equal(resolveGlyphSet("unicode", mintty), UNICODE_GLYPHS);
|
|
191
|
+
assert.equal(resolveGlyphSet("ascii", wt), ASCII_GLYPHS);
|
|
192
|
+
// An explicit unicode choice is clamped for widget content on legacy terminals
|
|
193
|
+
assert.equal(resolveWidgetGlyphSet("unicode", mintty), ASCII_GLYPHS);
|
|
194
|
+
assert.equal(resolveWidgetGlyphSet("unicode", wt), UNICODE_GLYPHS);
|
|
195
|
+
assert.equal(resolveWidgetGlyphSet("auto", mintty), ASCII_GLYPHS);
|
|
196
|
+
assert.equal(resolveWidgetGlyphSet("ascii", wt), ASCII_GLYPHS);
|
|
197
|
+
|
|
198
|
+
// ASCII mode emits no non-ASCII codepoints at all
|
|
199
|
+
const asciiLine = buildSessionLine({ requests: 7, spend: 0.42, elapsedMs: 252_000 }, ASCII_GLYPHS)!;
|
|
200
|
+
assert.equal(asciiLine, "* $0.42 - 7 req - 4m 12s");
|
|
201
|
+
const asciiTiers = buildAccountTiers(acc({ availableUsd: 5, activity30dRequests: 1200 }), true, ASCII_GLYPHS);
|
|
202
|
+
assert.ok(asciiTiers[0].startsWith("! + $5 avail"), `got ${asciiTiers[0]}`);
|
|
203
|
+
const asciiWidget = new StatusLineWidget(fakeTheme, asciiLine, asciiTiers, true, ASCII_GLYPHS).render(60)[0];
|
|
204
|
+
assert.equal([...stripAnsi(asciiWidget)].every((c) => c.charCodeAt(0) < 128), true);
|
|
205
|
+
|
|
206
|
+
// Unicode mode keeps the glyphs (regression guard for the default path)
|
|
207
|
+
assert.ok(buildAccountTiers(acc({ availableUsd: 5 }), true)[0].includes("⚠ ◆"));
|
|
208
|
+
|
|
209
|
+
// Truncation takes the caller's ellipsis so ASCII mode stays ASCII
|
|
210
|
+
assert.equal(truncateAnsi("abcdefghij", 5, "..."), "abcd...");
|
|
211
|
+
assert.ok(truncateAnsi("abcdefghij", 5).endsWith("…"));
|
|
212
|
+
assert.equal(coerceStatusConfig({ glyphs: "bogus" }).glyphs, "auto");
|
|
213
|
+
assert.equal(coerceStatusConfig({ glyphs: "ascii" }).glyphs, "ascii");
|
|
169
214
|
console.log("status.smoke: all assertions passed");
|
package/bun.lock
DELETED
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lockfileVersion": 2,
|
|
3
|
-
"configVersion": 1,
|
|
4
|
-
"workspaces": {
|
|
5
|
-
"": {
|
|
6
|
-
"name": "pi-zro-provider",
|
|
7
|
-
"devDependencies": {
|
|
8
|
-
"@earendil-works/pi-ai": "0.85.1",
|
|
9
|
-
"@earendil-works/pi-coding-agent": "0.85.1",
|
|
10
|
-
"@types/node": "^24.10.1",
|
|
11
|
-
"typescript": "6.0.3",
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
"packages": {
|
|
16
|
-
"@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.123.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1", "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-Y9oX9mPNGZClHQOFqrWRk43Srcu/UHuPq3rfxxOq7JgW0gi+lJA2MAOK4Ul3k/+AUrwRWFJvd0tK3oC0Pw25dw=="],
|
|
17
|
-
|
|
18
|
-
"@aws-crypto/sha256-browser": ["@aws-crypto/sha256-browser@5.2.0", "", { "dependencies": { "@aws-crypto/sha256-js": "5.2.0", "@aws-crypto/supports-web-crypto": "5.2.0", "@aws-crypto/util": "5.2.0", "@aws-sdk/types": "3.974.4", "@aws-sdk/util-locate-window": "3.965.10", "@smithy/util-utf8": "2.3.0", "tslib": "2.8.1" } }, "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw=="],
|
|
19
|
-
|
|
20
|
-
"@aws-crypto/sha256-js": ["@aws-crypto/sha256-js@5.2.0", "", { "dependencies": { "@aws-crypto/util": "5.2.0", "@aws-sdk/types": "3.974.4", "tslib": "2.8.1" } }, "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA=="],
|
|
21
|
-
|
|
22
|
-
"@aws-crypto/supports-web-crypto": ["@aws-crypto/supports-web-crypto@5.2.0", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg=="],
|
|
23
|
-
|
|
24
|
-
"@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "3.974.4", "@smithy/util-utf8": "2.3.0", "tslib": "2.8.1" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="],
|
|
25
|
-
|
|
26
|
-
"@aws-sdk/client-bedrock-runtime": ["@aws-sdk/client-bedrock-runtime@3.1048.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.977.8", "@aws-sdk/credential-provider-node": "3.972.80", "@aws-sdk/eventstream-handler-node": "3.972.33", "@aws-sdk/middleware-eventstream": "3.972.28", "@aws-sdk/middleware-websocket": "3.972.51", "@aws-sdk/token-providers": "3.1048.0", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/fetch-http-handler": "5.7.2", "@smithy/node-http-handler": "4.11.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-u+NT61JZEkRFtpL0CAw1N1dwxnaLgwVXQl/zjJxTGgLyS/jTIdg2SdoEoCTHxgDyCnqa1HEi9QOoE9/pYRNpOQ=="],
|
|
27
|
-
|
|
28
|
-
"@aws-sdk/core": ["@aws-sdk/core@3.977.8", "", { "dependencies": { "@aws-sdk/types": "3.974.4", "@aws-sdk/xml-builder": "3.972.39", "@aws/lambda-invoke-store": "0.3.0", "@smithy/core": "3.33.2", "@smithy/signature-v4": "5.7.2", "@smithy/types": "4.17.2", "bowser": "2.14.1", "tslib": "2.8.1" } }, "sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg=="],
|
|
29
|
-
|
|
30
|
-
"@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.69", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-AreCFzcB4kH2HF9031Ot0jSJr3KXvRg6e8uDeub20JEVdZU3Bv0sTq1plc7VsT3KiqutlzH7l0j50UcCWHUioA=="],
|
|
31
|
-
|
|
32
|
-
"@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.71", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/fetch-http-handler": "5.7.2", "@smithy/node-http-handler": "4.11.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-A8ObcqVmDMnk4F9NozZ7JwmUu9Q4xyBJkmyq1C5U+wNM9ht9J7+EuuyabsLWXZnOoTqFaJuYBYTKf5CTipkEjA=="],
|
|
33
|
-
|
|
34
|
-
"@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.973.14", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/credential-provider-env": "3.972.69", "@aws-sdk/credential-provider-http": "3.972.71", "@aws-sdk/credential-provider-login": "3.972.76", "@aws-sdk/credential-provider-process": "3.972.69", "@aws-sdk/credential-provider-sso": "3.973.13", "@aws-sdk/credential-provider-web-identity": "3.972.75", "@aws-sdk/nested-clients": "3.997.43", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/credential-provider-imds": "4.5.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-7c+Wti2LsERNWMfm7ySz3/6RPopFW3Nmn7s63Xpcq6R/tRuY5hpvkHA2xVgi5ukJbvok9l0IDtVEvqTtg+X7dw=="],
|
|
35
|
-
|
|
36
|
-
"@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.76", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/nested-clients": "3.997.43", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-LVixwOnEJfrrfKHeZjBA8pIMTZjNDq8ak8VpcoWUuCJDrSnBNU8POJksULMgvN089P0MXtQYH2Zs627/MK1K0g=="],
|
|
37
|
-
|
|
38
|
-
"@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.80", "", { "dependencies": { "@aws-sdk/credential-provider-env": "3.972.69", "@aws-sdk/credential-provider-http": "3.972.71", "@aws-sdk/credential-provider-ini": "3.973.14", "@aws-sdk/credential-provider-process": "3.972.69", "@aws-sdk/credential-provider-sso": "3.973.13", "@aws-sdk/credential-provider-web-identity": "3.972.75", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/credential-provider-imds": "4.5.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg=="],
|
|
39
|
-
|
|
40
|
-
"@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.69", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-9kpTNdZTrcqXTfhxM7fgl9Z68ek3Fu5oe3Yf+A/pJGibEqpgZxz2tSY7SinmyCIU2PJ+ygY4FPoBBnLpocMtrQ=="],
|
|
41
|
-
|
|
42
|
-
"@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.973.13", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/nested-clients": "3.997.43", "@aws-sdk/token-providers": "3.1111.0", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-Oc81qauMPzUoTnAS2YKpNwY6sY/LUyQTEeaf6yP197WMxkEBQfcKLR1MFpD7+pNTubXnfkH6gwpji+Gc7iyD2Q=="],
|
|
43
|
-
|
|
44
|
-
"@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.75", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/nested-clients": "3.997.43", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-YPN6uoGDgjjjeVFZrcOeCJqmB6zpXoeeNgIjqe+DexJaWqdjVfCCe+VAZwli9Z2h8KhFW8oxkO39emQ1tyz/Mw=="],
|
|
45
|
-
|
|
46
|
-
"@aws-sdk/eventstream-handler-node": ["@aws-sdk/eventstream-handler-node@3.972.33", "", { "dependencies": { "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-1Dd5WyEE2Kb3HvY44u7Ob16ST2W6iutOqsQ8Y2hUmsL2mAH/STlGS1dS9h3IOE6L7Ld3AR2HzKJ6XeCMOw8Peg=="],
|
|
47
|
-
|
|
48
|
-
"@aws-sdk/middleware-eventstream": ["@aws-sdk/middleware-eventstream@3.972.28", "", { "dependencies": { "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-Z1EDXnS01P7H5jVrUx+/dBqV0m7dta7bSxLclkOuDuS93pNNQm0IcT4YLUbuvWKPYNxbI8aTG0p5Br30GSKDgA=="],
|
|
49
|
-
|
|
50
|
-
"@aws-sdk/middleware-websocket": ["@aws-sdk/middleware-websocket@3.972.51", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/fetch-http-handler": "5.7.2", "@smithy/signature-v4": "5.7.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-jdgP3jR5Q96j1jjZ98GGwpGg1CBNFIO2YE+vXg8cg8PvNY4NvgQNYJsqDaRX2PYv5gSUX/+C0D58Fhspj9ELMQ=="],
|
|
51
|
-
|
|
52
|
-
"@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.43", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/signature-v4-multi-region": "3.996.45", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/fetch-http-handler": "5.7.2", "@smithy/node-http-handler": "4.11.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-bit+VpqWNyi3wHxFoTsTliNXimCSL2r2OeDTm7ZrG+YsTZ2D7ofDJ6r/t9PVBn80i6/v0X2h9Tgw6QP2MAKfPw=="],
|
|
53
|
-
|
|
54
|
-
"@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.45", "", { "dependencies": { "@aws-sdk/types": "3.974.4", "@smithy/signature-v4": "5.7.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-bBuyztukzXq6plzFGHAWiQt0QXo+HL8b8lX5cFTzkez/74PtS1c0qPFCIVuHkyoT+miH2qOjAcm1/yoro2ESPA=="],
|
|
55
|
-
|
|
56
|
-
"@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1048.0", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/nested-clients": "3.997.43", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-k0y/GcuesuSfWyUM0WamrGyeZmltRYaPbHO82UDA6mZ/doB+FOHKutikPAtSXMn/hDz970cF+iRuuiYO9VEbAA=="],
|
|
57
|
-
|
|
58
|
-
"@aws-sdk/types": ["@aws-sdk/types@3.974.4", "", { "dependencies": { "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-dSFDNG00MEz0/xl5gxL62giLd1iYyJsTxZ1I1DOj6lC+bbgLB4TRsYClJg3b62dhXT1uATzsTNXPnC+33EJV3A=="],
|
|
59
|
-
|
|
60
|
-
"@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.10", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-ycwH6Zd2GhuSqdXX9ihbCjeGTB6xOJs+O3+Jb8/zDG9978XU80qs75dfkPJRMNKe5MvBZPuNeFpd4JZKPoUF4g=="],
|
|
61
|
-
|
|
62
|
-
"@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.39", "", { "dependencies": { "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA=="],
|
|
63
|
-
|
|
64
|
-
"@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.3.0", "", {}, "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ=="],
|
|
65
|
-
|
|
66
|
-
"@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="],
|
|
67
|
-
|
|
68
|
-
"@earendil-works/chord": ["@earendil-works/chord@0.85.1", "", { "dependencies": { "esbuild": "0.28.1" } }, "sha512-VDlkEC3dhCzQ5fcyH1OhG19dq+6jCn+rqc/iXFivwDYGR5anwo2RCiXij9PpHhqNR5GuhhE+Er69Zi1Sn4eY6w=="],
|
|
69
|
-
|
|
70
|
-
"@earendil-works/pi-agent-core": ["@earendil-works/pi-agent-core@0.85.1", "", { "dependencies": { "@earendil-works/chord": "^0.85.1", "@earendil-works/pi-ai": "^0.85.1", "@earendil-works/pi-telemetry": "^0.85.1", "diff": "8.0.4", "ignore": "7.0.5", "typebox": "1.3.7", "yaml": "2.9.0" } }, "sha512-hIXIP3eAWueAYiAl8aMvWCvvZ8Q5gT3Dip5bE5uJyIGh4+YlWRjtMLI4BaeoXoSs93zndjue61u1B/vhefLnuA=="],
|
|
71
|
-
|
|
72
|
-
"@earendil-works/pi-ai": ["@earendil-works/pi-ai@0.85.1", "", { "dependencies": { "@anthropic-ai/sdk": "0.123.0", "@aws-sdk/client-bedrock-runtime": "3.1048.0", "@earendil-works/pi-telemetry": "^0.85.1", "@google/genai": "1.52.0", "@smithy/node-http-handler": "4.7.3", "http-proxy-agent": "7.0.2", "https-proxy-agent": "7.0.6", "openai": "6.40.0", "partial-json": "0.1.7", "typebox": "1.3.7" }, "bin": { "pi-ai": "dist/cli.js" } }, "sha512-+VgVIJDkDO2efYJKEEqvPTH4zmnIaXdAppGbO+vKFA9qy5PdhFiAenuFAkU+oiCSfOC4dMHDyrjdQeL4ZoC5CQ=="],
|
|
73
|
-
|
|
74
|
-
"@earendil-works/pi-coding-agent": ["@earendil-works/pi-coding-agent@0.85.1", "", { "dependencies": { "@earendil-works/chord": "^0.85.1", "@earendil-works/pi-agent-core": "^0.85.1", "@earendil-works/pi-ai": "^0.85.1", "@earendil-works/pi-tui": "^0.85.1", "@silvia-odwyer/photon-node": "0.3.4", "chalk": "5.6.2", "cross-spawn": "7.0.6", "diff": "8.0.4", "grok-mermaid": "0.2.2", "highlight.js": "10.7.3", "hosted-git-info": "9.0.3", "ignore": "7.0.5", "jiti": "2.7.0", "minimatch": "10.2.5", "proper-lockfile": "4.1.2", "semver": "7.8.0", "typebox": "1.3.7", "undici": "8.9.0", "yaml": "2.9.0" }, "optionalDependencies": { "@mariozechner/clipboard": "0.3.9" }, "bin": { "pi": "dist/bundle/cli.js" } }, "sha512-FGRN+OHbWaefBPGaTggAdLjrIHW+s2PzLyglz/5dfLzb9of7uuXMXYC0fJIeZTw+shS32o2cuQ9jF7YSDuL/oQ=="],
|
|
75
|
-
|
|
76
|
-
"@earendil-works/pi-telemetry": ["@earendil-works/pi-telemetry@0.85.1", "", {}, "sha512-Bg/YN6kA7Swja/NQxka8xFdecb4E/auIEGF2G5A25EaQXhRnPj300/7/KpgsDDMYUzHTDAv4RyUxaQPJKW81Rw=="],
|
|
77
|
-
|
|
78
|
-
"@earendil-works/pi-tui": ["@earendil-works/pi-tui@0.85.1", "", { "dependencies": { "get-east-asian-width": "1.6.0", "marked": "18.0.5" } }, "sha512-OIzw9efInmO4WOBnD4TxcTdBjmzvYJpzslkgoUro946nEGoYWg5rwv1p4fDt3/JvMx9QybryUCUwlm7j8Dreig=="],
|
|
79
|
-
|
|
80
|
-
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ=="],
|
|
81
|
-
|
|
82
|
-
"@esbuild/android-arm": ["@esbuild/android-arm@0.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ=="],
|
|
83
|
-
|
|
84
|
-
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg=="],
|
|
85
|
-
|
|
86
|
-
"@esbuild/android-x64": ["@esbuild/android-x64@0.28.1", "", { "os": "android", "cpu": "x64" }, "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng=="],
|
|
87
|
-
|
|
88
|
-
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q=="],
|
|
89
|
-
|
|
90
|
-
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ=="],
|
|
91
|
-
|
|
92
|
-
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw=="],
|
|
93
|
-
|
|
94
|
-
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ=="],
|
|
95
|
-
|
|
96
|
-
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ=="],
|
|
97
|
-
|
|
98
|
-
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g=="],
|
|
99
|
-
|
|
100
|
-
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w=="],
|
|
101
|
-
|
|
102
|
-
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg=="],
|
|
103
|
-
|
|
104
|
-
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ=="],
|
|
105
|
-
|
|
106
|
-
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ=="],
|
|
107
|
-
|
|
108
|
-
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ=="],
|
|
109
|
-
|
|
110
|
-
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag=="],
|
|
111
|
-
|
|
112
|
-
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA=="],
|
|
113
|
-
|
|
114
|
-
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw=="],
|
|
115
|
-
|
|
116
|
-
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.1", "", { "os": "none", "cpu": "x64" }, "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg=="],
|
|
117
|
-
|
|
118
|
-
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q=="],
|
|
119
|
-
|
|
120
|
-
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw=="],
|
|
121
|
-
|
|
122
|
-
"@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg=="],
|
|
123
|
-
|
|
124
|
-
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ=="],
|
|
125
|
-
|
|
126
|
-
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA=="],
|
|
127
|
-
|
|
128
|
-
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg=="],
|
|
129
|
-
|
|
130
|
-
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A=="],
|
|
131
|
-
|
|
132
|
-
"@google/genai": ["@google/genai@1.52.0", "", { "dependencies": { "google-auth-library": "10.9.1", "p-retry": "4.6.2", "protobufjs": "7.6.5", "ws": "8.21.3" }, "peerDependencies": { "@modelcontextprotocol/sdk": "^1.25.2" }, "optionalPeers": ["@modelcontextprotocol/sdk"] }, "sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q=="],
|
|
133
|
-
|
|
134
|
-
"@mariozechner/clipboard": ["@mariozechner/clipboard@0.3.9", "", { "optionalDependencies": { "@mariozechner/clipboard-darwin-arm64": "0.3.9", "@mariozechner/clipboard-darwin-universal": "0.3.9", "@mariozechner/clipboard-darwin-x64": "0.3.9", "@mariozechner/clipboard-linux-arm64-gnu": "0.3.9", "@mariozechner/clipboard-linux-arm64-musl": "0.3.9", "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9", "@mariozechner/clipboard-linux-x64-gnu": "0.3.9", "@mariozechner/clipboard-linux-x64-musl": "0.3.9", "@mariozechner/clipboard-win32-arm64-msvc": "0.3.9", "@mariozechner/clipboard-win32-x64-msvc": "0.3.9" } }, "sha512-ABnA53mdfkGZwOFUdZNv2S0CWGO/EIuPj8Vv9xmBFmSYg/qFc7ihO6q5FcQjvoE67kZpWkEc4AhD6B/os04yuA=="],
|
|
135
|
-
|
|
136
|
-
"@mariozechner/clipboard-darwin-arm64": ["@mariozechner/clipboard-darwin-arm64@0.3.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BfgV7vCEWZwJwZJw03r6bP5+tf0iI/ANuQYCxi9RNn7FrWB3yzGuMKCrNLRl6V761vXRdL8+OqZ0wd4TqlsNOQ=="],
|
|
137
|
-
|
|
138
|
-
"@mariozechner/clipboard-darwin-universal": ["@mariozechner/clipboard-darwin-universal@0.3.9", "", { "os": "darwin" }, "sha512-BGGR4iA9Z2shAjI65eI5xtyb3LYNlDW9X3gxKxDbqtbnREohsrqznov6zpKoIrsRWpzlYVEdKphS7ksJ0/ndSQ=="],
|
|
139
|
-
|
|
140
|
-
"@mariozechner/clipboard-darwin-x64": ["@mariozechner/clipboard-darwin-x64@0.3.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-4kURmCbS6nt8uYhtmWpUcJWyPHfmAr5dTpXD1nO3pIfa+TSQ9DbrGOYCKH+aEFW47XhQ4Vp8ZTszie+wfFvDKg=="],
|
|
141
|
-
|
|
142
|
-
"@mariozechner/clipboard-linux-arm64-gnu": ["@mariozechner/clipboard-linux-arm64-gnu@0.3.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-g59OkUGP2DDfCOIKypHeYgv2M55u/cKvXa5dSxFbEJ34XvIQMdcVmpKCkGUro3ZgefXiGVdwguvTMQGpHWzIXw=="],
|
|
143
|
-
|
|
144
|
-
"@mariozechner/clipboard-linux-arm64-musl": ["@mariozechner/clipboard-linux-arm64-musl@0.3.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-AGuJdgKsmJdm4Pych7kv3sqe591ERRaAHW3xjLooiFzn8J+PxUyof++7YZrB5Y5tpnTO+K18Og3taj2NpluCRQ=="],
|
|
145
|
-
|
|
146
|
-
"@mariozechner/clipboard-linux-riscv64-gnu": ["@mariozechner/clipboard-linux-riscv64-gnu@0.3.9", "", { "os": "linux", "cpu": "none" }, "sha512-DXBEAiuMpk7dhS1a9NzNxVAFi1vaKoPu7rQNgY8LIDLGrK3lnIp3nT10DUum+PKVJoJppIP+NAA8IZe4DMNDPw=="],
|
|
147
|
-
|
|
148
|
-
"@mariozechner/clipboard-linux-x64-gnu": ["@mariozechner/clipboard-linux-x64-gnu@0.3.9", "", { "os": "linux", "cpu": "x64" }, "sha512-WORrMLd6EpElEME7JRKfSaY34nW1P5LbdgK5YNCS1ncG2LqmITsSMEJ8nh2mpvxb3TxqbOOKgY7k9eMJYlW9Mw=="],
|
|
149
|
-
|
|
150
|
-
"@mariozechner/clipboard-linux-x64-musl": ["@mariozechner/clipboard-linux-x64-musl@0.3.9", "", { "os": "linux", "cpu": "x64" }, "sha512-/DHn+1DrfL6oRaPPWXaOKvonFFrni666fxd+zFqiQEfvBH0tsHVWjq9iqBk0oDp0qaPA72lIMy5BptxISBEhZQ=="],
|
|
151
|
-
|
|
152
|
-
"@mariozechner/clipboard-win32-arm64-msvc": ["@mariozechner/clipboard-win32-arm64-msvc@0.3.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-O5FHD3ErkMwMhNzAfu3ggy0ug4z7btZuoQgwwxlzPrwV2bxlD6WDpqBY4NCgICAgZdDKdp+loUEKVAVt8aYnhQ=="],
|
|
153
|
-
|
|
154
|
-
"@mariozechner/clipboard-win32-x64-msvc": ["@mariozechner/clipboard-win32-x64-msvc@0.3.9", "", { "os": "win32", "cpu": "x64" }, "sha512-ihQC3EufqEY81vhXBgVBtK4prL+wc62zJsSvxrgz7K1hsdt6OObz6v9p3Rn1OG3GJksTTKMJF0u/guMISHPhSA=="],
|
|
155
|
-
|
|
156
|
-
"@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="],
|
|
157
|
-
|
|
158
|
-
"@protobufjs/base64": ["@protobufjs/base64@1.1.2", "", {}, "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="],
|
|
159
|
-
|
|
160
|
-
"@protobufjs/codegen": ["@protobufjs/codegen@2.0.5", "", {}, "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g=="],
|
|
161
|
-
|
|
162
|
-
"@protobufjs/eventemitter": ["@protobufjs/eventemitter@1.1.1", "", {}, "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg=="],
|
|
163
|
-
|
|
164
|
-
"@protobufjs/fetch": ["@protobufjs/fetch@1.1.1", "", { "dependencies": { "@protobufjs/aspromise": "1.1.2" } }, "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw=="],
|
|
165
|
-
|
|
166
|
-
"@protobufjs/float": ["@protobufjs/float@1.0.2", "", {}, "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="],
|
|
167
|
-
|
|
168
|
-
"@protobufjs/path": ["@protobufjs/path@1.1.2", "", {}, "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="],
|
|
169
|
-
|
|
170
|
-
"@protobufjs/pool": ["@protobufjs/pool@1.1.0", "", {}, "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="],
|
|
171
|
-
|
|
172
|
-
"@protobufjs/utf8": ["@protobufjs/utf8@1.1.2", "", {}, "sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug=="],
|
|
173
|
-
|
|
174
|
-
"@silvia-odwyer/photon-node": ["@silvia-odwyer/photon-node@0.3.4", "", {}, "sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA=="],
|
|
175
|
-
|
|
176
|
-
"@smithy/core": ["@smithy/core@3.33.2", "", { "dependencies": { "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-CUGXpnPkVdjUCbix+83sWLW9VFgQOm44MDOx/ihITJMAnOZKvL8YYIc7DR9pP/tZ8CIRvMiON/TucvygqbHO3w=="],
|
|
177
|
-
|
|
178
|
-
"@smithy/credential-provider-imds": ["@smithy/credential-provider-imds@4.5.2", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg=="],
|
|
179
|
-
|
|
180
|
-
"@smithy/fetch-http-handler": ["@smithy/fetch-http-handler@5.7.2", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw=="],
|
|
181
|
-
|
|
182
|
-
"@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="],
|
|
183
|
-
|
|
184
|
-
"@smithy/node-http-handler": ["@smithy/node-http-handler@4.7.3", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-/jPhevcTFPMVl6KNjbaI47iOg1zxC7IsnX4PQDGVZKMFceOXtB8IEYaB7a9VvkP/3oC60WzTeKocvSI7vLT0vA=="],
|
|
185
|
-
|
|
186
|
-
"@smithy/signature-v4": ["@smithy/signature-v4@5.7.2", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-P7Ki6px6OOrxVtx8K7nLmyx4SlXUW/uTKDdMG44UHefmPGSRMBKe2v+TM59WdLcpUIrBrnuCsIqiM2MbsZjmhw=="],
|
|
187
|
-
|
|
188
|
-
"@smithy/types": ["@smithy/types@4.17.2", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA=="],
|
|
189
|
-
|
|
190
|
-
"@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "2.2.0", "tslib": "2.8.1" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="],
|
|
191
|
-
|
|
192
|
-
"@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "2.2.0", "tslib": "2.8.1" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="],
|
|
193
|
-
|
|
194
|
-
"@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="],
|
|
195
|
-
|
|
196
|
-
"@types/node": ["@types/node@24.13.3", "", { "dependencies": { "undici-types": "7.18.2" } }, "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q=="],
|
|
197
|
-
|
|
198
|
-
"@types/retry": ["@types/retry@0.12.0", "", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="],
|
|
199
|
-
|
|
200
|
-
"agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
|
|
201
|
-
|
|
202
|
-
"balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
|
|
203
|
-
|
|
204
|
-
"base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
|
|
205
|
-
|
|
206
|
-
"bignumber.js": ["bignumber.js@9.3.1", "", {}, "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ=="],
|
|
207
|
-
|
|
208
|
-
"bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="],
|
|
209
|
-
|
|
210
|
-
"brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "4.0.4" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="],
|
|
211
|
-
|
|
212
|
-
"buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="],
|
|
213
|
-
|
|
214
|
-
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
|
215
|
-
|
|
216
|
-
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "3.1.1", "shebang-command": "2.0.0", "which": "2.0.2" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
|
|
217
|
-
|
|
218
|
-
"data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
|
|
219
|
-
|
|
220
|
-
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
|
|
221
|
-
|
|
222
|
-
"diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="],
|
|
223
|
-
|
|
224
|
-
"ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="],
|
|
225
|
-
|
|
226
|
-
"esbuild": ["esbuild@0.28.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.1", "@esbuild/android-arm": "0.28.1", "@esbuild/android-arm64": "0.28.1", "@esbuild/android-x64": "0.28.1", "@esbuild/darwin-arm64": "0.28.1", "@esbuild/darwin-x64": "0.28.1", "@esbuild/freebsd-arm64": "0.28.1", "@esbuild/freebsd-x64": "0.28.1", "@esbuild/linux-arm": "0.28.1", "@esbuild/linux-arm64": "0.28.1", "@esbuild/linux-ia32": "0.28.1", "@esbuild/linux-loong64": "0.28.1", "@esbuild/linux-mips64el": "0.28.1", "@esbuild/linux-ppc64": "0.28.1", "@esbuild/linux-riscv64": "0.28.1", "@esbuild/linux-s390x": "0.28.1", "@esbuild/linux-x64": "0.28.1", "@esbuild/netbsd-arm64": "0.28.1", "@esbuild/netbsd-x64": "0.28.1", "@esbuild/openbsd-arm64": "0.28.1", "@esbuild/openbsd-x64": "0.28.1", "@esbuild/openharmony-arm64": "0.28.1", "@esbuild/sunos-x64": "0.28.1", "@esbuild/win32-arm64": "0.28.1", "@esbuild/win32-ia32": "0.28.1", "@esbuild/win32-x64": "0.28.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw=="],
|
|
227
|
-
|
|
228
|
-
"extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="],
|
|
229
|
-
|
|
230
|
-
"fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="],
|
|
231
|
-
|
|
232
|
-
"fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "3.3.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="],
|
|
233
|
-
|
|
234
|
-
"formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "3.2.0" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="],
|
|
235
|
-
|
|
236
|
-
"gaxios": ["gaxios@7.3.1", "", { "dependencies": { "extend": "3.0.2", "https-proxy-agent": "7.0.6", "node-fetch": "3.3.2" } }, "sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ=="],
|
|
237
|
-
|
|
238
|
-
"gcp-metadata": ["gcp-metadata@8.1.2", "", { "dependencies": { "gaxios": "7.3.1", "google-logging-utils": "1.1.3", "json-bigint": "1.0.0" } }, "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg=="],
|
|
239
|
-
|
|
240
|
-
"get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="],
|
|
241
|
-
|
|
242
|
-
"google-auth-library": ["google-auth-library@10.9.1", "", { "dependencies": { "base64-js": "1.5.1", "ecdsa-sig-formatter": "1.0.11", "gaxios": "7.3.1", "gcp-metadata": "8.1.2", "google-logging-utils": "1.1.3", "jws": "4.0.1" } }, "sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw=="],
|
|
243
|
-
|
|
244
|
-
"google-logging-utils": ["google-logging-utils@1.1.3", "", {}, "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA=="],
|
|
245
|
-
|
|
246
|
-
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
|
|
247
|
-
|
|
248
|
-
"grok-mermaid": ["grok-mermaid@0.2.2", "", {}, "sha512-XcJEP5dDC8liHBh52mlLjU18fNvu1ckFsu0QpIG3+APZ270fsj9wxpiA6cOURmbUEuoMVgjbC2+UYgTdCqqgzA=="],
|
|
249
|
-
|
|
250
|
-
"highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="],
|
|
251
|
-
|
|
252
|
-
"hosted-git-info": ["hosted-git-info@9.0.3", "", { "dependencies": { "lru-cache": "11.5.2" } }, "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg=="],
|
|
253
|
-
|
|
254
|
-
"http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "7.1.4", "debug": "4.4.3" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="],
|
|
255
|
-
|
|
256
|
-
"https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "7.1.4", "debug": "4.4.3" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
|
|
257
|
-
|
|
258
|
-
"ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
|
259
|
-
|
|
260
|
-
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
|
|
261
|
-
|
|
262
|
-
"jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="],
|
|
263
|
-
|
|
264
|
-
"json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "9.3.1" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="],
|
|
265
|
-
|
|
266
|
-
"json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "7.29.7", "ts-algebra": "2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="],
|
|
267
|
-
|
|
268
|
-
"jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "5.2.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="],
|
|
269
|
-
|
|
270
|
-
"jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "2.0.1", "safe-buffer": "5.2.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="],
|
|
271
|
-
|
|
272
|
-
"long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="],
|
|
273
|
-
|
|
274
|
-
"lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="],
|
|
275
|
-
|
|
276
|
-
"marked": ["marked@18.0.5", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w=="],
|
|
277
|
-
|
|
278
|
-
"minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "5.0.9" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="],
|
|
279
|
-
|
|
280
|
-
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
|
281
|
-
|
|
282
|
-
"node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="],
|
|
283
|
-
|
|
284
|
-
"node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "4.0.1", "fetch-blob": "3.2.0", "formdata-polyfill": "4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
|
|
285
|
-
|
|
286
|
-
"openai": ["openai@6.40.0", "", { "peerDependencies": { "ws": "^8.18.0", "zod": "^3.25 || ^4.0" }, "optionalPeers": ["ws", "zod"] }, "sha512-MWtTjd/gQt4jpbji61NTgFWJLoY/PdRJ6wG9/ZDRMYNMlBKrCrSlkLI+KgHP1vR1qT6LKSAyAqIxno6lcK9JiA=="],
|
|
287
|
-
|
|
288
|
-
"p-retry": ["p-retry@4.6.2", "", { "dependencies": { "@types/retry": "0.12.0", "retry": "0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="],
|
|
289
|
-
|
|
290
|
-
"partial-json": ["partial-json@0.1.7", "", {}, "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA=="],
|
|
291
|
-
|
|
292
|
-
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
|
|
293
|
-
|
|
294
|
-
"proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "4.2.11", "retry": "0.12.0", "signal-exit": "3.0.7" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="],
|
|
295
|
-
|
|
296
|
-
"protobufjs": ["protobufjs@7.6.5", "", { "dependencies": { "@protobufjs/aspromise": "1.1.2", "@protobufjs/base64": "1.1.2", "@protobufjs/codegen": "2.0.5", "@protobufjs/eventemitter": "1.1.1", "@protobufjs/fetch": "1.1.1", "@protobufjs/float": "1.0.2", "@protobufjs/path": "1.1.2", "@protobufjs/pool": "1.1.0", "@protobufjs/utf8": "1.1.2", "@types/node": "24.13.3", "long": "5.3.2" } }, "sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw=="],
|
|
297
|
-
|
|
298
|
-
"retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
|
|
299
|
-
|
|
300
|
-
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
|
301
|
-
|
|
302
|
-
"semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="],
|
|
303
|
-
|
|
304
|
-
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
|
|
305
|
-
|
|
306
|
-
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
|
|
307
|
-
|
|
308
|
-
"signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
|
|
309
|
-
|
|
310
|
-
"standardwebhooks": ["standardwebhooks@1.1.1", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "fast-sha256": "^1.3.0" } }, "sha512-bCbX9ZEyFkWPsRz7Bl3NuQUJohmwGSev/yhr7vhaGPlc4AfIrspIRa6cPTBuI1ItmrTDJ4d/S2hCsfe4+vQGnQ=="],
|
|
311
|
-
|
|
312
|
-
"ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="],
|
|
313
|
-
|
|
314
|
-
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
|
315
|
-
|
|
316
|
-
"typebox": ["typebox@1.3.7", "", {}, "sha512-meKuifc33Pccx0O6PdIzYMq3Og8zvP4TIi/a+Bw3AEMZMxOD0+RHGQvpglEe6Zdy3wZ8nqn/j95h8LUZLk/6Hg=="],
|
|
317
|
-
|
|
318
|
-
"typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
|
|
319
|
-
|
|
320
|
-
"undici": ["undici@8.9.0", "", {}, "sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA=="],
|
|
321
|
-
|
|
322
|
-
"undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
|
|
323
|
-
|
|
324
|
-
"web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
|
|
325
|
-
|
|
326
|
-
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
|
327
|
-
|
|
328
|
-
"ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="],
|
|
329
|
-
|
|
330
|
-
"yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="],
|
|
331
|
-
|
|
332
|
-
"@aws-sdk/client-bedrock-runtime/@smithy/node-http-handler": ["@smithy/node-http-handler@4.11.2", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g=="],
|
|
333
|
-
|
|
334
|
-
"@aws-sdk/credential-provider-http/@smithy/node-http-handler": ["@smithy/node-http-handler@4.11.2", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g=="],
|
|
335
|
-
|
|
336
|
-
"@aws-sdk/credential-provider-sso/@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1111.0", "", { "dependencies": { "@aws-sdk/core": "3.977.8", "@aws-sdk/nested-clients": "3.997.43", "@aws-sdk/types": "3.974.4", "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A=="],
|
|
337
|
-
|
|
338
|
-
"@aws-sdk/nested-clients/@smithy/node-http-handler": ["@smithy/node-http-handler@4.11.2", "", { "dependencies": { "@smithy/core": "3.33.2", "@smithy/types": "4.17.2", "tslib": "2.8.1" } }, "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g=="],
|
|
339
|
-
|
|
340
|
-
"p-retry/retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="],
|
|
341
|
-
}
|
|
342
|
-
}
|