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.
Files changed (134) hide show
  1. package/dist/src/cli/commands/init.d.ts.map +1 -1
  2. package/dist/src/cli/commands/init.js +25 -2
  3. package/dist/src/cli/commands/init.js.map +1 -1
  4. package/dist/src/cli/helpers/ado-area-selector.d.ts.map +1 -1
  5. package/dist/src/cli/helpers/ado-area-selector.js +13 -0
  6. package/dist/src/cli/helpers/ado-area-selector.js.map +1 -1
  7. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +5 -1
  8. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
  9. package/dist/src/cli/helpers/init/living-docs-preflight.js +80 -28
  10. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
  11. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  12. package/dist/src/cli/helpers/issue-tracker/index.js +7 -2
  13. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  14. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts +7 -0
  15. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts.map +1 -1
  16. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +33 -2
  17. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js.map +1 -1
  18. package/dist/src/cli/workers/brownfield-worker.d.ts +13 -0
  19. package/dist/src/cli/workers/brownfield-worker.d.ts.map +1 -1
  20. package/dist/src/cli/workers/brownfield-worker.js +154 -0
  21. package/dist/src/cli/workers/brownfield-worker.js.map +1 -1
  22. package/dist/src/cli/workers/clone-worker.js +19 -3
  23. package/dist/src/cli/workers/clone-worker.js.map +1 -1
  24. package/dist/src/cli/workers/living-docs-worker.js +272 -11
  25. package/dist/src/cli/workers/living-docs-worker.js.map +1 -1
  26. package/dist/src/core/background/brownfield-launcher.d.ts +2 -1
  27. package/dist/src/core/background/brownfield-launcher.d.ts.map +1 -1
  28. package/dist/src/core/background/brownfield-launcher.js.map +1 -1
  29. package/dist/src/core/background/types.d.ts +10 -2
  30. package/dist/src/core/background/types.d.ts.map +1 -1
  31. package/dist/src/core/discrepancy/brownfield-types.d.ts +3 -1
  32. package/dist/src/core/discrepancy/brownfield-types.d.ts.map +1 -1
  33. package/dist/src/core/living-docs/board-matcher.d.ts +120 -0
  34. package/dist/src/core/living-docs/board-matcher.d.ts.map +1 -0
  35. package/dist/src/core/living-docs/board-matcher.js +466 -0
  36. package/dist/src/core/living-docs/board-matcher.js.map +1 -0
  37. package/dist/src/core/living-docs/feature-archiver.d.ts +39 -0
  38. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  39. package/dist/src/core/living-docs/feature-archiver.js +197 -0
  40. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  41. package/dist/src/core/living-docs/foundation-builder.js +1 -1
  42. package/dist/src/core/living-docs/foundation-builder.js.map +1 -1
  43. package/dist/src/core/living-docs/living-docs-sync.d.ts +19 -8
  44. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  45. package/dist/src/core/living-docs/living-docs-sync.js +148 -52
  46. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  47. package/dist/src/core/living-docs/suggestions-generator.js +1 -1
  48. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -1
  49. package/dist/src/core/living-docs/umbrella-detector.d.ts +4 -0
  50. package/dist/src/core/living-docs/umbrella-detector.d.ts.map +1 -1
  51. package/dist/src/core/living-docs/umbrella-detector.js +20 -1
  52. package/dist/src/core/living-docs/umbrella-detector.js.map +1 -1
  53. package/dist/src/core/living-docs/workitem-matcher.js +5 -5
  54. package/dist/src/core/living-docs/workitem-matcher.js.map +1 -1
  55. package/dist/src/core/llm/availability-messages.d.ts +33 -0
  56. package/dist/src/core/llm/availability-messages.d.ts.map +1 -0
  57. package/dist/src/core/llm/availability-messages.js +170 -0
  58. package/dist/src/core/llm/availability-messages.js.map +1 -0
  59. package/dist/src/core/llm/index.d.ts +34 -0
  60. package/dist/src/core/llm/index.d.ts.map +1 -0
  61. package/dist/src/core/llm/index.js +35 -0
  62. package/dist/src/core/llm/index.js.map +1 -0
  63. package/dist/src/core/llm/provider-factory.d.ts +48 -0
  64. package/dist/src/core/llm/provider-factory.d.ts.map +1 -0
  65. package/dist/src/core/llm/provider-factory.js +274 -0
  66. package/dist/src/core/llm/provider-factory.js.map +1 -0
  67. package/dist/src/core/llm/providers/anthropic-provider.d.ts +66 -0
  68. package/dist/src/core/llm/providers/anthropic-provider.d.ts.map +1 -0
  69. package/dist/src/core/llm/providers/anthropic-provider.js +195 -0
  70. package/dist/src/core/llm/providers/anthropic-provider.js.map +1 -0
  71. package/dist/src/core/llm/providers/azure-openai-provider.d.ts +47 -0
  72. package/dist/src/core/llm/providers/azure-openai-provider.d.ts.map +1 -0
  73. package/dist/src/core/llm/providers/azure-openai-provider.js +116 -0
  74. package/dist/src/core/llm/providers/azure-openai-provider.js.map +1 -0
  75. package/dist/src/core/llm/providers/bedrock-provider.d.ts +44 -0
  76. package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -0
  77. package/dist/src/core/llm/providers/bedrock-provider.js +149 -0
  78. package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -0
  79. package/dist/src/core/llm/providers/claude-code-provider.d.ts +115 -0
  80. package/dist/src/core/llm/providers/claude-code-provider.d.ts.map +1 -0
  81. package/dist/src/core/llm/providers/claude-code-provider.js +379 -0
  82. package/dist/src/core/llm/providers/claude-code-provider.js.map +1 -0
  83. package/dist/src/core/llm/providers/ollama-provider.d.ts +40 -0
  84. package/dist/src/core/llm/providers/ollama-provider.d.ts.map +1 -0
  85. package/dist/src/core/llm/providers/ollama-provider.js +116 -0
  86. package/dist/src/core/llm/providers/ollama-provider.js.map +1 -0
  87. package/dist/src/core/llm/providers/openai-provider.d.ts +44 -0
  88. package/dist/src/core/llm/providers/openai-provider.d.ts.map +1 -0
  89. package/dist/src/core/llm/providers/openai-provider.js +119 -0
  90. package/dist/src/core/llm/providers/openai-provider.js.map +1 -0
  91. package/dist/src/core/llm/providers/vertex-ai-provider.d.ts +46 -0
  92. package/dist/src/core/llm/providers/vertex-ai-provider.d.ts.map +1 -0
  93. package/dist/src/core/llm/providers/vertex-ai-provider.js +123 -0
  94. package/dist/src/core/llm/providers/vertex-ai-provider.js.map +1 -0
  95. package/dist/src/core/llm/types.d.ts +181 -0
  96. package/dist/src/core/llm/types.d.ts.map +1 -0
  97. package/dist/src/core/llm/types.js +56 -0
  98. package/dist/src/core/llm/types.js.map +1 -0
  99. package/dist/src/importers/item-converter.d.ts +4 -0
  100. package/dist/src/importers/item-converter.d.ts.map +1 -1
  101. package/dist/src/importers/item-converter.js +73 -12
  102. package/dist/src/importers/item-converter.js.map +1 -1
  103. package/dist/src/init/repo/types.d.ts +1 -1
  104. package/dist/src/living-docs/enterprise-analyzer.d.ts +160 -0
  105. package/dist/src/living-docs/enterprise-analyzer.d.ts.map +1 -0
  106. package/dist/src/living-docs/enterprise-analyzer.js +887 -0
  107. package/dist/src/living-docs/enterprise-analyzer.js.map +1 -0
  108. package/dist/src/living-docs/epic-id-allocator.d.ts +4 -0
  109. package/dist/src/living-docs/epic-id-allocator.d.ts.map +1 -1
  110. package/dist/src/living-docs/epic-id-allocator.js +4 -0
  111. package/dist/src/living-docs/epic-id-allocator.js.map +1 -1
  112. package/dist/src/living-docs/fs-id-allocator.d.ts +9 -0
  113. package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
  114. package/dist/src/living-docs/fs-id-allocator.js +16 -5
  115. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  116. package/dist/src/living-docs/smart-doc-organizer.d.ts +114 -0
  117. package/dist/src/living-docs/smart-doc-organizer.d.ts.map +1 -0
  118. package/dist/src/living-docs/smart-doc-organizer.js +535 -0
  119. package/dist/src/living-docs/smart-doc-organizer.js.map +1 -0
  120. package/package.json +1 -1
  121. package/plugins/specweave/commands/specweave-archive.md +69 -2
  122. package/plugins/specweave/commands/specweave-judge.md +265 -0
  123. package/plugins/specweave/commands/specweave-organize-docs.md +185 -0
  124. package/plugins/specweave/hooks/hooks.json +3 -3
  125. package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -0
  126. package/plugins/specweave/hooks/universal/hook-wrapper.sh +67 -0
  127. package/plugins/specweave-docs/commands/build.md +158 -0
  128. package/plugins/specweave-docs/commands/{docs-generate.md → generate.md} +7 -2
  129. package/plugins/specweave-docs/commands/health.md +268 -0
  130. package/plugins/specweave-docs/commands/{docs-init.md → init.md} +7 -2
  131. package/plugins/specweave-docs/commands/organize.md +184 -0
  132. package/plugins/specweave-docs/commands/preview.md +138 -0
  133. package/plugins/specweave-docs/skills/preview/SKILL.md +105 -0
  134. package/plugins/specweave-release/commands/specweave-release-npm.md +22 -235
