@specverse/engines 5.1.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.
Files changed (92) hide show
  1. package/assets/prompts/core/standard/default/analyse.prompt.yaml +5 -5
  2. package/assets/prompts/core/standard/default/app-demo.prompt.yaml +21 -1
  3. package/assets/prompts/core/standard/default/behavior.prompt.yaml +157 -0
  4. package/assets/prompts/core/standard/default/create.prompt.yaml +3 -3
  5. package/assets/prompts/core/standard/default/materialise.prompt.yaml +804 -774
  6. package/assets/prompts/core/standard/default/realize.prompt.yaml +581 -544
  7. package/assets/prompts/core/standard/v9/analyse.prompt.yaml +5 -5
  8. package/assets/prompts/core/standard/v9/app-demo.prompt.yaml +233 -0
  9. package/assets/prompts/core/standard/v9/behavior.prompt.yaml +70 -39
  10. package/assets/prompts/core/standard/v9/create.prompt.yaml +3 -3
  11. package/assets/prompts/core/standard/v9/materialise.prompt.yaml +804 -774
  12. package/assets/prompts/core/standard/v9/realize.prompt.yaml +581 -544
  13. package/dist/ai/behavior-ai-service.d.ts +35 -28
  14. package/dist/ai/behavior-ai-service.d.ts.map +1 -1
  15. package/dist/ai/behavior-ai-service.js +95 -128
  16. package/dist/ai/behavior-ai-service.js.map +1 -1
  17. package/dist/ai/index.d.ts +26 -26
  18. package/dist/ai/index.d.ts.map +1 -1
  19. package/dist/ai/index.js +40 -29
  20. package/dist/ai/index.js.map +1 -1
  21. package/dist/ai/model-resolver.d.ts +13 -0
  22. package/dist/ai/model-resolver.d.ts.map +1 -0
  23. package/dist/ai/model-resolver.js +87 -0
  24. package/dist/ai/model-resolver.js.map +1 -0
  25. package/dist/ai/providers/claude-cli.d.ts +25 -0
  26. package/dist/ai/providers/claude-cli.d.ts.map +1 -0
  27. package/dist/ai/providers/claude-cli.js +185 -0
  28. package/dist/ai/providers/claude-cli.js.map +1 -0
  29. package/dist/ai/providers/index.d.ts +8 -5
  30. package/dist/ai/providers/index.d.ts.map +1 -1
  31. package/dist/ai/providers/index.js +7 -5
  32. package/dist/ai/providers/index.js.map +1 -1
  33. package/dist/ai/providers/stub.d.ts +15 -0
  34. package/dist/ai/providers/stub.d.ts.map +1 -0
  35. package/dist/ai/providers/stub.js +64 -0
  36. package/dist/ai/providers/stub.js.map +1 -0
  37. package/dist/ai/skill-detection.d.ts +5 -0
  38. package/dist/ai/skill-detection.d.ts.map +1 -0
  39. package/dist/ai/skill-detection.js +27 -0
  40. package/dist/ai/skill-detection.js.map +1 -0
  41. package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +184 -0
  42. package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +289 -15
  43. package/libs/instance-factories/cli/templates/commander/command-generator.ts +184 -0
  44. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +322 -16
  45. package/package.json +8 -3
  46. package/assets/prompts/core/CHANGELOG.md +0 -158
  47. package/assets/prompts/core/MIGRATION-v6-to-v7.md +0 -379
  48. package/assets/prompts/core/base-terminal-prompt.md +0 -201
  49. package/assets/prompts/core/examples/example-usage.ts +0 -140
  50. package/assets/prompts/core/schemas/prompt.schema.json +0 -309
  51. package/assets/prompts/core/schemas/prompt.schema.yaml +0 -229
  52. package/assets/prompts/core/standard/archive/v1/analyse.prompt.yaml +0 -259
  53. package/assets/prompts/core/standard/archive/v1/create.prompt.yaml +0 -302
  54. package/assets/prompts/core/standard/archive/v1/materialise.prompt.yaml +0 -328
  55. package/assets/prompts/core/standard/archive/v1/realize.prompt.yaml +0 -606
  56. package/assets/prompts/core/standard/archive/v2/README.md +0 -110
  57. package/assets/prompts/core/standard/archive/v2/analyse.prompt.yaml +0 -151
  58. package/assets/prompts/core/standard/archive/v2/create.prompt.yaml +0 -151
  59. package/assets/prompts/core/standard/archive/v2/materialise.prompt.yaml +0 -132
  60. package/assets/prompts/core/standard/archive/v2/realize.prompt.yaml +0 -147
  61. package/assets/prompts/core/standard/archive/v3/README.md +0 -279
  62. package/assets/prompts/core/standard/archive/v3/analyse.prompt.yaml +0 -309
  63. package/assets/prompts/core/standard/archive/v3/create.prompt.yaml +0 -351
  64. package/assets/prompts/core/standard/archive/v3/materialise.prompt.yaml +0 -247
  65. package/assets/prompts/core/standard/archive/v3/realize.prompt.yaml +0 -344
  66. package/assets/prompts/core/standard/archive/v4/README.md +0 -79
  67. package/assets/prompts/core/standard/archive/v4/analyse.prompt.yaml +0 -204
  68. package/assets/prompts/core/standard/archive/v4/create.prompt.yaml +0 -185
  69. package/assets/prompts/core/standard/archive/v5/README.md +0 -224
  70. package/assets/prompts/core/standard/archive/v5/analyse.prompt.yaml +0 -209
  71. package/assets/prompts/core/standard/archive/v5/create.prompt.yaml +0 -225
  72. package/assets/prompts/core/standard/archive/v5/materialise.prompt.yaml +0 -242
  73. package/assets/prompts/core/standard/archive/v5/realize.prompt.yaml +0 -336
  74. package/assets/prompts/core/standard/archive/v6/README.md +0 -187
  75. package/assets/prompts/core/standard/archive/v6/analyse.prompt.yaml +0 -219
  76. package/assets/prompts/core/standard/archive/v6/create.prompt.yaml +0 -180
  77. package/assets/prompts/core/standard/archive/v6/materialise.prompt.yaml +0 -203
  78. package/assets/prompts/core/standard/archive/v6/realize.prompt.yaml +0 -215
  79. package/assets/prompts/core/standard/archive/v7/analyse.prompt.nick.yaml +0 -144
  80. package/assets/prompts/core/standard/archive/v7/analyse.prompt.old.yaml +0 -146
  81. package/assets/prompts/core/standard/archive/v7/analyse.prompt.yaml +0 -129
  82. package/assets/prompts/core/standard/archive/v7/create.prompt.yaml +0 -146
  83. package/assets/prompts/core/standard/archive/v7/materialise.prompt.yaml +0 -297
  84. package/assets/prompts/core/standard/archive/v7/realize.prompt.yaml +0 -294
  85. package/assets/prompts/core/standard/archive/v8/README.md +0 -400
  86. package/assets/prompts/core/standard/archive/v8/analyse.prompt.yaml +0 -185
  87. package/assets/prompts/core/standard/archive/v8/create.prompt.yaml +0 -203
  88. package/assets/prompts/core/standard/archive/v8/materialise.prompt.yaml +0 -297
  89. package/assets/prompts/core/standard/archive/v8/realize.prompt.yaml +0 -294
  90. package/assets/prompts/templates/api-orchestrator-template.yaml +0 -188
  91. package/assets/prompts/templates/claude-integration-template.md +0 -121
  92. package/assets/prompts/templates/terminal-prompt-template.md +0 -97
