interference-agent 0.1.0 → 0.2.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/README.md +29 -8
- package/package.json +22 -3
- package/src/__tests__/version.test.ts +24 -0
- package/src/cli-plain.ts +3 -3
- package/src/cli.ts +8 -0
- package/src/commands/index.ts +18 -0
- package/src/config.ts +29 -18
- package/src/cost.ts +2 -0
- package/src/tools/__tests__/mutating.test.ts +1 -1
- package/src/tools/bash.ts +25 -6
- package/src/tools/grep.ts +27 -21
- package/src/tui/App.tsx +33 -23
- package/src/tui/ConfirmDialog.tsx +13 -4
- package/src/tui/DiffView.tsx +17 -17
- package/src/tui/MarkdownText.tsx +25 -3
- package/src/tui/ModelPicker.tsx +8 -7
- package/src/tui/Panel.tsx +8 -4
- package/src/tui/SelectRow.tsx +40 -0
- package/src/tui/SessionList.tsx +7 -7
- package/src/tui/Spinner.tsx +43 -0
- package/src/tui/ThinkingPicker.tsx +8 -8
- package/src/tui/ToolStep.tsx +130 -53
- package/src/tui/Welcome.tsx +20 -5
- package/src/tui/__tests__/reasoning.test.ts +24 -0
- package/src/tui/__tests__/syntax.test.ts +33 -0
- package/src/tui/__tests__/tui-render.test.tsx +30 -1
- package/src/tui/placeholders.ts +22 -0
- package/src/tui/reasoning.ts +23 -0
- package/src/tui/syntax.ts +58 -0
- package/src/tui/theme.ts +13 -1
- package/src/version.ts +78 -0
- package/assets/screenshot.png +0 -0
- package/bun.lock +0 -159
- package/tsconfig.json +0 -23
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, test, expect } from "bun:test";
|
|
2
|
+
import { tokenizeLine, normalizeLang } from "../syntax.ts";
|
|
3
|
+
|
|
4
|
+
describe("syntax tokenizer (iter 22)", () => {
|
|
5
|
+
test("classifies keyword / string / number / comment", () => {
|
|
6
|
+
const toks = tokenizeLine('const x = "a" // c', "ts");
|
|
7
|
+
const byColor = Object.fromEntries(toks.filter((t) => t.color).map((t) => [t.text, t.color]));
|
|
8
|
+
expect(byColor["const"]).toBe("cyan");
|
|
9
|
+
expect(byColor['"a"']).toBe("green");
|
|
10
|
+
expect(byColor["// c"]).toBe("gray");
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test("numbers are magenta", () => {
|
|
14
|
+
const toks = tokenizeLine("const n = 42", "ts");
|
|
15
|
+
expect(toks.find((t) => t.text === "42")?.color).toBe("magenta");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test("python uses # comments", () => {
|
|
19
|
+
const toks = tokenizeLine("x = 1 # note", "py");
|
|
20
|
+
expect(toks.find((t) => t.text === "# note")?.color).toBe("gray");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("unknown lang → single plain token", () => {
|
|
24
|
+
expect(tokenizeLine("anything here", "")).toEqual([{ text: "anything here" }]);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("normalizeLang maps aliases", () => {
|
|
28
|
+
expect(normalizeLang("typescript")).toBe("ts");
|
|
29
|
+
expect(normalizeLang("PYTHON")).toBe("py");
|
|
30
|
+
expect(normalizeLang("bash")).toBe("sh");
|
|
31
|
+
expect(normalizeLang("rust")).toBe("");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -3,6 +3,7 @@ import React from "react";
|
|
|
3
3
|
import { render } from "ink-testing-library";
|
|
4
4
|
import { ToolStep } from "../ToolStep.tsx";
|
|
5
5
|
import { MarkdownText } from "../MarkdownText.tsx";
|
|
6
|
+
import { computeDiff } from "../DiffView.tsx";
|
|
6
7
|
|
|
7
8
|
function frame(el: React.ReactElement): string {
|
|
8
9
|
const { lastFrame, unmount } = render(el);
|
|
@@ -19,10 +20,18 @@ describe("ToolStep rendering (iter 18)", () => {
|
|
|
19
20
|
expect(out).not.toContain("{"); // niente JSON grezzo
|
|
20
21
|
});
|
|
21
22
|
|
|
22
|
-
test("
|
|
23
|
+
test("pending tool shows descriptive text (iter 21)", () => {
|
|
24
|
+
const grep = frame(<ToolStep tool={{ toolName: "grep", input: { pattern: "foo" } }} />);
|
|
25
|
+
expect(grep).toContain("~ Searching content…");
|
|
26
|
+
const bash = frame(<ToolStep tool={{ toolName: "bash", input: { command: "ls" } }} />);
|
|
27
|
+
expect(bash).toContain("~ Running command…");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("bash block: command rendered with $ and output, on a panel (▌ bar)", () => {
|
|
23
31
|
const out = frame(<ToolStep tool={{ toolName: "bash", input: { command: "bun test" }, output: "77 pass" }} />);
|
|
24
32
|
expect(out).toContain("$ bun test");
|
|
25
33
|
expect(out).toContain("77 pass");
|
|
34
|
+
expect(out).toContain("▌"); // pannello (it. 19): barra laterale su sfondo
|
|
26
35
|
});
|
|
27
36
|
|
|
28
37
|
test("edit block: diff lines with +/-", () => {
|
|
@@ -45,6 +54,26 @@ describe("ToolStep rendering (iter 18)", () => {
|
|
|
45
54
|
});
|
|
46
55
|
});
|
|
47
56
|
|
|
57
|
+
describe("diff line numbers (iter 20)", () => {
|
|
58
|
+
test("computeDiff assigns old/new line numbers", () => {
|
|
59
|
+
const d = computeDiff(["a", "b", "c"], ["a", "B", "c"]);
|
|
60
|
+
expect(d).toEqual([
|
|
61
|
+
{ type: "same", text: "a", oldNo: 1, newNo: 1 },
|
|
62
|
+
{ type: "remove", text: "b", oldNo: 2 },
|
|
63
|
+
{ type: "add", text: "B", newNo: 2 },
|
|
64
|
+
{ type: "same", text: "c", oldNo: 3, newNo: 3 },
|
|
65
|
+
]);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("edit block renders line numbers in the diff", () => {
|
|
69
|
+
const d = computeDiff(["x"], ["y"]);
|
|
70
|
+
const out = frame(<ToolStep tool={{ toolName: "edit", input: { path: "f.ts" }, output: "ok", diff: d }} />);
|
|
71
|
+
expect(out).toContain("- x");
|
|
72
|
+
expect(out).toContain("+ y");
|
|
73
|
+
expect(out).toMatch(/\b1\b/); // numero di riga presente
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
48
77
|
describe("MarkdownText rendering (iter 18)", () => {
|
|
49
78
|
test("strips markdown markers, keeps content", () => {
|
|
50
79
|
const out = frame(<MarkdownText content={"# Titolo\nUn **bold** e `code`.\n- item"} />);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Esempi rotanti per il placeholder dell'input (it. 25), per modalità.
|
|
2
|
+
export const PLACEHOLDERS: Record<"plan" | "build", string[]> = {
|
|
3
|
+
build: [
|
|
4
|
+
"Fix a TODO in the codebase",
|
|
5
|
+
"Add a test for the parser",
|
|
6
|
+
"Refactor this module",
|
|
7
|
+
"Implement the next iteration",
|
|
8
|
+
],
|
|
9
|
+
plan: [
|
|
10
|
+
"How does the agent loop work?",
|
|
11
|
+
"Where is resolveInWorkspace defined?",
|
|
12
|
+
"Map the tool system",
|
|
13
|
+
"What does this function return?",
|
|
14
|
+
],
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export function placeholderFor(mode: string, idx: number): string {
|
|
18
|
+
const list = mode === "plan" ? PLACEHOLDERS.plan : PLACEHOLDERS.build;
|
|
19
|
+
const verb = mode === "plan" ? "Explore" : "Ask anything";
|
|
20
|
+
const ex = list[((idx % list.length) + list.length) % list.length];
|
|
21
|
+
return `${verb}… "${ex}"`;
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Sommario del pensiero (it. 23): ricava un titolo breve dalla prima frase significativa
|
|
2
|
+
// del reasoning, per l'header `✻ Thinking/Thought: <titolo>` (stile opencode).
|
|
3
|
+
|
|
4
|
+
export function reasoningSummary(text: string): string {
|
|
5
|
+
const firstLine = text
|
|
6
|
+
.split("\n")
|
|
7
|
+
.map((l) => l.trim())
|
|
8
|
+
.find((l) => l.length > 0);
|
|
9
|
+
if (!firstLine) return "";
|
|
10
|
+
|
|
11
|
+
let s = firstLine
|
|
12
|
+
.replace(/^#{1,6}\s+/, "") // heading
|
|
13
|
+
.replace(/^[-*>]\s+/, "") // bullet/quote
|
|
14
|
+
.replace(/^\d+\.\s+/, "") // lista numerata
|
|
15
|
+
.replace(/[*_`]/g, "") // enfasi/code inline
|
|
16
|
+
.replace(/\s+/g, " ")
|
|
17
|
+
.trim();
|
|
18
|
+
|
|
19
|
+
// Taglia alla prima frase se breve, altrimenti cap a 60 char.
|
|
20
|
+
const sentence = s.match(/^(.*?[.!?])(\s|$)/);
|
|
21
|
+
if (sentence && sentence[1] && sentence[1].length <= 60) return sentence[1];
|
|
22
|
+
return s.length > 60 ? s.slice(0, 60).trimEnd() + "…" : s;
|
|
23
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Syntax highlighting MINIMALE per i code block (it. 22). Niente parser/dipendenze:
|
|
2
|
+
// un tokenizer a regex per pochi scope (commento/stringa/numero/keyword) — "good enough"
|
|
3
|
+
// come la subtle-syntax di opencode. Colori per il contenuto (i code block sono per natura
|
|
4
|
+
// colorati); la chrome resta B&W.
|
|
5
|
+
|
|
6
|
+
export interface Tok {
|
|
7
|
+
text: string;
|
|
8
|
+
color?: string;
|
|
9
|
+
dim?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const KW: Record<string, string[]> = {
|
|
13
|
+
ts: ["import","export","from","const","let","var","function","return","if","else","for","while","class","extends","implements","interface","type","enum","new","async","await","try","catch","finally","throw","typeof","instanceof","as","in","of","public","private","protected","readonly","static","void","null","undefined","true","false"],
|
|
14
|
+
js: ["import","export","from","const","let","var","function","return","if","else","for","while","class","extends","new","async","await","try","catch","finally","throw","typeof","instanceof","in","of","null","undefined","true","false"],
|
|
15
|
+
py: ["def","class","import","from","return","if","elif","else","for","while","try","except","finally","with","as","in","not","and","or","is","lambda","yield","async","await","pass","raise","None","True","False","self"],
|
|
16
|
+
sh: ["if","then","else","elif","fi","for","in","do","done","while","case","esac","function","echo","export","local","return","cd","exit"],
|
|
17
|
+
json: [],
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export function normalizeLang(info: string): string {
|
|
21
|
+
const l = info.toLowerCase().trim();
|
|
22
|
+
if (l === "ts" || l === "typescript" || l === "tsx") return "ts";
|
|
23
|
+
if (l === "js" || l === "javascript" || l === "jsx" || l === "mjs") return "js";
|
|
24
|
+
if (l === "py" || l === "python") return "py";
|
|
25
|
+
if (l === "sh" || l === "bash" || l === "shell" || l === "zsh") return "sh";
|
|
26
|
+
if (l === "json") return "json";
|
|
27
|
+
return "";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const escape = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
31
|
+
|
|
32
|
+
export function tokenizeLine(line: string, lang: string): Tok[] {
|
|
33
|
+
if (!lang) return [{ text: line }];
|
|
34
|
+
const kw = KW[lang] ?? [];
|
|
35
|
+
const commentPat = lang === "py" || lang === "sh" ? "(#[^\\n]*)" : "(\\/\\/[^\\n]*)";
|
|
36
|
+
const parts = [
|
|
37
|
+
commentPat,
|
|
38
|
+
"(\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|`(?:[^`\\\\]|\\\\.)*`)",
|
|
39
|
+
"(\\b\\d+(?:\\.\\d+)?\\b)",
|
|
40
|
+
];
|
|
41
|
+
if (kw.length) parts.push("(\\b(?:" + kw.map(escape).join("|") + ")\\b)");
|
|
42
|
+
const re = new RegExp(parts.join("|"), "g");
|
|
43
|
+
|
|
44
|
+
const out: Tok[] = [];
|
|
45
|
+
let last = 0;
|
|
46
|
+
let m: RegExpExecArray | null;
|
|
47
|
+
while ((m = re.exec(line)) !== null) {
|
|
48
|
+
if (m.index > last) out.push({ text: line.slice(last, m.index) });
|
|
49
|
+
if (m[1]) out.push({ text: m[0], color: "gray", dim: true }); // commento
|
|
50
|
+
else if (m[2]) out.push({ text: m[0], color: "green" }); // stringa
|
|
51
|
+
else if (m[3]) out.push({ text: m[0], color: "magenta" }); // numero
|
|
52
|
+
else out.push({ text: m[0], color: "cyan" }); // keyword
|
|
53
|
+
last = m.index + m[0].length;
|
|
54
|
+
if (m[0].length === 0) re.lastIndex++; // guard anti-loop
|
|
55
|
+
}
|
|
56
|
+
if (last < line.length) out.push({ text: line.slice(last) });
|
|
57
|
+
return out.length ? out : [{ text: line }];
|
|
58
|
+
}
|
package/src/tui/theme.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
// Palette condivisa della TUI. Brand: bianco/nero (niente colori).
|
|
2
2
|
// Il contrasto nasce dal PANEL (sfondo applicato sui <Text>, non sui <Box>:
|
|
3
3
|
// in Ink il backgroundColor del Box non riempie il padding → si usa il Text).
|
|
4
|
-
|
|
4
|
+
// Gerarchia sfondi a 3 livelli (B&W), stile opencode (base < panel < element).
|
|
5
|
+
export const BG_PANEL = "#141414"; // blocchi/dialog (un gradino sopra il nero)
|
|
6
|
+
export const BG_ELEMENT = "#1e1e1e"; // elementi/selezione/pannello utente (un gradino sopra ancora)
|
|
7
|
+
export const PANEL = BG_ELEMENT; // alias storico (messaggio utente, input, welcome)
|
|
5
8
|
export const USER_BAR = "white"; // barra messaggi utente
|
|
6
9
|
export const ASSISTANT_BAR = "gray"; // barra risposte assistant
|
|
7
10
|
|
|
11
|
+
// Sfondi diff (attenuati, leggibili su terminale scuro) — it. 20.
|
|
12
|
+
export const DIFF_ADD_BG = "#0f2a18"; // riga aggiunta (verde scuro)
|
|
13
|
+
export const DIFF_REM_BG = "#3a1414"; // riga rimossa (rosso scuro)
|
|
14
|
+
|
|
15
|
+
// Ambra: riservata ESCLUSIVAMENTE al pensiero (reasoning), come opencode.
|
|
16
|
+
// Esecuzione (tool) e risposte restano bianco/nero → le tre fasi si distinguono.
|
|
17
|
+
export const THINKING = "#d79921"; // header pensiero (ambra)
|
|
18
|
+
export const THINKING_BODY = "gray"; // corpo pensiero (attenuato)
|
|
19
|
+
|
|
8
20
|
// Pad a destra fino a w caratteri (per estendere lo sfondo del Text).
|
|
9
21
|
export function padRight(s: string, w: number): string {
|
|
10
22
|
return s.length >= w ? s : s + " ".repeat(w - s.length);
|
package/src/version.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
|
|
5
|
+
// Versione corrente letta dal package.json del pacchetto (sync, funziona anche
|
|
6
|
+
// installato globalmente: version.ts sta in <pkg>/src, package.json in <pkg>/).
|
|
7
|
+
function readVersion(): string {
|
|
8
|
+
try {
|
|
9
|
+
const raw = readFileSync(new URL("../package.json", import.meta.url), "utf8");
|
|
10
|
+
return (JSON.parse(raw).version as string) ?? "0.0.0";
|
|
11
|
+
} catch {
|
|
12
|
+
return "0.0.0";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const CURRENT_VERSION: string = readVersion();
|
|
17
|
+
|
|
18
|
+
const PKG = "interference-agent";
|
|
19
|
+
const TTL = 24 * 60 * 60 * 1000; // 24h
|
|
20
|
+
const REGISTRY = `https://registry.npmjs.org/${PKG}/latest`;
|
|
21
|
+
|
|
22
|
+
function cachePath(): string {
|
|
23
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? "/tmp";
|
|
24
|
+
return path.join(home, ".interference", "update-check.json");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Confronto semver "x.y.z" (con eventuale prefisso v). true se `latest` > `current`.
|
|
28
|
+
export function isNewer(latest: string, current: string): boolean {
|
|
29
|
+
const p = (v: string) => v.replace(/^v/, "").split(".").map((n) => parseInt(n, 10) || 0);
|
|
30
|
+
const a = p(latest);
|
|
31
|
+
const b = p(current);
|
|
32
|
+
for (let i = 0; i < 3; i++) {
|
|
33
|
+
const x = a[i] ?? 0;
|
|
34
|
+
const y = b[i] ?? 0;
|
|
35
|
+
if (x !== y) return x > y;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Controlla npm per una versione più recente. Throttled (cache 24h), non bloccante,
|
|
41
|
+
// silenzioso offline. Ritorna la versione latest se più nuova, altrimenti null.
|
|
42
|
+
export async function checkForUpdate(): Promise<string | null> {
|
|
43
|
+
if (process.env.INTERFERENCE_NO_UPDATE_CHECK) return null;
|
|
44
|
+
const file = cachePath();
|
|
45
|
+
try {
|
|
46
|
+
let latest: string | null = null;
|
|
47
|
+
|
|
48
|
+
// 1) cache fresca?
|
|
49
|
+
try {
|
|
50
|
+
const c = JSON.parse(await readFile(file, "utf8"));
|
|
51
|
+
if (typeof c.ts === "number" && Date.now() - c.ts < TTL && typeof c.latest === "string") {
|
|
52
|
+
latest = c.latest;
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
// niente cache valida
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 2) altrimenti interroga il registry (timeout breve)
|
|
59
|
+
if (!latest) {
|
|
60
|
+
const res = await fetch(REGISTRY, { signal: AbortSignal.timeout(2500) });
|
|
61
|
+
if (!res.ok) return null;
|
|
62
|
+
const j = (await res.json()) as { version?: string };
|
|
63
|
+
latest = j.version ?? null;
|
|
64
|
+
if (latest) {
|
|
65
|
+
try {
|
|
66
|
+
await mkdir(path.dirname(file), { recursive: true });
|
|
67
|
+
await writeFile(file, JSON.stringify({ ts: Date.now(), latest }));
|
|
68
|
+
} catch {
|
|
69
|
+
// cache best-effort
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return latest && isNewer(latest, CURRENT_VERSION) ? latest : null;
|
|
75
|
+
} catch {
|
|
76
|
+
return null; // offline / errori → nessun avviso
|
|
77
|
+
}
|
|
78
|
+
}
|
package/assets/screenshot.png
DELETED
|
Binary file
|
package/bun.lock
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lockfileVersion": 1,
|
|
3
|
-
"configVersion": 1,
|
|
4
|
-
"workspaces": {
|
|
5
|
-
"": {
|
|
6
|
-
"name": "interference",
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"@ai-sdk/anthropic": "^4.0.1",
|
|
9
|
-
"@ai-sdk/deepseek": "^3.0.1",
|
|
10
|
-
"@ai-sdk/openai-compatible": "^3.0.1",
|
|
11
|
-
"@inkjs/ui": "^2.0.0",
|
|
12
|
-
"ai": "^7.0.4",
|
|
13
|
-
"ink": "^7.1.0",
|
|
14
|
-
"ink-text-input": "^6.0.0",
|
|
15
|
-
"react": "^19.2.7",
|
|
16
|
-
"zod": "^4.4.3",
|
|
17
|
-
},
|
|
18
|
-
"devDependencies": {
|
|
19
|
-
"@types/bun": "latest",
|
|
20
|
-
"@types/react": "^19.2.17",
|
|
21
|
-
"ink-testing-library": "^4.0.0",
|
|
22
|
-
"typescript": "^5.6.0",
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
"packages": {
|
|
27
|
-
"@ai-sdk/anthropic": ["@ai-sdk/anthropic@4.0.1", "", { "dependencies": { "@ai-sdk/provider": "4.0.0", "@ai-sdk/provider-utils": "5.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-q9PMy0r3LGzSTu6FtYhFj6EesVpSpsEoPLsRKFnaK4YJd7SdUJlYIUJ4EXd5LTWzeXxk4r02z3gymo24c9jyQA=="],
|
|
28
|
-
|
|
29
|
-
"@ai-sdk/deepseek": ["@ai-sdk/deepseek@3.0.1", "", { "dependencies": { "@ai-sdk/provider": "4.0.0", "@ai-sdk/provider-utils": "5.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-isMBNuG8wWWZ8FvQ76Y8sp8L0ET6GCqD9WydRUA8WkcWJ/7PGnli6kE2fkfFVJF4fYS0JcAdLuxVnoTnngTT5w=="],
|
|
30
|
-
|
|
31
|
-
"@ai-sdk/gateway": ["@ai-sdk/gateway@4.0.4", "", { "dependencies": { "@ai-sdk/provider": "4.0.0", "@ai-sdk/provider-utils": "5.0.1", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-xO0e9duft/uZlnDaIeBZmzTMjfdEz1kkDzWnhQNkJZZljsKWVi6IREZW9nAa+Dx6jYJssyxSUggaFYBAV1WZpw=="],
|
|
32
|
-
|
|
33
|
-
"@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@3.0.1", "", { "dependencies": { "@ai-sdk/provider": "4.0.0", "@ai-sdk/provider-utils": "5.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-nUbQoGzdFZspb1cr6GUy+nR8Uvdi4/lCwTkdE9qKe+Qr2OVPsIKRIpyC9ewJ2uqUfl+1JlkWhPfR5l8bokNs4Q=="],
|
|
34
|
-
|
|
35
|
-
"@ai-sdk/provider": ["@ai-sdk/provider@4.0.0", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-fr9Gs89prDWiuox/T+kCA+i2cJkHpxU5S+tr4megjTzRC27ZsvFhwjU/+XrqqMbvBUlfmXxTOYWy8ng45dsjIg=="],
|
|
36
|
-
|
|
37
|
-
"@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@5.0.1", "", { "dependencies": { "@ai-sdk/provider": "4.0.0", "@standard-schema/spec": "^1.1.0", "@workflow/serde": "4.1.0", "eventsource-parser": "^3.0.8" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-p9Ra+dN4jjHrssXvklNf4nFvWbj1KePMfUOs7nue0NuoIMbYFBULhX4Vu0+6DWLnw3+UsLL9+RCKLtzzU43Qpg=="],
|
|
38
|
-
|
|
39
|
-
"@alcalzone/ansi-tokenize": ["@alcalzone/ansi-tokenize@0.3.0", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-p+CMKJ93HFmLkjXKlXiVGlMQEuRb6H0MokBSwUsX+S6BRX8eV5naFZpQJFfJHjRZY0Hmnqy1/r6UWl3x+19zYA=="],
|
|
40
|
-
|
|
41
|
-
"@inkjs/ui": ["@inkjs/ui@2.0.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-spinners": "^3.0.0", "deepmerge": "^4.3.1", "figures": "^6.1.0" }, "peerDependencies": { "ink": ">=5" } }, "sha512-5+8fJmwtF9UvikzLfph9sA+LS+l37Ij/szQltkuXLOAXwNkBX9innfzh4pLGXIB59vKEQUtc6D4qGvhD7h3pAg=="],
|
|
42
|
-
|
|
43
|
-
"@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="],
|
|
44
|
-
|
|
45
|
-
"@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
|
|
46
|
-
|
|
47
|
-
"@types/node": ["@types/node@26.0.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw=="],
|
|
48
|
-
|
|
49
|
-
"@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="],
|
|
50
|
-
|
|
51
|
-
"@vercel/oidc": ["@vercel/oidc@3.2.0", "", {}, "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug=="],
|
|
52
|
-
|
|
53
|
-
"@workflow/serde": ["@workflow/serde@4.1.0", "", {}, "sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ=="],
|
|
54
|
-
|
|
55
|
-
"ai": ["ai@7.0.4", "", { "dependencies": { "@ai-sdk/gateway": "4.0.4", "@ai-sdk/provider": "4.0.0", "@ai-sdk/provider-utils": "5.0.1" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-mZub080RWRxpWg8OY56KVnI3AoMVniccSWG+dwVb3nH81+GiNMDYBIdP41RLUivLpmU49pB7ssD7tvfIUaSaCA=="],
|
|
56
|
-
|
|
57
|
-
"ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="],
|
|
58
|
-
|
|
59
|
-
"ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
|
|
60
|
-
|
|
61
|
-
"ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
|
|
62
|
-
|
|
63
|
-
"auto-bind": ["auto-bind@5.0.1", "", {}, "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg=="],
|
|
64
|
-
|
|
65
|
-
"bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
|
|
66
|
-
|
|
67
|
-
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
|
68
|
-
|
|
69
|
-
"cli-boxes": ["cli-boxes@4.0.1", "", {}, "sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw=="],
|
|
70
|
-
|
|
71
|
-
"cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="],
|
|
72
|
-
|
|
73
|
-
"cli-spinners": ["cli-spinners@3.4.0", "", {}, "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw=="],
|
|
74
|
-
|
|
75
|
-
"cli-truncate": ["cli-truncate@6.1.0", "", { "dependencies": { "slice-ansi": "^9.0.0", "string-width": "^8.2.0" } }, "sha512-ofWtXdvPO1WepoE9Gn4dPdZw+ADud1Yz9K+xm9FjK5vvrs/D60vrlKIQeSw1wJX4cphW2bnWi8GZSKvf9T6shw=="],
|
|
76
|
-
|
|
77
|
-
"code-excerpt": ["code-excerpt@4.0.0", "", { "dependencies": { "convert-to-spaces": "^2.0.1" } }, "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA=="],
|
|
78
|
-
|
|
79
|
-
"convert-to-spaces": ["convert-to-spaces@2.0.1", "", {}, "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ=="],
|
|
80
|
-
|
|
81
|
-
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
|
|
82
|
-
|
|
83
|
-
"deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="],
|
|
84
|
-
|
|
85
|
-
"environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="],
|
|
86
|
-
|
|
87
|
-
"es-toolkit": ["es-toolkit@1.49.0", "", {}, "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g=="],
|
|
88
|
-
|
|
89
|
-
"escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="],
|
|
90
|
-
|
|
91
|
-
"eventsource-parser": ["eventsource-parser@3.1.0", "", {}, "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg=="],
|
|
92
|
-
|
|
93
|
-
"figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="],
|
|
94
|
-
|
|
95
|
-
"get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="],
|
|
96
|
-
|
|
97
|
-
"indent-string": ["indent-string@5.0.0", "", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="],
|
|
98
|
-
|
|
99
|
-
"ink": ["ink@7.1.0", "", { "dependencies": { "@alcalzone/ansi-tokenize": "^0.3.0", "ansi-escapes": "^7.3.0", "ansi-styles": "^6.2.3", "auto-bind": "^5.0.1", "chalk": "^5.6.2", "cli-boxes": "^4.0.1", "cli-cursor": "^4.0.0", "cli-truncate": "^6.0.0", "code-excerpt": "^4.0.0", "es-toolkit": "^1.45.1", "indent-string": "^5.0.0", "is-in-ci": "^2.0.0", "patch-console": "^2.0.0", "react-reconciler": "^0.33.0", "scheduler": "^0.27.0", "signal-exit": "^3.0.7", "slice-ansi": "^9.0.0", "stack-utils": "^2.0.6", "string-width": "^8.2.0", "terminal-size": "^4.0.1", "type-fest": "^5.5.0", "widest-line": "^6.0.0", "wrap-ansi": "^10.0.0", "ws": "^8.20.0", "yoga-layout": "~3.2.1" }, "peerDependencies": { "@types/react": ">=19.2.0", "react": ">=19.2.0", "react-devtools-core": ">=6.1.2" }, "optionalPeers": ["@types/react", "react-devtools-core"] }, "sha512-VWE6/yeLtFCJBNLflyI2OSylyXK1Rc24LuXup8Qt+icwkmmycFNdbn8IkSp6Frc0h1iA0NOvvi1ajW44U/w3Qg=="],
|
|
100
|
-
|
|
101
|
-
"ink-testing-library": ["ink-testing-library@4.0.0", "", { "peerDependencies": { "@types/react": ">=18.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-yF92kj3pmBvk7oKbSq5vEALO//o7Z9Ck/OaLNlkzXNeYdwfpxMQkSowGTFUCS5MSu9bWfSZMewGpp7bFc66D7Q=="],
|
|
102
|
-
|
|
103
|
-
"ink-text-input": ["ink-text-input@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "type-fest": "^4.18.2" }, "peerDependencies": { "ink": ">=5", "react": ">=18" } }, "sha512-Fw64n7Yha5deb1rHY137zHTAbSTNelUKuB5Kkk2HACXEtwIHBCf9OH2tP/LQ9fRYTl1F0dZgbW0zPnZk6FA9Lw=="],
|
|
104
|
-
|
|
105
|
-
"is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="],
|
|
106
|
-
|
|
107
|
-
"is-in-ci": ["is-in-ci@2.0.0", "", { "bin": { "is-in-ci": "cli.js" } }, "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w=="],
|
|
108
|
-
|
|
109
|
-
"is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="],
|
|
110
|
-
|
|
111
|
-
"json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="],
|
|
112
|
-
|
|
113
|
-
"mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="],
|
|
114
|
-
|
|
115
|
-
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
|
|
116
|
-
|
|
117
|
-
"patch-console": ["patch-console@2.0.0", "", {}, "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA=="],
|
|
118
|
-
|
|
119
|
-
"react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="],
|
|
120
|
-
|
|
121
|
-
"react-reconciler": ["react-reconciler@0.33.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA=="],
|
|
122
|
-
|
|
123
|
-
"restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="],
|
|
124
|
-
|
|
125
|
-
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
|
|
126
|
-
|
|
127
|
-
"signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
|
|
128
|
-
|
|
129
|
-
"slice-ansi": ["slice-ansi@9.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA=="],
|
|
130
|
-
|
|
131
|
-
"stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="],
|
|
132
|
-
|
|
133
|
-
"string-width": ["string-width@8.2.1", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA=="],
|
|
134
|
-
|
|
135
|
-
"strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
|
|
136
|
-
|
|
137
|
-
"tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="],
|
|
138
|
-
|
|
139
|
-
"terminal-size": ["terminal-size@4.0.1", "", {}, "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ=="],
|
|
140
|
-
|
|
141
|
-
"type-fest": ["type-fest@5.7.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg=="],
|
|
142
|
-
|
|
143
|
-
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
144
|
-
|
|
145
|
-
"undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="],
|
|
146
|
-
|
|
147
|
-
"widest-line": ["widest-line@6.0.0", "", { "dependencies": { "string-width": "^8.1.0" } }, "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA=="],
|
|
148
|
-
|
|
149
|
-
"wrap-ansi": ["wrap-ansi@10.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "string-width": "^8.2.0", "strip-ansi": "^7.1.2" } }, "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ=="],
|
|
150
|
-
|
|
151
|
-
"ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="],
|
|
152
|
-
|
|
153
|
-
"yoga-layout": ["yoga-layout@3.2.1", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="],
|
|
154
|
-
|
|
155
|
-
"zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
|
|
156
|
-
|
|
157
|
-
"ink-text-input/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
|
158
|
-
}
|
|
159
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"lib": ["ESNext"],
|
|
4
|
-
"target": "ESNext",
|
|
5
|
-
"module": "Preserve",
|
|
6
|
-
"moduleDetection": "force",
|
|
7
|
-
"allowJs": true,
|
|
8
|
-
"jsx": "react-jsx",
|
|
9
|
-
"types": ["bun"],
|
|
10
|
-
|
|
11
|
-
"moduleResolution": "bundler",
|
|
12
|
-
"allowImportingTsExtensions": true,
|
|
13
|
-
"verbatimModuleSyntax": true,
|
|
14
|
-
"noEmit": true,
|
|
15
|
-
|
|
16
|
-
"strict": true,
|
|
17
|
-
"skipLibCheck": true,
|
|
18
|
-
"noFallthroughCasesInSwitch": true,
|
|
19
|
-
"noUncheckedIndexedAccess": true,
|
|
20
|
-
"noImplicitOverride": true
|
|
21
|
-
},
|
|
22
|
-
"include": ["src"]
|
|
23
|
-
}
|