specweave 0.30.11 → 0.30.13
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/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +25 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/ado-area-selector.d.ts.map +1 -1
- package/dist/src/cli/helpers/ado-area-selector.js +13 -0
- package/dist/src/cli/helpers/ado-area-selector.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/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +7 -2
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts +7 -0
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +33 -2
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.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/clone-worker.js +19 -3
- package/dist/src/cli/workers/clone-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/board-matcher.d.ts +120 -0
- package/dist/src/core/living-docs/board-matcher.d.ts.map +1 -0
- package/dist/src/core/living-docs/board-matcher.js +466 -0
- package/dist/src/core/living-docs/board-matcher.js.map +1 -0
- 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/living-docs/foundation-builder.js +1 -1
- package/dist/src/core/living-docs/foundation-builder.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +19 -8
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +148 -52
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/suggestions-generator.js +1 -1
- package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
- package/dist/src/core/living-docs/umbrella-detector.d.ts +4 -0
- package/dist/src/core/living-docs/umbrella-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/umbrella-detector.js +20 -1
- package/dist/src/core/living-docs/umbrella-detector.js.map +1 -1
- package/dist/src/core/living-docs/workitem-matcher.js +5 -5
- package/dist/src/core/living-docs/workitem-matcher.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 +4 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +73 -12
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/init/repo/types.d.ts +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 +887 -0
- package/dist/src/living-docs/enterprise-analyzer.js.map +1 -0
- package/dist/src/living-docs/epic-id-allocator.d.ts +4 -0
- package/dist/src/living-docs/epic-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/epic-id-allocator.js +4 -0
- package/dist/src/living-docs/epic-id-allocator.js.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +9 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +16 -5
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/living-docs/smart-doc-organizer.d.ts +114 -0
- package/dist/src/living-docs/smart-doc-organizer.d.ts.map +1 -0
- package/dist/src/living-docs/smart-doc-organizer.js +535 -0
- package/dist/src/living-docs/smart-doc-organizer.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-archive.md +69 -2
- package/plugins/specweave/commands/specweave-judge.md +265 -0
- package/plugins/specweave/commands/specweave-organize-docs.md +185 -0
- package/plugins/specweave/hooks/hooks.json +3 -3
- package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -0
- package/plugins/specweave/hooks/universal/hook-wrapper.sh +67 -0
- package/plugins/specweave-docs/commands/build.md +158 -0
- package/plugins/specweave-docs/commands/{docs-generate.md → generate.md} +7 -2
- package/plugins/specweave-docs/commands/health.md +268 -0
- package/plugins/specweave-docs/commands/{docs-init.md → init.md} +7 -2
- package/plugins/specweave-docs/commands/organize.md +184 -0
- package/plugins/specweave-docs/commands/preview.md +138 -0
- package/plugins/specweave-docs/skills/preview/SKILL.md +105 -0
- package/plugins/specweave-release/commands/specweave-release-npm.md +22 -235
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure OpenAI Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements LLMProvider interface for Azure-hosted OpenAI models.
|
|
5
|
+
* Uses openai SDK with Azure configuration.
|
|
6
|
+
*
|
|
7
|
+
* Best for: Enterprise environments with Azure compliance requirements
|
|
8
|
+
*/
|
|
9
|
+
import { consoleLogger } from '../../../utils/logger.js';
|
|
10
|
+
export class AzureOpenAIProvider {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.name = 'azure-openai';
|
|
13
|
+
this.apiKey = config.apiKey;
|
|
14
|
+
this.endpoint = config.endpoint.replace(/\/$/, '');
|
|
15
|
+
this.deployment = config.deployment;
|
|
16
|
+
this.apiVersion = config.apiVersion || '2024-02-15-preview';
|
|
17
|
+
this.defaultModel = config.deployment;
|
|
18
|
+
this.maxTokens = config.maxTokens || 4096;
|
|
19
|
+
this.temperature = config.temperature ?? 0.3;
|
|
20
|
+
this.logger = config.logger || consoleLogger;
|
|
21
|
+
}
|
|
22
|
+
async getClient() {
|
|
23
|
+
if (!this.client) {
|
|
24
|
+
const { AzureOpenAI } = await import('openai');
|
|
25
|
+
this.client = new AzureOpenAI({
|
|
26
|
+
apiKey: this.apiKey,
|
|
27
|
+
endpoint: this.endpoint,
|
|
28
|
+
apiVersion: this.apiVersion,
|
|
29
|
+
deployment: this.deployment,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return this.client;
|
|
33
|
+
}
|
|
34
|
+
async analyze(prompt, options = {}) {
|
|
35
|
+
const startTime = Date.now();
|
|
36
|
+
const client = await this.getClient();
|
|
37
|
+
const messages = [];
|
|
38
|
+
if (options.systemPrompt) {
|
|
39
|
+
messages.push({ role: 'system', content: options.systemPrompt });
|
|
40
|
+
}
|
|
41
|
+
messages.push({ role: 'user', content: prompt });
|
|
42
|
+
const response = await client.chat.completions.create({
|
|
43
|
+
max_tokens: options.maxTokens || this.maxTokens,
|
|
44
|
+
temperature: options.temperature ?? this.temperature,
|
|
45
|
+
messages,
|
|
46
|
+
});
|
|
47
|
+
const content = response.choices[0]?.message?.content || '';
|
|
48
|
+
const usage = {
|
|
49
|
+
inputTokens: response.usage?.prompt_tokens || 0,
|
|
50
|
+
outputTokens: response.usage?.completion_tokens || 0,
|
|
51
|
+
totalTokens: response.usage?.total_tokens || 0,
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
content,
|
|
55
|
+
usage,
|
|
56
|
+
estimatedCost: this.estimateCost(usage.inputTokens, usage.outputTokens),
|
|
57
|
+
model: this.deployment,
|
|
58
|
+
durationMs: Date.now() - startTime,
|
|
59
|
+
wasRetry: false,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async analyzeStructured(prompt, options) {
|
|
63
|
+
const client = await this.getClient();
|
|
64
|
+
const messages = [
|
|
65
|
+
{
|
|
66
|
+
role: 'system',
|
|
67
|
+
content: `Respond in JSON format matching: ${JSON.stringify(options.schema)}`,
|
|
68
|
+
},
|
|
69
|
+
{ role: 'user', content: prompt },
|
|
70
|
+
];
|
|
71
|
+
const response = await client.chat.completions.create({
|
|
72
|
+
max_tokens: options.maxTokens || this.maxTokens,
|
|
73
|
+
temperature: 0.1,
|
|
74
|
+
messages,
|
|
75
|
+
response_format: { type: 'json_object' },
|
|
76
|
+
});
|
|
77
|
+
const content = response.choices[0]?.message?.content || '{}';
|
|
78
|
+
const usage = {
|
|
79
|
+
inputTokens: response.usage?.prompt_tokens || 0,
|
|
80
|
+
outputTokens: response.usage?.completion_tokens || 0,
|
|
81
|
+
totalTokens: response.usage?.total_tokens || 0,
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
data: JSON.parse(content),
|
|
85
|
+
usage,
|
|
86
|
+
estimatedCost: this.estimateCost(usage.inputTokens, usage.outputTokens),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
estimateCost(inputTokens, outputTokens) {
|
|
90
|
+
// Azure pricing varies by region and agreement
|
|
91
|
+
// Using GPT-4o defaults as baseline
|
|
92
|
+
const pricing = { inputPer1M: 5, outputPer1M: 15 };
|
|
93
|
+
return (inputTokens / 1000000) * pricing.inputPer1M +
|
|
94
|
+
(outputTokens / 1000000) * pricing.outputPer1M;
|
|
95
|
+
}
|
|
96
|
+
async isAvailable() {
|
|
97
|
+
const status = await this.getStatus();
|
|
98
|
+
return status.available;
|
|
99
|
+
}
|
|
100
|
+
async getStatus() {
|
|
101
|
+
const startTime = Date.now();
|
|
102
|
+
try {
|
|
103
|
+
const client = await this.getClient();
|
|
104
|
+
// Azure doesn't have models.list, try a minimal completion
|
|
105
|
+
await client.chat.completions.create({
|
|
106
|
+
max_tokens: 1,
|
|
107
|
+
messages: [{ role: 'user', content: 'hi' }],
|
|
108
|
+
});
|
|
109
|
+
return { available: true, latencyMs: Date.now() - startTime };
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
return { available: false, error: error.message };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=azure-openai-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-openai-provider.js","sourceRoot":"","sources":["../../../../../src/core/llm/providers/azure-openai-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Bedrock Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements LLMProvider interface for AWS Bedrock models.
|
|
5
|
+
* Supports Claude, Titan, and other Bedrock models.
|
|
6
|
+
*
|
|
7
|
+
* Best for: AWS-native environments, existing AWS infrastructure
|
|
8
|
+
*
|
|
9
|
+
* NOTE: Requires @aws-sdk/client-bedrock-runtime
|
|
10
|
+
*/
|
|
11
|
+
import type { LLMProvider, AnalyzeOptions, AnalyzeResult, StructuredOptions } from '../types.js';
|
|
12
|
+
import { Logger } from '../../../utils/logger.js';
|
|
13
|
+
export interface BedrockProviderConfig {
|
|
14
|
+
region?: string;
|
|
15
|
+
model?: string;
|
|
16
|
+
maxTokens?: number;
|
|
17
|
+
temperature?: number;
|
|
18
|
+
logger?: Logger;
|
|
19
|
+
}
|
|
20
|
+
export declare class BedrockProvider implements LLMProvider {
|
|
21
|
+
readonly name: "bedrock";
|
|
22
|
+
readonly defaultModel: string;
|
|
23
|
+
private region;
|
|
24
|
+
private maxTokens;
|
|
25
|
+
private temperature;
|
|
26
|
+
private logger;
|
|
27
|
+
private client;
|
|
28
|
+
constructor(config: BedrockProviderConfig);
|
|
29
|
+
private getClient;
|
|
30
|
+
analyze(prompt: string, options?: AnalyzeOptions): Promise<AnalyzeResult>;
|
|
31
|
+
analyzeStructured<T>(prompt: string, options: StructuredOptions<T>): Promise<{
|
|
32
|
+
data: T;
|
|
33
|
+
usage: AnalyzeResult['usage'];
|
|
34
|
+
estimatedCost: number;
|
|
35
|
+
}>;
|
|
36
|
+
estimateCost(inputTokens: number, outputTokens: number, model?: string): number;
|
|
37
|
+
isAvailable(): Promise<boolean>;
|
|
38
|
+
getStatus(): Promise<{
|
|
39
|
+
available: boolean;
|
|
40
|
+
latencyMs?: number;
|
|
41
|
+
error?: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=bedrock-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock-provider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/bedrock-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAM;gBAER,MAAM,EAAE,qBAAqB;YAQ3B,SAAS;IAQjB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAyE7E,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,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAiBzE,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;CAgBvF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Bedrock Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements LLMProvider interface for AWS Bedrock models.
|
|
5
|
+
* Supports Claude, Titan, and other Bedrock models.
|
|
6
|
+
*
|
|
7
|
+
* Best for: AWS-native environments, existing AWS infrastructure
|
|
8
|
+
*
|
|
9
|
+
* NOTE: Requires @aws-sdk/client-bedrock-runtime
|
|
10
|
+
*/
|
|
11
|
+
import { consoleLogger } from '../../../utils/logger.js';
|
|
12
|
+
export class BedrockProvider {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.name = 'bedrock';
|
|
15
|
+
this.region = config.region || process.env.AWS_REGION || 'us-east-1';
|
|
16
|
+
this.defaultModel = config.model || 'anthropic.claude-3-5-sonnet-20241022-v2:0';
|
|
17
|
+
this.maxTokens = config.maxTokens || 4096;
|
|
18
|
+
this.temperature = config.temperature ?? 0.3;
|
|
19
|
+
this.logger = config.logger || consoleLogger;
|
|
20
|
+
}
|
|
21
|
+
async getClient() {
|
|
22
|
+
if (!this.client) {
|
|
23
|
+
const { BedrockRuntimeClient } = await import('@aws-sdk/client-bedrock-runtime');
|
|
24
|
+
this.client = new BedrockRuntimeClient({ region: this.region });
|
|
25
|
+
}
|
|
26
|
+
return this.client;
|
|
27
|
+
}
|
|
28
|
+
async analyze(prompt, options = {}) {
|
|
29
|
+
const startTime = Date.now();
|
|
30
|
+
const model = options.model || this.defaultModel;
|
|
31
|
+
const client = await this.getClient();
|
|
32
|
+
const { InvokeModelCommand } = await import('@aws-sdk/client-bedrock-runtime');
|
|
33
|
+
// Format depends on model provider
|
|
34
|
+
const isAnthropic = model.startsWith('anthropic.');
|
|
35
|
+
const isTitan = model.startsWith('amazon.titan');
|
|
36
|
+
let body;
|
|
37
|
+
if (isAnthropic) {
|
|
38
|
+
body = JSON.stringify({
|
|
39
|
+
anthropic_version: 'bedrock-2023-05-31',
|
|
40
|
+
max_tokens: options.maxTokens || this.maxTokens,
|
|
41
|
+
temperature: options.temperature ?? this.temperature,
|
|
42
|
+
system: options.systemPrompt,
|
|
43
|
+
messages: [{ role: 'user', content: prompt }],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else if (isTitan) {
|
|
47
|
+
body = JSON.stringify({
|
|
48
|
+
inputText: options.systemPrompt ? `${options.systemPrompt}\n\n${prompt}` : prompt,
|
|
49
|
+
textGenerationConfig: {
|
|
50
|
+
maxTokenCount: options.maxTokens || this.maxTokens,
|
|
51
|
+
temperature: options.temperature ?? this.temperature,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
throw new Error(`Unsupported Bedrock model: ${model}`);
|
|
57
|
+
}
|
|
58
|
+
const command = new InvokeModelCommand({
|
|
59
|
+
modelId: model,
|
|
60
|
+
contentType: 'application/json',
|
|
61
|
+
accept: 'application/json',
|
|
62
|
+
body,
|
|
63
|
+
});
|
|
64
|
+
const response = await client.send(command);
|
|
65
|
+
const responseBody = JSON.parse(new TextDecoder().decode(response.body));
|
|
66
|
+
let content;
|
|
67
|
+
let inputTokens = 0;
|
|
68
|
+
let outputTokens = 0;
|
|
69
|
+
if (isAnthropic) {
|
|
70
|
+
content = responseBody.content?.[0]?.text || '';
|
|
71
|
+
inputTokens = responseBody.usage?.input_tokens || 0;
|
|
72
|
+
outputTokens = responseBody.usage?.output_tokens || 0;
|
|
73
|
+
}
|
|
74
|
+
else if (isTitan) {
|
|
75
|
+
content = responseBody.results?.[0]?.outputText || '';
|
|
76
|
+
inputTokens = responseBody.inputTextTokenCount || 0;
|
|
77
|
+
outputTokens = responseBody.results?.[0]?.tokenCount || 0;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
content = '';
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
content,
|
|
84
|
+
usage: {
|
|
85
|
+
inputTokens,
|
|
86
|
+
outputTokens,
|
|
87
|
+
totalTokens: inputTokens + outputTokens,
|
|
88
|
+
},
|
|
89
|
+
estimatedCost: this.estimateCost(inputTokens, outputTokens, model),
|
|
90
|
+
model,
|
|
91
|
+
durationMs: Date.now() - startTime,
|
|
92
|
+
wasRetry: false,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async analyzeStructured(prompt, options) {
|
|
96
|
+
const jsonPrompt = `${prompt}
|
|
97
|
+
|
|
98
|
+
Respond with valid JSON matching: ${JSON.stringify(options.schema)}
|
|
99
|
+
Return ONLY the JSON object.`;
|
|
100
|
+
const result = await this.analyze(jsonPrompt, {
|
|
101
|
+
...options,
|
|
102
|
+
temperature: 0.1,
|
|
103
|
+
});
|
|
104
|
+
let jsonContent = result.content.trim();
|
|
105
|
+
if (jsonContent.startsWith('```')) {
|
|
106
|
+
jsonContent = jsonContent.replace(/^```json?\n?/, '').replace(/\n?```$/, '');
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
data: JSON.parse(jsonContent),
|
|
110
|
+
usage: result.usage,
|
|
111
|
+
estimatedCost: result.estimatedCost,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
estimateCost(inputTokens, outputTokens, model) {
|
|
115
|
+
// Bedrock Claude pricing (slightly higher than direct)
|
|
116
|
+
const modelId = model || this.defaultModel;
|
|
117
|
+
if (modelId.includes('claude-3-5-sonnet')) {
|
|
118
|
+
return (inputTokens / 1000000) * 3 + (outputTokens / 1000000) * 15;
|
|
119
|
+
}
|
|
120
|
+
if (modelId.includes('claude-3-haiku')) {
|
|
121
|
+
return (inputTokens / 1000000) * 0.25 + (outputTokens / 1000000) * 1.25;
|
|
122
|
+
}
|
|
123
|
+
if (modelId.includes('titan')) {
|
|
124
|
+
return (inputTokens / 1000000) * 0.8 + (outputTokens / 1000000) * 1.6;
|
|
125
|
+
}
|
|
126
|
+
return (inputTokens / 1000000) * 3 + (outputTokens / 1000000) * 15;
|
|
127
|
+
}
|
|
128
|
+
async isAvailable() {
|
|
129
|
+
const status = await this.getStatus();
|
|
130
|
+
return status.available;
|
|
131
|
+
}
|
|
132
|
+
async getStatus() {
|
|
133
|
+
const startTime = Date.now();
|
|
134
|
+
try {
|
|
135
|
+
const client = await this.getClient();
|
|
136
|
+
const { ListFoundationModelsCommand } = await import('@aws-sdk/client-bedrock-runtime');
|
|
137
|
+
// Note: ListFoundationModels is on the Bedrock client, not Runtime
|
|
138
|
+
// For status check, we just verify credentials work
|
|
139
|
+
return {
|
|
140
|
+
available: !!client,
|
|
141
|
+
latencyMs: Date.now() - startTime,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
return { available: false, error: error.message };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=bedrock-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock-provider.js","sourceRoot":"","sources":["../../../../../src/core/llm/providers/bedrock-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Native Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses the Claude Code CLI (`claude --print`) as an LLM provider.
|
|
5
|
+
* This leverages the user's existing MAX subscription - NO API KEY NEEDED!
|
|
6
|
+
*
|
|
7
|
+
* How it works:
|
|
8
|
+
* 1. User is authenticated to Claude Code (MAX subscription)
|
|
9
|
+
* 2. Auth is cached in ~/.claude/ (Unix) or %USERPROFILE%\.claude\ (Windows)
|
|
10
|
+
* 3. We spawn `claude --print` subprocesses
|
|
11
|
+
* 4. These use the cached auth automatically
|
|
12
|
+
* 5. Result: Full Claude capabilities at no extra cost!
|
|
13
|
+
*
|
|
14
|
+
* Cross-platform support:
|
|
15
|
+
* - macOS: Uses `which claude` for detection
|
|
16
|
+
* - Linux: Uses `which claude` or `command -v claude`
|
|
17
|
+
* - Windows: Uses `where claude` for detection
|
|
18
|
+
*
|
|
19
|
+
* Best for:
|
|
20
|
+
* - Claude MAX subscribers
|
|
21
|
+
* - Background processing without API costs
|
|
22
|
+
* - Full Claude capabilities (Opus, Sonnet, Haiku)
|
|
23
|
+
*/
|
|
24
|
+
import type { LLMProvider, LLMProviderType, AnalyzeOptions, AnalyzeResult, StructuredOptions } from '../types.js';
|
|
25
|
+
import { Logger } from '../../../utils/logger.js';
|
|
26
|
+
export interface ClaudeCodeProviderConfig {
|
|
27
|
+
/** Model alias: 'opus' (default), 'sonnet', 'haiku' or full model ID */
|
|
28
|
+
model?: string;
|
|
29
|
+
/** Max tokens for response */
|
|
30
|
+
maxTokens?: number;
|
|
31
|
+
/** Temperature (0-1) */
|
|
32
|
+
temperature?: number;
|
|
33
|
+
/** Timeout in ms (default: 120000 = 2 min) */
|
|
34
|
+
timeout?: number;
|
|
35
|
+
/** Logger instance */
|
|
36
|
+
logger?: Logger;
|
|
37
|
+
/** Working directory for claude command */
|
|
38
|
+
cwd?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Skip permission prompts for non-interactive background processing.
|
|
41
|
+
* Uses --dangerously-skip-permissions flag.
|
|
42
|
+
* Default: true (required for background/detached processes)
|
|
43
|
+
*/
|
|
44
|
+
skipPermissions?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Claude Code Native Provider
|
|
48
|
+
*
|
|
49
|
+
* Uses `claude --print` CLI for LLM calls - leverages MAX subscription!
|
|
50
|
+
*/
|
|
51
|
+
export declare class ClaudeCodeProvider implements LLMProvider {
|
|
52
|
+
readonly name: LLMProviderType;
|
|
53
|
+
readonly defaultModel: string;
|
|
54
|
+
private model;
|
|
55
|
+
private maxTokens;
|
|
56
|
+
private timeout;
|
|
57
|
+
private logger;
|
|
58
|
+
private cwd?;
|
|
59
|
+
private skipPermissions;
|
|
60
|
+
constructor(config?: ClaudeCodeProviderConfig);
|
|
61
|
+
/**
|
|
62
|
+
* Execute claude --print command
|
|
63
|
+
*
|
|
64
|
+
* Cross-platform: Works on Windows, macOS, and Linux
|
|
65
|
+
* Background-safe: Uses --dangerously-skip-permissions for non-interactive use
|
|
66
|
+
*/
|
|
67
|
+
private executeClaudeCommand;
|
|
68
|
+
/**
|
|
69
|
+
* Analyze text using Claude Code CLI
|
|
70
|
+
*/
|
|
71
|
+
analyze(prompt: string, options?: AnalyzeOptions): Promise<AnalyzeResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Analyze with structured JSON output
|
|
74
|
+
*/
|
|
75
|
+
analyzeStructured<T>(prompt: string, options: StructuredOptions<T>): Promise<{
|
|
76
|
+
data: T;
|
|
77
|
+
usage: AnalyzeResult['usage'];
|
|
78
|
+
estimatedCost: number;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Estimate cost - always 0 for MAX subscription!
|
|
82
|
+
*/
|
|
83
|
+
estimateCost(): number;
|
|
84
|
+
/**
|
|
85
|
+
* Check if Claude Code CLI is available and authenticated
|
|
86
|
+
*/
|
|
87
|
+
isAvailable(): Promise<boolean>;
|
|
88
|
+
/**
|
|
89
|
+
* Get provider status
|
|
90
|
+
*/
|
|
91
|
+
getStatus(): Promise<{
|
|
92
|
+
available: boolean;
|
|
93
|
+
latencyMs?: number;
|
|
94
|
+
error?: string;
|
|
95
|
+
}>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if Claude Code CLI is installed and authenticated
|
|
99
|
+
*
|
|
100
|
+
* Cross-platform support:
|
|
101
|
+
* - Windows: Uses `where claude` and checks %USERPROFILE%\.claude\
|
|
102
|
+
* - macOS/Linux: Uses `which claude` and checks ~/.claude/
|
|
103
|
+
*/
|
|
104
|
+
export declare function isClaudeCodeAvailable(): Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* Get detailed Claude Code availability info
|
|
107
|
+
*/
|
|
108
|
+
export declare function getClaudeCodeStatus(): Promise<{
|
|
109
|
+
available: boolean;
|
|
110
|
+
cliInstalled: boolean;
|
|
111
|
+
authExists: boolean;
|
|
112
|
+
error?: string;
|
|
113
|
+
platform: string;
|
|
114
|
+
}>;
|
|
115
|
+
//# sourceMappingURL=claude-code-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-provider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/claude-code-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,aAAa,EACb,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AASjE,MAAM,WAAW,wBAAwB;IACvC,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAuBD;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAiB;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,eAAe,CAAU;gBAErB,MAAM,GAAE,wBAA6B;IAWjD;;;;;OAKG;YACW,oBAAoB;IA6FlC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDnF;;OAEG;IACG,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;IAgD7E;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAsBvF;AAgDD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAyB9D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAuCD"}
|