@sriinnu/kosha-discovery 1.2.0 → 1.5.1

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.
Files changed (164) hide show
  1. package/README.md +125 -52
  2. package/dist/aliases.d.ts +6 -1
  3. package/dist/aliases.d.ts.map +1 -1
  4. package/dist/aliases.js +38 -12
  5. package/dist/aliases.js.map +1 -1
  6. package/dist/cache.d.ts.map +1 -1
  7. package/dist/cache.js +40 -3
  8. package/dist/cache.js.map +1 -1
  9. package/dist/claude-generation.d.ts +59 -0
  10. package/dist/claude-generation.d.ts.map +1 -0
  11. package/dist/claude-generation.js +117 -0
  12. package/dist/claude-generation.js.map +1 -0
  13. package/dist/cli-cmd-doctor.d.ts +17 -0
  14. package/dist/cli-cmd-doctor.d.ts.map +1 -0
  15. package/dist/cli-cmd-doctor.js +199 -0
  16. package/dist/cli-cmd-doctor.js.map +1 -0
  17. package/dist/cli-cmd-model.js +2 -2
  18. package/dist/cli-cmd-model.js.map +1 -1
  19. package/dist/cli-cmd-spend.d.ts +10 -0
  20. package/dist/cli-cmd-spend.d.ts.map +1 -0
  21. package/dist/cli-cmd-spend.js +130 -0
  22. package/dist/cli-cmd-spend.js.map +1 -0
  23. package/dist/cli-commands.d.ts +4 -1
  24. package/dist/cli-commands.d.ts.map +1 -1
  25. package/dist/cli-commands.js +10 -2
  26. package/dist/cli-commands.js.map +1 -1
  27. package/dist/cli-format.js.map +1 -1
  28. package/dist/cli-help.d.ts.map +1 -1
  29. package/dist/cli-help.js +13 -2
  30. package/dist/cli-help.js.map +1 -1
  31. package/dist/cli.js +10 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/cost.d.ts +152 -0
  34. package/dist/cost.d.ts.map +1 -0
  35. package/dist/cost.js +377 -0
  36. package/dist/cost.js.map +1 -0
  37. package/dist/credentials/resolver.d.ts +10 -0
  38. package/dist/credentials/resolver.d.ts.map +1 -1
  39. package/dist/credentials/resolver.js +64 -31
  40. package/dist/credentials/resolver.js.map +1 -1
  41. package/dist/discovery/anthropic.d.ts +19 -1
  42. package/dist/discovery/anthropic.d.ts.map +1 -1
  43. package/dist/discovery/anthropic.js +112 -8
  44. package/dist/discovery/anthropic.js.map +1 -1
  45. package/dist/discovery/base.d.ts +7 -0
  46. package/dist/discovery/base.d.ts.map +1 -1
  47. package/dist/discovery/base.js +32 -4
  48. package/dist/discovery/base.js.map +1 -1
  49. package/dist/discovery/bedrock.d.ts.map +1 -1
  50. package/dist/discovery/cerebras.d.ts.map +1 -1
  51. package/dist/discovery/cohere.d.ts.map +1 -1
  52. package/dist/discovery/deepinfra.d.ts.map +1 -1
  53. package/dist/discovery/deepseek.d.ts.map +1 -1
  54. package/dist/discovery/fireworks.d.ts.map +1 -1
  55. package/dist/discovery/glm.d.ts.map +1 -1
  56. package/dist/discovery/google.d.ts +3 -1
  57. package/dist/discovery/google.d.ts.map +1 -1
  58. package/dist/discovery/google.js +13 -6
  59. package/dist/discovery/google.js.map +1 -1
  60. package/dist/discovery/groq.d.ts.map +1 -1
  61. package/dist/discovery/index.d.ts +2 -0
  62. package/dist/discovery/index.d.ts.map +1 -1
  63. package/dist/discovery/index.js +6 -0
  64. package/dist/discovery/index.js.map +1 -1
  65. package/dist/discovery/llama-cpp.d.ts.map +1 -1
  66. package/dist/discovery/lmstudio.d.ts +26 -0
  67. package/dist/discovery/lmstudio.d.ts.map +1 -0
  68. package/dist/discovery/lmstudio.js +93 -0
  69. package/dist/discovery/lmstudio.js.map +1 -0
  70. package/dist/discovery/minimax.d.ts.map +1 -1
  71. package/dist/discovery/mistral.d.ts.map +1 -1
  72. package/dist/discovery/moonshot.d.ts.map +1 -1
  73. package/dist/discovery/nvidia.d.ts.map +1 -1
  74. package/dist/discovery/ollama.d.ts.map +1 -1
  75. package/dist/discovery/openai-compatible.d.ts.map +1 -1
  76. package/dist/discovery/openai.d.ts.map +1 -1
  77. package/dist/discovery/openrouter.d.ts +29 -5
  78. package/dist/discovery/openrouter.d.ts.map +1 -1
  79. package/dist/discovery/openrouter.js +56 -18
  80. package/dist/discovery/openrouter.js.map +1 -1
  81. package/dist/discovery/perplexity.d.ts.map +1 -1
  82. package/dist/discovery/promo-overrides.js.map +1 -1
  83. package/dist/discovery/static-direct.d.ts +9 -1
  84. package/dist/discovery/static-direct.d.ts.map +1 -1
  85. package/dist/discovery/static-direct.js +68 -7
  86. package/dist/discovery/static-direct.js.map +1 -1
  87. package/dist/discovery/together.d.ts.map +1 -1
  88. package/dist/discovery/vercel.d.ts.map +1 -1
  89. package/dist/discovery/vertex.d.ts.map +1 -1
  90. package/dist/discovery/vllm.d.ts +26 -0
  91. package/dist/discovery/vllm.d.ts.map +1 -0
  92. package/dist/discovery/vllm.js +93 -0
  93. package/dist/discovery/vllm.js.map +1 -0
  94. package/dist/discovery/zai.d.ts.map +1 -1
  95. package/dist/discovery-contract.d.ts +7 -0
  96. package/dist/discovery-contract.d.ts.map +1 -1
  97. package/dist/discovery-contract.js.map +1 -1
  98. package/dist/discovery-routes.d.ts +9 -0
  99. package/dist/discovery-routes.d.ts.map +1 -1
  100. package/dist/discovery-routes.js +106 -18
  101. package/dist/discovery-routes.js.map +1 -1
  102. package/dist/enrichment/litellm.d.ts +1 -1
  103. package/dist/enrichment/litellm.d.ts.map +1 -1
  104. package/dist/enrichment/litellm.js +3 -3
  105. package/dist/entry.d.ts +14 -0
  106. package/dist/entry.d.ts.map +1 -0
  107. package/dist/entry.js +26 -0
  108. package/dist/entry.js.map +1 -0
  109. package/dist/index.d.ts +10 -0
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +5 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/mcp-server.d.ts +207 -2
  114. package/dist/mcp-server.d.ts.map +1 -1
  115. package/dist/mcp-server.js +203 -51
  116. package/dist/mcp-server.js.map +1 -1
  117. package/dist/model-features.d.ts.map +1 -1
  118. package/dist/model-features.js +11 -2
  119. package/dist/model-features.js.map +1 -1
  120. package/dist/normalize.d.ts +7 -7
  121. package/dist/normalize.js +8 -8
  122. package/dist/provider-catalog.d.ts.map +1 -1
  123. package/dist/provider-catalog.js +26 -0
  124. package/dist/provider-catalog.js.map +1 -1
  125. package/dist/proxy.d.ts +49 -7
  126. package/dist/proxy.d.ts.map +1 -1
  127. package/dist/proxy.js +754 -89
  128. package/dist/proxy.js.map +1 -1
  129. package/dist/registry-query.js +2 -2
  130. package/dist/registry-query.js.map +1 -1
  131. package/dist/registry-routing.d.ts +65 -0
  132. package/dist/registry-routing.d.ts.map +1 -0
  133. package/dist/registry-routing.js +165 -0
  134. package/dist/registry-routing.js.map +1 -0
  135. package/dist/registry-runtime.d.ts +2 -0
  136. package/dist/registry-runtime.d.ts.map +1 -1
  137. package/dist/registry-runtime.js +177 -23
  138. package/dist/registry-runtime.js.map +1 -1
  139. package/dist/registry-selection.js +6 -0
  140. package/dist/registry-selection.js.map +1 -1
  141. package/dist/registry.d.ts +69 -0
  142. package/dist/registry.d.ts.map +1 -1
  143. package/dist/registry.js +133 -1
  144. package/dist/registry.js.map +1 -1
  145. package/dist/resilience.d.ts +15 -0
  146. package/dist/resilience.d.ts.map +1 -1
  147. package/dist/resilience.js +23 -1
  148. package/dist/resilience.js.map +1 -1
  149. package/dist/server.d.ts +44 -2
  150. package/dist/server.d.ts.map +1 -1
  151. package/dist/server.js +328 -33
  152. package/dist/server.js.map +1 -1
  153. package/dist/tally.d.ts +80 -0
  154. package/dist/tally.d.ts.map +1 -0
  155. package/dist/tally.js +176 -0
  156. package/dist/tally.js.map +1 -0
  157. package/dist/types.d.ts +22 -1
  158. package/dist/types.d.ts.map +1 -1
  159. package/dist/wire-anthropic.d.ts +264 -0
  160. package/dist/wire-anthropic.d.ts.map +1 -0
  161. package/dist/wire-anthropic.js +960 -0
  162. package/dist/wire-anthropic.js.map +1 -0
  163. package/package.json +14 -10
  164. package/logo.png +0 -0