package/dist/ai/index.js CHANGED
@@ -1,32 +1,52 @@
1
1
  /**
2
- * SpecVerse AI Module
3
- * Main export point for all AI functionality
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
- export * from './config-loader.js';
27
+ // Sessions tracked job queue for multi-step spec generation.
9
28
  export { SessionManager } from './session/session-manager.js';
10
- // Behavior AI service — session-based Claude conversation for realize-time code generation
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
- // ProvidersLLM execution layer
16
- export { LLMProvider, LLMProviderRegistry } from './providers/llm-provider.js';
17
- export { ProviderFactory } from './providers/provider-factory.js';
18
- export { OpenAIProvider } from './providers/openai-provider.js';
19
- export { AnthropicProvider } from './providers/anthropic-provider.js';
20
- export { InteractiveProvider } from './providers/interactive-provider.js';
21
- // Orchestratormulti-step workflow engine
22
- export { SpecVerseOrchestrator } from './orchestrator/specverse-orchestrator.js';
23
- export { InteractiveWorkflow } from './orchestrator/interactive-workflow.js';
24
- // Config provider and workflow configuration
25
- export { ConfigLoader, configLoader } from './config/index.js';
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 = '3.5.2';
29
- capabilities = ['ai-prompts', 'ai-suggestions', 'ai-templates', 'ai-orchestration', 'ai-execution'];
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 CRUD controllers for each controller listed');
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 holds a session-based conversation
134
- * with Claude (mirrors app-demo's runtime AI guard generation).
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
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"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * claude-cli provider — wraps the locally-installed `claude` binary as an
3
+ * AI SDK v3 LanguageModel. Preserves the Max-subscription zero-cost path
4
+ * by spawning `claude --print` with the user's authenticated session.
5
+ *
6
+ * Session caching: first call uses `--session-id <uuid>`, subsequent calls
7
+ * `--resume <uuid>` — gives the same 98% token savings the Claude Code
8
+ * session mechanism provides.
9
+ *
10
+ * If the user has run `spv skill install --global`, the SpecVerse skill is
11
+ * auto-loaded by Claude Code into every session started by this provider.
12
+ * See detectInstalledSkill() in ../skill-detection.ts.
13
+ */
14
+ import { spawn, execSync } from 'child_process';
15
+ import { existsSync } from 'fs';
16
+ import { randomUUID } from 'crypto';
17
+ import { join } from 'path';
18
+ /**
19
+ * Find the first working `claude` binary. Tries:
20
+ * 1. Explicit path override if given
21
+ * 2. ~/.claude/local/claude (Claude Code's user install)
22
+ * 3. `claude` on PATH (Homebrew / manual installs)
23
+ * Returns null if none respond to `--version`.
24
+ */
25
+ export function detectClaudePath(override) {
26
+ const home = process.env.HOME || '';
27
+ const candidates = override
28
+ ? [override]
29
+ : [join(home, '.claude', 'local', 'claude'), 'claude'];
30
+ for (const candidate of candidates) {
31
+ // For explicit paths, require existence on disk before exec.
32
+ if (candidate !== 'claude' && !existsSync(candidate))
33
+ continue;
34
+ try {
35
+ execSync(`${candidate} --version`, { stdio: 'ignore', timeout: 5000 });
36
+ return candidate;
37
+ }
38
+ catch {
39
+ /* try next */
40
+ }
41
+ }
42
+ return null;
43
+ }
44
+ /** True if any candidate claude binary responds to --version. */
45
+ export function isClaudeCliAvailable(override) {
46
+ return detectClaudePath(override) !== null;
47
+ }
48
+ /**
49
+ * Extract a flat { system, user } pair from the AI SDK's message array.
50
+ * The claude CLI's --system-prompt / -p flags only accept one string each.
51
+ * For now we concatenate any system messages, and join all user turns with
52
+ * blank lines. (In practice behavior generation is single-turn; this
53
+ * provider isn't targeting multi-turn conversational use.)
54
+ */
55
+ function flattenPrompt(messages) {
56
+ const systemChunks = [];
57
+ const userChunks = [];
58
+ for (const msg of messages) {
59
+ if (msg.role === 'system') {
60
+ systemChunks.push(msg.content);
61
+ }
62
+ else if (msg.role === 'user') {
63
+ for (const part of msg.content) {
64
+ if (part.type === 'text')
65
+ userChunks.push(part.text);
66
+ }
67
+ }
68
+ else if (msg.role === 'assistant') {
69
+ // Prior assistant turns get included into the user prompt as context
70
+ // so the CLI can see them. Unusual for our use case.
71
+ const text = msg.content
72
+ .filter((p) => p.type === 'text')
73
+ .map((p) => p.text)
74
+ .join('');
75
+ if (text)
76
+ userChunks.push(`[Assistant previously said]\n${text}`);
77
+ }
78
+ }
79
+ return {
80
+ system: systemChunks.join('\n\n').trim(),
81
+ user: userChunks.join('\n\n').trim(),
82
+ };
83
+ }
84
+ /**
85
+ * Factory for a claude-cli-backed LanguageModelV3. Session state is held
86
+ * inside the closure, so each call to claudeCli() gets its own session.
87
+ */
88
+ export function claudeCli(options = {}) {
89
+ const claudePath = options.claudePath || detectClaudePath() || 'claude';
90
+ const timeout = options.timeout ?? 120_000;
91
+ const modelId = options.model ?? 'default';
92
+ const sessionId = randomUUID();
93
+ let initialized = false;
94
+ async function spawnClaude(args, stdinPrompt) {
95
+ return new Promise((resolve, reject) => {
96
+ const proc = spawn(claudePath, args, {
97
+ stdio: ['ignore', 'pipe', 'pipe'],
98
+ env: { ...process.env },
99
+ });
100
+ let out = '';
101
+ let err = '';
102
+ const timer = setTimeout(() => {
103
+ proc.kill();
104
+ reject(new Error(`claude-cli timed out after ${timeout}ms`));
105
+ }, timeout);
106
+ proc.stdout?.on('data', (d) => {
107
+ out += d.toString();
108
+ });
109
+ proc.stderr?.on('data', (d) => {
110
+ err += d.toString();
111
+ });
112
+ proc.on('close', (code) => {
113
+ clearTimeout(timer);
114
+ if (code !== 0) {
115
+ reject(new Error(`claude-cli exited ${code}: ${err || out}`));
116
+ return;
117
+ }
118
+ resolve(out);
119
+ });
120
+ proc.on('error', (e) => {
121
+ clearTimeout(timer);
122
+ reject(e);
123
+ });
124
+ });
125
+ }
126
+ const model = {
127
+ specificationVersion: 'v3',
128
+ provider: 'claude-cli',
129
+ modelId,
130
+ supportedUrls: {},
131
+ async doGenerate(opts) {
132
+ const { system, user } = flattenPrompt(opts.prompt);
133
+ const args = ['--print'];
134
+ if (!initialized) {
135
+ args.push('--session-id', sessionId);
136
+ if (system)
137
+ args.push('--system-prompt', system);
138
+ }
139
+ else {
140
+ args.push('--resume', sessionId);
141
+ }
142
+ if (modelId !== 'default')
143
+ args.push('--model', modelId);
144
+ args.push('-p', user);
145
+ const out = await spawnClaude(args, user);
146
+ initialized = true;
147
+ return {
148
+ content: [{ type: 'text', text: out.trim() }],
149
+ finishReason: { unified: 'stop', raw: undefined },
150
+ usage: {
151
+ // The CLI doesn't expose token counts in --print mode.
152
+ inputTokens: { total: undefined, noCache: undefined, cacheRead: undefined, cacheWrite: undefined },
153
+ outputTokens: { total: undefined, text: undefined, reasoning: undefined },
154
+ },
155
+ warnings: [],
156
+ };
157
+ },
158
+ async doStream(opts) {
159
+ // v1 of this provider: no real streaming — buffer the doGenerate result
160
+ // and emit it as a single chunk. Revisit if behavior-service ever wants
161
+ // partial-output UX.
162
+ const result = await model.doGenerate(opts);
163
+ const text = result.content
164
+ .filter((c) => c.type === 'text')
165
+ .map((c) => c.text)
166
+ .join('');
167
+ const parts = [
168
+ { type: 'text-start', id: 'single' },
169
+ { type: 'text-delta', id: 'single', delta: text },
170
+ { type: 'text-end', id: 'single' },
171
+ { type: 'finish', finishReason: { unified: 'stop', raw: undefined }, usage: result.usage },
172
+ ];
173
+ const stream = new ReadableStream({
174
+ start(controller) {
175
+ for (const part of parts)
176
+ controller.enqueue(part);
177
+ controller.close();
178
+ },
179
+ });
180
+ return { stream };
181
+ },
182
+ };
183
+ return model;
184
+ }
185
+ //# sourceMappingURL=claude-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../../src/ai/providers/claude-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAmB5B;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,QAAQ;QACzB,CAAC,CAAC,CAAC,QAAQ,CAAC;QACZ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEzD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,6DAA6D;QAC7D,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAC/D,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,SAAS,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,oBAAoB,CAAC,QAAiB;IACpD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,QAAkC;IACvD,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,qEAAqE;YACrE,qDAAqD;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO;iBACrB,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;YACZ,IAAI,IAAI;gBAAE,UAAU,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QACxC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,gBAAgB,EAAE,IAAI,QAAQ,CAAC;IACxE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IAE3C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,UAAU,WAAW,CAAC,IAAc,EAAE,WAAmB;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBACnC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;aACxB,CAAC,CAAC;YAEH,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,OAAO,IAAI,CAAC,CAAC,CAAC;YAC/D,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACpC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;gBACpC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC9D,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACrB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAoB;QAC7B,oBAAoB,EAAE,IAAI;QAC1B,QAAQ,EAAE,YAAY;QACtB,OAAO;QACP,aAAa,EAAE,EAAE;QAEjB,KAAK,CAAC,UAAU,CAAC,IAAgC;YAC/C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpD,MAAM,IAAI,GAAa,CAAC,SAAS,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBACrC,IAAI,MAAM;oBAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEtB,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,WAAW,GAAG,IAAI,CAAC;YAEnB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE;gBACjD,KAAK,EAAE;oBACL,uDAAuD;oBACvD,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;oBAClG,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;iBAC1E;gBACD,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,IAAgC;YAC7C,wEAAwE;YACxE,wEAAwE;YACxE,qBAAqB;YACrB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO;iBACxB,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,MAAM,KAAK,GAAgC;gBACzC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE;gBACpC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjD,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE;gBAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;aAC3F,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,cAAc,CAA4B;gBAC3D,KAAK,CAAC,UAAU;oBACd,KAAK,MAAM,IAAI,IAAI,KAAK;wBAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;aACF,CAAC,CAAC;YAEH,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,6 +1,9 @@
1
- export * from './llm-provider.js';
2
- export * from './provider-factory.js';
3
- export * from './openai-provider.js';
4
- export * from './anthropic-provider.js';
5
- export * from './interactive-provider.js';
1
+ /**
2
+ * AI providers — custom LanguageModelV3 implementations that plug into the
3
+ * Vercel AI SDK. Most consumers should call `resolveModel()` from the parent
4
+ * module rather than instantiating these directly.
5
+ */
6
+ export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './claude-cli.js';
7
+ export type { ClaudeCliOptions } from './claude-cli.js';
8
+ export { stubModel } from './stub.js';
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
@@ -1,6 +1,8 @@
1
- export * from './llm-provider.js';
2
- export * from './provider-factory.js';
3
- export * from './openai-provider.js';
4
- export * from './anthropic-provider.js';
5
- export * from './interactive-provider.js';
1
+ /**
2
+ * AI providers — custom LanguageModelV3 implementations that plug into the
3
+ * Vercel AI SDK. Most consumers should call `resolveModel()` from the parent
4
+ * module rather than instantiating these directly.
5
+ */
6
+ export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './claude-cli.js';
7
+ export { stubModel } from './stub.js';
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * stub provider — an AI SDK v3 LanguageModel that doesn't call any LLM.
3
+ * Emits the user prompt verbatim with a marker comment so the ambient
4
+ * runtime (MCP client, user's editor, etc.) can see what was asked and
5
+ * execute it themselves.
6
+ *
7
+ * Used in two scenarios:
8
+ * 1. Inside an MCP server context (MCP_SERVER=1) — the Claude Desktop /
9
+ * client session IS the LLM; calling a separate API would be wasteful.
10
+ * 2. As the safe default when no provider is configured — gives a clear
11
+ * diagnostic instead of a silent failure or a cryptic auth error.
12
+ */
13
+ import type { LanguageModelV3 } from '@ai-sdk/provider';
14
+ export declare function stubModel(): LanguageModelV3;
15
+ //# sourceMappingURL=stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/stub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,kBAAkB,CAAC;AAkB1B,wBAAgB,SAAS,IAAI,eAAe,CAqD3C"}
@@ -0,0 +1,64 @@
1
+ function formatAsText(messages) {
2
+ const sections = [];
3
+ for (const msg of messages) {
4
+ if (msg.role === 'system') {
5
+ sections.push(`--- system ---\n${msg.content}`);
6
+ }
7
+ else if (msg.role === 'user') {
8
+ const text = msg.content
9
+ .filter((p) => p.type === 'text')
10
+ .map((p) => p.text)
11
+ .join('');
12
+ sections.push(`--- user ---\n${text}`);
13
+ }
14
+ }
15
+ return sections.join('\n\n');
16
+ }
17
+ export function stubModel() {
18
+ const model = {
19
+ specificationVersion: 'v3',
20
+ provider: 'specverse-stub',
21
+ modelId: 'stub',
22
+ supportedUrls: {},
23
+ async doGenerate(opts) {
24
+ const text = '// SPECVERSE_AI_PROVIDER=stub — no LLM was called.\n' +
25
+ '// The ambient runtime (MCP client, agent, or user) is expected to\n' +
26
+ '// execute the prompt below. To enable real generation, set\n' +
27
+ '// SPECVERSE_AI_PROVIDER to one of: claude-cli, anthropic, openai-compatible.\n' +
28
+ '\n' +
29
+ formatAsText(opts.prompt);
30
+ return {
31
+ content: [{ type: 'text', text }],
32
+ finishReason: { unified: 'stop', raw: undefined },
33
+ usage: {
34
+ inputTokens: { total: 0, noCache: 0, cacheRead: 0, cacheWrite: 0 },
35
+ outputTokens: { total: 0, text: 0, reasoning: 0 },
36
+ },
37
+ warnings: [],
38
+ };
39
+ },
40
+ async doStream(opts) {
41
+ const result = await model.doGenerate(opts);
42
+ const text = result.content
43
+ .filter((c) => c.type === 'text')
44
+ .map((c) => c.text)
45
+ .join('');
46
+ const parts = [
47
+ { type: 'text-start', id: 'stub' },
48
+ { type: 'text-delta', id: 'stub', delta: text },
49
+ { type: 'text-end', id: 'stub' },
50
+ { type: 'finish', finishReason: { unified: 'stop', raw: undefined }, usage: result.usage },
51
+ ];
52
+ const stream = new ReadableStream({
53
+ start(controller) {
54
+ for (const part of parts)
55
+ controller.enqueue(part);
56
+ controller.close();
57
+ },
58
+ });
59
+ return { stream };
60
+ },
61
+ };
62
+ return model;
63
+ }
64
+ //# sourceMappingURL=stub.js.map