@trusty-squire/mcp 1.0.0 → 1.0.1-rc.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 (177) hide show
  1. package/README.md +9 -15
  2. package/dist/bot/credential-text.d.ts +4 -0
  3. package/dist/bot/credential-text.d.ts.map +1 -0
  4. package/dist/bot/credential-text.js +297 -0
  5. package/dist/bot/credential-text.js.map +1 -0
  6. package/dist/bot/email-verification.d.ts +2 -0
  7. package/dist/bot/email-verification.d.ts.map +1 -0
  8. package/dist/bot/email-verification.js +47 -0
  9. package/dist/bot/email-verification.js.map +1 -0
  10. package/dist/bot/google-login.d.ts +1 -0
  11. package/dist/bot/google-login.d.ts.map +1 -1
  12. package/dist/bot/google-login.js +47 -2
  13. package/dist/bot/google-login.js.map +1 -1
  14. package/dist/bot/index.d.ts +0 -40
  15. package/dist/bot/index.d.ts.map +1 -1
  16. package/dist/bot/index.js +8 -156
  17. package/dist/bot/index.js.map +1 -1
  18. package/dist/bot/login-state.d.ts +2 -0
  19. package/dist/bot/login-state.d.ts.map +1 -1
  20. package/dist/bot/login-state.js +44 -0
  21. package/dist/bot/login-state.js.map +1 -1
  22. package/dist/bot/oauth-detect.d.ts +8 -0
  23. package/dist/bot/oauth-detect.d.ts.map +1 -0
  24. package/dist/bot/oauth-detect.js +329 -0
  25. package/dist/bot/oauth-detect.js.map +1 -0
  26. package/dist/bot/onboarding-capture.d.ts +1 -1
  27. package/dist/bot/onboarding-capture.d.ts.map +1 -1
  28. package/dist/bot/operator-recipe.d.ts +24 -24
  29. package/dist/bot/promote-to-skill.d.ts +1 -1
  30. package/dist/bot/promote-to-skill.d.ts.map +1 -1
  31. package/dist/bot/promote-to-skill.js +7 -5
  32. package/dist/bot/promote-to-skill.js.map +1 -1
  33. package/dist/bot/provision-session.d.ts +10 -0
  34. package/dist/bot/provision-session.d.ts.map +1 -1
  35. package/dist/bot/provision-session.js +126 -5
  36. package/dist/bot/provision-session.js.map +1 -1
  37. package/dist/bot/provision-types.d.ts +69 -0
  38. package/dist/bot/provision-types.d.ts.map +1 -0
  39. package/dist/bot/provision-types.js +9 -0
  40. package/dist/bot/provision-types.js.map +1 -0
  41. package/dist/bot/semantic-transition.d.ts +1 -1
  42. package/dist/bot/semantic-transition.d.ts.map +1 -1
  43. package/dist/skill-cli/cli.d.ts +1 -7
  44. package/dist/skill-cli/cli.d.ts.map +1 -1
  45. package/dist/skill-cli/cli.js +1 -69
  46. package/dist/skill-cli/cli.js.map +1 -1
  47. package/dist/tools/provision-drive.d.ts +48 -8
  48. package/dist/tools/provision-drive.d.ts.map +1 -1
  49. package/dist/tools/provision-drive.js +127 -2
  50. package/dist/tools/provision-drive.js.map +1 -1
  51. package/dist/tools/store-credential.d.ts +4 -4
  52. package/dist/tools/use-credential.d.ts +6 -6
  53. package/package.json +2 -6
  54. package/dist/bot/affordance-probe.d.ts +0 -15
  55. package/dist/bot/affordance-probe.d.ts.map +0 -1
  56. package/dist/bot/affordance-probe.js +0 -61
  57. package/dist/bot/affordance-probe.js.map +0 -1
  58. package/dist/bot/agent.d.ts +0 -449
  59. package/dist/bot/agent.d.ts.map +0 -1
  60. package/dist/bot/agent.js +0 -13634
  61. package/dist/bot/agent.js.map +0 -1
  62. package/dist/bot/debug.d.ts +0 -3
  63. package/dist/bot/debug.d.ts.map +0 -1
  64. package/dist/bot/debug.js +0 -35
  65. package/dist/bot/debug.js.map +0 -1
  66. package/dist/bot/email-code-fetcher.d.ts +0 -5
  67. package/dist/bot/email-code-fetcher.d.ts.map +0 -1
  68. package/dist/bot/email-code-fetcher.js +0 -33
  69. package/dist/bot/email-code-fetcher.js.map +0 -1
  70. package/dist/bot/flow-engine.d.ts +0 -7
  71. package/dist/bot/flow-engine.d.ts.map +0 -1
  72. package/dist/bot/flow-engine.js +0 -13
  73. package/dist/bot/flow-engine.js.map +0 -1
  74. package/dist/bot/form-fill.d.ts +0 -172
  75. package/dist/bot/form-fill.d.ts.map +0 -1
  76. package/dist/bot/form-fill.js +0 -444
  77. package/dist/bot/form-fill.js.map +0 -1
  78. package/dist/bot/inbox-client.d.ts +0 -45
  79. package/dist/bot/inbox-client.d.ts.map +0 -1
  80. package/dist/bot/inbox-client.js +0 -220
  81. package/dist/bot/inbox-client.js.map +0 -1
  82. package/dist/bot/llm-client.d.ts +0 -89
  83. package/dist/bot/llm-client.d.ts.map +0 -1
  84. package/dist/bot/llm-client.js +0 -493
  85. package/dist/bot/llm-client.js.map +0 -1
  86. package/dist/bot/nav-search.d.ts +0 -114
  87. package/dist/bot/nav-search.d.ts.map +0 -1
  88. package/dist/bot/nav-search.js +0 -670
  89. package/dist/bot/nav-search.js.map +0 -1
  90. package/dist/bot/notify-api.d.ts +0 -9
  91. package/dist/bot/notify-api.d.ts.map +0 -1
  92. package/dist/bot/notify-api.js +0 -49
  93. package/dist/bot/notify-api.js.map +0 -1
  94. package/dist/bot/oauth-flow.d.ts +0 -48
  95. package/dist/bot/oauth-flow.d.ts.map +0 -1
  96. package/dist/bot/oauth-flow.js +0 -111
  97. package/dist/bot/oauth-flow.js.map +0 -1
  98. package/dist/bot/observation-frame.d.ts +0 -16
  99. package/dist/bot/observation-frame.d.ts.map +0 -1
  100. package/dist/bot/observation-frame.js +0 -22
  101. package/dist/bot/observation-frame.js.map +0 -1
  102. package/dist/bot/post-signup-action-executor.d.ts +0 -53
  103. package/dist/bot/post-signup-action-executor.d.ts.map +0 -1
  104. package/dist/bot/post-signup-action-executor.js +0 -104
  105. package/dist/bot/post-signup-action-executor.js.map +0 -1
  106. package/dist/bot/post-signup-flow.d.ts +0 -51
  107. package/dist/bot/post-signup-flow.d.ts.map +0 -1
  108. package/dist/bot/post-signup-flow.js +0 -155
  109. package/dist/bot/post-signup-flow.js.map +0 -1
  110. package/dist/bot/post-signup-login-flow.d.ts +0 -28
  111. package/dist/bot/post-signup-login-flow.d.ts.map +0 -1
  112. package/dist/bot/post-signup-login-flow.js +0 -35
  113. package/dist/bot/post-signup-login-flow.js.map +0 -1
  114. package/dist/bot/post-signup-recovery-state.d.ts +0 -150
  115. package/dist/bot/post-signup-recovery-state.d.ts.map +0 -1
  116. package/dist/bot/post-signup-recovery-state.js +0 -253
  117. package/dist/bot/post-signup-recovery-state.js.map +0 -1
  118. package/dist/bot/post-signup-synthetic-capture.d.ts +0 -43
  119. package/dist/bot/post-signup-synthetic-capture.d.ts.map +0 -1
  120. package/dist/bot/post-signup-synthetic-capture.js +0 -84
  121. package/dist/bot/post-signup-synthetic-capture.js.map +0 -1
  122. package/dist/bot/prewarm-cache.d.ts +0 -3
  123. package/dist/bot/prewarm-cache.d.ts.map +0 -1
  124. package/dist/bot/prewarm-cache.js +0 -91
  125. package/dist/bot/prewarm-cache.js.map +0 -1
  126. package/dist/bot/read-otp.d.ts +0 -21
  127. package/dist/bot/read-otp.d.ts.map +0 -1
  128. package/dist/bot/read-otp.js +0 -170
  129. package/dist/bot/read-otp.js.map +0 -1
  130. package/dist/bot/redact.d.ts +0 -3
  131. package/dist/bot/redact.d.ts.map +0 -1
  132. package/dist/bot/redact.js +0 -132
  133. package/dist/bot/redact.js.map +0 -1
  134. package/dist/bot/rejection-record.d.ts +0 -70
  135. package/dist/bot/rejection-record.d.ts.map +0 -1
  136. package/dist/bot/rejection-record.js +0 -76
  137. package/dist/bot/rejection-record.js.map +0 -1
  138. package/dist/bot/replay-skill.d.ts +0 -180
  139. package/dist/bot/replay-skill.d.ts.map +0 -1
  140. package/dist/bot/replay-skill.js +0 -4361
  141. package/dist/bot/replay-skill.js.map +0 -1
  142. package/dist/bot/signup-lock.d.ts +0 -17
  143. package/dist/bot/signup-lock.d.ts.map +0 -1
  144. package/dist/bot/signup-lock.js +0 -174
  145. package/dist/bot/signup-lock.js.map +0 -1
  146. package/dist/bot/signup-oauth-flow.d.ts +0 -16
  147. package/dist/bot/signup-oauth-flow.d.ts.map +0 -1
  148. package/dist/bot/signup-oauth-flow.js +0 -31
  149. package/dist/bot/signup-oauth-flow.js.map +0 -1
  150. package/dist/bot/state-classifier.d.ts +0 -18
  151. package/dist/bot/state-classifier.d.ts.map +0 -1
  152. package/dist/bot/state-classifier.js +0 -127
  153. package/dist/bot/state-classifier.js.map +0 -1
  154. package/dist/bot/terminal-gate.d.ts +0 -22
  155. package/dist/bot/terminal-gate.d.ts.map +0 -1
  156. package/dist/bot/terminal-gate.js +0 -184
  157. package/dist/bot/terminal-gate.js.map +0 -1
  158. package/dist/bot/unwinnable-services.d.ts +0 -7
  159. package/dist/bot/unwinnable-services.d.ts.map +0 -1
  160. package/dist/bot/unwinnable-services.js +0 -69
  161. package/dist/bot/unwinnable-services.js.map +0 -1
  162. package/dist/data/service-categories.d.ts +0 -11
  163. package/dist/data/service-categories.d.ts.map +0 -1
  164. package/dist/data/service-categories.js +0 -149
  165. package/dist/data/service-categories.js.map +0 -1
  166. package/dist/provision-run.d.ts +0 -45
  167. package/dist/provision-run.d.ts.map +0 -1
  168. package/dist/provision-run.js +0 -99
  169. package/dist/provision-run.js.map +0 -1
  170. package/dist/tools/provision-any.d.ts +0 -207
  171. package/dist/tools/provision-any.d.ts.map +0 -1
  172. package/dist/tools/provision-any.js +0 -1519
  173. package/dist/tools/provision-any.js.map +0 -1
  174. package/dist/tools/signup-telemetry.d.ts +0 -38
  175. package/dist/tools/signup-telemetry.d.ts.map +0 -1
  176. package/dist/tools/signup-telemetry.js +0 -103
  177. package/dist/tools/signup-telemetry.js.map +0 -1