@@ -0,0 +1,117 @@
1
+ /**
2
+ * kosha-discovery — Claude generation parsing and per-generation behaviour.
3
+ *
4
+ * One source of truth for "which Claude is this and what does it accept",
5
+ * shared by the catalog feature inference (`model-features.ts`) and the
6
+ * proxy's wire translator (`wire-anthropic.ts`). Keeping it in one module
7
+ * means an OpenRouter-style `anthropic/claude-sonnet-4.6`, a Bedrock-style
8
+ * `anthropic.claude-opus-4-8-v1:0`, and the bare `claude-opus-4-8` all
9
+ * classify identically everywhere.
10
+ * @module
11
+ */
12
+ /**
13
+ * Normalize the many spellings of a Claude ID down to the bare family-first
14
+ * form: strip a `vendor/` or `anthropic.` prefix, a Bedrock `-v1:0` suffix,
15
+ * and turn dotted versions (`4.6`) into dashed (`4-6`).
16
+ */
17
+ function normalizeClaudeId(modelId) {
18
+ return modelId
19
+ .toLowerCase()
20
+ .replace(/^.*\//, "")
21
+ .replace(/^anthropic\./, "")
22
+ .replace(/-v\d+:\d+$/, "")
23
+ .replace(/\./g, "-");
24
+ }
25
+ /**
26
+ * Parse the generation out of a family-first Claude ID such as
27
+ * `claude-opus-4-8`, `claude-sonnet-5`, `claude-fable-5-1`, a dated
28
+ * `claude-haiku-4-5-20251001`, or a prefixed / dotted variant. Legacy
29
+ * version-first IDs (`claude-3-5-sonnet-…`, `claude-2.1`) and non-Claude IDs
30
+ * return `undefined`.
31
+ */
32
+ export function parseClaudeGeneration(modelId) {
33
+ // Minor is 1-2 digits so an 8-digit date suffix (`-20250514`) is never
34
+ // mistaken for a minor version.
35
+ const m = /^claude-(opus|sonnet|haiku|fable|mythos)-(\d+)(?:-(\d{1,2}))?(?:-\d{8})?$/.exec(normalizeClaudeId(modelId));
36
+ if (!m)
37
+ return undefined;
38
+ return {
39
+ family: m[1],
40
+ major: Number(m[2]),
41
+ minor: m[3] !== undefined ? Number(m[3]) : 0,
42
+ };
43
+ }
44
+ function atLeast(gen, major, minor) {
45
+ return gen.major > major || (gen.major === major && gen.minor >= minor);
46
+ }
47
+ /**
48
+ * Sampling parameters were removed on Opus 4.7 and every later model (Opus
49
+ * 4.8, Opus 5, Sonnet 5, Fable, Mythos): sending them returns a 400. Every
50
+ * Claude 4.x model accepts at most one of `temperature` / `top_p` (sending
51
+ * both is a 400). Claude 3.x and unrecognized IDs accept both.
52
+ */
53
+ export function claudeSamplingSupport(modelId) {
54
+ const gen = parseClaudeGeneration(modelId);
55
+ if (!gen)
56
+ return "both";
57
+ if (atLeast(gen, 4, 7))
58
+ return "none";
59
+ if (gen.major >= 4)
60
+ return "one";
61
+ return "both";
62
+ }
63
+ /** Anthropic's accepted `temperature` range; OpenAI's is 0..2. */
64
+ export const CLAUDE_TEMPERATURE_MAX = 1;
65
+ /**
66
+ * Effort levels a generation accepts under `output_config.effort`; empty when
67
+ * effort is unsupported. `xhigh` arrived with Opus 4.7; `max` with 4.6; in
68
+ * the 4.5 generation only Opus 4.5 had an effort parameter at all (Sonnet
69
+ * 4.5 and Haiku 4.5 reject it).
70
+ */
71
+ export function claudeEffortLadder(modelId) {
72
+ const gen = parseClaudeGeneration(modelId);
73
+ if (!gen)
74
+ return [];
75
+ if (atLeast(gen, 4, 7))
76
+ return ["low", "medium", "high", "xhigh", "max"];
77
+ if (atLeast(gen, 4, 6))
78
+ return ["low", "medium", "high", "max"];
79
+ if (atLeast(gen, 4, 5))
80
+ return gen.family === "opus" ? ["low", "medium", "high"] : [];
81
+ return [];
82
+ }
83
+ /**
84
+ * Last-assistant-turn prefill returns a 400 on Opus 4.6 / Sonnet 4.6 and every
85
+ * later model. Older generations still accept a trailing assistant message.
86
+ */
87
+ export function claudeSupportsPrefill(modelId) {
88
+ const gen = parseClaudeGeneration(modelId);
89
+ if (!gen)
90
+ return true;
91
+ return !atLeast(gen, 4, 6);
92
+ }
93
+ /**
94
+ * Native JSON-schema structured outputs (`output_config.format`) shipped with
95
+ * the 4.5 generation (Sonnet 4.5, Haiku 4.5, Opus 4.1) and every model since.
96
+ */
97
+ export function claudeSupportsNativeJsonSchema(modelId) {
98
+ const gen = parseClaudeGeneration(modelId);
99
+ if (!gen)
100
+ return false;
101
+ if (atLeast(gen, 4, 5))
102
+ return true;
103
+ return gen.family === "opus" && gen.major === 4 && gen.minor === 1;
104
+ }
105
+ /**
106
+ * Claude Fable 5.1 and Claude Mythos 5.1 return a 400 for forced tool use
107
+ * (`tool_choice` `any` / `tool`); everything else still honours it.
108
+ */
109
+ export function claudeSupportsForcedToolChoice(modelId) {
110
+ const gen = parseClaudeGeneration(modelId);
111
+ if (!gen)
112
+ return true;
113
+ if (gen.family !== "fable" && gen.family !== "mythos")
114
+ return true;
115
+ return !atLeast(gen, 5, 1);
116
+ }
117
+ //# sourceMappingURL=claude-generation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-generation.js","sourceRoot":"","sources":["../src/claude-generation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `kosha doctor` — surface deprecation warnings and provider health at a
3
+ * glance. Pure projection over the registry: it reports what kosha already
4
+ * knows (deprecationDate, replacedBy, breaker state, routing reliability)
5
+ * without making any extra network calls.
6
+ *
7
+ * Pair with `kosha refresh` if you want the freshest deprecation metadata
8
+ * from each provider.
9
+ * @module
10
+ */
11
+ import type { ModelRegistry } from "./registry.js";
12
+ /** Exit code `doctor` uses to fail a CI run without looking like a crash. */
13
+ export declare const DOCTOR_CI_EXIT_CODE = 2;
14
+ /** Default deprecation window in days when `--deprecation-window` is absent. */
15
+ export declare const DOCTOR_DEFAULT_DEPRECATION_WINDOW = 30;
16
+ export declare function cmdDoctor(registry: ModelRegistry, flags: Record<string, string | boolean>): Promise<void>;
17
+ //# sourceMappingURL=cli-cmd-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-cmd-doctor.d.ts","sourceRoot":"","sources":["../src/cli-cmd-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAanD,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,gFAAgF;AAChF,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAsBpD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC/G"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * `kosha doctor` — surface deprecation warnings and provider health at a
3
+ * glance. Pure projection over the registry: it reports what kosha already
4
+ * knows (deprecationDate, replacedBy, breaker state, routing reliability)
5
+ * without making any extra network calls.
6
+ *
7
+ * Pair with `kosha refresh` if you want the freshest deprecation metadata
8
+ * from each provider.
9
+ * @module
10
+ */
11
+ import { c, CYAN, DIM, GREEN, RED, YELLOW } from "./cli-format.js";
12
+ /** Exit code `doctor` uses to fail a CI run without looking like a crash. */
13
+ export const DOCTOR_CI_EXIT_CODE = 2;
14
+ /** Default deprecation window in days when `--deprecation-window` is absent. */
15
+ export const DOCTOR_DEFAULT_DEPRECATION_WINDOW = 30;
16
+ export async function cmdDoctor(registry, flags) {
17
+ const f = flags;
18
+ // Hydrate from the disk cache without refetching from provider APIs:
19
+ // `doctor` is observational, never a write.
20
+ try {
21
+ await registry.discover();
22
+ }
23
+ catch {
24
+ // Even if discovery fails, we can still report on whatever the cached
25
+ // registry holds — that's the point of `doctor`.
26
+ }
27
+ const models = registry.models();
28
+ const deprecations = collectDeprecations(models);
29
+ const providers = uniqueProviderIds(models);
30
+ const healthFindings = providers
31
+ .map((providerId) => projectHealth(registry, providerId))
32
+ .filter((row) => row !== null);
33
+ if (f.json) {
34
+ process.stdout.write(`${JSON.stringify({ deprecations, health: healthFindings }, null, 2)}\n`);
35
+ }
36
+ else {
37
+ renderDeprecations(deprecations);
38
+ renderHealth(healthFindings);
39
+ }
40
+ // CI gate: when `--ci` (or its `--fail-on-warning` alias) is set, fail the
41
+ // process if any finding trips the gate. Off by default so `doctor` stays
42
+ // advisory for interactive use. The decision reuses the same deprecation
43
+ // data rendered above — no second source of truth.
44
+ const ciFailures = collectCiFailures(f, deprecations);
45
+ if (ciFailures.length > 0) {
46
+ const windowDays = parseDeprecationWindow(f["deprecation-window"]);
47
+ console.error(c(RED, `kosha doctor: ${ciFailures.length} lifecycle finding(s) fail the --ci gate (window=${windowDays}d).`));
48
+ process.exit(DOCTOR_CI_EXIT_CODE);
49
+ }
50
+ }
51
+ /**
52
+ * The subset of deprecation findings that trip the CI gate, or an empty array
53
+ * when CI mode is off (no `--ci` / `--fail-on-warning`) so {@link cmdDoctor}
54
+ * stays advisory by default.
55
+ */
56
+ function collectCiFailures(f, findings) {
57
+ if (!ciEnabled(f))
58
+ return [];
59
+ const windowDays = parseDeprecationWindow(f["deprecation-window"]);
60
+ return findings.filter((finding) => tripsCiGate(finding, windowDays));
61
+ }
62
+ /** `--ci` and `--fail-on-warning` are aliases; either form opts into CI mode. */
63
+ function ciEnabled(f) {
64
+ return Boolean(f.ci ?? f["fail-on-warning"]);
65
+ }
66
+ /**
67
+ * A finding trips the gate when the model is already deprecated/retired, or
68
+ * when its sunset falls inside the configured window. A far-future sunset on
69
+ * an otherwise healthy model stays advisory.
70
+ */
71
+ function tripsCiGate(finding, windowDays) {
72
+ if (finding.status === "deprecated" || finding.status === "retired")
73
+ return true;
74
+ if (finding.daysUntilSunset !== null && finding.daysUntilSunset <= windowDays)
75
+ return true;
76
+ return false;
77
+ }
78
+ /**
79
+ * Parse `--deprecation-window <days>`. Falls back to the default on a missing
80
+ * or malformed value (bare flag, non-numeric, negative) so `doctor` never
81
+ * crashes inside a CI run over a bad argument.
82
+ */
83
+ function parseDeprecationWindow(raw) {
84
+ if (raw === undefined || raw === true || raw === false) {
85
+ return DOCTOR_DEFAULT_DEPRECATION_WINDOW;
86
+ }
87
+ const parsed = Number.parseInt(String(raw), 10);
88
+ if (!Number.isFinite(parsed) || parsed < 0)
89
+ return DOCTOR_DEFAULT_DEPRECATION_WINDOW;
90
+ return parsed;
91
+ }
92
+ function collectDeprecations(models) {
93
+ const today = todayMs();
94
+ const findings = [];
95
+ for (const model of models) {
96
+ const status = model.status ?? null;
97
+ const deprecationDate = model.deprecationDate ?? null;
98
+ const replacedBy = model.replacedBy ?? null;
99
+ if (!status && !deprecationDate && !replacedBy)
100
+ continue;
101
+ if (status !== "deprecated" && status !== "retired" && !deprecationDate)
102
+ continue;
103
+ findings.push({
104
+ modelId: model.id,
105
+ provider: model.provider,
106
+ status,
107
+ deprecationDate,
108
+ daysUntilSunset: deprecationDate ? daysBetween(today, deprecationDate) : null,
109
+ replacedBy,
110
+ });
111
+ }
112
+ findings.sort((a, b) => {
113
+ // Soonest sunset first; retired models bubble to the top.
114
+ const aKey = a.daysUntilSunset ?? Number.POSITIVE_INFINITY;
115
+ const bKey = b.daysUntilSunset ?? Number.POSITIVE_INFINITY;
116
+ if (aKey !== bKey)
117
+ return aKey - bKey;
118
+ return a.modelId.localeCompare(b.modelId);
119
+ });
120
+ return findings;
121
+ }
122
+ function uniqueProviderIds(models) {
123
+ return Array.from(new Set(models.map((m) => m.provider))).sort();
124
+ }
125
+ function projectHealth(registry, providerId) {
126
+ try {
127
+ const h = registry.providerRouteHealth(providerId);
128
+ return {
129
+ providerId: h.providerId,
130
+ breakerState: h.breakerState,
131
+ available: h.available,
132
+ reliabilityScore: h.reliabilityScore,
133
+ p95LatencyMs: h.p95LatencyMs,
134
+ timeoutRate: h.timeoutRate,
135
+ };
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ }
141
+ function renderDeprecations(findings) {
142
+ process.stdout.write(`${c(CYAN, "Model lifecycle")}\n`);
143
+ if (findings.length === 0) {
144
+ process.stdout.write(c(DIM, " No deprecation signals from any provider catalogue.\n\n"));
145
+ return;
146
+ }
147
+ for (const f of findings) {
148
+ const days = f.daysUntilSunset;
149
+ let tag;
150
+ if (f.status === "retired")
151
+ tag = c(RED, "retired");
152
+ else if (days !== null && days <= 14)
153
+ tag = c(RED, `sunsets in ${days}d`);
154
+ else if (days !== null && days <= 60)
155
+ tag = c(YELLOW, `sunsets in ${days}d`);
156
+ else if (f.status === "deprecated")
157
+ tag = c(YELLOW, "deprecated");
158
+ else if (days !== null)
159
+ tag = c(DIM, `sunsets in ${days}d`);
160
+ else
161
+ tag = c(DIM, f.status ?? "unknown");
162
+ const replacement = f.replacedBy ? c(DIM, ` -> ${f.replacedBy}`) : "";
163
+ process.stdout.write(` ${tag} ${f.provider}/${f.modelId}${replacement}\n`);
164
+ }
165
+ process.stdout.write("\n");
166
+ }
167
+ function renderHealth(findings) {
168
+ process.stdout.write(`${c(CYAN, "Provider health")}\n`);
169
+ if (findings.length === 0) {
170
+ process.stdout.write(c(DIM, " No providers in the registry yet — run `kosha discover`.\n"));
171
+ return;
172
+ }
173
+ for (const h of findings) {
174
+ const tag = h.available
175
+ ? h.reliabilityScore >= 0.95
176
+ ? c(GREEN, "ok")
177
+ : c(YELLOW, "degraded")
178
+ : c(RED, "open");
179
+ const p95 = h.p95LatencyMs !== null ? `${h.p95LatencyMs}ms` : "no samples";
180
+ const reliability = (h.reliabilityScore * 100).toFixed(0);
181
+ process.stdout.write(` ${tag} ${h.providerId.padEnd(14)} ${c(DIM, `reliability=${reliability}%`)} ${c(DIM, `p95=${p95}`)}\n`);
182
+ }
183
+ }
184
+ function daysBetween(nowMs, isoDate) {
185
+ const date = Date.parse(isoDate);
186
+ if (!Number.isFinite(date))
187
+ return null;
188
+ return Math.floor((date - nowMs) / 86_400_000);
189
+ }
190
+ /**
191
+ * Today's wall-clock midnight as ms. Wrapped so tests can swap it out;
192
+ * a deprecation finding rendering is otherwise time-dependent and racy.
193
+ */
194
+ function todayMs() {
195
+ const now = new Date();
196
+ now.setHours(0, 0, 0, 0);
197
+ return now.getTime();
198
+ }
199
+ //# sourceMappingURL=cli-cmd-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-cmd-doctor.js","sourceRoot":"","sources":["../src/cli-cmd-doctor.ts"],"names":[],"mappings":"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"}
@@ -120,10 +120,10 @@ export async function cmdResolve(registry, alias, flags) {
120
120
  // Downstream tools that pipe `kosha resolve --json` were missing all of
121
121
  // this and had to follow up with `kosha model`. Now one call is enough.
122
122
  //
123
- // Fallback: aliases like `sonnet → claude-sonnet-4-6` may resolve to
123
+ // Fallback: aliases like `sonnet → claude-sonnet-5` may resolve to
124
124
  // canonical IDs that no provider serves directly (e.g. when Anthropic
125
125
  // API discovery is unauthenticated and OpenRouter exposes the same
126
- // model as `anthropic/claude-sonnet-4.6`). In that case I lean on
126
+ // model as `anthropic/claude-sonnet-5`). In that case I lean on
127
127
  // modelRoutes(), which normalizes IDs and returns every provider route
128
128
  // — picking the first as the representative for pricing display.
129
129
  let model = registry.model(resolved);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-cmd-model.js","sourceRoot":"","sources":["../src/cli-cmd-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-cmd-model.js","sourceRoot":"","sources":["../src/cli-cmd-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `kosha spend` — roll up the JSONL spend ledger written by the proxy.
3
+ *
4
+ * No registry / network access; pure file read + arithmetic. Supports
5
+ * `--since <iso-date>`, `--tenant <name>`, and `--json` for programmatic
6
+ * consumers.
7
+ * @module
8
+ */
9
+ export declare function cmdSpend(_unused: unknown, flags: Record<string, string | boolean>): Promise<void>;
10
+ //# sourceMappingURL=cli-cmd-spend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-cmd-spend.d.ts","sourceRoot":"","sources":["../src/cli-cmd-spend.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CvG"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * `kosha spend` — roll up the JSONL spend ledger written by the proxy.
3
+ *
4
+ * No registry / network access; pure file read + arithmetic. Supports
5
+ * `--since <iso-date>`, `--tenant <name>`, and `--json` for programmatic
6
+ * consumers.
7
+ * @module
8
+ */
9
+ import { readFile, readdir } from "fs/promises";
10
+ import { basename, dirname, join } from "node:path";
11
+ import { c, CYAN, DIM, GREEN } from "./cli-format.js";
12
+ import { DEFAULT_LEDGER_PATH, isRequestRow, ledgerRowUsd } from "./cost.js";
13
+ export async function cmdSpend(_unused, flags) {
14
+ const f = flags;
15
+ const ledgerPath = typeof f.ledger === "string" ? f.ledger : DEFAULT_LEDGER_PATH;
16
+ const since = typeof f.since === "string" ? Date.parse(f.since) : Number.NEGATIVE_INFINITY;
17
+ const until = typeof f.until === "string" ? Date.parse(f.until) : Number.POSITIVE_INFINITY;
18
+ const tenantFilter = typeof f.tenant === "string" ? f.tenant : null;
19
+ const rows = await loadLedger(ledgerPath);
20
+ const inWindow = rows.filter((r) => r.ts >= (Number.isFinite(since) ? since : Number.NEGATIVE_INFINITY) &&
21
+ r.ts < (Number.isFinite(until) ? until : Number.POSITIVE_INFINITY) &&
22
+ (tenantFilter === null || r.tenant === tenantFilter));
23
+ const total = inWindow.reduce((sum, r) => sum + ledgerRowUsd(r), 0);
24
+ const requests = inWindow.filter(isRequestRow);
25
+ // A request is reconciled when its own row carries upstream usage or a
26
+ // later adjustment row amended it.
27
+ const adjusted = new Set(inWindow.filter((r) => !isRequestRow(r)).map((r) => r.requestId));
28
+ const reconciled = requests.filter((r) => r.usageSource === "upstream" || (r.requestId && adjusted.has(r.requestId))).length;
29
+ const byProvider = bucketBy(inWindow, (r) => r.provider);
30
+ const byModel = bucketBy(inWindow, (r) => `${r.provider}/${r.modelId}`);
31
+ const byTenant = bucketBy(inWindow, (r) => r.tenant ?? "(no tenant)");
32
+ if (f.json) {
33
+ process.stdout.write(`${JSON.stringify({
34
+ ledgerPath,
35
+ rows: requests.length,
36
+ reconciledRows: reconciled,
37
+ totalUsd: total,
38
+ byProvider: Object.fromEntries(byProvider),
39
+ byModel: Object.fromEntries(byModel),
40
+ byTenant: Object.fromEntries(byTenant),
41
+ }, null, 2)}\n`);
42
+ return;
43
+ }
44
+ process.stdout.write(`${c(CYAN, "Spend summary")} ${c(DIM, `(${requests.length} requests from ${ledgerPath})`)}\n`);
45
+ const label = reconciled === requests.length && reconciled > 0
46
+ ? "total (all requests reconciled with upstream usage)"
47
+ : reconciled > 0
48
+ ? `total (${reconciled}/${requests.length} requests reconciled with upstream usage, rest estimated)`
49
+ : "total estimated";
50
+ process.stdout.write(` ${c(GREEN, `$${total.toFixed(4)}`)} ${c(DIM, label)}\n\n`);
51
+ renderBucket("By provider", byProvider);
52
+ renderBucket("By model", byModel);
53
+ renderBucket("By tenant", byTenant);
54
+ }
55
+ async function loadLedger(path) {
56
+ const rows = [];
57
+ const ingest = async (file) => {
58
+ let raw;
59
+ try {
60
+ raw = await readFile(file, "utf-8");
61
+ }
62
+ catch (err) {
63
+ // Missing file is fine — the legacy ledger and any given monthly
64
+ // partition may not exist yet.
65
+ if (err?.code === "ENOENT")
66
+ return;
67
+ throw err;
68
+ }
69
+ for (const line of raw.split("\n")) {
70
+ if (!line)
71
+ continue;
72
+ try {
73
+ rows.push(JSON.parse(line));
74
+ }
75
+ catch {
76
+ // skip corrupt line
77
+ }
78
+ }
79
+ };
80
+ // Legacy append-only ledger.jsonl (pre-rotation) plus the monthly
81
+ // ledger-YYYY-MM.jsonl partitions written since rotation shipped.
82
+ await ingest(path);
83
+ try {
84
+ const dir = dirname(path);
85
+ for (const entry of await readdir(dir)) {
86
+ if (entry !== basename(path) && entry.startsWith("ledger-") && entry.endsWith(".jsonl")) {
87
+ await ingest(join(dir, entry));
88
+ }
89
+ }
90
+ }
91
+ catch (err) {
92
+ if (err?.code !== "ENOENT")
93
+ throw err;
94
+ }
95
+ return rows;
96
+ }
97
+ function bucketBy(rows, keyFn) {
98
+ const out = new Map();
99
+ for (const row of rows) {
100
+ const key = keyFn(row);
101
+ const cur = out.get(key) ?? {
102
+ count: 0,
103
+ totalUsd: 0,
104
+ totalInputTokens: 0,
105
+ totalOutputTokens: 0,
106
+ };
107
+ if (isRequestRow(row)) {
108
+ cur.count += 1;
109
+ cur.totalInputTokens += row.actualInputTokens ?? row.estimatedInputTokens ?? 0;
110
+ cur.totalOutputTokens += row.actualOutputTokens ?? row.estimatedOutputTokens ?? 0;
111
+ }
112
+ else {
113
+ cur.totalInputTokens += row.adjustmentInputTokens ?? 0;
114
+ cur.totalOutputTokens += row.adjustmentOutputTokens ?? 0;
115
+ }
116
+ cur.totalUsd += ledgerRowUsd(row);
117
+ out.set(key, cur);
118
+ }
119
+ return new Map(Array.from(out.entries()).sort((a, b) => b[1].totalUsd - a[1].totalUsd));
120
+ }
121
+ function renderBucket(title, bucket) {
122
+ if (bucket.size === 0)
123
+ return;
124
+ process.stdout.write(` ${c(CYAN, title)}\n`);
125
+ for (const [key, sum] of bucket) {
126
+ process.stdout.write(` ${c(GREEN, `$${sum.totalUsd.toFixed(4)}`)} ${key.padEnd(28)} ${c(DIM, `${sum.count} req`)}\n`);
127
+ }
128
+ process.stdout.write("\n");
129
+ }
130
+ //# sourceMappingURL=cli-cmd-spend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-cmd-spend.js","sourceRoot":"","sources":["../src/cli-cmd-spend.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAoB,YAAY,EAAE,MAAM,WAAW,CAAC;AAiB9F,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAgB,EAAE,KAAuC;IACvF,MAAM,CAAC,GAAe,KAAK,CAAC;IAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACjF,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC3F,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACnE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAClE,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,CAAC,CACpD,CAAC;IAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/C,uEAAuE;IACvE,mCAAmC;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7H,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC;IAEtE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACtC,UAAU;YACV,IAAI,EAAE,QAAQ,CAAC,MAAM;YACrB,cAAc,EAAE,UAAU;YAC1B,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;YAC1C,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YACpC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;SACtC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO;IACR,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,MAAM,kBAAkB,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC;IACrH,MAAM,KAAK,GAAG,UAAU,KAAK,QAAQ,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC;QAC7D,CAAC,CAAC,qDAAqD;QACvD,CAAC,CAAC,UAAU,GAAG,CAAC;YACf,CAAC,CAAC,UAAU,UAAU,IAAI,QAAQ,CAAC,MAAM,2DAA2D;YACpG,CAAC,CAAC,iBAAiB,CAAC;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpF,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACxC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;QACpD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACJ,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,iEAAiE;YACjE,+BAA+B;YAC/B,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAC9D,MAAM,GAAG,CAAC;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACR,oBAAoB;YACrB,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IACF,kEAAkE;IAClE,kEAAkE;IAClE,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzF,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,IAAmB,EAAE,KAAmC;IACzE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;YAC3B,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;SACpB,CAAC;QACF,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACf,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,oBAAoB,IAAI,CAAC,CAAC;YAC/E,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC;YACvD,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,sBAAsB,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,MAAkC;IACtE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CACnG,CAAC;IACH,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -123,7 +123,10 @@ export declare function cmdRefresh(registry: ModelRegistry, flags: Record<string
123
123
  * The server module is loaded via dynamic import to avoid pulling in Hono
124
124
  * for purely CLI-based usage.
125
125
  *
126
- * @param flags CLI flags (supports `--port <number>`, default `3000`).
126
+ * @param flags CLI flags: `--port <number>` (default `3000`) and
127
+ * `--host <address>` (default `127.0.0.1`, or `KOSHA_HOST`).
128
+ * Use `--host 0.0.0.0` to expose the server on the network —
129
+ * set `KOSHA_PROXY_TOKEN` first, the proxy spends your keys.
127
130
  */
128
131
  export declare function cmdServe(flags: Record<string, string | boolean>): Promise<void>;
129
132
  export { cmdModel, cmdResolve, cmdRoutes } from "./cli-cmd-model.js";
@@ -1 +1 @@
1
- {"version":3,"file":"cli-commands.d.ts","sourceRoot":"","sources":["../src/cli-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAM9C;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAOvC,CAAC;AAmBF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAKrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B7E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAO5K;AAqDD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjH;AAID;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/G;AAID;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/G;AAID;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7G;AAID;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9H;AAID;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBlH;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhH;AAID;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrF;AAMD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"cli-commands.d.ts","sourceRoot":"","sources":["../src/cli-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAM9C;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAOvC,CAAC;AAmBF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAKrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B7E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAO5K;AAqDD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjH;AAID;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/G;AAID;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/G;AAID;;;;;;GAMG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7G;AAID;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9H;AAID;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBlH;AAID;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhH;AAID;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrF;AAMD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -353,7 +353,10 @@ export async function cmdRefresh(registry, flags) {
353
353
  * The server module is loaded via dynamic import to avoid pulling in Hono
354
354
  * for purely CLI-based usage.
355
355
  *
356
- * @param flags CLI flags (supports `--port <number>`, default `3000`).
356
+ * @param flags CLI flags: `--port <number>` (default `3000`) and
357
+ * `--host <address>` (default `127.0.0.1`, or `KOSHA_HOST`).
358
+ * Use `--host 0.0.0.0` to expose the server on the network —
359
+ * set `KOSHA_PROXY_TOKEN` first, the proxy spends your keys.
357
360
  */
358
361
  export async function cmdServe(flags) {
359
362
  const port = typeof flags.port === "string" ? parseInt(flags.port, 10) : 3000;
@@ -361,9 +364,14 @@ export async function cmdServe(flags) {
361
364
  console.error(c(RED, `Invalid port: ${flags.port}`));
362
365
  process.exit(1);
363
366
  }
367
+ if (flags.host !== undefined && typeof flags.host !== "string") {
368
+ console.error(c(RED, "--host requires a value (e.g. --host 0.0.0.0)"));
369
+ process.exit(1);
370
+ }
371
+ const host = typeof flags.host === "string" ? flags.host : undefined;
364
372
  // Dynamic import keeps Hono out of the critical path for non-serve commands
365
373
  const { startServer } = await import("./server.js");
366
- await startServer(port);
374
+ await startServer(port, host);
367
375
  }
368
376
  // ---------------------------------------------------------------------------
369
377
  // Re-exports from split modules