specweave 0.30.10 → 0.30.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/specweave-ado/lib/ado-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-client-v2.js +46 -12
- package/dist/plugins/specweave-ado/lib/ado-client-v2.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +12 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +5 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.js +80 -28
- package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
- package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/repository-setup.js +64 -2
- package/dist/src/cli/helpers/init/repository-setup.js.map +1 -1
- package/dist/src/cli/helpers/project-count-fetcher.js +33 -2
- package/dist/src/cli/helpers/project-count-fetcher.js.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.d.ts +13 -0
- package/dist/src/cli/workers/brownfield-worker.d.ts.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.js +154 -0
- package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
- package/dist/src/cli/workers/living-docs-worker.js +272 -11
- package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
- package/dist/src/core/background/brownfield-launcher.d.ts +2 -1
- package/dist/src/core/background/brownfield-launcher.d.ts.map +1 -1
- package/dist/src/core/background/brownfield-launcher.js.map +1 -1
- package/dist/src/core/background/types.d.ts +10 -2
- package/dist/src/core/background/types.d.ts.map +1 -1
- package/dist/src/core/discrepancy/brownfield-types.d.ts +3 -1
- package/dist/src/core/discrepancy/brownfield-types.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.d.ts +39 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +197 -0
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/llm/availability-messages.d.ts +33 -0
- package/dist/src/core/llm/availability-messages.d.ts.map +1 -0
- package/dist/src/core/llm/availability-messages.js +170 -0
- package/dist/src/core/llm/availability-messages.js.map +1 -0
- package/dist/src/core/llm/index.d.ts +34 -0
- package/dist/src/core/llm/index.d.ts.map +1 -0
- package/dist/src/core/llm/index.js +35 -0
- package/dist/src/core/llm/index.js.map +1 -0
- package/dist/src/core/llm/provider-factory.d.ts +48 -0
- package/dist/src/core/llm/provider-factory.d.ts.map +1 -0
- package/dist/src/core/llm/provider-factory.js +274 -0
- package/dist/src/core/llm/provider-factory.js.map +1 -0
- package/dist/src/core/llm/providers/anthropic-provider.d.ts +66 -0
- package/dist/src/core/llm/providers/anthropic-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/anthropic-provider.js +195 -0
- package/dist/src/core/llm/providers/anthropic-provider.js.map +1 -0
- package/dist/src/core/llm/providers/azure-openai-provider.d.ts +47 -0
- package/dist/src/core/llm/providers/azure-openai-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/azure-openai-provider.js +116 -0
- package/dist/src/core/llm/providers/azure-openai-provider.js.map +1 -0
- package/dist/src/core/llm/providers/bedrock-provider.d.ts +44 -0
- package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/bedrock-provider.js +149 -0
- package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -0
- package/dist/src/core/llm/providers/claude-code-provider.d.ts +115 -0
- package/dist/src/core/llm/providers/claude-code-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/claude-code-provider.js +379 -0
- package/dist/src/core/llm/providers/claude-code-provider.js.map +1 -0
- package/dist/src/core/llm/providers/ollama-provider.d.ts +40 -0
- package/dist/src/core/llm/providers/ollama-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/ollama-provider.js +116 -0
- package/dist/src/core/llm/providers/ollama-provider.js.map +1 -0
- package/dist/src/core/llm/providers/openai-provider.d.ts +44 -0
- package/dist/src/core/llm/providers/openai-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/openai-provider.js +119 -0
- package/dist/src/core/llm/providers/openai-provider.js.map +1 -0
- package/dist/src/core/llm/providers/vertex-ai-provider.d.ts +46 -0
- package/dist/src/core/llm/providers/vertex-ai-provider.d.ts.map +1 -0
- package/dist/src/core/llm/providers/vertex-ai-provider.js +123 -0
- package/dist/src/core/llm/providers/vertex-ai-provider.js.map +1 -0
- package/dist/src/core/llm/types.d.ts +181 -0
- package/dist/src/core/llm/types.d.ts.map +1 -0
- package/dist/src/core/llm/types.js +56 -0
- package/dist/src/core/llm/types.js.map +1 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +69 -12
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/integrations/ado/ado-client.d.ts +22 -0
- package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-client.js +89 -37
- package/dist/src/integrations/ado/ado-client.js.map +1 -1
- package/dist/src/living-docs/enterprise-analyzer.d.ts +160 -0
- package/dist/src/living-docs/enterprise-analyzer.d.ts.map +1 -0
- package/dist/src/living-docs/enterprise-analyzer.js +836 -0
- package/dist/src/living-docs/enterprise-analyzer.js.map +1 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts +5 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +12 -5
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-archive.md +69 -2
- package/plugins/specweave-ado/lib/ado-client-v2.js +43 -8
- package/plugins/specweave-ado/lib/ado-client-v2.ts +52 -12
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements LLMProvider interface for OpenAI's GPT models.
|
|
5
|
+
* Uses openai SDK for API calls.
|
|
6
|
+
*
|
|
7
|
+
* TODO: Implement following the same pattern as anthropic-provider.ts
|
|
8
|
+
*/
|
|
9
|
+
import { MODEL_PRICING } from '../types.js';
|
|
10
|
+
import { consoleLogger } from '../../../utils/logger.js';
|
|
11
|
+
export class OpenAIProvider {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.name = 'openai';
|
|
14
|
+
this.apiKey = config.apiKey;
|
|
15
|
+
this.defaultModel = config.model || 'gpt-4o';
|
|
16
|
+
this.maxTokens = config.maxTokens || 4096;
|
|
17
|
+
this.temperature = config.temperature ?? 0.3;
|
|
18
|
+
this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';
|
|
19
|
+
this.logger = config.logger || consoleLogger;
|
|
20
|
+
}
|
|
21
|
+
async getClient() {
|
|
22
|
+
if (!this.client) {
|
|
23
|
+
const OpenAI = (await import('openai')).default;
|
|
24
|
+
this.client = new OpenAI({
|
|
25
|
+
apiKey: this.apiKey,
|
|
26
|
+
baseURL: this.baseUrl,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return this.client;
|
|
30
|
+
}
|
|
31
|
+
async analyze(prompt, options = {}) {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
const model = options.model || this.defaultModel;
|
|
34
|
+
const client = await this.getClient();
|
|
35
|
+
const messages = [];
|
|
36
|
+
if (options.systemPrompt) {
|
|
37
|
+
messages.push({ role: 'system', content: options.systemPrompt });
|
|
38
|
+
}
|
|
39
|
+
messages.push({ role: 'user', content: prompt });
|
|
40
|
+
const response = await client.chat.completions.create({
|
|
41
|
+
model,
|
|
42
|
+
max_tokens: options.maxTokens || this.maxTokens,
|
|
43
|
+
temperature: options.temperature ?? this.temperature,
|
|
44
|
+
messages,
|
|
45
|
+
});
|
|
46
|
+
const content = response.choices[0]?.message?.content || '';
|
|
47
|
+
const usage = {
|
|
48
|
+
inputTokens: response.usage?.prompt_tokens || 0,
|
|
49
|
+
outputTokens: response.usage?.completion_tokens || 0,
|
|
50
|
+
totalTokens: response.usage?.total_tokens || 0,
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
content,
|
|
54
|
+
usage,
|
|
55
|
+
estimatedCost: this.estimateCost(usage.inputTokens, usage.outputTokens, model),
|
|
56
|
+
model,
|
|
57
|
+
durationMs: Date.now() - startTime,
|
|
58
|
+
wasRetry: false,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async analyzeStructured(prompt, options) {
|
|
62
|
+
// OpenAI supports native JSON mode
|
|
63
|
+
const client = await this.getClient();
|
|
64
|
+
const model = options.model || this.defaultModel;
|
|
65
|
+
const messages = [
|
|
66
|
+
{
|
|
67
|
+
role: 'system',
|
|
68
|
+
content: `You are a helpful assistant that responds in JSON format matching this schema: ${JSON.stringify(options.schema)}`,
|
|
69
|
+
},
|
|
70
|
+
{ role: 'user', content: prompt },
|
|
71
|
+
];
|
|
72
|
+
const response = await client.chat.completions.create({
|
|
73
|
+
model,
|
|
74
|
+
max_tokens: options.maxTokens || this.maxTokens,
|
|
75
|
+
temperature: options.temperature ?? 0.1,
|
|
76
|
+
messages,
|
|
77
|
+
response_format: { type: 'json_object' },
|
|
78
|
+
});
|
|
79
|
+
const content = response.choices[0]?.message?.content || '{}';
|
|
80
|
+
const usage = {
|
|
81
|
+
inputTokens: response.usage?.prompt_tokens || 0,
|
|
82
|
+
outputTokens: response.usage?.completion_tokens || 0,
|
|
83
|
+
totalTokens: response.usage?.total_tokens || 0,
|
|
84
|
+
};
|
|
85
|
+
const data = JSON.parse(content);
|
|
86
|
+
return {
|
|
87
|
+
data,
|
|
88
|
+
usage,
|
|
89
|
+
estimatedCost: this.estimateCost(usage.inputTokens, usage.outputTokens, model),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
estimateCost(inputTokens, outputTokens, model) {
|
|
93
|
+
const modelId = model || this.defaultModel;
|
|
94
|
+
const pricing = MODEL_PRICING[modelId] || { inputPer1M: 5, outputPer1M: 15 };
|
|
95
|
+
return (inputTokens / 1000000) * pricing.inputPer1M +
|
|
96
|
+
(outputTokens / 1000000) * pricing.outputPer1M;
|
|
97
|
+
}
|
|
98
|
+
async isAvailable() {
|
|
99
|
+
try {
|
|
100
|
+
const status = await this.getStatus();
|
|
101
|
+
return status.available;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async getStatus() {
|
|
108
|
+
const startTime = Date.now();
|
|
109
|
+
try {
|
|
110
|
+
const client = await this.getClient();
|
|
111
|
+
await client.models.list();
|
|
112
|
+
return { available: true, latencyMs: Date.now() - startTime };
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return { available: false, error: error.message };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=openai-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-provider.js","sourceRoot":"","sources":["../../../../../src/core/llm/providers/openai-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Vertex AI Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements LLMProvider interface for Google's Gemini models via Vertex AI.
|
|
5
|
+
*
|
|
6
|
+
* Best for: GCP-native environments, Gemini model access
|
|
7
|
+
*
|
|
8
|
+
* NOTE: Requires @google-cloud/vertexai
|
|
9
|
+
*/
|
|
10
|
+
import type { LLMProvider, AnalyzeOptions, AnalyzeResult, StructuredOptions } from '../types.js';
|
|
11
|
+
import { Logger } from '../../../utils/logger.js';
|
|
12
|
+
export interface VertexAIProviderConfig {
|
|
13
|
+
projectId?: string;
|
|
14
|
+
location?: string;
|
|
15
|
+
model?: string;
|
|
16
|
+
maxTokens?: number;
|
|
17
|
+
temperature?: number;
|
|
18
|
+
logger?: Logger;
|
|
19
|
+
}
|
|
20
|
+
export declare class VertexAIProvider implements LLMProvider {
|
|
21
|
+
readonly name: "vertex-ai";
|
|
22
|
+
readonly defaultModel: string;
|
|
23
|
+
private projectId;
|
|
24
|
+
private location;
|
|
25
|
+
private maxTokens;
|
|
26
|
+
private temperature;
|
|
27
|
+
private logger;
|
|
28
|
+
private client;
|
|
29
|
+
private model;
|
|
30
|
+
constructor(config: VertexAIProviderConfig);
|
|
31
|
+
private getModel;
|
|
32
|
+
analyze(prompt: string, options?: AnalyzeOptions): Promise<AnalyzeResult>;
|
|
33
|
+
analyzeStructured<T>(prompt: string, options: StructuredOptions<T>): Promise<{
|
|
34
|
+
data: T;
|
|
35
|
+
usage: AnalyzeResult['usage'];
|
|
36
|
+
estimatedCost: number;
|
|
37
|
+
}>;
|
|
38
|
+
estimateCost(inputTokens: number, outputTokens: number): number;
|
|
39
|
+
isAvailable(): Promise<boolean>;
|
|
40
|
+
getStatus(): Promise<{
|
|
41
|
+
available: boolean;
|
|
42
|
+
latencyMs?: number;
|
|
43
|
+
error?: string;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=vertex-ai-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-ai-provider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/vertex-ai-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,YAAW,WAAW;IAClD,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAAM;gBAEP,MAAM,EAAE,sBAAsB;YAS5B,QAAQ;IAgBhB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IA4C7E,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAuB7E,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAezD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,SAAS,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAiBvF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Vertex AI Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements LLMProvider interface for Google's Gemini models via Vertex AI.
|
|
5
|
+
*
|
|
6
|
+
* Best for: GCP-native environments, Gemini model access
|
|
7
|
+
*
|
|
8
|
+
* NOTE: Requires @google-cloud/vertexai
|
|
9
|
+
*/
|
|
10
|
+
import { consoleLogger } from '../../../utils/logger.js';
|
|
11
|
+
export class VertexAIProvider {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.name = 'vertex-ai';
|
|
14
|
+
this.projectId = config.projectId || process.env.GOOGLE_CLOUD_PROJECT || '';
|
|
15
|
+
this.location = config.location || process.env.GOOGLE_CLOUD_LOCATION || 'us-central1';
|
|
16
|
+
this.defaultModel = config.model || 'gemini-1.5-pro';
|
|
17
|
+
this.maxTokens = config.maxTokens || 4096;
|
|
18
|
+
this.temperature = config.temperature ?? 0.3;
|
|
19
|
+
this.logger = config.logger || consoleLogger;
|
|
20
|
+
}
|
|
21
|
+
async getModel() {
|
|
22
|
+
if (!this.model) {
|
|
23
|
+
const { VertexAI } = await import('@google-cloud/vertexai');
|
|
24
|
+
this.client = new VertexAI({
|
|
25
|
+
project: this.projectId,
|
|
26
|
+
location: this.location,
|
|
27
|
+
});
|
|
28
|
+
this.model = this.client.getGenerativeModel({
|
|
29
|
+
model: this.defaultModel,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return this.model;
|
|
33
|
+
}
|
|
34
|
+
async analyze(prompt, options = {}) {
|
|
35
|
+
const startTime = Date.now();
|
|
36
|
+
const model = await this.getModel();
|
|
37
|
+
const systemInstruction = options.systemPrompt
|
|
38
|
+
? { role: 'system', parts: [{ text: options.systemPrompt }] }
|
|
39
|
+
: undefined;
|
|
40
|
+
const request = {
|
|
41
|
+
contents: [
|
|
42
|
+
{ role: 'user', parts: [{ text: prompt }] },
|
|
43
|
+
],
|
|
44
|
+
systemInstruction,
|
|
45
|
+
generationConfig: {
|
|
46
|
+
maxOutputTokens: options.maxTokens || this.maxTokens,
|
|
47
|
+
temperature: options.temperature ?? this.temperature,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
const response = await model.generateContent(request);
|
|
51
|
+
const result = response.response;
|
|
52
|
+
const content = result.candidates?.[0]?.content?.parts?.[0]?.text || '';
|
|
53
|
+
// Vertex AI provides usage metadata
|
|
54
|
+
const usageMetadata = result.usageMetadata || {};
|
|
55
|
+
const inputTokens = usageMetadata.promptTokenCount || 0;
|
|
56
|
+
const outputTokens = usageMetadata.candidatesTokenCount || 0;
|
|
57
|
+
return {
|
|
58
|
+
content,
|
|
59
|
+
usage: {
|
|
60
|
+
inputTokens,
|
|
61
|
+
outputTokens,
|
|
62
|
+
totalTokens: inputTokens + outputTokens,
|
|
63
|
+
},
|
|
64
|
+
estimatedCost: this.estimateCost(inputTokens, outputTokens),
|
|
65
|
+
model: this.defaultModel,
|
|
66
|
+
durationMs: Date.now() - startTime,
|
|
67
|
+
wasRetry: false,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async analyzeStructured(prompt, options) {
|
|
71
|
+
const jsonPrompt = `${prompt}
|
|
72
|
+
|
|
73
|
+
Respond with valid JSON matching: ${JSON.stringify(options.schema)}
|
|
74
|
+
Return ONLY the JSON object, no markdown.`;
|
|
75
|
+
const result = await this.analyze(jsonPrompt, {
|
|
76
|
+
...options,
|
|
77
|
+
temperature: 0.1,
|
|
78
|
+
});
|
|
79
|
+
let jsonContent = result.content.trim();
|
|
80
|
+
if (jsonContent.startsWith('```')) {
|
|
81
|
+
jsonContent = jsonContent.replace(/^```json?\n?/, '').replace(/\n?```$/, '');
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
data: JSON.parse(jsonContent),
|
|
85
|
+
usage: result.usage,
|
|
86
|
+
estimatedCost: result.estimatedCost,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
estimateCost(inputTokens, outputTokens) {
|
|
90
|
+
// Gemini 1.5 Pro pricing
|
|
91
|
+
const model = this.defaultModel;
|
|
92
|
+
if (model.includes('gemini-1.5-pro')) {
|
|
93
|
+
// Under 128k context
|
|
94
|
+
return (inputTokens / 1000000) * 1.25 + (outputTokens / 1000000) * 5;
|
|
95
|
+
}
|
|
96
|
+
if (model.includes('gemini-1.5-flash')) {
|
|
97
|
+
return (inputTokens / 1000000) * 0.075 + (outputTokens / 1000000) * 0.3;
|
|
98
|
+
}
|
|
99
|
+
return (inputTokens / 1000000) * 1.25 + (outputTokens / 1000000) * 5;
|
|
100
|
+
}
|
|
101
|
+
async isAvailable() {
|
|
102
|
+
const status = await this.getStatus();
|
|
103
|
+
return status.available;
|
|
104
|
+
}
|
|
105
|
+
async getStatus() {
|
|
106
|
+
const startTime = Date.now();
|
|
107
|
+
try {
|
|
108
|
+
if (!this.projectId) {
|
|
109
|
+
return { available: false, error: 'GOOGLE_CLOUD_PROJECT not set' };
|
|
110
|
+
}
|
|
111
|
+
const model = await this.getModel();
|
|
112
|
+
// Simple check - try to get model info
|
|
113
|
+
return {
|
|
114
|
+
available: !!model,
|
|
115
|
+
latencyMs: Date.now() - startTime,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return { available: false, error: error.message };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=vertex-ai-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-ai-provider.js","sourceRoot":"","sources":["../../../../../src/core/llm/providers/vertex-ai-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Abstraction Types
|
|
3
|
+
*
|
|
4
|
+
* Supports multiple LLM providers for AI-powered features:
|
|
5
|
+
* - Anthropic (Claude)
|
|
6
|
+
* - OpenAI (GPT-4, GPT-4o)
|
|
7
|
+
* - Azure OpenAI
|
|
8
|
+
* - AWS Bedrock
|
|
9
|
+
* - Ollama (local)
|
|
10
|
+
* - Google Vertex AI
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Supported LLM providers
|
|
14
|
+
*/
|
|
15
|
+
export type LLMProviderType = 'claude-code' | 'anthropic' | 'openai' | 'azure-openai' | 'bedrock' | 'ollama' | 'vertex-ai';
|
|
16
|
+
/**
|
|
17
|
+
* LLM configuration stored in .specweave/config.json
|
|
18
|
+
*/
|
|
19
|
+
export interface LLMConfig {
|
|
20
|
+
/** Provider type */
|
|
21
|
+
provider: LLMProviderType;
|
|
22
|
+
/** Model identifier (provider-specific) */
|
|
23
|
+
model: string;
|
|
24
|
+
/** Environment variable name containing API key */
|
|
25
|
+
apiKeyEnv?: string;
|
|
26
|
+
/** Custom base URL (for Azure, Ollama, proxies) */
|
|
27
|
+
baseUrl?: string;
|
|
28
|
+
/** Azure-specific: deployment name */
|
|
29
|
+
azureDeployment?: string;
|
|
30
|
+
/** Azure-specific: API version */
|
|
31
|
+
azureApiVersion?: string;
|
|
32
|
+
/** Bedrock-specific: AWS region */
|
|
33
|
+
awsRegion?: string;
|
|
34
|
+
/** Max tokens per request (default: 4096) */
|
|
35
|
+
maxTokensPerRequest?: number;
|
|
36
|
+
/** Temperature (default: 0.3 for analysis tasks) */
|
|
37
|
+
temperature?: number;
|
|
38
|
+
/** Enable cost tracking */
|
|
39
|
+
costTracking?: boolean;
|
|
40
|
+
/** Fallback provider if primary fails */
|
|
41
|
+
fallback?: LLMConfig;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Options for a single analysis request
|
|
45
|
+
*/
|
|
46
|
+
export interface AnalyzeOptions {
|
|
47
|
+
/** Override max tokens for this request */
|
|
48
|
+
maxTokens?: number;
|
|
49
|
+
/** Override temperature for this request */
|
|
50
|
+
temperature?: number;
|
|
51
|
+
/** Override model for this request */
|
|
52
|
+
model?: string;
|
|
53
|
+
/** System prompt (prepended to user prompt) */
|
|
54
|
+
systemPrompt?: string;
|
|
55
|
+
/** Request timeout in ms (default: 60000) */
|
|
56
|
+
timeout?: number;
|
|
57
|
+
/** Retry count on failure (default: 2) */
|
|
58
|
+
retries?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Result of an analysis request
|
|
62
|
+
*/
|
|
63
|
+
export interface AnalyzeResult {
|
|
64
|
+
/** The response content */
|
|
65
|
+
content: string;
|
|
66
|
+
/** Token usage */
|
|
67
|
+
usage: {
|
|
68
|
+
inputTokens: number;
|
|
69
|
+
outputTokens: number;
|
|
70
|
+
totalTokens: number;
|
|
71
|
+
};
|
|
72
|
+
/** Estimated cost in USD */
|
|
73
|
+
estimatedCost: number;
|
|
74
|
+
/** Model used */
|
|
75
|
+
model: string;
|
|
76
|
+
/** Request duration in ms */
|
|
77
|
+
durationMs: number;
|
|
78
|
+
/** Whether this was a retry */
|
|
79
|
+
wasRetry: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Structured output options (JSON schema)
|
|
83
|
+
*/
|
|
84
|
+
export interface StructuredOptions<T> extends AnalyzeOptions {
|
|
85
|
+
/** JSON schema for response validation */
|
|
86
|
+
schema: JSONSchemaType<T>;
|
|
87
|
+
/** Strict mode - fail if response doesn't match schema */
|
|
88
|
+
strict?: boolean;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* JSON Schema type (simplified)
|
|
92
|
+
*/
|
|
93
|
+
export interface JSONSchemaType<T> {
|
|
94
|
+
type: 'object' | 'array' | 'string' | 'number' | 'boolean';
|
|
95
|
+
properties?: Record<string, JSONSchemaType<unknown>>;
|
|
96
|
+
items?: JSONSchemaType<unknown>;
|
|
97
|
+
required?: string[];
|
|
98
|
+
description?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Cost tracking data
|
|
102
|
+
*/
|
|
103
|
+
export interface CostTrackingData {
|
|
104
|
+
provider: LLMProviderType;
|
|
105
|
+
model: string;
|
|
106
|
+
inputTokens: number;
|
|
107
|
+
outputTokens: number;
|
|
108
|
+
estimatedCostUSD: number;
|
|
109
|
+
requestCount: number;
|
|
110
|
+
startedAt: string;
|
|
111
|
+
lastUpdatedAt: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* LLM Provider interface
|
|
115
|
+
*
|
|
116
|
+
* All providers must implement this interface for consistent usage.
|
|
117
|
+
*/
|
|
118
|
+
export interface LLMProvider {
|
|
119
|
+
/** Provider name for logging */
|
|
120
|
+
readonly name: LLMProviderType;
|
|
121
|
+
/** Default model for this provider */
|
|
122
|
+
readonly defaultModel: string;
|
|
123
|
+
/**
|
|
124
|
+
* Analyze text with LLM
|
|
125
|
+
*
|
|
126
|
+
* @param prompt - The prompt to send
|
|
127
|
+
* @param options - Request options
|
|
128
|
+
* @returns Analysis result with content and usage stats
|
|
129
|
+
*/
|
|
130
|
+
analyze(prompt: string, options?: AnalyzeOptions): Promise<AnalyzeResult>;
|
|
131
|
+
/**
|
|
132
|
+
* Analyze with structured JSON output
|
|
133
|
+
*
|
|
134
|
+
* @param prompt - The prompt to send
|
|
135
|
+
* @param options - Request options with schema
|
|
136
|
+
* @returns Parsed structured response
|
|
137
|
+
*/
|
|
138
|
+
analyzeStructured<T>(prompt: string, options: StructuredOptions<T>): Promise<{
|
|
139
|
+
data: T;
|
|
140
|
+
usage: AnalyzeResult['usage'];
|
|
141
|
+
estimatedCost: number;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* Estimate cost for a request
|
|
145
|
+
*
|
|
146
|
+
* @param inputTokens - Number of input tokens
|
|
147
|
+
* @param outputTokens - Number of output tokens
|
|
148
|
+
* @param model - Model to use (optional, uses default)
|
|
149
|
+
* @returns Estimated cost in USD
|
|
150
|
+
*/
|
|
151
|
+
estimateCost(inputTokens: number, outputTokens: number, model?: string): number;
|
|
152
|
+
/**
|
|
153
|
+
* Check if provider is available (API key set, endpoint reachable)
|
|
154
|
+
*/
|
|
155
|
+
isAvailable(): Promise<boolean>;
|
|
156
|
+
/**
|
|
157
|
+
* Get provider health/status
|
|
158
|
+
*/
|
|
159
|
+
getStatus(): Promise<{
|
|
160
|
+
available: boolean;
|
|
161
|
+
latencyMs?: number;
|
|
162
|
+
error?: string;
|
|
163
|
+
}>;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Model pricing per 1M tokens (input/output)
|
|
167
|
+
*/
|
|
168
|
+
export interface ModelPricing {
|
|
169
|
+
inputPer1M: number;
|
|
170
|
+
outputPer1M: number;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Default pricing for known models (USD per 1M tokens)
|
|
174
|
+
* Updated: 2025-12-03
|
|
175
|
+
*/
|
|
176
|
+
export declare const MODEL_PRICING: Record<string, ModelPricing>;
|
|
177
|
+
/**
|
|
178
|
+
* Recommended models by use case
|
|
179
|
+
*/
|
|
180
|
+
export declare const RECOMMENDED_MODELS: Record<string, Partial<Record<LLMProviderType, string>>>;
|
|
181
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Provider Abstraction Types
|
|
3
|
+
*
|
|
4
|
+
* Supports multiple LLM providers for AI-powered features:
|
|
5
|
+
* - Anthropic (Claude)
|
|
6
|
+
* - OpenAI (GPT-4, GPT-4o)
|
|
7
|
+
* - Azure OpenAI
|
|
8
|
+
* - AWS Bedrock
|
|
9
|
+
* - Ollama (local)
|
|
10
|
+
* - Google Vertex AI
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default pricing for known models (USD per 1M tokens)
|
|
14
|
+
* Updated: 2025-12-03
|
|
15
|
+
*/
|
|
16
|
+
export const MODEL_PRICING = {
|
|
17
|
+
// Anthropic
|
|
18
|
+
'claude-opus-4-5-20251101': { inputPer1M: 15, outputPer1M: 75 },
|
|
19
|
+
'claude-sonnet-4-5-20250929': { inputPer1M: 3, outputPer1M: 15 },
|
|
20
|
+
'claude-sonnet-4-20250514': { inputPer1M: 3, outputPer1M: 15 },
|
|
21
|
+
'claude-3-5-haiku-20241022': { inputPer1M: 1, outputPer1M: 5 },
|
|
22
|
+
// OpenAI
|
|
23
|
+
'gpt-4o': { inputPer1M: 5, outputPer1M: 15 },
|
|
24
|
+
'gpt-4o-mini': { inputPer1M: 0.15, outputPer1M: 0.6 },
|
|
25
|
+
'gpt-4-turbo': { inputPer1M: 10, outputPer1M: 30 },
|
|
26
|
+
'o1-preview': { inputPer1M: 15, outputPer1M: 60 },
|
|
27
|
+
'o1-mini': { inputPer1M: 3, outputPer1M: 12 },
|
|
28
|
+
// Local (free)
|
|
29
|
+
'ollama/*': { inputPer1M: 0, outputPer1M: 0 },
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Recommended models by use case
|
|
33
|
+
*/
|
|
34
|
+
export const RECOMMENDED_MODELS = {
|
|
35
|
+
// Deep analysis - needs reasoning
|
|
36
|
+
'deep-analysis': {
|
|
37
|
+
'claude-code': 'opus', // Uses MAX subscription via CLI - Opus 4.5 for best quality
|
|
38
|
+
'anthropic': 'claude-sonnet-4-20250514',
|
|
39
|
+
'openai': 'gpt-4o',
|
|
40
|
+
'azure-openai': 'gpt-4o',
|
|
41
|
+
'bedrock': 'anthropic.claude-3-5-sonnet-20241022-v2:0',
|
|
42
|
+
'ollama': 'llama3.1:70b',
|
|
43
|
+
'vertex-ai': 'gemini-1.5-pro',
|
|
44
|
+
},
|
|
45
|
+
// Quick tasks - cost-effective
|
|
46
|
+
'quick-task': {
|
|
47
|
+
'claude-code': 'haiku', // Uses MAX subscription via CLI
|
|
48
|
+
'anthropic': 'claude-3-5-haiku-20241022',
|
|
49
|
+
'openai': 'gpt-4o-mini',
|
|
50
|
+
'azure-openai': 'gpt-4o-mini',
|
|
51
|
+
'bedrock': 'anthropic.claude-3-haiku-20240307-v1:0',
|
|
52
|
+
'ollama': 'llama3.1:8b',
|
|
53
|
+
'vertex-ai': 'gemini-1.5-flash',
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/llm/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4MH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD,YAAY;IACZ,0BAA0B,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IAC/D,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAChE,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC9D,2BAA2B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;IAE9D,SAAS;IACT,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAC5C,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;IACrD,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IAClD,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACjD,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAE7C,eAAe;IACf,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;CAC9C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6D;IAC1F,kCAAkC;IAClC,eAAe,EAAE;QACf,aAAa,EAAE,MAAM,EAAG,4DAA4D;QACpF,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,2CAA2C;QACtD,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,gBAAgB;KAC9B;IACD,+BAA+B;IAC/B,YAAY,EAAE;QACZ,aAAa,EAAE,OAAO,EAAG,gCAAgC;QACzD,WAAW,EAAE,2BAA2B;QACxC,QAAQ,EAAE,aAAa;QACvB,cAAc,EAAE,aAAa;QAC7B,SAAS,EAAE,wCAAwC;QACnD,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,kBAAkB;KAChC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-converter.d.ts","sourceRoot":"","sources":["../../../src/importers/item-converter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"item-converter.d.ts","sourceRoot":"","sources":["../../../src/importers/item-converter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAGpF,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,KAAK,sBAAsB,EAO5B,MAAM,+BAA+B,CAAC;AAOvC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3D;AAoCD,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IAEX,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAE7B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IAEf,wBAAwB;IACxB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;QAC5C,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IAEjB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,8DAA8D;IAC9D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAEzC,iDAAiD;IACjD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC,kGAAkG;IAClG,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAM9B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAE1C;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,gBAAgB,CAAC;IAErD,sCAAsC;IACtC,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAExE,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAErG,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpE,kCAAkC;IAClC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAMxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,eAAe,CAAgC;IACvD,2DAA2D;IAC3D,OAAO,CAAC,eAAe,CAAkC;IACzD,wDAAwD;IACxD,OAAO,CAAC,YAAY,CAAkC;IACtD,iDAAiD;IACjD,OAAO,CAAC,WAAW,CAA8C;gBAErD,OAAO,EAAE,oBAAoB;IA8DzC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;;;;OAOG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,GAAG,kBAAkB;IA8GlH;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA8GxE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,mBAAmB;IAuP3B;;;;;;;;;;;;;;;;OAgBG;YACW,uBAAuB;IAyKrC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,wBAAwB;IAehC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;;;;;;;;OAUG;YACW,mBAAmB;IAoJjC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;;;;;OAQG;YACW,kBAAkB;IAkEhC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAsCrC;;;;OAIG;YACW,yBAAyB;IA8BvC;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAuB7D;;;OAGG;IACI,2BAA2B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;CAGvF"}
|