moderado 0.3.0 → 0.3.7

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 (96) hide show
  1. package/README.md +182 -175
  2. package/dist/args.d.ts +1 -1
  3. package/dist/args.d.ts.map +1 -1
  4. package/dist/args.js +32 -28
  5. package/dist/args.js.map +1 -1
  6. package/dist/budget.d.ts +6 -0
  7. package/dist/budget.d.ts.map +1 -0
  8. package/dist/budget.js +25 -0
  9. package/dist/budget.js.map +1 -0
  10. package/dist/commands/chat.d.ts +5 -1
  11. package/dist/commands/chat.d.ts.map +1 -1
  12. package/dist/commands/chat.js +188 -40
  13. package/dist/commands/chat.js.map +1 -1
  14. package/dist/commands/models.d.ts.map +1 -1
  15. package/dist/commands/models.js +61 -14
  16. package/dist/commands/models.js.map +1 -1
  17. package/dist/commands/run.d.ts.map +1 -1
  18. package/dist/commands/run.js +2 -0
  19. package/dist/commands/run.js.map +1 -1
  20. package/dist/commands/skills.d.ts +2 -0
  21. package/dist/commands/skills.d.ts.map +1 -0
  22. package/dist/commands/skills.js +13 -0
  23. package/dist/commands/skills.js.map +1 -0
  24. package/dist/config.d.ts +73 -0
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +117 -1
  27. package/dist/config.js.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/model_pricing.d.ts +14 -1
  31. package/dist/model_pricing.d.ts.map +1 -1
  32. package/dist/model_pricing.js +52 -0
  33. package/dist/model_pricing.js.map +1 -1
  34. package/dist/repo_map.d.ts +3 -0
  35. package/dist/repo_map.d.ts.map +1 -0
  36. package/dist/repo_map.js +29 -0
  37. package/dist/repo_map.js.map +1 -0
  38. package/dist/sessions.d.ts +22 -15
  39. package/dist/sessions.d.ts.map +1 -1
  40. package/dist/sessions.js +16 -1
  41. package/dist/sessions.js.map +1 -1
  42. package/dist/skills.d.ts +23 -0
  43. package/dist/skills.d.ts.map +1 -0
  44. package/dist/skills.js +78 -0
  45. package/dist/skills.js.map +1 -0
  46. package/dist/ui/help_modal.d.ts.map +1 -1
  47. package/dist/ui/help_modal.js +1 -0
  48. package/dist/ui/help_modal.js.map +1 -1
  49. package/dist/ui/model_selector.d.ts +2 -2
  50. package/dist/ui/model_selector.d.ts.map +1 -1
  51. package/dist/ui/model_selector.js +25 -16
  52. package/dist/ui/model_selector.js.map +1 -1
  53. package/dist/ui/provider_connect.d.ts +7 -3
  54. package/dist/ui/provider_connect.d.ts.map +1 -1
  55. package/dist/ui/provider_connect.js +64 -15
  56. package/dist/ui/provider_connect.js.map +1 -1
  57. package/dist/ui/renderer.d.ts +4 -0
  58. package/dist/ui/renderer.d.ts.map +1 -1
  59. package/dist/ui/renderer.js +36 -0
  60. package/dist/ui/renderer.js.map +1 -1
  61. package/dist/ui/welcome.d.ts +11 -0
  62. package/dist/ui/welcome.d.ts.map +1 -1
  63. package/dist/ui/welcome.js +40 -20
  64. package/dist/ui/welcome.js.map +1 -1
  65. package/dist/vendor/contracts/events.d.ts +159 -0
  66. package/dist/vendor/contracts/events.d.ts.map +1 -1
  67. package/dist/vendor/contracts/events.js +12 -0
  68. package/dist/vendor/contracts/events.js.map +1 -1
  69. package/dist/vendor/contracts/provider.d.ts +1 -0
  70. package/dist/vendor/contracts/provider.d.ts.map +1 -1
  71. package/dist/vendor/contracts/provider.js +6 -0
  72. package/dist/vendor/contracts/provider.js.map +1 -1
  73. package/dist/vendor/core/agent.d.ts +5 -2
  74. package/dist/vendor/core/agent.d.ts.map +1 -1
  75. package/dist/vendor/core/agent.js +148 -34
  76. package/dist/vendor/core/agent.js.map +1 -1
  77. package/dist/vendor/providers/model_discovery.d.ts +6 -2
  78. package/dist/vendor/providers/model_discovery.d.ts.map +1 -1
  79. package/dist/vendor/providers/model_discovery.js +8 -2
  80. package/dist/vendor/providers/model_discovery.js.map +1 -1
  81. package/dist/vendor/providers/nvidia/nvidia_adapter.d.ts.map +1 -1
  82. package/dist/vendor/providers/nvidia/nvidia_adapter.js +1 -0
  83. package/dist/vendor/providers/nvidia/nvidia_adapter.js.map +1 -1
  84. package/dist/vendor/providers/nvidia/sse_parser.d.ts +2 -1
  85. package/dist/vendor/providers/nvidia/sse_parser.d.ts.map +1 -1
  86. package/dist/vendor/providers/nvidia/sse_parser.js +30 -16
  87. package/dist/vendor/providers/nvidia/sse_parser.js.map +1 -1
  88. package/package.json +2 -2
  89. package/dist/ui/session_screen.d.ts +0 -32
  90. package/dist/ui/session_screen.d.ts.map +0 -1
  91. package/dist/ui/session_screen.js +0 -148
  92. package/dist/ui/session_screen.js.map +0 -1
  93. package/dist/ui/session_terminal.d.ts +0 -46
  94. package/dist/ui/session_terminal.d.ts.map +0 -1
  95. package/dist/ui/session_terminal.js +0 -342
  96. package/dist/ui/session_terminal.js.map +0 -1