@@ -1,220 +0,0 @@
1
- // HTTP client for the API's /v1/inbox/* endpoints.
2
- //
3
- // Implements the subset of InboxService the SignupAgent uses so the bot can
4
- // be wired against a real inbox (SES → API) instead of in-memory stores.
5
- // We deliberately don't import the full InboxService class — keeps the
6
- // universal-bot package's deps light and avoids importing Prisma/etc.
7
- // Workspace-domain detection. We treat any host ending in
8
- // `trustysquire.ai` as Workspace by default — the operator's catch-
9
- // all sits there. An explicit `workspaceDomain` option overrides.
10
- function pickWorkspaceDomain(explicit) {
11
- if (explicit !== undefined && explicit.length > 0)
12
- return explicit;
13
- const env = process.env.BOT_INBOX_DOMAIN;
14
- if (env !== undefined && env.length > 0)
15
- return env;
16
- return null;
17
- }
18
- function randomBytesArray(n) {
19
- const bytes = new Uint8Array(n);
20
- if (typeof globalThis.crypto !== "undefined" && globalThis.crypto.getRandomValues !== undefined) {
21
- globalThis.crypto.getRandomValues(bytes);
22
- }
23
- else {
24
- for (let i = 0; i < bytes.length; i++)
25
- bytes[i] = Math.floor(Math.random() * 256);
26
- }
27
- return bytes;
28
- }
29
- // Common given/family names. Kept short and ordinary on purpose — the
30
- // local part must read like a real person's personal address, not a
31
- // generated handle.
32
- const FIRST_NAMES = [
33
- "james", "mary", "john", "patricia", "robert", "jennifer", "michael",
34
- "linda", "david", "elizabeth", "william", "susan", "richard", "jessica",
35
- "joseph", "sarah", "thomas", "karen", "daniel", "nancy", "matthew", "lisa",
36
- "mark", "sandra", "paul", "ashley", "steven", "emily", "andrew", "laura",
37
- "kenneth", "anna", "kevin", "olivia", "brian", "grace", "george", "julia",
38
- "ryan", "chloe", "jason", "hannah", "eric", "rachel", "adam", "natalie",
39
- ];
40
- const LAST_NAMES = [
41
- "smith", "johnson", "williams", "brown", "jones", "garcia", "miller",
42
- "davis", "rodriguez", "martinez", "lopez", "wilson", "anderson", "taylor",
43
- "moore", "jackson", "martin", "lee", "clark", "lewis", "walker", "hall",
44
- "allen", "young", "king", "wright", "scott", "green", "baker", "adams",
45
- "nelson", "carter", "mitchell", "roberts", "turner", "phillips", "campbell",
46
- "parker", "evans", "edwards", "collins", "stewart", "morris", "murphy",
47
- ];
48
- // A realistic personal email local part: `first.last4821`, `mlee93`, etc.
49
- // Replaces the prior `${service}-${hex}` shape, which leaked the target
50
- // service's own name into the signup address (e.g. `deepseek-852847…`) —
51
- // an obvious bot tell no real signup would carry. Random name + a short
52
- // numeric suffix (the "my handle was taken" digits real people append)
53
- // keeps catch-all collisions negligible while reading as human.
54
- export function humanLocalPart() {
55
- const r = randomBytesArray(5);
56
- const first = FIRST_NAMES[r[0] % FIRST_NAMES.length];
57
- const last = LAST_NAMES[r[1] % LAST_NAMES.length];
58
- // A 2–3 digit suffix only. DELIBERATELY capped below OTP length (codes
59
- // are 4–8 digits): a longer run in the recipient address gets mistaken
60
- // for the emailed code by the OTP scanners (parsed_codes / body regex /
61
- // IMAP poller), which made a `…13526@` alias fill 13526 as the code.
62
- // Name variety (≈1900) × 900 keeps catch-all collisions negligible.
63
- const num = (((r[2] << 8) | r[3]) % 900) + 100; // 100–999
64
- // Vary the shape so the addresses aren't all `first.last`.
65
- const shape = r[4] % 4;
66
- if (shape === 0)
67
- return `${first}.${last}${num}`;
68
- if (shape === 1)
69
- return `${first}${last}${num}`;
70
- if (shape === 2)
71
- return `${first[0]}${last}${num}`;
72
- return `${first}.${last}.${num}`;
73
- }
74
- export class InboxClient {
75
- baseUrl;
76
- apiKey;
77
- fetchImpl;
78
- workspaceDomain;
79
- constructor(opts) {
80
- this.baseUrl = opts.baseUrl.replace(/\/+$/, "");
81
- this.apiKey = opts.apiKey;
82
- this.fetchImpl = opts.fetch ?? fetch;
83
- this.workspaceDomain = pickWorkspaceDomain(opts.workspaceDomain);
84
- }
85
- async createAlias(input) {
86
- // Workspace path: no DB registration, no quota check. The
87
- // operator's catch-all delivers any `<random>@<domain>` to one
88
- // mailbox; the API's poll-workspace-mail endpoint finds the
89
- // message by its TO header.
90
- if (this.workspaceDomain !== null) {
91
- // A human-looking personal address. We deliberately DON'T embed the
92
- // service slug here — `deepseek-…@` style locals are an obvious bot
93
- // tell that some signup forms score against. Delivery is by exact
94
- // TO-header match on the catch-all, so the local part only needs to
95
- // be unique, not descriptive; the service is logged separately for
96
- // operator debugging.
97
- return `${humanLocalPart()}@${this.workspaceDomain}`;
98
- }
99
- const resp = await this.fetchImpl(`${this.baseUrl}/v1/inbox/aliases`, {
100
- method: "POST",
101
- headers: {
102
- "content-type": "application/json",
103
- authorization: `Bearer ${this.apiKey}`,
104
- },
105
- body: JSON.stringify(input),
106
- });
107
- if (!resp.ok) {
108
- throw new Error(`createAlias failed (${resp.status}): ${await resp.text()}`);
109
- }
110
- const body = (await resp.json());
111
- return body.alias;
112
- }
113
- // Single-shot wait. Server long-polls up to timeout_seconds (max 120).
114
- // For longer waits the agent should loop.
115
- async waitForEmail(input) {
116
- // Workspace path: poll the IMAP-backed endpoint until either an
117
- // email arrives or our local deadline elapses. Each poll covers
118
- // up to ~90s of inbox; we loop with a small delay between polls.
119
- if (this.workspaceDomain !== null && input.alias.endsWith(`@${this.workspaceDomain}`)) {
120
- return await this.waitForWorkspaceEmail(input);
121
- }
122
- const params = new URLSearchParams();
123
- params.set("timeout_seconds", String(Math.min(input.timeout_seconds, 120)));
124
- if (input.matcher.subject !== undefined) {
125
- params.set("subject_pattern", input.matcher.subject.source);
126
- }
127
- if (input.matcher.from !== undefined) {
128
- params.set("from_pattern", input.matcher.from.source);
129
- }
130
- if (input.matcher.body_contains !== undefined) {
131
- params.set("body_contains", input.matcher.body_contains);
132
- }
133
- const url = `${this.baseUrl}/v1/inbox/aliases/${encodeURIComponent(input.alias)}/wait?${params.toString()}`;
134
- const resp = await this.fetchImpl(url, {
135
- method: "GET",
136
- headers: { authorization: `Bearer ${this.apiKey}` },
137
- });
138
- if (resp.status === 408)
139
- throw new Error(`Email wait timed out for alias ${input.alias}`);
140
- if (resp.status === 410)
141
- throw new Error(`Alias ${input.alias} is inactive`);
142
- if (!resp.ok)
143
- throw new Error(`waitForEmail failed (${resp.status}): ${await resp.text()}`);
144
- return (await resp.json());
145
- }
146
- // Workspace-IMAP-backed long-poll. Calls /v1/inbox/poll-workspace-
147
- // mail in a loop; the endpoint scans for messages whose TO header
148
- // matches the alias in the last 90s of the operator's mailbox.
149
- async waitForWorkspaceEmail(input) {
150
- const deadline = Date.now() + Math.max(5, input.timeout_seconds) * 1000;
151
- const subjectRe = input.matcher.subject;
152
- const fromRe = input.matcher.from;
153
- const bodyContains = input.matcher.body_contains;
154
- while (Date.now() < deadline) {
155
- const resp = await this.fetchImpl(`${this.baseUrl}/v1/inbox/poll-workspace-mail`, {
156
- method: "POST",
157
- headers: {
158
- "content-type": "application/json",
159
- authorization: `Bearer ${this.apiKey}`,
160
- },
161
- body: JSON.stringify({
162
- to_address: input.alias,
163
- since_seconds: 300,
164
- }),
165
- });
166
- if (resp.status === 503) {
167
- throw new Error("Workspace IMAP not configured on the API");
168
- }
169
- if (!resp.ok) {
170
- throw new Error(`poll-workspace-mail failed (${resp.status}): ${await resp.text()}`);
171
- }
172
- const data = (await resp.json());
173
- if (data.email !== null) {
174
- const e = data.email;
175
- const matchesSubject = subjectRe === undefined || subjectRe.test(e.subject);
176
- const matchesFrom = fromRe === undefined || fromRe.test(e.from_address);
177
- const matchesBody = bodyContains === undefined ||
178
- e.body_text.includes(bodyContains) ||
179
- e.body_html.includes(bodyContains);
180
- if (matchesSubject && matchesFrom && matchesBody) {
181
- return {
182
- id: `workspace:${e.received_at}`,
183
- alias: input.alias,
184
- from_address: e.from_address,
185
- subject: e.subject,
186
- body_text: e.body_text,
187
- body_html: e.body_html,
188
- parsed_links: e.parsed_links,
189
- parsed_codes: e.parsed_codes,
190
- received_at: e.received_at,
191
- };
192
- }
193
- }
194
- // Poll again after a short delay. 5s is short enough that the
195
- // operator gets a fast reaction once mail lands; long enough
196
- // not to hammer IMAP.
197
- const remaining = deadline - Date.now();
198
- if (remaining <= 0)
199
- break;
200
- await new Promise((r) => setTimeout(r, Math.min(5000, remaining)));
201
- }
202
- throw new Error(`Email wait timed out for alias ${input.alias}`);
203
- }
204
- async revokeAlias(alias) {
205
- // Workspace aliases aren't registered server-side, so revoke is
206
- // a no-op. The catch-all is what handles delivery; there's no
207
- // alias-state to invalidate.
208
- if (this.workspaceDomain !== null && alias.endsWith(`@${this.workspaceDomain}`)) {
209
- return;
210
- }
211
- const resp = await this.fetchImpl(`${this.baseUrl}/v1/inbox/aliases/${encodeURIComponent(alias)}`, {
212
- method: "DELETE",
213
- headers: { authorization: `Bearer ${this.apiKey}` },
214
- });
215
- if (!resp.ok && resp.status !== 204) {
216
- throw new Error(`revokeAlias failed (${resp.status}): ${await resp.text()}`);
217
- }
218
- }
219
- }
220
- //# sourceMappingURL=inbox-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inbox-client.js","sourceRoot":"","sources":["../../src/bot/inbox-client.ts"],"names":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- export interface LLMVisionBlock {
2
- kind: "image";
3
- media_type: "image/png" | "image/jpeg";
4
- data_base64: string;
5
- }
6
- export interface LLMTextBlock {
7
- kind: "text";
8
- text: string;
9
- }
10
- export type LLMBlock = LLMVisionBlock | LLMTextBlock;
11
- export interface LLMRequest {
12
- system: string;
13
- user: LLMBlock[];
14
- max_tokens: number;
15
- temperature?: number;
16
- deterministic?: boolean;
17
- seed?: number;
18
- }
19
- export interface LLMResponse {
20
- text: string;
21
- input_tokens?: number;
22
- output_tokens?: number;
23
- backend: string;
24
- resolved_model?: string;
25
- resolved_provider?: string;
26
- }
27
- export interface LLMClient {
28
- readonly name: string;
29
- createMessage(req: LLMRequest): Promise<LLMResponse>;
30
- }
31
- export declare class AnthropicDirectClient implements LLMClient {
32
- readonly name: string;
33
- private readonly client;
34
- private readonly model;
35
- constructor(opts: {
36
- apiKey: string;
37
- model?: string;
38
- });
39
- createMessage(req: LLMRequest): Promise<LLMResponse>;
40
- }
41
- export declare class ClaudeCliClient implements LLMClient {
42
- readonly name: string;
43
- private readonly model;
44
- constructor(opts?: {
45
- model?: string;
46
- });
47
- createMessage(req: LLMRequest): Promise<LLMResponse>;
48
- }
49
- export interface OpenRouterClientOpts {
50
- apiKey: string;
51
- model?: string;
52
- fallbackModels?: string[];
53
- appName?: string;
54
- appUrl?: string;
55
- }
56
- export declare class OpenRouterClient implements LLMClient {
57
- readonly name: string;
58
- private readonly apiKey;
59
- private readonly model;
60
- private readonly fallbackModels;
61
- private readonly appName;
62
- private readonly appUrl;
63
- constructor(opts: OpenRouterClientOpts);
64
- createMessage(req: LLMRequest): Promise<LLMResponse>;
65
- }
66
- export interface ProxyLLMClientOpts {
67
- apiBaseUrl: string;
68
- machineToken: string;
69
- tier: "cheap" | "premium" | "free";
70
- }
71
- export declare class ProxyLLMClient implements LLMClient {
72
- readonly name: string;
73
- private readonly apiBaseUrl;
74
- private readonly machineToken;
75
- private readonly tier;
76
- constructor(opts: ProxyLLMClientOpts);
77
- createMessage(req: LLMRequest): Promise<LLMResponse>;
78
- }
79
- export interface PickLLMClientOpts {
80
- preferCheap?: boolean;
81
- tier?: "cheap" | "premium" | "free";
82
- }
83
- export interface LLMPair {
84
- primary: LLMClient;
85
- premium: LLMClient | null;
86
- }
87
- export declare function pickLLMClient(opts?: PickLLMClientOpts): LLMClient;
88
- export declare function pickLLMPair(opts?: PickLLMClientOpts): LLMPair;
89
- //# sourceMappingURL=llm-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/bot/llm-client.ts"],"names":[],"mappings":"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"}