@@ -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":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,WAAW,GACX,QAAQ,GACR,cAAc,GACd,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,oBAAoB;IACpB,QAAQ,EAAE,eAAe,CAAC;IAE1B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IAEd,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAEhB,kBAAkB;IAClB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IAEtB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,CAAE,SAAQ,cAAc;IAC1D,0CAA0C;IAC1C,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAE1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1E;;;;;;OAMG;IACH,iBAAiB,CAAC,CAAC,EACjB,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,CAAC;IAE9E;;;;;;;OAOG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhF;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAgBtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAqBvF,CAAC"}
@@ -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"}
@@ -254,6 +254,10 @@ export declare class ItemConverter {
254
254
  * - 2-level (ADO): specs/{containerId}/{projectId}/
255
255
  * - 1-level (GitHub): specs/{projectId}/
256
256
  * - Legacy: specs/ (no projectId)
257
+ *
258
+ * IMPORTANT: For 2-level structure, features ALWAYS go in the inner folder (board/area level),
259
+ * even when containerDirName == projectId (e.g., specs/nova-x-sandbox/nova-x-sandbox/).
260
+ * This is correct because the outer folder is PROJECT level, inner is BOARD level.
257
261
  */
258
262
  private getBaseDirectory;
259
263
  /**
@@ -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":"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"}