package/dist/config.d.ts CHANGED
@@ -7,6 +7,7 @@ export interface ModeradoConfig {
7
7
  allowUnknown?: boolean;
8
8
  activeConnectionId?: string;
9
9
  connections?: Record<string, ProviderConnection>;
10
+ connectProviders?: ConnectProvidersConfig;
10
11
  typescriptLanguageServer?: string;
11
12
  /** HTTPS endpoint that returns `{ results: [{ title, url, snippet? }] }`. */
12
13
  webSearchEndpoint?: string;
@@ -16,7 +17,79 @@ export interface ModeradoConfig {
16
17
  /** Upper bound on model output tokens per response turn. */
17
18
  maxOutputTokens?: number;
18
19
  }
20
+ export declare const CONNECT_PROVIDER_PRESET_IDS: readonly ["nvidia-nim", "openrouter", "agnes-ai", "orcarouter", "ollama", "lm-studio", "openai-compatible"];
21
+ export type ConnectProviderPresetId = typeof CONNECT_PROVIDER_PRESET_IDS[number];
22
+ export interface CustomConnectProvider {
23
+ id: string;
24
+ name: string;
25
+ baseUrl: string;
26
+ defaultModel?: string;
27
+ }
28
+ export interface ConnectProvidersConfig {
29
+ /** Omit to show all built-ins; an empty list hides every built-in. */
30
+ enabled?: ConnectProviderPresetId[];
31
+ custom?: CustomConnectProvider[];
32
+ }
19
33
  export type ProviderConnectionKind = 'nvidia-nim' | 'openai-compatible';
34
+ /**
35
+ * Pure metadata for the built-in provider presets. Lives here (not in the TUI
36
+ * layer) so the host runtime can answer `provider.list` without importing any
37
+ * presentation code.
38
+ */
39
+ export interface ProviderPresetMeta {
40
+ id: ConnectProviderPresetId;
41
+ label: string;
42
+ description: string;
43
+ kind: ProviderConnectionKind;
44
+ baseUrl: string;
45
+ defaultModel?: string;
46
+ /** Local-only runtimes (Ollama, LM Studio) never require a key. */
47
+ requiresApiKey: boolean;
48
+ /**
49
+ * Exact model ids this preset guarantees cost nothing, for aliases the
50
+ * provider's own catalog cannot prove. Matched by exact equality only — a
51
+ * substring or id-shape match would free an entire aggregator catalog.
52
+ */
53
+ freeModelAliases?: readonly string[];
54
+ /**
55
+ * Trailing id markers this preset guarantees cost nothing. OrcaRouter names
56
+ * its no-cost routing endpoints `.../free` and publishes no `pricing` at all,
57
+ * so the endpoint name is the only signal available.
58
+ *
59
+ * The marker is matched at the **end** of the id and only where it starts a
60
+ * segment, so `orcarouter/free` is free while `orcarouter/notfree` and
61
+ * `orcarouter/free-router` are not. The declaration is resolved by connection
62
+ * id, so granting it to another provider is an explicit act rather than an
63
+ * accident of a shared substring.
64
+ */
65
+ freeIdSuffixes?: readonly string[];
66
+ /**
67
+ * True when the provider's entire hosted catalog costs nothing.
68
+ *
69
+ * NVIDIA NIM advertises no `pricing` on any of its catalog entries, yet the
70
+ * hosted catalog runs on build.nvidia.com trial credits. That is a property
71
+ * of the *provider*, not of any one model id, so it is declared once here
72
+ * instead of being re-guessed from model names at every call site. It is
73
+ * resolved strictly by connection id, so it can never free an aggregator's
74
+ * metered catalog.
75
+ */
76
+ freeCatalog?: boolean;
77
+ }
78
+ /** How much of a provider's catalog is declared cost-free, for the free-model predicate. */
79
+ export interface ProviderFreePolicy {
80
+ freeModelAliases?: readonly string[];
81
+ freeIdSuffixes?: readonly string[];
82
+ freeCatalog?: boolean;
83
+ }
84
+ /**
85
+ * The free-tier declaration for a connection id, or `undefined` when the id has
86
+ * no preset. An undeclared provider contributes no free evidence at all.
87
+ */
88
+ export declare function freeModelPolicyFor(connectionId: string | undefined): ProviderFreePolicy | undefined;
89
+ export declare const CONNECT_PROVIDER_PRESET_META: ProviderPresetMeta[];
90
+ /** True for loopback endpoints, which authenticate without an API key. */
91
+ export declare function isLoopbackBaseUrl(baseUrl: string): boolean;
92
+ export declare function findProviderPreset(id: string): ProviderPresetMeta | undefined;
20
93
  export interface ProviderConnection {
21
94
  id: string;
22
95
  displayName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAyB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAuB,eAAe,EAAqB,MAAM,kBAAkB,CAAC;AAE3F,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACjD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAgC9D;AAoCD,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAkB5E;AAED,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWrE;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAgB1F;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAUxF;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAK9F;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAM7F;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAMvE;AAED,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAKnI;AAED,wBAAsB,2BAA2B,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIrI;AAED,kGAAkG;AAClG,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB3G"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -1,8 +1,105 @@
1
1
  import fs from 'node:fs';
2
+ import { z } from 'zod';
2
3
  import path from 'node:path';
3
4
  import os from 'node:os';
4
5
  import { McpServerConfigSchema } from './vendor/contracts/index.js';
5
6
  import { credentialReference, resolveCredential } from './credentials.js';
7
+ export const CONNECT_PROVIDER_PRESET_IDS = [
8
+ 'nvidia-nim', 'openrouter', 'agnes-ai', 'orcarouter', 'ollama', 'lm-studio', 'openai-compatible',
9
+ ];
10
+ /**
11
+ * The free-tier declaration for a connection id, or `undefined` when the id has
12
+ * no preset. An undeclared provider contributes no free evidence at all.
13
+ */
14
+ export function freeModelPolicyFor(connectionId) {
15
+ const preset = connectionId ? findProviderPreset(connectionId) : undefined;
16
+ if (!preset)
17
+ return undefined;
18
+ return {
19
+ freeModelAliases: preset.freeModelAliases,
20
+ freeIdSuffixes: preset.freeIdSuffixes,
21
+ freeCatalog: preset.freeCatalog,
22
+ };
23
+ }
24
+ export const CONNECT_PROVIDER_PRESET_META = [
25
+ {
26
+ id: 'nvidia-nim',
27
+ label: 'NVIDIA NIM',
28
+ description: 'Free-first routing across Nemotron, LLaMA, DeepSeek and Kimi.',
29
+ kind: 'nvidia-nim',
30
+ baseUrl: 'https://integrate.api.nvidia.com/v1',
31
+ // Every hosted NIM endpoint runs on build.nvidia.com trial credits and the
32
+ // catalog advertises no `pricing`, so without this the free list is empty
33
+ // for the default provider.
34
+ freeCatalog: true,
35
+ requiresApiKey: true,
36
+ },
37
+ {
38
+ id: 'openrouter',
39
+ label: 'OpenRouter',
40
+ description: 'One key for Qwen, DeepSeek, Mistral and free-tier models.',
41
+ kind: 'openai-compatible',
42
+ baseUrl: 'https://openrouter.ai/api/v1',
43
+ requiresApiKey: true,
44
+ },
45
+ {
46
+ id: 'agnes-ai',
47
+ label: 'Agnes AI',
48
+ description: 'Agnes Flash and Code endpoints.',
49
+ kind: 'openai-compatible',
50
+ baseUrl: 'https://apihub.agnes-ai.com/v1',
51
+ // Every Agnes AI endpoint is free, and the catalog advertises no `pricing`
52
+ // to prove it per model. Declared once as a property of the provider so the
53
+ // whole catalog lands in the free bucket in every surface, instead of a
54
+ // hardcoded model list in one of them.
55
+ freeCatalog: true,
56
+ requiresApiKey: true,
57
+ },
58
+ {
59
+ id: 'orcarouter',
60
+ label: 'OrcaRouter',
61
+ description: 'Adaptive model routing.',
62
+ kind: 'openai-compatible',
63
+ baseUrl: 'https://api.orcarouter.ai/v1',
64
+ defaultModel: 'orcarouter/free',
65
+ // The catalog advertises no pricing, so a free endpoint is identified by its
66
+ // name: every routing endpoint OrcaRouter serves for nothing ends in `free`.
67
+ // Declared as a trailing marker rather than a free-for-all substring, so the
68
+ // rest of the catalog stays metered.
69
+ freeIdSuffixes: ['free'],
70
+ requiresApiKey: true,
71
+ },
72
+ {
73
+ id: 'ollama',
74
+ label: 'Ollama',
75
+ description: 'Models served locally by Ollama.',
76
+ kind: 'openai-compatible',
77
+ baseUrl: 'http://127.0.0.1:11434/v1',
78
+ requiresApiKey: false,
79
+ },
80
+ {
81
+ id: 'lm-studio',
82
+ label: 'LM Studio',
83
+ description: 'Models served by the LM Studio local server.',
84
+ kind: 'openai-compatible',
85
+ baseUrl: 'http://127.0.0.1:1234/v1',
86
+ requiresApiKey: false,
87
+ },
88
+ ];
89
+ /** True for loopback endpoints, which authenticate without an API key. */
90
+ export function isLoopbackBaseUrl(baseUrl) {
91
+ try {
92
+ const url = new URL(baseUrl);
93
+ return (url.protocol === 'http:' &&
94
+ ['127.0.0.1', 'localhost', '[::1]', '::1'].includes(url.hostname));
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ export function findProviderPreset(id) {
101
+ return CONNECT_PROVIDER_PRESET_META.find((preset) => preset.id === id);
102
+ }
6
103
  const CONFIG_DIR_NAME = '.moderado';
7
104
  const CONFIG_FILE_NAME = 'config.json';
8
105
  export function getConfigPath(customHome) {
@@ -28,6 +125,7 @@ export function loadConfig(customHome) {
28
125
  ? parsed.activeConnectionId
29
126
  : undefined,
30
127
  connections: Object.keys(connections).length > 0 ? connections : undefined,
128
+ connectProviders: parseConnectProviders(parsed.connectProviders),
31
129
  mcpServers: parseMcpServers(parsed.mcpServers),
32
130
  typescriptLanguageServer: typeof parsed.typescriptLanguageServer === 'string' ? parsed.typescriptLanguageServer : undefined,
33
131
  webSearchEndpoint: typeof parsed.webSearchEndpoint === 'string' ? parsed.webSearchEndpoint : undefined,
@@ -41,6 +139,24 @@ export function loadConfig(customHome) {
41
139
  return {};
42
140
  }
43
141
  }
142
+ function parseConnectProviders(value) {
143
+ const custom = z.object({
144
+ id: z.string().regex(/^[a-z0-9][a-z0-9_-]{0,31}$/).refine(id => !CONNECT_PROVIDER_PRESET_IDS.includes(id)),
145
+ name: z.string().trim().min(1).max(80),
146
+ baseUrl: z.string().trim().url().refine(value => {
147
+ const url = new URL(value);
148
+ return !url.username && !url.password && (url.protocol === 'https:' || isLoopbackBaseUrl(value));
149
+ }).transform(value => value.replace(/\/+$/, '')),
150
+ defaultModel: z.string().trim().min(1).optional(),
151
+ });
152
+ const schema = z.object({ enabled: z.array(z.enum(CONNECT_PROVIDER_PRESET_IDS)).optional(), custom: z.array(custom).optional() });
153
+ const parsed = schema.safeParse(value);
154
+ if (!parsed.success)
155
+ return undefined;
156
+ if (parsed.data.custom)
157
+ parsed.data.custom = parsed.data.custom.filter((item, index, items) => items.findIndex(other => other.id === item.id) === index);
158
+ return parsed.data;
159
+ }
44
160
  function parseMcpServers(value) {
45
161
  if (!value || typeof value !== 'object')
46
162
  return undefined;
@@ -153,7 +269,7 @@ export function removeMcpServer(name, customHome) {
153
269
  }
154
270
  export async function storeConnectionCredential(connection, store) {
155
271
  if (!connection.apiKey?.trim())
156
- throw new Error('A provider API key is required.');
272
+ return connection;
157
273
  const reference = credentialReference(connection.id);
158
274
  await store.set(reference, connection.apiKey.trim());
159
275
  return { ...connection, credentialReference: reference };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAmB,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAmB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAoB3F,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB;CACxF,CAAC;AAuEX;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,YAAgC;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO;QACL,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAyB;IAChE;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,qCAAqC;QAC9C,2EAA2E;QAC3E,0EAA0E;QAC1E,4BAA4B;QAC5B,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;KACrB;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,8BAA8B;QACvC,cAAc,EAAE,IAAI;KACrB;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,iCAAiC;QAC9C,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,gCAAgC;QACzC,2EAA2E;QAC3E,4EAA4E;QAC5E,wEAAwE;QACxE,uCAAuC;QACvC,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;KACrB;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,8BAA8B;QACvC,YAAY,EAAE,iBAAiB;QAC/B,6EAA6E;QAC7E,6EAA6E;QAC7E,6EAA6E;QAC7E,qCAAqC;QACrC,cAAc,EAAE,CAAC,MAAM,CAAC;QACxB,cAAc,EAAE,IAAI;KACrB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,2BAA2B;QACpC,cAAc,EAAE,KAAK;KACtB;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,8CAA8C;QAC3D,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,0BAA0B;QACnC,cAAc,EAAE,KAAK;KACtB;CACF,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CACL,GAAG,CAAC,QAAQ,KAAK,OAAO;YACxB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAClE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAcD,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC,MAAM,UAAU,aAAa,CAAC,UAAmB;IAC/C,MAAM,IAAI,GAAG,UAAU,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACzD,OAAO;gBACL,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACrE,YAAY,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;gBACvF,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBAC/E,YAAY,EAAE,OAAO,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;gBACxF,kBAAkB,EAChB,OAAO,MAAM,CAAC,kBAAkB,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC;oBACrF,CAAC,CAAC,MAAM,CAAC,kBAAkB;oBAC3B,CAAC,CAAC,SAAS;gBACf,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAC1E,gBAAgB,EAAE,qBAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAChE,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC9C,wBAAwB,EAAE,OAAO,MAAM,CAAC,wBAAwB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS;gBAC3H,iBAAiB,EAAE,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;gBACtG,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,KAAK,KAAK,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,IAAI,MAAM,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;gBAChL,eAAe,EAAE,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;aAC/H,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAA6B,CAAC,CAAC;QACrI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAClD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClI,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;IACzJ,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClO,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAE3D,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,EAAE,CAAC;QACxE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;YAAE,SAAS;QAClE,MAAM,IAAI,GAAG,SAAoC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IACE,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;YAC3B,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;YACpC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAChC,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,mBAAmB,CAAC;YACvD,SAAS;QAEX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;YAChB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,mBAAmB,EAAE,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;YACxG,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACjE,YAAY,EAAE,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;SACpF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAsB,EAAE,UAAmB;IACpE,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,MAAM,GAAmB;QAC7B,GAAG,QAAQ;QACX,GAAG,MAAM;KACV,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC5D,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAmB;IAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QACpE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,IAAI,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACjF,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,YAAY;YAChB,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,qCAAqC;YAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAC5B,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAAC,UAA8B,EAAE,UAAmB;IAChF,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACrG,UAAU,CACR;QACE,WAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE;QACnE,kBAAkB,EAAE,SAAS,CAAC,EAAE;KACjC,EACD,UAAU,CACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,MAAuB,EAAE,UAAmB;IACtF,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAgB,EAAE,UAAmB;IACrF,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,sBAAsB,CAAC,CAAC;IACxE,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAmB;IAC/D,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,sBAAsB,CAAC,CAAC;IAC3F,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7D,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,UAA8B,EAAE,KAAsB;IACpG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IAClD,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,GAAG,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,UAA8B,EAAE,KAAsB;IACtG,MAAM,eAAe,GAAG,UAAU,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC;IACjJ,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,mBAAmB,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/H,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAsB,EAAE,UAAmB;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,IAAI,GAAmB,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;IACnF,MAAM,OAAO,GAA0C,EAAE,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5F,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,OAAO;QAAE,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,MAAM,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,QAAQ,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,YAAqB,EAAE,OAAO,EAAE,qCAAqC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/L,IAAI,CAAC,WAAY,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACzH,CAAC;IACD,IAAI,CAAC,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,GAAG,UAAU,MAAM,CAAC;IACtC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import { handleRunCommand } from './commands/run.js';
8
8
  import { handleChatSession } from './commands/chat.js';
9
9
  import { handleDoctorCommand } from './commands/doctor.js';
10
10
  import { writeDiagnosticLog } from './diagnostic_log.js';
11
+ import { handleSkillsCommand } from './commands/skills.js';
11
12
  function getVersion() {
12
13
  try {
13
14
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -52,6 +53,9 @@ async function main() {
52
53
  if (args.command === 'doctor') {
53
54
  exitCode = await handleDoctorCommand(args);
54
55
  }
56
+ else if (args.command === 'skills') {
57
+ exitCode = handleSkillsCommand();
58
+ }
55
59
  else if (args.command === 'models') {
56
60
  exitCode = await handleModelsCommand(args);
57
61
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,sDAAsD;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,qBAAqB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAE5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC3F,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEpC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAAC,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClH,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAClC,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACpC,QAAQ,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,GAAG,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,17 @@
1
- import type { ModelInventoryEntry } from '@moderado/contracts';
1
+ import type { ModelClassification, ModelInventoryEntry } from '@moderado/contracts';
2
+ import type { ProviderFreePolicy } from './config.js';
2
3
  /** Use only exact, provider-advertised prompt and completion prices. */
3
4
  export declare function findModelPricing(models: ModelInventoryEntry[], modelId: string): Record<string, string> | undefined;
5
+ /**
6
+ * Whether a provider preset *declares* this model id cost-free by name — either
7
+ * as an exact alias or by a trailing free marker.
8
+ *
9
+ * This is the evidence a catalog cannot supply: OrcaRouter publishes no
10
+ * `pricing` field whatsoever, yet its free routing endpoints are named for it.
11
+ * It is scoped to the declaring provider (resolved by connection id through
12
+ * `freeModelPolicyFor`), so no other provider inherits the rule.
13
+ */
14
+ export declare function isDeclaredFreeModelId(modelId: string, policy?: ProviderFreePolicy): boolean;
15
+ /** Explicit zero prices or curated/preset declarations qualify; paid prices win. */
16
+ export declare function isFreeModelOption(entry: Pick<ModelInventoryEntry, 'id' | 'pricing'>, classification: ModelClassification, policy?: ProviderFreePolicy): boolean;
4
17
  //# sourceMappingURL=model_pricing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model_pricing.d.ts","sourceRoot":"","sources":["../src/model_pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,wEAAwE;AACxE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,mBAAmB,EAAE,EAC7B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOpC"}
1
+ {"version":3,"file":"model_pricing.d.ts","sourceRoot":"","sources":["../src/model_pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD,wEAAwE;AACxE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,mBAAmB,EAAE,EAC7B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOpC;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAG3F;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,SAAS,CAAC,EAClD,cAAc,EAAE,mBAAmB,EACnC,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAUT"}
@@ -1,3 +1,4 @@
1
+ import { isFreeModelEntry } from './vendor/providers/index.js';
1
2
  /** Use only exact, provider-advertised prompt and completion prices. */
2
3
  export function findModelPricing(models, modelId) {
3
4
  const pricing = models.find((model) => model.id === modelId)?.pricing;
@@ -7,4 +8,55 @@ export function findModelPricing(models, modelId) {
7
8
  ? pricing
8
9
  : undefined;
9
10
  }
11
+ /**
12
+ * Whether a model id ends with a provider-declared free marker, as its own
13
+ * trailing segment.
14
+ *
15
+ * The two guards are the whole point. Anchoring at the end means `free` in the
16
+ * middle of an id (`orcarouter/free-router-4`) never matches, and the segment
17
+ * boundary means a metered id that merely ends in the same letters
18
+ * (`orcarouter/notfree`) never matches either. An unanchored substring test is
19
+ * what marked a whole aggregator catalog free.
20
+ */
21
+ function endsWithFreeMarker(modelId, marker) {
22
+ if (!marker)
23
+ return false;
24
+ if (!modelId.toLowerCase().endsWith(marker.toLowerCase()))
25
+ return false;
26
+ // `charAt` past the start returns '', which is not alphanumeric, so an id that
27
+ // is nothing but the marker still matches.
28
+ return !/[a-z0-9]/i.test(modelId.charAt(modelId.length - marker.length - 1));
29
+ }
30
+ /**
31
+ * Whether a provider preset *declares* this model id cost-free by name — either
32
+ * as an exact alias or by a trailing free marker.
33
+ *
34
+ * This is the evidence a catalog cannot supply: OrcaRouter publishes no
35
+ * `pricing` field whatsoever, yet its free routing endpoints are named for it.
36
+ * It is scoped to the declaring provider (resolved by connection id through
37
+ * `freeModelPolicyFor`), so no other provider inherits the rule.
38
+ */
39
+ export function isDeclaredFreeModelId(modelId, policy) {
40
+ if (policy?.freeModelAliases?.includes(modelId))
41
+ return true;
42
+ return (policy?.freeIdSuffixes ?? []).some((marker) => endsWithFreeMarker(modelId, marker));
43
+ }
44
+ /** Explicit zero prices or curated/preset declarations qualify; paid prices win. */
45
+ export function isFreeModelOption(entry, classification, policy) {
46
+ // A reported nonzero price outranks any blanket preset declaration.
47
+ if (entry.pricing && Object.values(entry.pricing).some(price => price.trim() === '' || !Number.isFinite(Number(price)) || Number(price) !== 0))
48
+ return false;
49
+ if (isFreeModelEntry(entry))
50
+ return true;
51
+ const curated = classification.source !== 'heuristic';
52
+ if (curated && classification.accessTier !== 'free_trial' && classification.accessTier !== 'local')
53
+ return false;
54
+ if (policy?.freeCatalog)
55
+ return true;
56
+ if (isDeclaredFreeModelId(entry.id, policy))
57
+ return true;
58
+ if (!curated)
59
+ return false;
60
+ return classification.accessTier === 'free_trial' || classification.accessTier === 'local';
61
+ }
10
62
  //# sourceMappingURL=model_pricing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model_pricing.js","sourceRoot":"","sources":["../src/model_pricing.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAC9B,MAA6B,EAC7B,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC;QAC7F,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"model_pricing.js","sourceRoot":"","sources":["../src/model_pricing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAC9B,MAA6B,EAC7B,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC;QAC7F,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,MAAc;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,+EAA+E;IAC/E,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,MAA2B;IAChF,IAAI,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAC/B,KAAkD,EAClD,cAAmC,EACnC,MAA2B;IAE3B,oEAAoE;IACpE,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7J,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,KAAK,WAAW,CAAC;IACtD,IAAI,OAAO,IAAI,cAAc,CAAC,UAAU,KAAK,YAAY,IAAI,cAAc,CAAC,UAAU,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACjH,IAAI,MAAM,EAAE,WAAW;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,cAAc,CAAC,UAAU,KAAK,YAAY,IAAI,cAAc,CAAC,UAAU,KAAK,OAAO,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function formatWorkspaceMap(files: string[]): string;
2
+ export declare function buildWorkspaceMap(root: string): Promise<string>;
3
+ //# sourceMappingURL=repo_map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo_map.d.ts","sourceRoot":"","sources":["../src/repo_map.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqB1D;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
@@ -0,0 +1,29 @@
1
+ import { listFiles } from './vendor/tools/index.js';
2
+ export function formatWorkspaceMap(files) {
3
+ if (files.length === 0)
4
+ return 'Workspace map: no files found.';
5
+ const groups = new Map();
6
+ for (const file of files) {
7
+ const parts = file.replace(/[\x00-\x1f\x7f-\x9f]/g, '?').replace(/\\/g, '/').split('/');
8
+ const group = parts.length === 1 ? '(root)' : ['apps', 'packages'].includes(parts[0]) && parts.length > 2
9
+ ? parts.slice(0, 2).join('/') : parts[0];
10
+ const item = group === '(root)' ? parts[0] : parts.slice(group.split('/').length).join('/');
11
+ groups.set(group, [...(groups.get(group) ?? []), item]);
12
+ }
13
+ const ordered = [...groups].sort(([a], [b]) => a.localeCompare(b));
14
+ const lines = [`Workspace map (${files.length}${files.length >= 1000 ? '+' : ''} files scanned):`];
15
+ for (const [group, items] of ordered.slice(0, 14)) {
16
+ const selected = items.sort((a, b) => {
17
+ const rank = (name) => name.startsWith('src/') ? 0 : name === 'package.json' || name === 'README.md' ? 1 : 2;
18
+ return rank(a) - rank(b) || a.localeCompare(b);
19
+ }).slice(0, 3);
20
+ lines.push(`${group} (${items.length} ${items.length === 1 ? 'file' : 'files'}): ${selected.join(', ')}${items.length > selected.length ? ', …' : ''}`);
21
+ }
22
+ if (ordered.length > 14)
23
+ lines.push(`… ${ordered.length - 14} more modules`);
24
+ return lines.join('\n');
25
+ }
26
+ export async function buildWorkspaceMap(root) {
27
+ return formatWorkspaceMap(await listFiles(root, '', { recursive: true, maxDepth: 8, limit: 1000 }));
28
+ }
29
+ //# sourceMappingURL=repo_map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo_map.js","sourceRoot":"","sources":["../src/repo_map.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,7 @@ export declare const StoredSessionSchema: z.ZodObject<{
83
83
  promptTokens: z.ZodNumber;
84
84
  completionTokens: z.ZodNumber;
85
85
  totalTokens: z.ZodNumber;
86
+ estimated: z.ZodOptional<z.ZodBoolean>;
86
87
  costUsd: z.ZodOptional<z.ZodNumber>;
87
88
  costKnown: z.ZodBoolean;
88
89
  available: z.ZodDefault<z.ZodBoolean>;
@@ -92,18 +93,29 @@ export declare const StoredSessionSchema: z.ZodObject<{
92
93
  totalTokens: number;
93
94
  costKnown: boolean;
94
95
  available: boolean;
96
+ estimated?: boolean | undefined;
95
97
  costUsd?: number | undefined;
96
98
  }, {
97
99
  promptTokens: number;
98
100
  completionTokens: number;
99
101
  totalTokens: number;
100
102
  costKnown: boolean;
103
+ estimated?: boolean | undefined;
101
104
  costUsd?: number | undefined;
102
105
  available?: boolean | undefined;
103
106
  }>;
104
107
  }, "strip", z.ZodTypeAny, {
105
108
  id: string;
106
109
  mode: "Plan" | "Execute";
110
+ usage: {
111
+ promptTokens: number;
112
+ completionTokens: number;
113
+ totalTokens: number;
114
+ costKnown: boolean;
115
+ available: boolean;
116
+ estimated?: boolean | undefined;
117
+ costUsd?: number | undefined;
118
+ };
107
119
  schemaVersion: 1;
108
120
  workspaceRoot: string;
109
121
  createdAt: string;
@@ -129,20 +141,21 @@ export declare const StoredSessionSchema: z.ZodObject<{
129
141
  content: string;
130
142
  toolCallId: string;
131
143
  })[];
144
+ providerId?: string | undefined;
145
+ providerName?: string | undefined;
146
+ modelId?: string | undefined;
147
+ }, {
148
+ id: string;
149
+ mode: "Plan" | "Execute";
132
150
  usage: {
133
151
  promptTokens: number;
134
152
  completionTokens: number;
135
153
  totalTokens: number;
136
154
  costKnown: boolean;
137
- available: boolean;
155
+ estimated?: boolean | undefined;
138
156
  costUsd?: number | undefined;
157
+ available?: boolean | undefined;
139
158
  };
140
- providerId?: string | undefined;
141
- providerName?: string | undefined;
142
- modelId?: string | undefined;
143
- }, {
144
- id: string;
145
- mode: "Plan" | "Execute";
146
159
  schemaVersion: 1;
147
160
  workspaceRoot: string;
148
161
  createdAt: string;
@@ -168,14 +181,6 @@ export declare const StoredSessionSchema: z.ZodObject<{
168
181
  toolCallId: string;
169
182
  status?: "denied" | "success" | "error" | undefined;
170
183
  })[];
171
- usage: {
172
- promptTokens: number;
173
- completionTokens: number;
174
- totalTokens: number;
175
- costKnown: boolean;
176
- costUsd?: number | undefined;
177
- available?: boolean | undefined;
178
- };
179
184
  providerId?: string | undefined;
180
185
  providerName?: string | undefined;
181
186
  modelId?: string | undefined;
@@ -195,6 +200,8 @@ export declare function calculateSessionCost(usage: ChatUsage | undefined, prici
195
200
  costKnown: boolean;
196
201
  costUsd?: number;
197
202
  };
203
+ /** Add one task snapshot once; estimates never produce a billing claim. */
204
+ export declare function accumulateSessionUsage(previous: StoredSession['usage'], usage: ChatUsage, estimated: boolean, pricing?: Record<string, string>): StoredSession['usage'];
198
205
  /** Output speed uses only generated tokens, never prompt/context processing time. */
199
206
  export declare function calculateOutputTokenRate(completionTokens: number, streamDurationMs: number): number | undefined;
200
207
  export declare function formatSessionCost(usage: StoredSession['usage']): string;
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG1F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA8W,CAAC;AAC/Y,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC,CAAM,GAAG,aAAa,CAGlK;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,SAAe;IAChD,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAC3C,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAC9C,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASlC,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE;IAOpD,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;CACpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAI7I;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/G;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CAIvE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAIpE;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAM7E"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAG1F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA8W,CAAC;AAC/Y,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC,CAAM,GAAG,aAAa,CAGlK;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,SAAe;IAChD,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAC3C,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAC9C,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IASlC,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,EAAE;IAOpD,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;CACpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAI7I;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAavK;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/G;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,MAAM,CAIvE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAIpE;AACD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAM7E"}
package/dist/sessions.js CHANGED
@@ -4,7 +4,7 @@ import os from 'node:os';
4
4
  import path from 'node:path';
5
5
  import { z } from 'zod';
6
6
  import { ChatMessageSchema } from './vendor/contracts/index.js';
7
- const UsageSchema = z.object({ promptTokens: z.number().int().nonnegative(), completionTokens: z.number().int().nonnegative(), totalTokens: z.number().int().nonnegative(), costUsd: z.number().nonnegative().optional(), costKnown: z.boolean(), available: z.boolean().default(false) });
7
+ const UsageSchema = z.object({ promptTokens: z.number().int().nonnegative(), completionTokens: z.number().int().nonnegative(), totalTokens: z.number().int().nonnegative(), estimated: z.boolean().optional(), costUsd: z.number().nonnegative().optional(), costKnown: z.boolean(), available: z.boolean().default(false) });
8
8
  export const StoredSessionSchema = z.object({ schemaVersion: z.literal(1), id: z.string().uuid(), workspaceRoot: z.string().min(1), createdAt: z.string().datetime(), updatedAt: z.string().datetime(), providerId: z.string().optional(), providerName: z.string().optional(), modelId: z.string().optional(), mode: z.enum(['Plan', 'Execute']), messages: z.array(ChatMessageSchema), usage: UsageSchema });
9
9
  export function createSession(workspaceRoot, details = {}) {
10
10
  const now = new Date().toISOString();
@@ -48,6 +48,21 @@ export function calculateSessionCost(usage, pricing) {
48
48
  return { costKnown: false };
49
49
  return { costKnown: true, costUsd: usage.promptTokens * prompt + usage.completionTokens * completion };
50
50
  }
51
+ /** Add one task snapshot once; estimates never produce a billing claim. */
52
+ export function accumulateSessionUsage(previous, usage, estimated, pricing) {
53
+ const isEstimated = Boolean(previous.estimated || estimated);
54
+ const cost = isEstimated ? { costKnown: false } : calculateSessionCost(usage, pricing);
55
+ const costKnown = cost.costKnown && (previous.totalTokens === 0 || previous.costKnown);
56
+ return {
57
+ promptTokens: previous.promptTokens + usage.promptTokens,
58
+ completionTokens: previous.completionTokens + usage.completionTokens,
59
+ totalTokens: previous.totalTokens + usage.totalTokens,
60
+ estimated: isEstimated,
61
+ available: true,
62
+ costKnown,
63
+ costUsd: costKnown ? (previous.costUsd ?? 0) + (cost.costUsd ?? 0) : undefined,
64
+ };
65
+ }
51
66
  /** Output speed uses only generated tokens, never prompt/context processing time. */
52
67
  export function calculateOutputTokenRate(completionTokens, streamDurationMs) {
53
68
  if (!Number.isFinite(completionTokens) || completionTokens <= 0 || !Number.isFinite(streamDurationMs) || streamDurationMs <= 0)