modelrig 0.0.1 → 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/LICENSE +201 -0
- package/README.md +115 -8
- package/dist/adapters/anthropic.d.ts +46 -0
- package/dist/adapters/anthropic.d.ts.map +1 -0
- package/dist/adapters/anthropic.js +202 -0
- package/dist/adapters/deepseek.d.ts +41 -0
- package/dist/adapters/deepseek.d.ts.map +1 -0
- package/dist/adapters/deepseek.js +163 -0
- package/dist/adapters/gemini.d.ts +44 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +222 -0
- package/dist/adapters/grok.d.ts +44 -0
- package/dist/adapters/grok.d.ts.map +1 -0
- package/dist/adapters/grok.js +168 -0
- package/dist/adapters/openai-compat.d.ts +74 -0
- package/dist/adapters/openai-compat.d.ts.map +1 -0
- package/dist/adapters/openai-compat.js +187 -0
- package/dist/adapters/openai.d.ts +49 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +222 -0
- package/dist/bakeoff/engine.d.ts +52 -0
- package/dist/bakeoff/engine.d.ts.map +1 -0
- package/dist/bakeoff/engine.js +163 -0
- package/dist/bakeoff/replay.d.ts +52 -0
- package/dist/bakeoff/replay.d.ts.map +1 -0
- package/dist/bakeoff/replay.js +94 -0
- package/dist/bakeoff/samples.d.ts +62 -0
- package/dist/bakeoff/samples.d.ts.map +1 -0
- package/dist/bakeoff/samples.js +128 -0
- package/dist/bakeoff/stats.d.ts +13 -0
- package/dist/bakeoff/stats.d.ts.map +1 -0
- package/dist/bakeoff/stats.js +48 -0
- package/dist/bakeoff/types.d.ts +37 -0
- package/dist/bakeoff/types.d.ts.map +1 -0
- package/dist/bakeoff/types.js +10 -0
- package/dist/cli.d.ts +27 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +572 -0
- package/dist/config.d.ts +104 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +148 -0
- package/dist/feedback/coverage.d.ts +32 -0
- package/dist/feedback/coverage.d.ts.map +1 -0
- package/dist/feedback/coverage.js +95 -0
- package/dist/feedback/feedback.d.ts +35 -0
- package/dist/feedback/feedback.d.ts.map +1 -0
- package/dist/feedback/feedback.js +39 -0
- package/dist/index.d.ts +155 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +448 -0
- package/dist/init/finder.d.ts +79 -0
- package/dist/init/finder.d.ts.map +1 -0
- package/dist/init/finder.js +297 -0
- package/dist/init/run.d.ts +99 -0
- package/dist/init/run.d.ts.map +1 -0
- package/dist/init/run.js +281 -0
- package/dist/init/signatures.d.ts +39 -0
- package/dist/init/signatures.d.ts.map +1 -0
- package/dist/init/signatures.js +116 -0
- package/dist/matrix/aggregate.d.ts +89 -0
- package/dist/matrix/aggregate.d.ts.map +1 -0
- package/dist/matrix/aggregate.js +186 -0
- package/dist/query/grammar.d.ts +35 -0
- package/dist/query/grammar.d.ts.map +1 -0
- package/dist/query/grammar.js +279 -0
- package/dist/query/run.d.ts +8 -0
- package/dist/query/run.d.ts.map +1 -0
- package/dist/query/run.js +21 -0
- package/dist/registry/build.d.ts +126 -0
- package/dist/registry/build.d.ts.map +1 -0
- package/dist/registry/build.js +192 -0
- package/dist/registry/call-notes.d.ts +11 -0
- package/dist/registry/call-notes.d.ts.map +1 -0
- package/dist/registry/call-notes.js +72 -0
- package/dist/registry/claims.d.ts +63 -0
- package/dist/registry/claims.d.ts.map +1 -0
- package/dist/registry/claims.js +107 -0
- package/dist/registry/facts.d.ts +32 -0
- package/dist/registry/facts.d.ts.map +1 -0
- package/dist/registry/facts.js +120 -0
- package/dist/registry/fingerprint.d.ts +20 -0
- package/dist/registry/fingerprint.d.ts.map +1 -0
- package/dist/registry/fingerprint.js +150 -0
- package/dist/registry/parity.d.ts +26 -0
- package/dist/registry/parity.d.ts.map +1 -0
- package/dist/registry/parity.js +41 -0
- package/dist/registry/pricing.d.ts +19 -0
- package/dist/registry/pricing.d.ts.map +1 -0
- package/dist/registry/pricing.js +69 -0
- package/dist/registry/rows.d.ts +16 -0
- package/dist/registry/rows.d.ts.map +1 -0
- package/dist/registry/rows.js +57 -0
- package/dist/registry/seed.d.ts +43 -0
- package/dist/registry/seed.d.ts.map +1 -0
- package/dist/registry/seed.js +97 -0
- package/dist/registry/select.d.ts +68 -0
- package/dist/registry/select.d.ts.map +1 -0
- package/dist/registry/select.js +141 -0
- package/dist/registry/staleness.d.ts +18 -0
- package/dist/registry/staleness.d.ts.map +1 -0
- package/dist/registry/staleness.js +39 -0
- package/dist/routes/draft.d.ts +83 -0
- package/dist/routes/draft.d.ts.map +1 -0
- package/dist/routes/draft.js +135 -0
- package/dist/routes/loader.d.ts +26 -0
- package/dist/routes/loader.d.ts.map +1 -0
- package/dist/routes/loader.js +436 -0
- package/dist/routes/manifest.d.ts +24 -0
- package/dist/routes/manifest.d.ts.map +1 -0
- package/dist/routes/manifest.js +118 -0
- package/dist/routes/serveability.d.ts +52 -0
- package/dist/routes/serveability.d.ts.map +1 -0
- package/dist/routes/serveability.js +73 -0
- package/dist/routes/template.d.ts +18 -0
- package/dist/routes/template.d.ts.map +1 -0
- package/dist/routes/template.js +94 -0
- package/dist/run/cost.d.ts +26 -0
- package/dist/run/cost.d.ts.map +1 -0
- package/dist/run/cost.js +41 -0
- package/dist/run/envelope.d.ts +21 -0
- package/dist/run/envelope.d.ts.map +1 -0
- package/dist/run/envelope.js +45 -0
- package/dist/run/grounding.d.ts +56 -0
- package/dist/run/grounding.d.ts.map +1 -0
- package/dist/run/grounding.js +89 -0
- package/dist/run/repair.d.ts +36 -0
- package/dist/run/repair.d.ts.map +1 -0
- package/dist/run/repair.js +61 -0
- package/dist/run/resolve.d.ts +26 -0
- package/dist/run/resolve.d.ts.map +1 -0
- package/dist/run/resolve.js +81 -0
- package/dist/run/retry.d.ts +19 -0
- package/dist/run/retry.d.ts.map +1 -0
- package/dist/run/retry.js +50 -0
- package/dist/run/run.d.ts +41 -0
- package/dist/run/run.d.ts.map +1 -0
- package/dist/run/run.js +0 -0
- package/dist/run/validate.d.ts +15 -0
- package/dist/run/validate.d.ts.map +1 -0
- package/dist/run/validate.js +56 -0
- package/dist/savings/emit.d.ts +25 -0
- package/dist/savings/emit.d.ts.map +1 -0
- package/dist/savings/emit.js +75 -0
- package/dist/savings/odometer.d.ts +32 -0
- package/dist/savings/odometer.d.ts.map +1 -0
- package/dist/savings/odometer.js +70 -0
- package/dist/savings/swap-execute.d.ts +44 -0
- package/dist/savings/swap-execute.d.ts.map +1 -0
- package/dist/savings/swap-execute.js +87 -0
- package/dist/savings/swaps-client.d.ts +41 -0
- package/dist/savings/swaps-client.d.ts.map +1 -0
- package/dist/savings/swaps-client.js +81 -0
- package/dist/telemetry/capture.d.ts +28 -0
- package/dist/telemetry/capture.d.ts.map +1 -0
- package/dist/telemetry/capture.js +74 -0
- package/dist/telemetry/exporter.d.ts +62 -0
- package/dist/telemetry/exporter.d.ts.map +1 -0
- package/dist/telemetry/exporter.js +233 -0
- package/dist/telemetry/ingest-protocol.d.ts +161 -0
- package/dist/telemetry/ingest-protocol.d.ts.map +1 -0
- package/dist/telemetry/ingest-protocol.js +163 -0
- package/dist/telemetry/sinks.d.ts +54 -0
- package/dist/telemetry/sinks.d.ts.map +1 -0
- package/dist/telemetry/sinks.js +89 -0
- package/dist/telemetry/store.d.ts +38 -0
- package/dist/telemetry/store.d.ts.map +1 -0
- package/dist/telemetry/store.js +332 -0
- package/dist/telemetry/supabase-exporter.d.ts +64 -0
- package/dist/telemetry/supabase-exporter.d.ts.map +1 -0
- package/dist/telemetry/supabase-exporter.js +211 -0
- package/dist/tenancy/api-key-format.d.ts +67 -0
- package/dist/tenancy/api-key-format.d.ts.map +1 -0
- package/dist/tenancy/api-key-format.js +91 -0
- package/dist/tenancy/constants.d.ts +23 -0
- package/dist/tenancy/constants.d.ts.map +1 -0
- package/dist/tenancy/constants.js +25 -0
- package/dist/tenancy/scrub.d.ts +47 -0
- package/dist/tenancy/scrub.d.ts.map +1 -0
- package/dist/tenancy/scrub.js +85 -0
- package/dist/types/failures-teaching.d.ts +56 -0
- package/dist/types/failures-teaching.d.ts.map +1 -0
- package/dist/types/failures-teaching.js +177 -0
- package/dist/types/failures.d.ts +27 -0
- package/dist/types/failures.d.ts.map +1 -0
- package/dist/types/failures.js +41 -0
- package/dist/types/provider.d.ts +79 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +20 -0
- package/dist/types/route.d.ts +127 -0
- package/dist/types/route.d.ts.map +1 -0
- package/dist/types/route.js +6 -0
- package/dist/types/telemetry.d.ts +89 -0
- package/dist/types/telemetry.d.ts.map +1 -0
- package/dist/types/telemetry.js +6 -0
- package/dist/watch/budget.d.ts +19 -0
- package/dist/watch/budget.d.ts.map +1 -0
- package/dist/watch/budget.js +35 -0
- package/dist/watch/evaluate.d.ts +66 -0
- package/dist/watch/evaluate.d.ts.map +1 -0
- package/dist/watch/evaluate.js +94 -0
- package/dist/watch/proposals.d.ts +73 -0
- package/dist/watch/proposals.d.ts.map +1 -0
- package/dist/watch/proposals.js +169 -0
- package/dist/watch/run-record.d.ts +64 -0
- package/dist/watch/run-record.d.ts.map +1 -0
- package/dist/watch/run-record.js +86 -0
- package/dist/watch/run-reported.d.ts +20 -0
- package/dist/watch/run-reported.d.ts.map +1 -0
- package/dist/watch/run-reported.js +53 -0
- package/dist/watch/run.d.ts +40 -0
- package/dist/watch/run.d.ts.map +1 -0
- package/dist/watch/run.js +44 -0
- package/dist/watch/state-store.d.ts +48 -0
- package/dist/watch/state-store.d.ts.map +1 -0
- package/dist/watch/state-store.js +86 -0
- package/dist/watch/state.d.ts +21 -0
- package/dist/watch/state.d.ts.map +1 -0
- package/dist/watch/state.js +93 -0
- package/package.json +50 -14
- package/index.js +0 -3
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch state — Phase 4 WS1. The cycle's memory: a JSON snapshot of the
|
|
3
|
+
* last-seen pricing universe (provider/model → token rates), diffed against
|
|
4
|
+
* the current pricing map each run. Seed runs emit no events by design.
|
|
5
|
+
*
|
|
6
|
+
* The universe is restricted to providers the loaded routes actually
|
|
7
|
+
* declare — a price move on a provider nobody routes to is not news.
|
|
8
|
+
*/
|
|
9
|
+
import type { TokenRates, WatchEvent } from "./evaluate";
|
|
10
|
+
/** provider/model → rates. Keys use OUR provider ids, not LiteLLM's. */
|
|
11
|
+
export type PriceUniverse = Record<string, TokenRates>;
|
|
12
|
+
/** Build the current universe from the vendored pricing map, filtered to
|
|
13
|
+
* the providers in scope. Model ids are normalized to the bare form route
|
|
14
|
+
* candidates use ("gemini/gemini-2.5-pro" → "gemini-2.5-pro"). */
|
|
15
|
+
export declare function buildPriceUniverse(providersInScope: ReadonlySet<string>, pricingMapPath?: string): PriceUniverse;
|
|
16
|
+
/** Pure diff: current vs last-seen → events. Null previous = seed run,
|
|
17
|
+
* nothing fires. Delisted models are silence, not events. */
|
|
18
|
+
export declare function computeWatchEvents(current: PriceUniverse, previous: PriceUniverse | null): WatchEvent[];
|
|
19
|
+
export declare function loadWatchState(path: string): PriceUniverse | null;
|
|
20
|
+
export declare function saveWatchState(path: string, universe: PriceUniverse): void;
|
|
21
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/watch/state.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,wEAAwE;AACxE,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAkCvD;;kEAEkE;AAClE,wBAAgB,kBAAkB,CAChC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,cAAc,CAAC,EAAE,MAAM,GACtB,aAAa,CAoBf;AAED;6DAC6D;AAC7D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,UAAU,EAAE,CAkBd;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAGjE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAG1E"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Watch state — Phase 4 WS1. The cycle's memory: a JSON snapshot of the
|
|
4
|
+
* last-seen pricing universe (provider/model → token rates), diffed against
|
|
5
|
+
* the current pricing map each run. Seed runs emit no events by design.
|
|
6
|
+
*
|
|
7
|
+
* The universe is restricted to providers the loaded routes actually
|
|
8
|
+
* declare — a price move on a provider nobody routes to is not news.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.buildPriceUniverse = buildPriceUniverse;
|
|
12
|
+
exports.computeWatchEvents = computeWatchEvents;
|
|
13
|
+
exports.loadWatchState = loadWatchState;
|
|
14
|
+
exports.saveWatchState = saveWatchState;
|
|
15
|
+
const node_fs_1 = require("node:fs");
|
|
16
|
+
const node_path_1 = require("node:path");
|
|
17
|
+
/** LiteLLM's litellm_provider values → our ProviderId space (watch scope:
|
|
18
|
+
* the launch providers; extending = adding a line). */
|
|
19
|
+
const LITELLM_PROVIDER_MAP = {
|
|
20
|
+
gemini: "gemini",
|
|
21
|
+
openai: "openai",
|
|
22
|
+
deepseek: "deepseek",
|
|
23
|
+
anthropic: "anthropic",
|
|
24
|
+
xai: "grok",
|
|
25
|
+
// A1 hosts (openai-compatible generic adapter).
|
|
26
|
+
deepinfra: "deepinfra",
|
|
27
|
+
fireworks_ai: "fireworks",
|
|
28
|
+
};
|
|
29
|
+
/** Normalize a pricing-map key to the bare model id route candidates use:
|
|
30
|
+
* strip the leading litellm-provider segment, then Fireworks' wire prefix.
|
|
31
|
+
* DeepInfra org paths ("Qwen/QwQ-32B") are PART of the model id — kept. */
|
|
32
|
+
function normalizeModelId(rawKey, litellmProvider) {
|
|
33
|
+
let model = rawKey.startsWith(`${litellmProvider}/`)
|
|
34
|
+
? rawKey.slice(litellmProvider.length + 1)
|
|
35
|
+
: rawKey;
|
|
36
|
+
if (model.startsWith("accounts/fireworks/models/")) {
|
|
37
|
+
model = model.slice("accounts/fireworks/models/".length);
|
|
38
|
+
}
|
|
39
|
+
return model;
|
|
40
|
+
}
|
|
41
|
+
/** Build the current universe from the vendored pricing map, filtered to
|
|
42
|
+
* the providers in scope. Model ids are normalized to the bare form route
|
|
43
|
+
* candidates use ("gemini/gemini-2.5-pro" → "gemini-2.5-pro"). */
|
|
44
|
+
function buildPriceUniverse(providersInScope, pricingMapPath) {
|
|
45
|
+
const path = pricingMapPath ?? (0, node_path_1.join)(__dirname, "..", "..", "data", "pricing-map.json");
|
|
46
|
+
const map = JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
|
|
47
|
+
const universe = {};
|
|
48
|
+
for (const [rawKey, entry] of Object.entries(map)) {
|
|
49
|
+
const provider = LITELLM_PROVIDER_MAP[entry.litellm_provider ?? ""];
|
|
50
|
+
if (provider === undefined || !providersInScope.has(provider))
|
|
51
|
+
continue;
|
|
52
|
+
if (typeof entry.input_cost_per_token !== "number" ||
|
|
53
|
+
typeof entry.output_cost_per_token !== "number") {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const model = normalizeModelId(rawKey, entry.litellm_provider ?? "");
|
|
57
|
+
universe[`${provider}/${model}`] = {
|
|
58
|
+
inputUsdPerTok: entry.input_cost_per_token,
|
|
59
|
+
outputUsdPerTok: entry.output_cost_per_token,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return universe;
|
|
63
|
+
}
|
|
64
|
+
/** Pure diff: current vs last-seen → events. Null previous = seed run,
|
|
65
|
+
* nothing fires. Delisted models are silence, not events. */
|
|
66
|
+
function computeWatchEvents(current, previous) {
|
|
67
|
+
if (previous === null)
|
|
68
|
+
return [];
|
|
69
|
+
const events = [];
|
|
70
|
+
for (const [key, rates] of Object.entries(current)) {
|
|
71
|
+
const slash = key.indexOf("/");
|
|
72
|
+
const provider = key.slice(0, slash);
|
|
73
|
+
const model = key.slice(slash + 1);
|
|
74
|
+
const before = previous[key];
|
|
75
|
+
if (before === undefined) {
|
|
76
|
+
events.push({ type: "new_model", provider, model, pricing: rates });
|
|
77
|
+
}
|
|
78
|
+
else if (before.inputUsdPerTok !== rates.inputUsdPerTok ||
|
|
79
|
+
before.outputUsdPerTok !== rates.outputUsdPerTok) {
|
|
80
|
+
events.push({ type: "price_change", provider, model, old: before, new: rates });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return events;
|
|
84
|
+
}
|
|
85
|
+
function loadWatchState(path) {
|
|
86
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
87
|
+
return null;
|
|
88
|
+
return JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
|
|
89
|
+
}
|
|
90
|
+
function saveWatchState(path, universe) {
|
|
91
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
|
|
92
|
+
(0, node_fs_1.writeFileSync)(path, `${JSON.stringify(universe, null, 2)}\n`);
|
|
93
|
+
}
|
package/package.json
CHANGED
|
@@ -1,20 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "modelrig",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "ModelRig — capability-aware AI gateway: routes-as-code, provider adapters, typed failures, budget envelopes, and local-first telemetry.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
7
|
+
"homepage": "https://modelrig.dev",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/modelrig/modelrig.git"
|
|
11
|
+
},
|
|
12
12
|
"keywords": [
|
|
13
|
-
"ai",
|
|
14
13
|
"llm",
|
|
15
|
-
"gateway",
|
|
16
|
-
"routing",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
|
|
14
|
+
"ai-gateway",
|
|
15
|
+
"model-routing",
|
|
16
|
+
"openai",
|
|
17
|
+
"anthropic",
|
|
18
|
+
"gemini",
|
|
19
|
+
"telemetry",
|
|
20
|
+
"failover"
|
|
21
|
+
],
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=20"
|
|
24
|
+
},
|
|
25
|
+
"main": "dist/index.js",
|
|
26
|
+
"types": "dist/index.d.ts",
|
|
27
|
+
"//files": "ALLOWLIST, not a denylist, and the difference is not academic. Without this field npm falls back to .npmignore, then to THIS DIRECTORY's .gitignore — never the repo root's. The root ignores `.env.*`, which is why git has never committed .env.local; the package-level .gitignore says nothing about it, so `npm pack` happily included it. A publish would have shipped 13 live secrets, the Supabase service-role key among them, into an immutable public tarball. Anything added here must be something we would hand a stranger. See __tests__/publish-safety.test.ts.",
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"README.md",
|
|
31
|
+
"LICENSE"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc",
|
|
35
|
+
"type-check": "tsc --noEmit && tsc -p tsconfig.test.json",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"test:live": "MODELRIG_LIVE=1 vitest run"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@anthropic-ai/sdk": "^0.71.2",
|
|
41
|
+
"@google/genai": "^2.4.0",
|
|
42
|
+
"ajv": "^8.17.0",
|
|
43
|
+
"better-sqlite3": "^11.10.0",
|
|
44
|
+
"openai": "^4.77.0",
|
|
45
|
+
"yaml": "^2.6.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
49
|
+
"tsx": "^4.21.0",
|
|
50
|
+
"typescript": "^5.2.0",
|
|
51
|
+
"vitest": "^2.1.0"
|
|
52
|
+
},
|
|
53
|
+
"bin": {
|
|
54
|
+
"modelrig": "dist/cli.js"
|
|
55
|
+
}
|
|
20
56
|
}
|
package/index.js
DELETED