@specverse/engines 5.2.0 → 6.0.0
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/assets/prompts/core/standard/default/behavior.prompt.yaml +37 -30
- package/assets/prompts/core/standard/v9/behavior.prompt.yaml +37 -30
- package/dist/ai/behavior-ai-service.d.ts +35 -28
- package/dist/ai/behavior-ai-service.d.ts.map +1 -1
- package/dist/ai/behavior-ai-service.js +95 -128
- package/dist/ai/behavior-ai-service.js.map +1 -1
- package/dist/ai/index.d.ts +26 -26
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +40 -29
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/model-resolver.d.ts +13 -0
- package/dist/ai/model-resolver.d.ts.map +1 -0
- package/dist/ai/model-resolver.js +87 -0
- package/dist/ai/model-resolver.js.map +1 -0
- package/dist/ai/providers/claude-cli.d.ts +25 -0
- package/dist/ai/providers/claude-cli.d.ts.map +1 -0
- package/dist/ai/providers/claude-cli.js +185 -0
- package/dist/ai/providers/claude-cli.js.map +1 -0
- package/dist/ai/providers/index.d.ts +8 -5
- package/dist/ai/providers/index.d.ts.map +1 -1
- package/dist/ai/providers/index.js +7 -5
- package/dist/ai/providers/index.js.map +1 -1
- package/dist/ai/providers/stub.d.ts +15 -0
- package/dist/ai/providers/stub.d.ts.map +1 -0
- package/dist/ai/providers/stub.js +64 -0
- package/dist/ai/providers/stub.js.map +1 -0
- package/dist/ai/skill-detection.d.ts +5 -0
- package/dist/ai/skill-detection.d.ts.map +1 -0
- package/dist/ai/skill-detection.js +27 -0
- package/dist/ai/skill-detection.js.map +1 -0
- package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +2 -2
- package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +2 -2
- package/package.json +8 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior-ai-service.js","sourceRoot":"","sources":["../../src/ai/behavior-ai-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"behavior-ai-service.js","sourceRoot":"","sources":["../../src/ai/behavior-ai-service.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/index.d.ts
CHANGED
|
@@ -1,27 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SpecVerse AI Module
|
|
3
|
-
*
|
|
2
|
+
* SpecVerse AI Module — public surface.
|
|
3
|
+
*
|
|
4
|
+
* Post AI-SDK replatform (2026-04, engines 6.0):
|
|
5
|
+
* - Provider abstraction is Vercel AI SDK (`ai` + `@ai-sdk/*`).
|
|
6
|
+
* - SpecVerse-specific: model-resolver picks claude-cli | anthropic |
|
|
7
|
+
* openai-compatible | stub based on SPECVERSE_AI_PROVIDER.
|
|
8
|
+
* - Behaviour generation at realize time delegates to generateText()
|
|
9
|
+
* through the resolved model; skill-aware system-prompt assembly.
|
|
10
|
+
*
|
|
11
|
+
* What was removed in 6.0:
|
|
12
|
+
* - LLMProvider, LLMProviderRegistry, ProviderFactory
|
|
13
|
+
* - OpenAIProvider, AnthropicProvider, InteractiveProvider
|
|
14
|
+
* - SpecVerseOrchestrator, InteractiveWorkflow (dead code, no consumers)
|
|
15
|
+
* - ConfigLoader / SpecVerseConfig (consumed only by the orchestrator)
|
|
16
|
+
* - config-loader.ts (no consumers)
|
|
17
|
+
* Consumers on those APIs should migrate to resolveModel() + generateText()
|
|
18
|
+
* from 'ai'. See docs/guides/SPECVERSE-AI.md.
|
|
4
19
|
*/
|
|
5
20
|
export * from './commands/index.js';
|
|
6
21
|
export * from './core/ecosystem-prompt-manager.js';
|
|
7
22
|
export * from './types/index.js';
|
|
8
|
-
export * from './config-loader.js';
|
|
9
23
|
export { SessionManager } from './session/session-manager.js';
|
|
10
|
-
export type { SessionInfo, JobRequest, JobStatus, CreateSessionOptions } from './session/types.js';
|
|
24
|
+
export type { SessionInfo, JobRequest, JobStatus, CreateSessionOptions, } from './session/types.js';
|
|
11
25
|
export { BehaviorAIService } from './behavior-ai-service.js';
|
|
12
26
|
export type { BehaviorAIServiceOptions, BehaviorGenerateContext } from './behavior-ai-service.js';
|
|
13
27
|
export { regenerateBehavior } from './behavior-regenerate.js';
|
|
14
28
|
export type { RegenerateBehaviorOptions, RegenerateBehaviorResult } from './behavior-regenerate.js';
|
|
15
|
-
export {
|
|
16
|
-
export type {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export { SpecVerseOrchestrator } from './orchestrator/specverse-orchestrator.js';
|
|
22
|
-
export { InteractiveWorkflow } from './orchestrator/interactive-workflow.js';
|
|
23
|
-
export { ConfigLoader, configLoader } from './config/index.js';
|
|
24
|
-
export type { SpecVerseConfig } from './config/index.js';
|
|
29
|
+
export { resolveModel, resolveProviderId, describeActiveProvider } from './model-resolver.js';
|
|
30
|
+
export type { ProviderId, ResolveModelOptions } from './model-resolver.js';
|
|
31
|
+
export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './providers/claude-cli.js';
|
|
32
|
+
export type { ClaudeCliOptions } from './providers/claude-cli.js';
|
|
33
|
+
export { stubModel } from './providers/stub.js';
|
|
34
|
+
export { detectInstalledSkill } from './skill-detection.js';
|
|
25
35
|
import type { SpecVerseEngine, EngineInfo } from '@specverse/types';
|
|
26
36
|
export interface AIEngine extends SpecVerseEngine {
|
|
27
37
|
generatePrompt(spec: any, options?: any): Promise<string>;
|
|
@@ -31,17 +41,11 @@ export interface AIEngine extends SpecVerseEngine {
|
|
|
31
41
|
generateBehavior(step: string, context: BehaviorGenContext): Promise<string | null>;
|
|
32
42
|
}
|
|
33
43
|
export interface BehaviorGenContext {
|
|
34
|
-
/** The model name (e.g., "Order") */
|
|
35
44
|
modelName: string;
|
|
36
|
-
/** The operation/action name (e.g., "processOrder") */
|
|
37
45
|
operationName: string;
|
|
38
|
-
/** Function name to generate (e.g., "applyDiscountBasedOnLoyaltyTier") */
|
|
39
46
|
functionName: string;
|
|
40
|
-
/** Parameter names from the action (e.g., ['orderId', 'customerId']) */
|
|
41
47
|
parameterNames: string[];
|
|
42
|
-
/** Available models in the spec for context */
|
|
43
48
|
availableModels?: string[];
|
|
44
|
-
/** The full spec for context */
|
|
45
49
|
spec?: any;
|
|
46
50
|
}
|
|
47
51
|
declare class SpecVerseAIEngine implements AIEngine {
|
|
@@ -51,18 +55,14 @@ declare class SpecVerseAIEngine implements AIEngine {
|
|
|
51
55
|
private manager;
|
|
52
56
|
initialize(config?: {
|
|
53
57
|
catalogPath?: string;
|
|
54
|
-
provider?: string;
|
|
55
58
|
}): Promise<void>;
|
|
56
59
|
getInfo(): EngineInfo;
|
|
57
60
|
generatePrompt(spec: any, _options?: any): Promise<string>;
|
|
58
61
|
suggest(spec: any, _context?: string): Promise<any[]>;
|
|
59
62
|
/**
|
|
60
63
|
* Generate a TypeScript function body for an unmatched behavior step.
|
|
61
|
-
* Delegates to BehaviorAIService which
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* For best results, callers should reuse the same BehaviorAIService instance
|
|
65
|
-
* across multiple steps in a controller — the conversation accumulates context.
|
|
64
|
+
* Delegates to BehaviorAIService which resolves the active provider
|
|
65
|
+
* (claude-cli / anthropic / openai-compatible / stub) based on env.
|
|
66
66
|
*/
|
|
67
67
|
generateBehavior(step: string, context: BehaviorGenContext): Promise<string | null>;
|
|
68
68
|
template(operation: string, options?: any): Promise<string>;
|
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/index.js
CHANGED
|
@@ -1,32 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SpecVerse AI Module
|
|
3
|
-
*
|
|
2
|
+
* SpecVerse AI Module — public surface.
|
|
3
|
+
*
|
|
4
|
+
* Post AI-SDK replatform (2026-04, engines 6.0):
|
|
5
|
+
* - Provider abstraction is Vercel AI SDK (`ai` + `@ai-sdk/*`).
|
|
6
|
+
* - SpecVerse-specific: model-resolver picks claude-cli | anthropic |
|
|
7
|
+
* openai-compatible | stub based on SPECVERSE_AI_PROVIDER.
|
|
8
|
+
* - Behaviour generation at realize time delegates to generateText()
|
|
9
|
+
* through the resolved model; skill-aware system-prompt assembly.
|
|
10
|
+
*
|
|
11
|
+
* What was removed in 6.0:
|
|
12
|
+
* - LLMProvider, LLMProviderRegistry, ProviderFactory
|
|
13
|
+
* - OpenAIProvider, AnthropicProvider, InteractiveProvider
|
|
14
|
+
* - SpecVerseOrchestrator, InteractiveWorkflow (dead code, no consumers)
|
|
15
|
+
* - ConfigLoader / SpecVerseConfig (consumed only by the orchestrator)
|
|
16
|
+
* - config-loader.ts (no consumers)
|
|
17
|
+
* Consumers on those APIs should migrate to resolveModel() + generateText()
|
|
18
|
+
* from 'ai'. See docs/guides/SPECVERSE-AI.md.
|
|
4
19
|
*/
|
|
20
|
+
// Commands — prompt-text generators for `spv ai {enhance,fill,suggest,template}`.
|
|
5
21
|
export * from './commands/index.js';
|
|
22
|
+
// Ecosystem prompt manager — used internally by enhance/suggest to surface
|
|
23
|
+
// library hints.
|
|
6
24
|
export * from './core/ecosystem-prompt-manager.js';
|
|
25
|
+
// Types.
|
|
7
26
|
export * from './types/index.js';
|
|
8
|
-
|
|
27
|
+
// Sessions — tracked job queue for multi-step spec generation.
|
|
9
28
|
export { SessionManager } from './session/session-manager.js';
|
|
10
|
-
//
|
|
29
|
+
// Behaviour generation — session-aware, provider-agnostic LLM call for
|
|
30
|
+
// unmatched behavior steps. Used by ai-behaviors-generator at realize time.
|
|
11
31
|
export { BehaviorAIService } from './behavior-ai-service.js';
|
|
12
32
|
// Regenerate a single owner's AI behaviors file on demand.
|
|
13
33
|
// Used by `specverse ai regenerate <Owner.fn>`.
|
|
14
34
|
export { regenerateBehavior } from './behavior-regenerate.js';
|
|
15
|
-
//
|
|
16
|
-
export {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
// Model resolver — pick a LanguageModelV3 from SPECVERSE_AI_PROVIDER env.
|
|
36
|
+
export { resolveModel, resolveProviderId, describeActiveProvider } from './model-resolver.js';
|
|
37
|
+
// Custom providers — thin wrappers around claude CLI and no-op stub. Most
|
|
38
|
+
// consumers should use resolveModel() rather than calling these directly.
|
|
39
|
+
export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './providers/claude-cli.js';
|
|
40
|
+
export { stubModel } from './providers/stub.js';
|
|
41
|
+
// Skill detection — true if the SpecVerse skill is installed in a location
|
|
42
|
+
// Claude Code will auto-load. Used by behavior-ai-service to decide whether
|
|
43
|
+
// to skip the fullContext block in the system prompt.
|
|
44
|
+
export { detectInstalledSkill } from './skill-detection.js';
|
|
45
|
+
import { BehaviorAIService } from './behavior-ai-service.js';
|
|
26
46
|
class SpecVerseAIEngine {
|
|
27
47
|
name = 'ai';
|
|
28
|
-
version = '
|
|
29
|
-
capabilities = ['ai-prompts', 'ai-suggestions', 'ai-templates', 'ai-
|
|
48
|
+
version = '6.0.0';
|
|
49
|
+
capabilities = ['ai-prompts', 'ai-suggestions', 'ai-templates', 'ai-behaviour'];
|
|
30
50
|
manager = null;
|
|
31
51
|
async initialize(config) {
|
|
32
52
|
try {
|
|
@@ -52,7 +72,6 @@ class SpecVerseAIEngine {
|
|
|
52
72
|
if (component.description)
|
|
53
73
|
lines.push(`\n${component.description}`);
|
|
54
74
|
lines.push('');
|
|
55
|
-
// Models
|
|
56
75
|
const models = component.models || [];
|
|
57
76
|
if (models.length > 0) {
|
|
58
77
|
lines.push(`### Models (${models.length})`);
|
|
@@ -81,7 +100,6 @@ class SpecVerseAIEngine {
|
|
|
81
100
|
lines.push('');
|
|
82
101
|
}
|
|
83
102
|
}
|
|
84
|
-
// Controllers
|
|
85
103
|
const controllers = component.controllers || [];
|
|
86
104
|
if (controllers.length > 0) {
|
|
87
105
|
lines.push(`### Controllers (${controllers.length})`);
|
|
@@ -90,7 +108,6 @@ class SpecVerseAIEngine {
|
|
|
90
108
|
}
|
|
91
109
|
lines.push('');
|
|
92
110
|
}
|
|
93
|
-
// Services
|
|
94
111
|
const services = component.services || [];
|
|
95
112
|
if (services.length > 0) {
|
|
96
113
|
lines.push(`### Services (${services.length})`);
|
|
@@ -104,7 +121,6 @@ class SpecVerseAIEngine {
|
|
|
104
121
|
}
|
|
105
122
|
lines.push('');
|
|
106
123
|
}
|
|
107
|
-
// Events
|
|
108
124
|
const events = component.events || [];
|
|
109
125
|
if (events.length > 0) {
|
|
110
126
|
lines.push(`### Events (${events.length})`);
|
|
@@ -117,7 +133,7 @@ class SpecVerseAIEngine {
|
|
|
117
133
|
lines.push('## Implementation Guidelines');
|
|
118
134
|
lines.push('');
|
|
119
135
|
lines.push('1. Create database models matching the attribute and relationship specifications');
|
|
120
|
-
lines.push('2. Implement
|
|
136
|
+
lines.push('2. Implement CURVED controllers for each controller listed');
|
|
121
137
|
lines.push('3. Add service methods as specified, with proper error handling');
|
|
122
138
|
lines.push('4. Wire event handlers for cross-model communication');
|
|
123
139
|
lines.push('5. Follow the relationship types: belongsTo (FK on this model), hasMany (FK on related model), hasOne, manyToMany');
|
|
@@ -130,15 +146,11 @@ class SpecVerseAIEngine {
|
|
|
130
146
|
}
|
|
131
147
|
/**
|
|
132
148
|
* Generate a TypeScript function body for an unmatched behavior step.
|
|
133
|
-
* Delegates to BehaviorAIService which
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* For best results, callers should reuse the same BehaviorAIService instance
|
|
137
|
-
* across multiple steps in a controller — the conversation accumulates context.
|
|
149
|
+
* Delegates to BehaviorAIService which resolves the active provider
|
|
150
|
+
* (claude-cli / anthropic / openai-compatible / stub) based on env.
|
|
138
151
|
*/
|
|
139
152
|
async generateBehavior(step, context) {
|
|
140
153
|
try {
|
|
141
|
-
const { BehaviorAIService } = await import('./behavior-ai-service.js');
|
|
142
154
|
const service = new BehaviorAIService();
|
|
143
155
|
if (!service.isAvailable)
|
|
144
156
|
return null;
|
|
@@ -186,7 +198,6 @@ class SpecVerseAIEngine {
|
|
|
186
198
|
return lines.join('\n');
|
|
187
199
|
}
|
|
188
200
|
catch (error) {
|
|
189
|
-
// Template loading failed (prompts not available) — return a useful default
|
|
190
201
|
return `# Template: ${operation}\n\nPrompt templates are not available. Install prompts with: specverse init\n\nError: ${error instanceof Error ? error.message : String(error)}`;
|
|
191
202
|
}
|
|
192
203
|
}
|
package/dist/ai/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
export type ProviderId = 'claude-cli' | 'anthropic' | 'openai-compatible' | 'stub';
|
|
3
|
+
/** Return the configured provider id, resolving defaults if unset. */
|
|
4
|
+
export declare function resolveProviderId(): ProviderId;
|
|
5
|
+
export interface ResolveModelOptions {
|
|
6
|
+
/** Model name override; if omitted, picks a sensible provider default. */
|
|
7
|
+
model?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Resolve an AI SDK v3 LanguageModel based on environment + options. */
|
|
10
|
+
export declare function resolveModel(options?: ResolveModelOptions): LanguageModelV3;
|
|
11
|
+
/** Best-effort diagnostic description of the active provider + model. */
|
|
12
|
+
export declare function describeActiveProvider(): string;
|
|
13
|
+
//# sourceMappingURL=model-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/ai/model-resolver.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIxD,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAEnF,sEAAsE;AACtE,wBAAgB,iBAAiB,IAAI,UAAU,CAc9C;AAED,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAwC/E;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,IAAI,MAAM,CAc/C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model resolver — picks the right LanguageModel implementation based on
|
|
3
|
+
* environment configuration. One call site, four providers:
|
|
4
|
+
*
|
|
5
|
+
* SPECVERSE_AI_PROVIDER=claude-cli Max user, spawns claude --print
|
|
6
|
+
* SPECVERSE_AI_PROVIDER=anthropic API-keyed Claude (metered)
|
|
7
|
+
* SPECVERSE_AI_PROVIDER=openai-compatible DeepSeek/Groq/Together/Ollama/etc.
|
|
8
|
+
* SPECVERSE_AI_PROVIDER=stub No LLM; emit prompt for ambient executor
|
|
9
|
+
*
|
|
10
|
+
* Defaults:
|
|
11
|
+
* - Inside an MCP server context (MCP_SERVER=1) → stub
|
|
12
|
+
* - Claude CLI available on PATH → claude-cli
|
|
13
|
+
* - ANTHROPIC_API_KEY set → anthropic
|
|
14
|
+
* - Else → stub (with a clear diagnostic comment)
|
|
15
|
+
*/
|
|
16
|
+
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
17
|
+
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
18
|
+
import { claudeCli, isClaudeCliAvailable } from './providers/claude-cli.js';
|
|
19
|
+
import { stubModel } from './providers/stub.js';
|
|
20
|
+
/** Return the configured provider id, resolving defaults if unset. */
|
|
21
|
+
export function resolveProviderId() {
|
|
22
|
+
const explicit = process.env.SPECVERSE_AI_PROVIDER;
|
|
23
|
+
if (explicit) {
|
|
24
|
+
if (['claude-cli', 'anthropic', 'openai-compatible', 'stub'].includes(explicit)) {
|
|
25
|
+
return explicit;
|
|
26
|
+
}
|
|
27
|
+
throw new Error(`SPECVERSE_AI_PROVIDER="${explicit}" is not recognized. Use one of: claude-cli, anthropic, openai-compatible, stub.`);
|
|
28
|
+
}
|
|
29
|
+
if (process.env.MCP_SERVER === '1')
|
|
30
|
+
return 'stub';
|
|
31
|
+
if (isClaudeCliAvailable())
|
|
32
|
+
return 'claude-cli';
|
|
33
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
34
|
+
return 'anthropic';
|
|
35
|
+
return 'stub';
|
|
36
|
+
}
|
|
37
|
+
/** Resolve an AI SDK v3 LanguageModel based on environment + options. */
|
|
38
|
+
export function resolveModel(options = {}) {
|
|
39
|
+
const provider = resolveProviderId();
|
|
40
|
+
const modelOverride = options.model ?? process.env.SPECVERSE_AI_MODEL;
|
|
41
|
+
switch (provider) {
|
|
42
|
+
case 'claude-cli':
|
|
43
|
+
return claudeCli({ model: modelOverride });
|
|
44
|
+
case 'anthropic': {
|
|
45
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
46
|
+
if (!apiKey) {
|
|
47
|
+
throw new Error('SPECVERSE_AI_PROVIDER=anthropic requires ANTHROPIC_API_KEY. ' +
|
|
48
|
+
'Set it or pick a different provider (claude-cli, openai-compatible, stub).');
|
|
49
|
+
}
|
|
50
|
+
const anthropic = createAnthropic({ apiKey });
|
|
51
|
+
return anthropic(modelOverride ?? 'claude-3-5-sonnet-latest');
|
|
52
|
+
}
|
|
53
|
+
case 'openai-compatible': {
|
|
54
|
+
const baseURL = process.env.SPECVERSE_AI_BASE_URL;
|
|
55
|
+
if (!baseURL) {
|
|
56
|
+
throw new Error('SPECVERSE_AI_PROVIDER=openai-compatible requires SPECVERSE_AI_BASE_URL ' +
|
|
57
|
+
'(e.g. https://api.together.xyz/v1 or http://localhost:11434/v1 for Ollama).');
|
|
58
|
+
}
|
|
59
|
+
const apiKey = process.env.SPECVERSE_AI_API_KEY;
|
|
60
|
+
const openaiCompatible = createOpenAICompatible({
|
|
61
|
+
name: 'specverse-ai',
|
|
62
|
+
baseURL,
|
|
63
|
+
apiKey,
|
|
64
|
+
});
|
|
65
|
+
return openaiCompatible(modelOverride ?? 'deepseek-chat');
|
|
66
|
+
}
|
|
67
|
+
case 'stub':
|
|
68
|
+
return stubModel();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Best-effort diagnostic description of the active provider + model. */
|
|
72
|
+
export function describeActiveProvider() {
|
|
73
|
+
const provider = resolveProviderId();
|
|
74
|
+
const model = process.env.SPECVERSE_AI_MODEL;
|
|
75
|
+
const modelStr = model ? ` (${model})` : '';
|
|
76
|
+
switch (provider) {
|
|
77
|
+
case 'claude-cli':
|
|
78
|
+
return `claude-cli${modelStr} — local Claude CLI, using your Max subscription auth`;
|
|
79
|
+
case 'anthropic':
|
|
80
|
+
return `anthropic${modelStr} — Anthropic API (metered tokens)`;
|
|
81
|
+
case 'openai-compatible':
|
|
82
|
+
return `openai-compatible${modelStr} — ${process.env.SPECVERSE_AI_BASE_URL ?? '(no BASE_URL)'}`;
|
|
83
|
+
case 'stub':
|
|
84
|
+
return 'stub — no LLM calls; prompt emitted verbatim for ambient executor';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/ai/model-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from '@ai-sdk/provider';
|
|
2
|
+
export interface ClaudeCliOptions {
|
|
3
|
+
/** Explicit path to the claude binary. Auto-detected if omitted. */
|
|
4
|
+
claudePath?: string;
|
|
5
|
+
/** Model override (e.g. "claude-opus-4", "claude-sonnet-4-5"). Defaults to whatever claude CLI picks. */
|
|
6
|
+
model?: string;
|
|
7
|
+
/** Timeout in milliseconds for each call. Default: 120_000. */
|
|
8
|
+
timeout?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Find the first working `claude` binary. Tries:
|
|
12
|
+
* 1. Explicit path override if given
|
|
13
|
+
* 2. ~/.claude/local/claude (Claude Code's user install)
|
|
14
|
+
* 3. `claude` on PATH (Homebrew / manual installs)
|
|
15
|
+
* Returns null if none respond to `--version`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectClaudePath(override?: string): string | null;
|
|
18
|
+
/** True if any candidate claude binary responds to --version. */
|
|
19
|
+
export declare function isClaudeCliAvailable(override?: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Factory for a claude-cli-backed LanguageModelV3. Session state is held
|
|
22
|
+
* inside the closure, so each call to claudeCli() gets its own session.
|
|
23
|
+
*/
|
|
24
|
+
export declare function claudeCli(options?: ClaudeCliOptions): LanguageModelV3;
|
|
25
|
+
//# sourceMappingURL=claude-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/claude-cli.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/D;AAmCD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CA0GzE"}
|