@agentuity/cli 2.0.14 → 2.0.15

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 (85) hide show
  1. package/dist/agent-detection.d.ts.map +1 -1
  2. package/dist/agent-detection.js +3 -6
  3. package/dist/agent-detection.js.map +1 -1
  4. package/dist/ai-help.js +10 -10
  5. package/dist/ai-help.js.map +1 -1
  6. package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
  7. package/dist/cmd/ai/capabilities/show.js +6 -0
  8. package/dist/cmd/ai/capabilities/show.js.map +1 -1
  9. package/dist/cmd/ai/intro.d.ts.map +1 -1
  10. package/dist/cmd/ai/intro.js +1 -0
  11. package/dist/cmd/ai/intro.js.map +1 -1
  12. package/dist/cmd/cloud/aigateway/complete.d.ts +7 -0
  13. package/dist/cmd/cloud/aigateway/complete.d.ts.map +1 -0
  14. package/dist/cmd/cloud/aigateway/complete.js +386 -0
  15. package/dist/cmd/cloud/aigateway/complete.js.map +1 -0
  16. package/dist/cmd/cloud/aigateway/index.d.ts +3 -0
  17. package/dist/cmd/cloud/aigateway/index.d.ts.map +1 -0
  18. package/dist/cmd/cloud/aigateway/index.js +20 -0
  19. package/dist/cmd/cloud/aigateway/index.js.map +1 -0
  20. package/dist/cmd/cloud/aigateway/model-cache.d.ts +4 -0
  21. package/dist/cmd/cloud/aigateway/model-cache.d.ts.map +1 -0
  22. package/dist/cmd/cloud/aigateway/model-cache.js +72 -0
  23. package/dist/cmd/cloud/aigateway/model-cache.js.map +1 -0
  24. package/dist/cmd/cloud/aigateway/models.d.ts +2 -0
  25. package/dist/cmd/cloud/aigateway/models.d.ts.map +1 -0
  26. package/dist/cmd/cloud/aigateway/models.js +193 -0
  27. package/dist/cmd/cloud/aigateway/models.js.map +1 -0
  28. package/dist/cmd/cloud/aigateway/util.d.ts +20 -0
  29. package/dist/cmd/cloud/aigateway/util.d.ts.map +1 -0
  30. package/dist/cmd/cloud/aigateway/util.js +58 -0
  31. package/dist/cmd/cloud/aigateway/util.js.map +1 -0
  32. package/dist/cmd/cloud/index.d.ts.map +1 -1
  33. package/dist/cmd/cloud/index.js +2 -0
  34. package/dist/cmd/cloud/index.js.map +1 -1
  35. package/dist/cmd/coder/skill/create.d.ts +2 -0
  36. package/dist/cmd/coder/skill/create.d.ts.map +1 -0
  37. package/dist/cmd/coder/skill/create.js +104 -0
  38. package/dist/cmd/coder/skill/create.js.map +1 -0
  39. package/dist/cmd/coder/skill/index.d.ts.map +1 -1
  40. package/dist/cmd/coder/skill/index.js +12 -1
  41. package/dist/cmd/coder/skill/index.js.map +1 -1
  42. package/dist/cmd/coder/workspace/common.d.ts +22 -2
  43. package/dist/cmd/coder/workspace/common.d.ts.map +1 -1
  44. package/dist/cmd/coder/workspace/common.js +38 -2
  45. package/dist/cmd/coder/workspace/common.js.map +1 -1
  46. package/dist/cmd/coder/workspace/create.d.ts.map +1 -1
  47. package/dist/cmd/coder/workspace/create.js +34 -2
  48. package/dist/cmd/coder/workspace/create.js.map +1 -1
  49. package/dist/cmd/coder/workspace/update.d.ts.map +1 -1
  50. package/dist/cmd/coder/workspace/update.js +33 -1
  51. package/dist/cmd/coder/workspace/update.js.map +1 -1
  52. package/dist/cmd/dev/download.d.ts +8 -0
  53. package/dist/cmd/dev/download.d.ts.map +1 -1
  54. package/dist/cmd/dev/download.js +27 -1
  55. package/dist/cmd/dev/download.js.map +1 -1
  56. package/dist/cmd/dev/index.d.ts.map +1 -1
  57. package/dist/cmd/dev/index.js +18 -7
  58. package/dist/cmd/dev/index.js.map +1 -1
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +3 -0
  61. package/dist/config.js.map +1 -1
  62. package/dist/types.d.ts +3 -2
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js +1 -0
  65. package/dist/types.js.map +1 -1
  66. package/package.json +7 -7
  67. package/src/agent-detection.ts +3 -6
  68. package/src/ai-help.ts +10 -10
  69. package/src/cmd/ai/capabilities/show.ts +6 -0
  70. package/src/cmd/ai/intro.ts +1 -0
  71. package/src/cmd/cloud/aigateway/complete.ts +461 -0
  72. package/src/cmd/cloud/aigateway/index.ts +21 -0
  73. package/src/cmd/cloud/aigateway/model-cache.ts +89 -0
  74. package/src/cmd/cloud/aigateway/models.ts +219 -0
  75. package/src/cmd/cloud/aigateway/util.ts +86 -0
  76. package/src/cmd/cloud/index.ts +2 -0
  77. package/src/cmd/coder/skill/create.ts +122 -0
  78. package/src/cmd/coder/skill/index.ts +14 -1
  79. package/src/cmd/coder/workspace/common.ts +46 -2
  80. package/src/cmd/coder/workspace/create.ts +34 -1
  81. package/src/cmd/coder/workspace/update.ts +33 -0
  82. package/src/cmd/dev/download.ts +32 -1
  83. package/src/cmd/dev/index.ts +24 -8
  84. package/src/config.ts +3 -0
  85. package/src/types.ts +1 -0
