@tvps/agw-client-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +31 -0
- package/README.md +126 -0
- package/dist/bin/agw-client-cli.d.ts +2 -0
- package/dist/bin/agw-client-cli.js +5 -0
- package/dist/bin/agw-client-cli.js.map +1 -0
- package/dist/binaries.d.ts +4 -0
- package/dist/binaries.js +27 -0
- package/dist/binaries.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +295 -0
- package/dist/cli.js.map +1 -0
- package/dist/fs.d.ts +18 -0
- package/dist/fs.js +123 -0
- package/dist/fs.js.map +1 -0
- package/dist/gateway.d.ts +30 -0
- package/dist/gateway.js +257 -0
- package/dist/gateway.js.map +1 -0
- package/dist/models.d.ts +14 -0
- package/dist/models.js +113 -0
- package/dist/models.js.map +1 -0
- package/dist/paths.d.ts +7 -0
- package/dist/paths.js +36 -0
- package/dist/paths.js.map +1 -0
- package/dist/prompts.d.ts +22 -0
- package/dist/prompts.js +178 -0
- package/dist/prompts.js.map +1 -0
- package/dist/state.d.ts +4 -0
- package/dist/state.js +19 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +95 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/writers/claude.d.ts +22 -0
- package/dist/writers/claude.js +31 -0
- package/dist/writers/claude.js.map +1 -0
- package/dist/writers/codex.d.ts +26 -0
- package/dist/writers/codex.js +96 -0
- package/dist/writers/codex.js.map +1 -0
- package/package.json +55 -0
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import prompts from "prompts";
|
|
2
|
+
import { assertTargetBinary } from "./binaries.js";
|
|
3
|
+
import { normalizeGatewayUrl } from "./gateway.js";
|
|
4
|
+
import { allModels, allProviderModels, modelChoices, requireAvailableModel } from "./models.js";
|
|
5
|
+
import { DEFAULT_CLAUDE_MODELS, DEFAULT_CODEX_MODEL, GATEWAY_PROVIDERS, TARGETS } from "./types.js";
|
|
6
|
+
export function assertInteractive(stdin, stdout, command) {
|
|
7
|
+
if (!stdin.isTTY || !stdout.isTTY) {
|
|
8
|
+
throw new Error(`${command} is interactive-only in v1. Run it in a real terminal.`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export async function promptGatewayUrl() {
|
|
12
|
+
const response = await prompts({
|
|
13
|
+
type: "text",
|
|
14
|
+
name: "gatewayUrl",
|
|
15
|
+
message: "Gateway URL",
|
|
16
|
+
validate: (value) => {
|
|
17
|
+
try {
|
|
18
|
+
normalizeGatewayUrl(String(value));
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
return err.message;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (!response.gatewayUrl)
|
|
27
|
+
throw new Error("Setup cancelled.");
|
|
28
|
+
return normalizeGatewayUrl(String(response.gatewayUrl));
|
|
29
|
+
}
|
|
30
|
+
export async function promptVirtualKey() {
|
|
31
|
+
const response = await prompts({
|
|
32
|
+
type: "password",
|
|
33
|
+
name: "virtualKey",
|
|
34
|
+
message: "Virtual key",
|
|
35
|
+
validate: (value) => String(value).trim().length > 0 || "Virtual key is required.",
|
|
36
|
+
});
|
|
37
|
+
if (!response.virtualKey)
|
|
38
|
+
throw new Error("Setup cancelled.");
|
|
39
|
+
return String(response.virtualKey).trim();
|
|
40
|
+
}
|
|
41
|
+
export async function promptTargets() {
|
|
42
|
+
const response = await prompts({
|
|
43
|
+
type: "multiselect",
|
|
44
|
+
name: "targets",
|
|
45
|
+
message: "Targets to enable",
|
|
46
|
+
min: 1,
|
|
47
|
+
choices: [
|
|
48
|
+
{ title: "Claude Code CLI", value: "claude", selected: true },
|
|
49
|
+
{ title: "Codex CLI", value: "codex", selected: true },
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
if (!response.targets || response.targets.length === 0)
|
|
53
|
+
throw new Error("Setup cancelled.");
|
|
54
|
+
const targets = response.targets;
|
|
55
|
+
await Promise.all(targets.map(assertTargetBinary));
|
|
56
|
+
return targets;
|
|
57
|
+
}
|
|
58
|
+
export async function promptTargetForSwitch() {
|
|
59
|
+
const response = await prompts({
|
|
60
|
+
type: "select",
|
|
61
|
+
name: "target",
|
|
62
|
+
message: "Target to switch",
|
|
63
|
+
choices: [
|
|
64
|
+
{ title: "Claude Code CLI", value: "claude" },
|
|
65
|
+
{ title: "Codex CLI", value: "codex" },
|
|
66
|
+
],
|
|
67
|
+
});
|
|
68
|
+
if (!response.target)
|
|
69
|
+
throw new Error("Switch cancelled.");
|
|
70
|
+
const target = response.target;
|
|
71
|
+
await assertTargetBinary(target);
|
|
72
|
+
return target;
|
|
73
|
+
}
|
|
74
|
+
export async function promptProvider(target) {
|
|
75
|
+
const response = await prompts({
|
|
76
|
+
type: "select",
|
|
77
|
+
name: "provider",
|
|
78
|
+
message: `${target} provider`,
|
|
79
|
+
choices: [
|
|
80
|
+
{ title: "Kiro via Agent Gateway", value: "kiro" },
|
|
81
|
+
{ title: "Codex via Agent Gateway", value: "codex" },
|
|
82
|
+
{ title: "Official direct config", value: "official" },
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
if (!response.provider)
|
|
86
|
+
throw new Error("Provider selection cancelled.");
|
|
87
|
+
return response.provider;
|
|
88
|
+
}
|
|
89
|
+
export async function promptClaudeSelection(catalog, existing, options) {
|
|
90
|
+
const provider = options?.provider ?? (options?.allowOfficial ? await promptProvider("claude") : await promptGatewayProvider("Claude provider", existing?.provider));
|
|
91
|
+
if (provider === "official")
|
|
92
|
+
return { provider };
|
|
93
|
+
const providerModels = allProviderModels(catalog, provider);
|
|
94
|
+
if (providerModels.length === 0) {
|
|
95
|
+
throw new Error(`No ${provider} models are available for Claude.`);
|
|
96
|
+
}
|
|
97
|
+
const choices = modelChoices(providerModels);
|
|
98
|
+
return {
|
|
99
|
+
provider,
|
|
100
|
+
opusModel: await chooseModel("Claude opus/capable model", choices, preferredDefault(catalog, provider, "opus", existing?.opusModel)),
|
|
101
|
+
sonnetModel: await chooseModel("Claude sonnet/balanced model", choices, preferredDefault(catalog, provider, "sonnet", existing?.sonnetModel)),
|
|
102
|
+
haikuModel: await chooseModel("Claude haiku/fast model", choices, preferredDefault(catalog, provider, "haiku", existing?.haikuModel)),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export async function promptCodexSelection(catalog, existing, options) {
|
|
106
|
+
const provider = options?.provider ?? (options?.allowOfficial ? await promptProvider("codex") : await promptGatewayProvider("Codex provider", existing?.provider));
|
|
107
|
+
if (provider === "official")
|
|
108
|
+
return { provider };
|
|
109
|
+
const providerModels = allProviderModels(catalog, provider);
|
|
110
|
+
if (providerModels.length === 0) {
|
|
111
|
+
throw new Error(`No ${provider} models are available for Codex.`);
|
|
112
|
+
}
|
|
113
|
+
const choices = modelChoices(providerModels.length > 0 ? providerModels : allModels(catalog));
|
|
114
|
+
const defaultModel = existing?.model && providerModels.some((model) => model.id === existing.model)
|
|
115
|
+
? existing.model
|
|
116
|
+
: requireAvailableModel(catalog, provider, DEFAULT_CODEX_MODEL) ?? undefined;
|
|
117
|
+
return {
|
|
118
|
+
provider,
|
|
119
|
+
model: await chooseModel("Codex model", choices, defaultModel),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export async function confirm(message, initial = false) {
|
|
123
|
+
const response = await prompts({
|
|
124
|
+
type: "confirm",
|
|
125
|
+
name: "ok",
|
|
126
|
+
message,
|
|
127
|
+
initial,
|
|
128
|
+
});
|
|
129
|
+
return response.ok === true;
|
|
130
|
+
}
|
|
131
|
+
export async function confirmSetupSummary(summary) {
|
|
132
|
+
const response = await prompts({
|
|
133
|
+
type: "confirm",
|
|
134
|
+
name: "ok",
|
|
135
|
+
message: `${summary}\nApply these config changes now?`,
|
|
136
|
+
initial: true,
|
|
137
|
+
});
|
|
138
|
+
return response.ok === true;
|
|
139
|
+
}
|
|
140
|
+
async function promptGatewayProvider(message, current) {
|
|
141
|
+
const initial = GATEWAY_PROVIDERS.indexOf(current === "codex" ? "codex" : "kiro");
|
|
142
|
+
const response = await prompts({
|
|
143
|
+
type: "select",
|
|
144
|
+
name: "provider",
|
|
145
|
+
message,
|
|
146
|
+
initial: initial >= 0 ? initial : 0,
|
|
147
|
+
choices: [
|
|
148
|
+
{ title: "Kiro via Agent Gateway", value: "kiro" },
|
|
149
|
+
{ title: "Codex via Agent Gateway", value: "codex" },
|
|
150
|
+
],
|
|
151
|
+
});
|
|
152
|
+
if (!response.provider)
|
|
153
|
+
throw new Error("Provider selection cancelled.");
|
|
154
|
+
return response.provider;
|
|
155
|
+
}
|
|
156
|
+
async function chooseModel(message, choices, initialValue) {
|
|
157
|
+
const initial = initialValue ? choices.findIndex((choice) => choice.value === initialValue) : 0;
|
|
158
|
+
const response = await prompts({
|
|
159
|
+
type: "select",
|
|
160
|
+
name: "model",
|
|
161
|
+
message,
|
|
162
|
+
initial: initial >= 0 ? initial : 0,
|
|
163
|
+
choices,
|
|
164
|
+
});
|
|
165
|
+
if (!response.model)
|
|
166
|
+
throw new Error("Model selection cancelled.");
|
|
167
|
+
return response.model;
|
|
168
|
+
}
|
|
169
|
+
function preferredDefault(catalog, provider, tier, existing) {
|
|
170
|
+
if (existing && allProviderModels(catalog, provider).some((model) => model.id === existing)) {
|
|
171
|
+
return existing;
|
|
172
|
+
}
|
|
173
|
+
return requireAvailableModel(catalog, provider, DEFAULT_CLAUDE_MODELS[tier]) ?? undefined;
|
|
174
|
+
}
|
|
175
|
+
export function targetsFromStateOrDefault(targets) {
|
|
176
|
+
return targets?.length ? targets : [...TARGETS];
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CliState, RuntimePaths } from "./types.js";
|
|
2
|
+
export declare function loadState(paths: RuntimePaths): Promise<CliState | null>;
|
|
3
|
+
export declare function saveState(paths: RuntimePaths, state: CliState): Promise<void>;
|
|
4
|
+
export declare function deleteState(paths: RuntimePaths): Promise<void>;
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { atomicWriteFile, chmod600, readIfExists, removeIfExists } from "./fs.js";
|
|
2
|
+
export async function loadState(paths) {
|
|
3
|
+
const raw = await readIfExists(paths.stateFile);
|
|
4
|
+
if (!raw)
|
|
5
|
+
return null;
|
|
6
|
+
const parsed = JSON.parse(raw);
|
|
7
|
+
if (!parsed.gatewayUrl || !parsed.virtualKey) {
|
|
8
|
+
throw new Error(`Invalid agw-client-cli state file: ${paths.stateFile}`);
|
|
9
|
+
}
|
|
10
|
+
return parsed;
|
|
11
|
+
}
|
|
12
|
+
export async function saveState(paths, state) {
|
|
13
|
+
await atomicWriteFile(paths.stateFile, `${JSON.stringify(state, null, 2)}\n`);
|
|
14
|
+
await chmod600(paths.stateFile);
|
|
15
|
+
}
|
|
16
|
+
export async function deleteState(paths) {
|
|
17
|
+
await removeIfExists(paths.stateFile);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGlF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAmB;IACjD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAmB,EAAE,KAAe;IAClE,MAAM,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAmB;IACnD,MAAM,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export { CLIENT_VERSION } from "./version.js";
|
|
2
|
+
export type GatewayProvider = "kiro" | "codex";
|
|
3
|
+
export type Target = "claude" | "codex";
|
|
4
|
+
export type TargetProvider = GatewayProvider | "official";
|
|
5
|
+
export type ClientFormat = "verbose" | "openai" | "anthropic";
|
|
6
|
+
export declare const GATEWAY_PROVIDERS: GatewayProvider[];
|
|
7
|
+
export declare const TARGETS: Target[];
|
|
8
|
+
export interface RuntimePaths {
|
|
9
|
+
homeDir: string;
|
|
10
|
+
appConfigDir: string;
|
|
11
|
+
stateFile: string;
|
|
12
|
+
claudeConfig: string;
|
|
13
|
+
codexConfig: string;
|
|
14
|
+
codexModelCatalog: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ModelEntry {
|
|
17
|
+
id: string;
|
|
18
|
+
label: string;
|
|
19
|
+
provider: GatewayProvider;
|
|
20
|
+
format: ClientFormat;
|
|
21
|
+
contextLength?: number;
|
|
22
|
+
maxOutputTokens?: number;
|
|
23
|
+
inputModalities: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface ProviderModelCatalog {
|
|
26
|
+
verbose: ModelEntry[];
|
|
27
|
+
openai: ModelEntry[];
|
|
28
|
+
anthropic: ModelEntry[];
|
|
29
|
+
}
|
|
30
|
+
export type ModelCatalog = Record<GatewayProvider, ProviderModelCatalog>;
|
|
31
|
+
export interface ClaudeSelection {
|
|
32
|
+
provider: TargetProvider;
|
|
33
|
+
opusModel?: string;
|
|
34
|
+
sonnetModel?: string;
|
|
35
|
+
haikuModel?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CodexSelection {
|
|
38
|
+
provider: TargetProvider;
|
|
39
|
+
model?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface CliSelections {
|
|
42
|
+
claude?: ClaudeSelection;
|
|
43
|
+
codex?: CodexSelection;
|
|
44
|
+
}
|
|
45
|
+
export interface LastWrittenState {
|
|
46
|
+
claudeConfigSha256?: string;
|
|
47
|
+
codexConfigSha256?: string;
|
|
48
|
+
codexModelCatalogSha256?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ProbeStepResult {
|
|
51
|
+
name: string;
|
|
52
|
+
ok: boolean;
|
|
53
|
+
provider?: GatewayProvider;
|
|
54
|
+
format?: ClientFormat;
|
|
55
|
+
path: string;
|
|
56
|
+
model?: string;
|
|
57
|
+
status?: number;
|
|
58
|
+
error?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface ProbeSummary {
|
|
61
|
+
checkedAt: string;
|
|
62
|
+
ok: boolean;
|
|
63
|
+
steps: ProbeStepResult[];
|
|
64
|
+
}
|
|
65
|
+
export interface CliState {
|
|
66
|
+
version: string;
|
|
67
|
+
gatewayUrl: string;
|
|
68
|
+
virtualKey: string;
|
|
69
|
+
enabledTargets: Target[];
|
|
70
|
+
selections: CliSelections;
|
|
71
|
+
configPaths: Pick<RuntimePaths, "claudeConfig" | "codexConfig" | "codexModelCatalog">;
|
|
72
|
+
lastWritten: LastWrittenState;
|
|
73
|
+
lastProbe?: ProbeSummary;
|
|
74
|
+
}
|
|
75
|
+
export interface CommandIO {
|
|
76
|
+
stdin: NodeJS.ReadStream;
|
|
77
|
+
stdout: NodeJS.WriteStream;
|
|
78
|
+
stderr: NodeJS.WriteStream;
|
|
79
|
+
}
|
|
80
|
+
export interface WriteResult {
|
|
81
|
+
path: string;
|
|
82
|
+
backupCreated: boolean;
|
|
83
|
+
sha256?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface RestoreResult {
|
|
86
|
+
path: string;
|
|
87
|
+
restored: boolean;
|
|
88
|
+
deleted: boolean;
|
|
89
|
+
}
|
|
90
|
+
export declare const DEFAULT_CLAUDE_MODELS: {
|
|
91
|
+
readonly opus: "claude-opus-4-6";
|
|
92
|
+
readonly sonnet: "claude-sonnet-4-6";
|
|
93
|
+
readonly haiku: "claude-haiku-4-5";
|
|
94
|
+
};
|
|
95
|
+
export declare const DEFAULT_CODEX_MODEL = "claude-opus-4-6";
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { CLIENT_VERSION } from "./version.js";
|
|
2
|
+
export const GATEWAY_PROVIDERS = ["kiro", "codex"];
|
|
3
|
+
export const TARGETS = ["claude", "codex"];
|
|
4
|
+
export const DEFAULT_CLAUDE_MODELS = {
|
|
5
|
+
opus: "claude-opus-4-6",
|
|
6
|
+
sonnet: "claude-sonnet-4-6",
|
|
7
|
+
haiku: "claude-haiku-4-5",
|
|
8
|
+
};
|
|
9
|
+
export const DEFAULT_CODEX_MODEL = "claude-opus-4-6";
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAO9C,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,OAAO,GAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAkGrD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,kBAAkB;CACjB,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CLIENT_VERSION = "0.1.0";
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ClaudeSelection, RuntimePaths, WriteResult, RestoreResult } from "../types.js";
|
|
2
|
+
export declare function claudeBaseUrl(gatewayUrl: string, provider: "kiro" | "codex"): string;
|
|
3
|
+
export declare function buildClaudeSettings(input: {
|
|
4
|
+
gatewayUrl: string;
|
|
5
|
+
virtualKey: string;
|
|
6
|
+
selection: Required<Omit<ClaudeSelection, "provider">> & {
|
|
7
|
+
provider: "kiro" | "codex";
|
|
8
|
+
};
|
|
9
|
+
}): string;
|
|
10
|
+
export declare function writeClaudeConfig(paths: RuntimePaths, input: {
|
|
11
|
+
gatewayUrl: string;
|
|
12
|
+
virtualKey: string;
|
|
13
|
+
selection: Required<Omit<ClaudeSelection, "provider">> & {
|
|
14
|
+
provider: "kiro" | "codex";
|
|
15
|
+
};
|
|
16
|
+
previousSha256?: string;
|
|
17
|
+
confirmDrift?: (message: string) => Promise<boolean>;
|
|
18
|
+
}): Promise<WriteResult>;
|
|
19
|
+
export declare function restoreClaudeConfig(paths: RuntimePaths, opts?: {
|
|
20
|
+
previousSha256?: string;
|
|
21
|
+
confirmDrift?: (message: string) => Promise<boolean>;
|
|
22
|
+
}): Promise<RestoreResult>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { writeManagedFile, restoreOrDeleteManagedFile } from "../fs.js";
|
|
2
|
+
export function claudeBaseUrl(gatewayUrl, provider) {
|
|
3
|
+
return `${gatewayUrl}/${provider}/anthropic`;
|
|
4
|
+
}
|
|
5
|
+
export function buildClaudeSettings(input) {
|
|
6
|
+
const env = {
|
|
7
|
+
ANTHROPIC_BASE_URL: claudeBaseUrl(input.gatewayUrl, input.selection.provider),
|
|
8
|
+
ANTHROPIC_AUTH_TOKEN: input.virtualKey,
|
|
9
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL: input.selection.opusModel,
|
|
10
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL: input.selection.sonnetModel,
|
|
11
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL: input.selection.haikuModel,
|
|
12
|
+
CLAUDE_CODE_ENABLE_TELEMETRY: "0",
|
|
13
|
+
DISABLE_NON_ESSENTIAL_MODEL_CALLS: "1",
|
|
14
|
+
};
|
|
15
|
+
return JSON.stringify({ env }, null, 2);
|
|
16
|
+
}
|
|
17
|
+
export async function writeClaudeConfig(paths, input) {
|
|
18
|
+
return writeManagedFile(paths.claudeConfig, buildClaudeSettings(input), {
|
|
19
|
+
previousSha256: input.previousSha256,
|
|
20
|
+
confirmDrift: input.confirmDrift,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export async function restoreClaudeConfig(paths, opts) {
|
|
24
|
+
return restoreOrDeleteManagedFile(paths.claudeConfig, {
|
|
25
|
+
...opts,
|
|
26
|
+
isManagedContent: (body) => body.includes("ANTHROPIC_BASE_URL") &&
|
|
27
|
+
body.includes("ANTHROPIC_AUTH_TOKEN") &&
|
|
28
|
+
body.includes("/anthropic"),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/writers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAGxE,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,QAA0B;IAC1E,OAAO,GAAG,UAAU,IAAI,QAAQ,YAAY,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAInC;IACC,MAAM,GAAG,GAA2B;QAClC,kBAAkB,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC7E,oBAAoB,EAAE,KAAK,CAAC,UAAU;QACtC,4BAA4B,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS;QACvD,8BAA8B,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW;QAC3D,6BAA6B,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU;QACzD,4BAA4B,EAAE,GAAG;QACjC,iCAAiC,EAAE,GAAG;KACvC,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAmB,EACnB,KAMC;IAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE;QACtE,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAmB,EACnB,IAGC;IAED,OAAO,0BAA0B,CAAC,KAAK,CAAC,YAAY,EAAE;QACpD,GAAG,IAAI;QACP,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CodexSelection, GatewayProvider, ModelCatalog, ModelEntry, RestoreResult, RuntimePaths, WriteResult } from "../types.js";
|
|
2
|
+
export declare function codexProviderKey(provider: GatewayProvider): string;
|
|
3
|
+
export declare function codexBaseUrl(gatewayUrl: string, provider: GatewayProvider): string;
|
|
4
|
+
export declare function buildCodexConfig(input: {
|
|
5
|
+
gatewayUrl: string;
|
|
6
|
+
virtualKey: string;
|
|
7
|
+
selection: Required<Omit<CodexSelection, "provider">> & {
|
|
8
|
+
provider: GatewayProvider;
|
|
9
|
+
};
|
|
10
|
+
modelCatalogPath?: string;
|
|
11
|
+
}): string;
|
|
12
|
+
export declare function buildCodexModelCatalog(models: ModelEntry[]): string;
|
|
13
|
+
export declare function writeCodexModelCatalog(paths: RuntimePaths, catalog: ModelCatalog): Promise<WriteResult>;
|
|
14
|
+
export declare function writeCodexConfig(paths: RuntimePaths, input: {
|
|
15
|
+
gatewayUrl: string;
|
|
16
|
+
virtualKey: string;
|
|
17
|
+
selection: Required<Omit<CodexSelection, "provider">> & {
|
|
18
|
+
provider: GatewayProvider;
|
|
19
|
+
};
|
|
20
|
+
previousSha256?: string;
|
|
21
|
+
confirmDrift?: (message: string) => Promise<boolean>;
|
|
22
|
+
}): Promise<WriteResult>;
|
|
23
|
+
export declare function restoreCodexConfig(paths: RuntimePaths, opts?: {
|
|
24
|
+
previousSha256?: string;
|
|
25
|
+
confirmDrift?: (message: string) => Promise<boolean>;
|
|
26
|
+
}): Promise<RestoreResult>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { atomicWriteFile, removeIfExists, restoreOrDeleteManagedFile, writeManagedFile } from "../fs.js";
|
|
2
|
+
import { allModels, dedupeModels } from "../models.js";
|
|
3
|
+
export function codexProviderKey(provider) {
|
|
4
|
+
return `agent_gateway_${provider}`;
|
|
5
|
+
}
|
|
6
|
+
export function codexBaseUrl(gatewayUrl, provider) {
|
|
7
|
+
return `${gatewayUrl}/${provider}/openai/v1`;
|
|
8
|
+
}
|
|
9
|
+
export function buildCodexConfig(input) {
|
|
10
|
+
const providerKey = codexProviderKey(input.selection.provider);
|
|
11
|
+
const lines = [
|
|
12
|
+
`model = ${tomlString(input.selection.model)}`,
|
|
13
|
+
`model_provider = ${tomlString(providerKey)}`,
|
|
14
|
+
`model_reasoning_effort = "xhigh"`,
|
|
15
|
+
`plan_mode_reasoning_effort = "xhigh"`,
|
|
16
|
+
];
|
|
17
|
+
if (input.modelCatalogPath) {
|
|
18
|
+
lines.push(`model_catalog_json = ${tomlString(input.modelCatalogPath)}`);
|
|
19
|
+
}
|
|
20
|
+
lines.push("");
|
|
21
|
+
for (const provider of ["kiro", "codex"]) {
|
|
22
|
+
lines.push(`[model_providers.${codexProviderKey(provider)}]`);
|
|
23
|
+
lines.push(`name = ${tomlString(provider === "kiro" ? "Agent Gateway (Kiro)" : "Agent Gateway (Codex)")}`);
|
|
24
|
+
lines.push(`base_url = ${tomlString(codexBaseUrl(input.gatewayUrl, provider))}`);
|
|
25
|
+
lines.push(`experimental_bearer_token = ${tomlString(input.virtualKey)}`);
|
|
26
|
+
lines.push(`wire_api = "responses"`);
|
|
27
|
+
lines.push("");
|
|
28
|
+
}
|
|
29
|
+
return lines.join("\n").trimEnd();
|
|
30
|
+
}
|
|
31
|
+
export function buildCodexModelCatalog(models) {
|
|
32
|
+
return JSON.stringify({
|
|
33
|
+
models: dedupeModels(models).map((model, index) => ({
|
|
34
|
+
slug: model.id,
|
|
35
|
+
display_name: model.label,
|
|
36
|
+
description: `Agent Gateway ${model.provider} model`,
|
|
37
|
+
default_reasoning_level: "medium",
|
|
38
|
+
supported_reasoning_levels: [
|
|
39
|
+
{ effort: "low", description: "Low reasoning" },
|
|
40
|
+
{ effort: "medium", description: "Medium reasoning" },
|
|
41
|
+
{ effort: "high", description: "High reasoning" },
|
|
42
|
+
{ effort: "xhigh", description: "Extra high reasoning" },
|
|
43
|
+
],
|
|
44
|
+
shell_type: "shell_command",
|
|
45
|
+
visibility: "list",
|
|
46
|
+
supported_in_api: true,
|
|
47
|
+
priority: index,
|
|
48
|
+
availability_nux: null,
|
|
49
|
+
upgrade: null,
|
|
50
|
+
base_instructions: "",
|
|
51
|
+
supports_reasoning_summaries: false,
|
|
52
|
+
default_reasoning_summary: "none",
|
|
53
|
+
support_verbosity: false,
|
|
54
|
+
default_verbosity: null,
|
|
55
|
+
apply_patch_tool_type: "freeform",
|
|
56
|
+
web_search_tool_type: "text",
|
|
57
|
+
truncation_policy: { mode: "tokens", limit: 10000 },
|
|
58
|
+
supports_parallel_tool_calls: true,
|
|
59
|
+
supports_image_detail_original: false,
|
|
60
|
+
...(model.contextLength ? { context_window: model.contextLength, max_context_window: model.contextLength } : {}),
|
|
61
|
+
auto_compact_token_limit: null,
|
|
62
|
+
experimental_supported_tools: [],
|
|
63
|
+
supports_search_tool: false,
|
|
64
|
+
input_modalities: model.inputModalities,
|
|
65
|
+
})),
|
|
66
|
+
}, null, 2);
|
|
67
|
+
}
|
|
68
|
+
export async function writeCodexModelCatalog(paths, catalog) {
|
|
69
|
+
const body = buildCodexModelCatalog(allModels(catalog));
|
|
70
|
+
const sha256 = await atomicWriteFile(paths.codexModelCatalog, `${body}\n`);
|
|
71
|
+
return { path: paths.codexModelCatalog, backupCreated: false, sha256 };
|
|
72
|
+
}
|
|
73
|
+
export async function writeCodexConfig(paths, input) {
|
|
74
|
+
return writeManagedFile(paths.codexConfig, buildCodexConfig({
|
|
75
|
+
gatewayUrl: input.gatewayUrl,
|
|
76
|
+
virtualKey: input.virtualKey,
|
|
77
|
+
selection: input.selection,
|
|
78
|
+
modelCatalogPath: paths.codexModelCatalog,
|
|
79
|
+
}), {
|
|
80
|
+
previousSha256: input.previousSha256,
|
|
81
|
+
confirmDrift: input.confirmDrift,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export async function restoreCodexConfig(paths, opts) {
|
|
85
|
+
const result = await restoreOrDeleteManagedFile(paths.codexConfig, {
|
|
86
|
+
...opts,
|
|
87
|
+
isManagedContent: (body) => body.includes("agent_gateway_") ||
|
|
88
|
+
(body.includes("experimental_bearer_token") && body.includes("/openai/v1")),
|
|
89
|
+
});
|
|
90
|
+
await removeIfExists(paths.codexModelCatalog);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
function tomlString(value) {
|
|
94
|
+
return JSON.stringify(value);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/writers/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAWvD,MAAM,UAAU,gBAAgB,CAAC,QAAyB;IACxD,OAAO,iBAAiB,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,QAAyB;IACxE,OAAO,GAAG,UAAU,IAAI,QAAQ,YAAY,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAKhC;IACC,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAa;QACtB,WAAW,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QAC9C,oBAAoB,UAAU,CAAC,WAAW,CAAC,EAAE;QAC7C,kCAAkC;QAClC,sCAAsC;KACvC,CAAC;IACF,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAsB,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,oBAAoB,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC3G,KAAK,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,+BAA+B,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,EAAE,KAAK,CAAC,EAAE;YACd,YAAY,EAAE,KAAK,CAAC,KAAK;YACzB,WAAW,EAAE,iBAAiB,KAAK,CAAC,QAAQ,QAAQ;YACpD,uBAAuB,EAAE,QAAQ;YACjC,0BAA0B,EAAE;gBAC1B,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE;gBAC/C,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBACrD,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE;gBACjD,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE;aACzD;YACD,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,MAAM;YAClB,gBAAgB,EAAE,IAAI;YACtB,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,IAAI;YACtB,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,EAAE;YACrB,4BAA4B,EAAE,KAAK;YACnC,yBAAyB,EAAE,MAAM;YACjC,iBAAiB,EAAE,KAAK;YACxB,iBAAiB,EAAE,IAAI;YACvB,qBAAqB,EAAE,UAAU;YACjC,oBAAoB,EAAE,MAAM;YAC5B,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;YACnD,4BAA4B,EAAE,IAAI;YAClC,8BAA8B,EAAE,KAAK;YACrC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChH,wBAAwB,EAAE,IAAI;YAC9B,4BAA4B,EAAE,EAAE;YAChC,oBAAoB,EAAE,KAAK;YAC3B,gBAAgB,EAAE,KAAK,CAAC,eAAe;SACxC,CAAC,CAAC;KACJ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAmB,EAAE,OAAqB;IACrF,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAC3E,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,iBAAiB,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAmB,EACnB,KAMC;IAED,OAAO,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC;QAC1D,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,gBAAgB,EAAE,KAAK,CAAC,iBAAiB;KAC1C,CAAC,EAAE;QACF,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAmB,EACnB,IAGC;IAED,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,KAAK,CAAC,WAAW,EAAE;QACjE,GAAG,IAAI;QACP,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC9E,CAAC,CAAC;IACH,MAAM,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tvps/agw-client-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Interactive Agent Gateway client CLI for virtual-key Claude Code and Codex CLI setup.",
|
|
5
|
+
"author": "tvps.tech",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "./dist/cli.js",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": "./dist/cli.js"
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"agw-client-cli": "./dist/bin/agw-client-cli.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist/",
|
|
20
|
+
"README.md",
|
|
21
|
+
"AGENTS.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"prebuild": "node scripts/gen-version.cjs",
|
|
25
|
+
"build": "tsc -p tsconfig.build.json",
|
|
26
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
27
|
+
"lint": "eslint .",
|
|
28
|
+
"test": "vitest run",
|
|
29
|
+
"prepack": "npm run build"
|
|
30
|
+
},
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "git+https://github.com/if414013/agent-gateway-releases.git"
|
|
34
|
+
},
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/if414013/agent-gateway-releases/issues"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://www.npmjs.com/package/@tvps/agw-client-cli",
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=20"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"prompts": "^2.4.2"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@eslint/js": "^9.12.0",
|
|
47
|
+
"@types/node": "^20.16.0",
|
|
48
|
+
"@types/prompts": "^2.4.9",
|
|
49
|
+
"@typescript-eslint/eslint-plugin": "^8.8.0",
|
|
50
|
+
"@typescript-eslint/parser": "^8.8.0",
|
|
51
|
+
"eslint": "^9.12.0",
|
|
52
|
+
"typescript": "^5.6.2",
|
|
53
|
+
"vitest": "^4.1.7"
|
|
54
|
+
}
|
|
55
|
+
}
|