@@ -0,0 +1,386 @@
1
+ import { z } from 'zod';
2
+ import { StructuredError } from '@agentuity/core';
3
+ import { createCommand } from '../../../types';
4
+ import { getCommand } from '../../../command-prefix';
5
+ import { getExecutingAgent } from '../../../agent-detection';
6
+ import { createAIGatewayService, getAIGatewayUrl, getCompletionText } from './util';
7
+ import { getCachedAIGatewayModels, setCachedAIGatewayModels } from './model-cache';
8
+ const CompletionResponseSchema = z.object({
9
+ text: z.string(),
10
+ response: z.unknown(),
11
+ cost: z.unknown().optional(),
12
+ });
13
+ const defaultModel = 'openai/gpt-4o-mini';
14
+ const PromptRequiredError = StructuredError('AIGatewayPromptRequired', 'Prompt is required. Pass it as an argument, use --prompt, use --file, or pipe it through stdin.');
15
+ const PromptFileNotFoundError = StructuredError('AIGatewayPromptFileNotFound')();
16
+ function isAgentOutputMode() {
17
+ return Boolean(getExecutingAgent()) && process.env.AGENTUITY_AIGATEWAY_AGENT_OUTPUT !== 'false';
18
+ }
19
+ async function readPromptFromStdin() {
20
+ if (process.stdin.isTTY) {
21
+ return undefined;
22
+ }
23
+ const text = await Bun.stdin.text();
24
+ const trimmed = text.trim();
25
+ return trimmed.length > 0 ? trimmed : undefined;
26
+ }
27
+ async function readPromptFromFile(filename) {
28
+ if (!filename) {
29
+ return undefined;
30
+ }
31
+ const file = Bun.file(filename);
32
+ if (!(await file.exists())) {
33
+ throw new PromptFileNotFoundError({
34
+ message: `Prompt file not found: ${filename}`,
35
+ filename,
36
+ });
37
+ }
38
+ const text = await file.text();
39
+ const trimmed = text.trim();
40
+ return trimmed.length > 0 ? trimmed : undefined;
41
+ }
42
+ export function combinePromptInput(opts) {
43
+ if (!opts.stdinPrompt) {
44
+ return opts.explicitPrompt;
45
+ }
46
+ if (!opts.explicitPrompt || opts.stdinMode === 'replace') {
47
+ return opts.stdinPrompt;
48
+ }
49
+ if (!opts.stdinMode || opts.stdinMode === 'append') {
50
+ return `${opts.explicitPrompt}\n\n${opts.stdinPrompt}`;
51
+ }
52
+ return opts.explicitPrompt;
53
+ }
54
+ function getUsageText(response) {
55
+ if (!response || typeof response !== 'object') {
56
+ return undefined;
57
+ }
58
+ const usage = response.usage;
59
+ if (!usage || typeof usage !== 'object') {
60
+ return undefined;
61
+ }
62
+ const input = usage.prompt_tokens ??
63
+ usage.input_tokens;
64
+ const output = usage.completion_tokens ??
65
+ usage.output_tokens;
66
+ const total = usage.total_tokens;
67
+ const parts = [
68
+ typeof input === 'number' ? `input=${input}` : undefined,
69
+ typeof output === 'number' ? `output=${output}` : undefined,
70
+ typeof total === 'number' ? `total=${total}` : undefined,
71
+ ].filter(Boolean);
72
+ return parts.length > 0 ? `Usage: ${parts.join(' ')}` : undefined;
73
+ }
74
+ function getCostInfo(response) {
75
+ if (!response || typeof response !== 'object') {
76
+ return undefined;
77
+ }
78
+ const agentuity = response.agentuity;
79
+ if (!agentuity || typeof agentuity !== 'object') {
80
+ return undefined;
81
+ }
82
+ return agentuity.cost;
83
+ }
84
+ function getCostText(response) {
85
+ const cost = getCostInfo(response);
86
+ if (!cost || typeof cost !== 'object') {
87
+ return undefined;
88
+ }
89
+ const total = cost.total;
90
+ const promptTokens = cost.promptTokens;
91
+ const completionTokens = cost.completionTokens;
92
+ const parts = [
93
+ typeof total === 'number' ? `total=$${total.toFixed(6)}` : undefined,
94
+ typeof promptTokens === 'number' ? `prompt=${promptTokens}` : undefined,
95
+ typeof completionTokens === 'number' ? `completion=${completionTokens}` : undefined,
96
+ ].filter(Boolean);
97
+ return parts.length > 0 ? `Cost: ${parts.join(' ')}` : undefined;
98
+ }
99
+ function matchesModel(provider, candidateId, model) {
100
+ return candidateId === model || `${provider}/${candidateId}` === model;
101
+ }
102
+ async function getCompletionModelInfo(model, models) {
103
+ for (const [provider, providerModels] of Object.entries(models)) {
104
+ const match = providerModels.find((candidate) => matchesModel(provider, candidate.id, model));
105
+ if (match) {
106
+ return { id: match.id, api: match.api, provider };
107
+ }
108
+ }
109
+ return undefined;
110
+ }
111
+ async function loadModelsForCompletion(opts) {
112
+ if (!opts.refresh) {
113
+ const cached = await getCachedAIGatewayModels(opts.profile, opts.cacheKey);
114
+ if (cached) {
115
+ return cached;
116
+ }
117
+ }
118
+ const models = await opts.service.listModels();
119
+ await setCachedAIGatewayModels(opts.profile, opts.cacheKey, models);
120
+ return models;
121
+ }
122
+ function buildCompletionRequest(opts) {
123
+ const common = {
124
+ model: opts.model,
125
+ temperature: opts.temperature,
126
+ max_tokens: opts.maxTokens,
127
+ ...(opts.stream ? { stream: true } : {}),
128
+ };
129
+ return {
130
+ ...common,
131
+ messages: [
132
+ ...(opts.system ? [{ role: 'system', content: opts.system }] : []),
133
+ { role: 'user', content: opts.prompt },
134
+ ],
135
+ };
136
+ }
137
+ async function resolvePrompt(opts) {
138
+ const explicitPrompt = opts.optionPrompt ?? opts.argPrompt ?? (await readPromptFromFile(opts.file));
139
+ const stdinPrompt = await readPromptFromStdin();
140
+ return combinePromptInput({ explicitPrompt, stdinPrompt, stdinMode: opts.stdinMode });
141
+ }
142
+ function getStreamDeltaText(payload) {
143
+ if (!payload || typeof payload !== 'object') {
144
+ return '';
145
+ }
146
+ const choices = payload.choices;
147
+ if (!Array.isArray(choices)) {
148
+ return '';
149
+ }
150
+ return choices
151
+ .map((choice) => {
152
+ if (!choice || typeof choice !== 'object') {
153
+ return '';
154
+ }
155
+ const delta = choice.delta;
156
+ if (typeof delta?.content === 'string') {
157
+ return delta.content;
158
+ }
159
+ const text = choice.text;
160
+ return typeof text === 'string' ? text : '';
161
+ })
162
+ .join('');
163
+ }
164
+ async function consumeCompletionStream(stream, options) {
165
+ const reader = stream.getReader();
166
+ const decoder = new TextDecoder();
167
+ let buffer = '';
168
+ let text = '';
169
+ const consumeFrame = (frame) => {
170
+ const dataLines = frame
171
+ .split(/\r?\n/)
172
+ .filter((line) => line.startsWith('data:'))
173
+ .map((line) => line.slice(5).trimStart());
174
+ for (const data of dataLines) {
175
+ if (!data || data === '[DONE]') {
176
+ continue;
177
+ }
178
+ try {
179
+ const delta = getStreamDeltaText(JSON.parse(data));
180
+ if (delta) {
181
+ text += delta;
182
+ }
183
+ }
184
+ catch {
185
+ // Ignore malformed stream frames and continue consuming the stream.
186
+ }
187
+ if (options.raw) {
188
+ if (!options.json) {
189
+ console.log(data);
190
+ }
191
+ continue;
192
+ }
193
+ try {
194
+ const delta = getStreamDeltaText(JSON.parse(data));
195
+ if (delta) {
196
+ if (!options.json) {
197
+ process.stdout.write(delta);
198
+ }
199
+ }
200
+ }
201
+ catch {
202
+ // Ignore malformed stream frames and continue consuming the stream.
203
+ }
204
+ }
205
+ };
206
+ try {
207
+ while (true) {
208
+ const { done, value } = await reader.read();
209
+ if (done) {
210
+ break;
211
+ }
212
+ buffer += decoder.decode(value, { stream: true });
213
+ const frames = buffer.split(/\r?\n\r?\n/);
214
+ buffer = frames.pop() ?? '';
215
+ for (const frame of frames) {
216
+ consumeFrame(frame);
217
+ }
218
+ }
219
+ buffer += decoder.decode();
220
+ if (buffer.trim()) {
221
+ consumeFrame(buffer);
222
+ }
223
+ }
224
+ finally {
225
+ reader.releaseLock();
226
+ }
227
+ if (!options.json && !options.raw && text) {
228
+ process.stdout.write('\n');
229
+ }
230
+ return text;
231
+ }
232
+ export const completeSubcommand = createCommand({
233
+ name: 'complete',
234
+ aliases: ['completion', 'chat'],
235
+ description: 'Run an AI Gateway completion',
236
+ tags: ['write', 'slow', 'requires-auth', 'uses-stdin'],
237
+ requires: { auth: true },
238
+ optional: { project: true, region: true },
239
+ examples: [
240
+ {
241
+ command: getCommand('cloud aigateway complete --model openai/gpt-4.1-mini "Hello"'),
242
+ description: 'Run a completion',
243
+ },
244
+ {
245
+ command: `echo "Hello" | ${getCommand('cloud aigateway complete --model openai/gpt-4.1-mini')}`,
246
+ description: 'Read the prompt from stdin',
247
+ },
248
+ {
249
+ command: getCommand('cloud aigateway complete --model openai/gpt-4.1-mini --file prompt.txt'),
250
+ description: 'Read the prompt from a file',
251
+ },
252
+ {
253
+ command: getCommand('cloud aigateway complete --model openai/gpt-4.1-mini --stream "Hello"'),
254
+ description: 'Stream token output as it arrives',
255
+ },
256
+ ],
257
+ schema: {
258
+ args: z.object({
259
+ prompt: z.string().optional().describe('prompt text'),
260
+ }),
261
+ options: z.object({
262
+ model: z.string().min(1).optional().describe('model id'),
263
+ prompt: z.string().optional().describe('prompt text'),
264
+ file: z.string().optional().describe('read prompt text from a file'),
265
+ system: z.string().optional().describe('optional system message'),
266
+ systemFile: z.string().optional().describe('read the system message from a file'),
267
+ refreshModels: z
268
+ .boolean()
269
+ .optional()
270
+ .describe('refresh the cached AI Gateway model catalog before choosing request format'),
271
+ temperature: z.number().optional().describe('sampling temperature'),
272
+ maxTokens: z.number().optional().describe('maximum output tokens'),
273
+ stream: z.boolean().optional().describe('stream token output as it arrives'),
274
+ save: z.string().optional().describe('write assistant text to a file'),
275
+ format: z
276
+ .enum(['text', 'json', 'raw'])
277
+ .optional()
278
+ .describe('output format for non-json mode'),
279
+ stdinMode: z
280
+ .enum(['append', 'replace'])
281
+ .optional()
282
+ .describe('how to combine stdin with prompt text'),
283
+ usage: z.boolean().optional().describe('print usage details when available'),
284
+ cost: z.boolean().optional().describe('print AI Gateway cost details when available'),
285
+ raw: z.boolean().optional().describe('print the raw completion response'),
286
+ }),
287
+ response: CompletionResponseSchema,
288
+ },
289
+ async handler(ctx) {
290
+ const prompt = await resolvePrompt({
291
+ optionPrompt: ctx.opts.prompt,
292
+ argPrompt: ctx.args.prompt,
293
+ file: ctx.opts.file,
294
+ stdinMode: ctx.opts.stdinMode,
295
+ });
296
+ if (!prompt) {
297
+ throw new PromptRequiredError();
298
+ }
299
+ const service = createAIGatewayService(ctx);
300
+ const model = ctx.opts.model ?? process.env.AGENTUITY_AIGATEWAY_MODEL ?? defaultModel;
301
+ const system = ctx.opts.system ?? (await readPromptFromFile(ctx.opts.systemFile));
302
+ const profile = ctx.config?.name ?? 'default';
303
+ const cacheKey = getAIGatewayUrl(ctx.region, ctx.config?.overrides);
304
+ let models = await loadModelsForCompletion({
305
+ service,
306
+ profile,
307
+ cacheKey,
308
+ refresh: ctx.opts.refreshModels,
309
+ });
310
+ let modelInfo = await getCompletionModelInfo(model, models);
311
+ if (!modelInfo && !ctx.opts.refreshModels) {
312
+ models = await loadModelsForCompletion({ service, profile, cacheKey, refresh: true });
313
+ modelInfo = await getCompletionModelInfo(model, models);
314
+ }
315
+ const requestModel = modelInfo?.id ?? model;
316
+ const request = buildCompletionRequest({
317
+ model: requestModel,
318
+ prompt,
319
+ system,
320
+ temperature: ctx.opts.temperature,
321
+ maxTokens: ctx.opts.maxTokens,
322
+ });
323
+ const format = ctx.opts.raw
324
+ ? 'raw'
325
+ : (ctx.opts.format ?? (isAgentOutputMode() ? 'json' : 'text'));
326
+ if (ctx.opts.stream) {
327
+ const streamed = await service.streamCompleteWithMetadata({ ...request, stream: true });
328
+ const text = await consumeCompletionStream(streamed.stream, {
329
+ json: ctx.options.json || format === 'json',
330
+ raw: format === 'raw',
331
+ });
332
+ const metadata = await streamed.metadata;
333
+ const cost = metadata.cost;
334
+ if (ctx.opts.save) {
335
+ await Bun.write(ctx.opts.save, text);
336
+ }
337
+ if (!ctx.options.json && format === 'json') {
338
+ console.log(JSON.stringify({ text, cost, response: { stream: true, model: requestModel } }, null, 2));
339
+ }
340
+ if (!ctx.options.json && ctx.opts.cost) {
341
+ const costText = getCostText({ agentuity: metadata });
342
+ if (costText) {
343
+ console.error(costText);
344
+ }
345
+ }
346
+ return { text, response: { stream: true, model: requestModel }, cost };
347
+ }
348
+ const response = await service.complete(request);
349
+ const text = getCompletionText(response);
350
+ const cost = getCostInfo(response);
351
+ if (ctx.opts.save) {
352
+ await Bun.write(ctx.opts.save, text);
353
+ }
354
+ if (!ctx.options.json) {
355
+ if (format === 'raw') {
356
+ console.log(JSON.stringify(response, null, 2));
357
+ }
358
+ else if (format === 'json') {
359
+ console.log(JSON.stringify({
360
+ text,
361
+ model: requestModel,
362
+ usage: response.usage,
363
+ cost,
364
+ response,
365
+ }, null, 2));
366
+ }
367
+ else {
368
+ console.log(text);
369
+ }
370
+ if (ctx.opts.usage) {
371
+ const usage = getUsageText(response);
372
+ if (usage) {
373
+ console.error(usage);
374
+ }
375
+ }
376
+ if (ctx.opts.cost) {
377
+ const costText = getCostText(response);
378
+ if (costText) {
379
+ console.error(costText);
380
+ }
381
+ }
382
+ }
383
+ return { text, response, cost };
384
+ },
385
+ });
386
+ //# sourceMappingURL=complete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/complete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const aigatewayCommand: import("../../..").CommandDefinition;
2
+ export default aigatewayCommand;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,sCAa3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { createCommand } from '../../../types';
2
+ import { getCommand } from '../../../command-prefix';
3
+ import { completeSubcommand } from './complete';
4
+ import { modelsSubcommand } from './models';
5
+ export const aigatewayCommand = createCommand({
6
+ name: 'aigateway',
7
+ aliases: ['ai-gateway', 'ai'],
8
+ description: 'Use the Agentuity AI Gateway',
9
+ tags: ['slow'],
10
+ examples: [
11
+ { command: getCommand('cloud aigateway models'), description: 'List supported models' },
12
+ {
13
+ command: getCommand('cloud aigateway complete --model openai/gpt-4.1-mini "Hello"'),
14
+ description: 'Run a completion',
15
+ },
16
+ ],
17
+ subcommands: [modelsSubcommand, completeSubcommand],
18
+ });
19
+ export default aigatewayCommand;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC7C,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC;IAC7B,WAAW,EAAE,8BAA8B;IAC3C,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACvF;YACC,OAAO,EAAE,UAAU,CAAC,8DAA8D,CAAC;YACnF,WAAW,EAAE,kBAAkB;SAC/B;KACD;IACD,WAAW,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;CACnD,CAAC,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type AIGatewayModels } from '@agentuity/core';
2
+ export declare function getCachedAIGatewayModels(profile: string, cacheKey: string): Promise<AIGatewayModels | null>;
3
+ export declare function setCachedAIGatewayModels(profile: string, cacheKey: string, models: AIGatewayModels): Promise<void>;
4
+ //# sourceMappingURL=model-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/model-cache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAoC9E,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAwBjC;AAED,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,72 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { AIGatewayModelsSchema } from '@agentuity/core';
5
+ import { getDefaultConfigDir } from '../../../config';
6
+ const TTL_MS = 6 * 60 * 60 * 1000;
7
+ let db = null;
8
+ async function getDatabase() {
9
+ if (db) {
10
+ return db;
11
+ }
12
+ const configDir = getDefaultConfigDir();
13
+ await mkdir(configDir, { recursive: true });
14
+ db = new Database(join(configDir, 'resource.db'));
15
+ db.run('PRAGMA journal_mode = WAL');
16
+ db.run('PRAGMA busy_timeout = 5000');
17
+ db.run('PRAGMA synchronous = NORMAL');
18
+ db.run(`
19
+ CREATE TABLE IF NOT EXISTS aigateway_model_cache (
20
+ profile TEXT NOT NULL,
21
+ cache_key TEXT NOT NULL,
22
+ models_json TEXT NOT NULL,
23
+ cached_at INTEGER NOT NULL,
24
+ PRIMARY KEY (profile, cache_key)
25
+ )
26
+ `);
27
+ db.run(`
28
+ CREATE INDEX IF NOT EXISTS idx_aigateway_model_cache_cached_at
29
+ ON aigateway_model_cache(cached_at)
30
+ `);
31
+ return db;
32
+ }
33
+ export async function getCachedAIGatewayModels(profile, cacheKey) {
34
+ try {
35
+ const database = await getDatabase();
36
+ const cutoff = Date.now() - TTL_MS;
37
+ const row = database
38
+ .query('SELECT models_json, cached_at FROM aigateway_model_cache WHERE profile = ? AND cache_key = ?')
39
+ .get(profile, cacheKey);
40
+ if (!row) {
41
+ return null;
42
+ }
43
+ if (row.cached_at < cutoff) {
44
+ database.run('DELETE FROM aigateway_model_cache WHERE profile = ? AND cache_key = ?', [
45
+ profile,
46
+ cacheKey,
47
+ ]);
48
+ return null;
49
+ }
50
+ const parsed = AIGatewayModelsSchema.safeParse(JSON.parse(row.models_json));
51
+ return parsed.success ? parsed.data : null;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ export async function setCachedAIGatewayModels(profile, cacheKey, models) {
58
+ try {
59
+ const database = await getDatabase();
60
+ const cutoff = Date.now() - TTL_MS;
61
+ database.run('DELETE FROM aigateway_model_cache WHERE cached_at < ?', [cutoff]);
62
+ database.run(`INSERT INTO aigateway_model_cache (profile, cache_key, models_json, cached_at)
63
+ VALUES (?, ?, ?, ?)
64
+ ON CONFLICT(profile, cache_key) DO UPDATE SET
65
+ models_json = excluded.models_json,
66
+ cached_at = excluded.cached_at`, [profile, cacheKey, JSON.stringify(models), Date.now()]);
67
+ }
68
+ catch {
69
+ // Non-critical cache failure should never block the CLI.
70
+ }
71
+ }
72
+ //# sourceMappingURL=model-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/model-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElC,IAAI,EAAE,GAAoB,IAAI,CAAC;AAE/B,KAAK,UAAU,WAAW;IACzB,IAAI,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClD,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACpC,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACrC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACtC,EAAE,CAAC,GAAG,CAAC;;;;;;;;EAQN,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC;;;EAGN,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ;aAClB,KAAK,CACL,8FAA8F,CAC9F;aACA,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,uEAAuE,EAAE;gBACrF,OAAO;gBACP,QAAQ;aACR,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,OAAe,EACf,QAAgB,EAChB,MAAuB;IAEvB,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,uDAAuD,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAChF,QAAQ,CAAC,GAAG,CACX;;;;mCAIgC,EAChC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,yDAAyD;IAC1D,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const modelsSubcommand: import("../../..").CommandDefinition;
2
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/models.ts"],"names":[],"mappings":"AAiFA,eAAO,MAAM,gBAAgB,sCAyI3B,CAAC"}