ado-sync 0.1.55 → 0.1.57
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/README.md +39 -0
- package/dist/__tests__/regressions.test.d.ts +1 -0
- package/dist/__tests__/regressions.test.js +140 -0
- package/dist/__tests__/regressions.test.js.map +1 -0
- package/dist/ai/generate-spec.d.ts +11 -9
- package/dist/ai/generate-spec.js +116 -96
- package/dist/ai/generate-spec.js.map +1 -1
- package/dist/ai/summarizer.d.ts +5 -5
- package/dist/ai/summarizer.js +243 -135
- package/dist/ai/summarizer.js.map +1 -1
- package/dist/azure/test-cases.d.ts +10 -1
- package/dist/azure/test-cases.js +61 -25
- package/dist/azure/test-cases.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.js +7 -2
- package/dist/config.js.map +1 -1
- package/dist/issues/ado-bugs.js +7 -3
- package/dist/issues/ado-bugs.js.map +1 -1
- package/dist/mcp-server.js +51 -27
- package/dist/mcp-server.js.map +1 -1
- package/dist/parsers/javascript.js +2 -1
- package/dist/parsers/javascript.js.map +1 -1
- package/dist/sync/cache.js +3 -1
- package/dist/sync/cache.js.map +1 -1
- package/dist/sync/engine.d.ts +12 -1
- package/dist/sync/engine.js +226 -165
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/publish-results.js +64 -21
- package/dist/sync/publish-results.js.map +1 -1
- package/dist/sync/writeback.js +22 -5
- package/dist/sync/writeback.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/docs/advanced.md +17 -18
- package/docs/cli.md +74 -4
- package/docs/publish-test-results.md +3 -3
- package/mkdocs.yml +39 -0
- package/package.json +23 -14
- package/requirements-docs.txt +4 -0
- package/scripts/build_site.sh +6 -0
package/README.md
CHANGED
|
@@ -85,4 +85,43 @@ Minimum config:
|
|
|
85
85
|
| VS Code Extension | [docs/vscode-extension.md](docs/vscode-extension.md) |
|
|
86
86
|
| Troubleshooting | [docs/troubleshooting.md](docs/troubleshooting.md) |
|
|
87
87
|
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## AI providers
|
|
91
|
+
|
|
92
|
+
ado-sync supports multiple AI providers for test-step summarisation (`push`/`pull`/`status`), spec generation (`generate`), and failure analysis (`publish-test-results`). All provider SDKs are **optional** — install only what you need.
|
|
93
|
+
|
|
94
|
+
| Provider | Commands | SDK (install separately) | Auth |
|
|
95
|
+
|---|---|---|---|
|
|
96
|
+
| `heuristic` | push / pull / status | none — built-in | none |
|
|
97
|
+
| `local` | push / pull / status | `node-llama-cpp` *(included)* | GGUF model file path |
|
|
98
|
+
| `ollama` | all AI commands | `npm i ollama` | local Ollama server |
|
|
99
|
+
| `openai` | all AI commands | `npm i openai` | `$OPENAI_API_KEY` |
|
|
100
|
+
| `anthropic` | all AI commands | `npm i @anthropic-ai/sdk` | `$ANTHROPIC_API_KEY` |
|
|
101
|
+
| `huggingface` | all AI commands | `npm i openai` | `$HF_TOKEN` |
|
|
102
|
+
| `bedrock` | all AI commands | `npm i @aws-sdk/client-bedrock-runtime` | AWS credential chain |
|
|
103
|
+
| `azureai` | all AI commands | `npm i openai` | `$AZURE_OPENAI_KEY` + `--ai-url` |
|
|
104
|
+
| `github` | all AI commands | `npm i openai` | `$GITHUB_TOKEN` (auto-detected) |
|
|
105
|
+
| `azureinference` | all AI commands | `npm i @azure-rest/ai-inference @azure/core-auth` | `$AZURE_AI_KEY` + `--ai-url` |
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# GitHub Models — free tier available, no billing setup needed
|
|
109
|
+
ado-sync push --ai-provider github --ai-model gpt-4o
|
|
110
|
+
|
|
111
|
+
# Anthropic
|
|
112
|
+
ado-sync push --ai-provider anthropic --ai-key $ANTHROPIC_API_KEY
|
|
113
|
+
|
|
114
|
+
# AWS Bedrock
|
|
115
|
+
ado-sync push --ai-provider bedrock --ai-model anthropic.claude-3-haiku-20240307-v1:0 --ai-region us-east-1
|
|
116
|
+
|
|
117
|
+
# Azure AI Inference (AI Foundry)
|
|
118
|
+
ado-sync generate --story-ids 1234 --ai-provider azureinference \
|
|
119
|
+
--ai-url https://myendpoint.inference.azure.com --ai-model gpt-4o --ai-key $AZURE_AI_KEY
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Set once in `ado-sync.json` to apply to all commands:
|
|
123
|
+
```json
|
|
124
|
+
{ "sync": { "ai": { "provider": "github", "model": "gpt-4o" } } }
|
|
125
|
+
```
|
|
126
|
+
|
|
88
127
|
> **LLM / AI crawlers:** [`llms.txt`](llms.txt) contains a single-file summary of the entire project — config schema, CLI flags, ID writeback formats, and the full doc index.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
+
const fs = __importStar(require("node:fs"));
|
|
41
|
+
const os = __importStar(require("node:os"));
|
|
42
|
+
const path = __importStar(require("node:path"));
|
|
43
|
+
const node_test_1 = __importDefault(require("node:test"));
|
|
44
|
+
const test_cases_1 = require("../azure/test-cases");
|
|
45
|
+
const javascript_1 = require("../parsers/javascript");
|
|
46
|
+
const engine_1 = require("../sync/engine");
|
|
47
|
+
const writeback_1 = require("../sync/writeback");
|
|
48
|
+
function makeConfig(overrides = {}) {
|
|
49
|
+
return {
|
|
50
|
+
orgUrl: 'https://dev.azure.com/example',
|
|
51
|
+
project: 'ExampleProject',
|
|
52
|
+
auth: { type: 'pat', token: 'token' },
|
|
53
|
+
testPlan: { id: 1 },
|
|
54
|
+
local: { type: 'javascript', include: '**/*.test.ts' },
|
|
55
|
+
sync: { tagPrefix: 'tc' },
|
|
56
|
+
...overrides,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function makeParsedTest(overrides = {}) {
|
|
60
|
+
return {
|
|
61
|
+
filePath: '/tmp/example.test.ts',
|
|
62
|
+
title: 'login works',
|
|
63
|
+
steps: [{ keyword: 'Then', text: 'the dashboard is shown', expected: 'dashboard is visible' }],
|
|
64
|
+
tags: [],
|
|
65
|
+
line: 1,
|
|
66
|
+
...overrides,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
(0, node_test_1.default)('buildPushDiff flags expected-result-only step changes', () => {
|
|
70
|
+
const config = makeConfig();
|
|
71
|
+
const local = makeParsedTest();
|
|
72
|
+
const remote = {
|
|
73
|
+
id: 42,
|
|
74
|
+
title: 'login works',
|
|
75
|
+
description: '',
|
|
76
|
+
tags: [],
|
|
77
|
+
steps: [{ action: 'Then the dashboard is shown', expected: 'different expected result' }],
|
|
78
|
+
};
|
|
79
|
+
const diff = (0, engine_1.buildPushDiff)(local, remote, config);
|
|
80
|
+
strict_1.default.deepEqual(diff.changedFields, ['steps', 'description']);
|
|
81
|
+
strict_1.default.equal(diff.diffDetail[0]?.field, 'steps');
|
|
82
|
+
strict_1.default.match(diff.diffDetail[0]?.local ?? '', /dashboard is visible/);
|
|
83
|
+
strict_1.default.match(diff.diffDetail[0]?.remote ?? '', /different expected result/);
|
|
84
|
+
});
|
|
85
|
+
(0, node_test_1.default)('failOnParseErrors aborts with file details', () => {
|
|
86
|
+
strict_1.default.throws(() => (0, engine_1.failOnParseErrors)('push', [{ filePath: '/tmp/bad.feature', message: 'unexpected token' }]), (err) => {
|
|
87
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
88
|
+
return msg.includes('Aborting push') &&
|
|
89
|
+
msg.includes('/tmp/bad.feature') &&
|
|
90
|
+
msg.includes('unexpected token');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
(0, node_test_1.default)('updateTestCase removes stale outline parameter fields when scenario is no longer parametrized', async () => {
|
|
94
|
+
let updatePatch;
|
|
95
|
+
const wit = {
|
|
96
|
+
getWorkItem: async () => ({
|
|
97
|
+
fields: {
|
|
98
|
+
'System.Tags': 'smoke',
|
|
99
|
+
'Microsoft.VSTS.TCM.Parameters': '<parameters />',
|
|
100
|
+
'Microsoft.VSTS.TCM.LocalDataSource': '<NewDataSet />',
|
|
101
|
+
},
|
|
102
|
+
}),
|
|
103
|
+
updateWorkItem: async (_doc, patch) => {
|
|
104
|
+
updatePatch = patch;
|
|
105
|
+
return {};
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
const client = {
|
|
109
|
+
getWitApi: async () => wit,
|
|
110
|
+
};
|
|
111
|
+
await (0, test_cases_1.updateTestCase)(client, 99, makeParsedTest(), makeConfig());
|
|
112
|
+
strict_1.default.ok(updatePatch, 'expected updateWorkItem to be called');
|
|
113
|
+
strict_1.default.ok(updatePatch.some((p) => p.op === 'remove' && p.path === '/fields/Microsoft.VSTS.TCM.Parameters'));
|
|
114
|
+
strict_1.default.ok(updatePatch.some((p) => p.op === 'remove' && p.path === '/fields/Microsoft.VSTS.TCM.LocalDataSource'));
|
|
115
|
+
});
|
|
116
|
+
(0, node_test_1.default)('writebackDocComment preserves user-authored JSDoc and parser ignores ado-sync marker', async () => {
|
|
117
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ado-sync-test-'));
|
|
118
|
+
const filePath = path.join(tempDir, 'sample.test.ts');
|
|
119
|
+
fs.writeFileSync(filePath, [
|
|
120
|
+
'/**',
|
|
121
|
+
' * Existing user documentation',
|
|
122
|
+
' */',
|
|
123
|
+
"test('user keeps docs', async () => {});",
|
|
124
|
+
'',
|
|
125
|
+
].join('\n'));
|
|
126
|
+
const parsedBefore = (0, javascript_1.parseJavaScriptFile)(filePath, 'tc');
|
|
127
|
+
strict_1.default.equal(parsedBefore[0]?.title, 'Existing user documentation');
|
|
128
|
+
const steps = [
|
|
129
|
+
{ keyword: 'Step', text: 'open the app' },
|
|
130
|
+
{ keyword: 'Then', text: 'see the dashboard' },
|
|
131
|
+
];
|
|
132
|
+
(0, writeback_1.writebackDocComment)({ ...makeParsedTest({ filePath, line: 4, title: 'user keeps docs', steps }), description: 'AI summary' }, 'user keeps docs', 'AI summary', steps);
|
|
133
|
+
const updated = fs.readFileSync(filePath, 'utf8');
|
|
134
|
+
strict_1.default.match(updated, /Existing user documentation/);
|
|
135
|
+
strict_1.default.equal((updated.match(/ado-sync:ai-summary/g) ?? []).length, 1);
|
|
136
|
+
const parsedAfter = (0, javascript_1.parseJavaScriptFile)(filePath, 'tc');
|
|
137
|
+
strict_1.default.equal(parsedAfter[0]?.title, 'user keeps docs');
|
|
138
|
+
strict_1.default.equal(parsedAfter[0]?.description, 'AI summary');
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=regressions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regressions.test.js","sourceRoot":"","sources":["../../src/__tests__/regressions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,21 +15,23 @@
|
|
|
15
15
|
* gherkin — BDD .feature file with Scenario and Scenario Outline
|
|
16
16
|
*/
|
|
17
17
|
import { AdoStory } from '../azure/work-items';
|
|
18
|
-
export type AiGenerateProvider = 'local' | 'ollama' | 'openai' | 'anthropic' | 'huggingface' | 'bedrock' | 'azureai';
|
|
18
|
+
export type AiGenerateProvider = 'local' | 'ollama' | 'openai' | 'anthropic' | 'huggingface' | 'bedrock' | 'azureai' | 'github' | 'azureinference';
|
|
19
19
|
export interface AiGenerateOpts {
|
|
20
20
|
provider: AiGenerateProvider;
|
|
21
21
|
/**
|
|
22
22
|
* Model identifier:
|
|
23
|
-
* local:
|
|
24
|
-
* ollama:
|
|
25
|
-
* openai:
|
|
26
|
-
* anthropic:
|
|
27
|
-
* huggingface:
|
|
28
|
-
* bedrock:
|
|
29
|
-
* azureai:
|
|
23
|
+
* local: path to .gguf file
|
|
24
|
+
* ollama: model tag (e.g. gemma-4-e4b-it)
|
|
25
|
+
* openai: model name (e.g. gpt-4o)
|
|
26
|
+
* anthropic: model name (e.g. claude-sonnet-4-6)
|
|
27
|
+
* huggingface: model id (e.g. google/gemma-4-e4b-it)
|
|
28
|
+
* bedrock: model id (e.g. anthropic.claude-3-haiku-20240307-v1:0)
|
|
29
|
+
* azureai: deployment name (e.g. gpt-4o)
|
|
30
|
+
* github: GitHub Models model name (e.g. gpt-4o, gemma-4-e4b-it)
|
|
31
|
+
* azureinference: model name deployed on Azure AI Inference endpoint
|
|
30
32
|
*/
|
|
31
33
|
model?: string;
|
|
32
|
-
/** Base URL override (ollama, openai-compatible, azureai full endpoint). */
|
|
34
|
+
/** Base URL override (ollama, openai-compatible, azureai/azureinference full endpoint). */
|
|
33
35
|
baseUrl?: string;
|
|
34
36
|
/** API key — or $ENV_VAR reference. */
|
|
35
37
|
apiKey?: string;
|
package/dist/ai/generate-spec.js
CHANGED
|
@@ -99,27 +99,9 @@ function buildPrompt(story, format) {
|
|
|
99
99
|
.replace('{DESCRIPTION}', story.description?.trim() || '(not provided)')
|
|
100
100
|
.replace('{AC}', story.acceptanceCriteria?.trim() || '(not provided)');
|
|
101
101
|
}
|
|
102
|
-
// ─── Shared
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
while (true) {
|
|
106
|
-
const res = await fetch(url, init);
|
|
107
|
-
if (res.status === 503 || res.status === 429) {
|
|
108
|
-
if (attempt >= maxRetries)
|
|
109
|
-
return res;
|
|
110
|
-
const retryAfter = res.headers.get('retry-after');
|
|
111
|
-
const delayMs = retryAfter
|
|
112
|
-
? parseInt(retryAfter, 10) * 1_000
|
|
113
|
-
: baseDelayMs * Math.pow(2, attempt);
|
|
114
|
-
const reason = res.status === 503 ? 'model loading' : 'rate limited';
|
|
115
|
-
process.stderr.write(` [ai-generate] ${provider} ${reason} — retrying in ${Math.round(delayMs / 1000)}s (${attempt + 1}/${maxRetries})\n`);
|
|
116
|
-
await new Promise((r) => setTimeout(r, delayMs));
|
|
117
|
-
attempt++;
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
return res;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
102
|
+
// ─── Shared helpers ───────────────────────────────────────────────────────────
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
|
+
const esmImport = new Function('m', 'return import(m)');
|
|
123
105
|
function resolveEnvVar(value) {
|
|
124
106
|
if (value.startsWith('$'))
|
|
125
107
|
return process.env[value.slice(1)] ?? value;
|
|
@@ -138,6 +120,9 @@ async function getLlamaSession(modelPath) {
|
|
|
138
120
|
const model = await llama.loadModel({ modelPath });
|
|
139
121
|
return { LlamaChatSession, model };
|
|
140
122
|
})();
|
|
123
|
+
promise.catch(() => {
|
|
124
|
+
llamaCache.delete(modelPath);
|
|
125
|
+
});
|
|
141
126
|
llamaCache.set(modelPath, promise);
|
|
142
127
|
return promise;
|
|
143
128
|
}
|
|
@@ -154,65 +139,96 @@ async function localProvider(prompt, modelPath) {
|
|
|
154
139
|
}
|
|
155
140
|
}
|
|
156
141
|
async function ollamaProvider(prompt, model, baseUrl) {
|
|
157
|
-
const res = await fetchWithRetry(`${baseUrl}/api/generate`, {
|
|
158
|
-
method: 'POST',
|
|
159
|
-
headers: { 'Content-Type': 'application/json' },
|
|
160
|
-
body: JSON.stringify({ model, prompt, stream: false }),
|
|
161
|
-
signal: AbortSignal.timeout(120_000),
|
|
162
|
-
}, 'ollama');
|
|
163
|
-
if (!res.ok)
|
|
164
|
-
throw new Error(`Ollama ${res.status}: ${await res.text()}`);
|
|
165
142
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
166
|
-
|
|
143
|
+
let Ollama;
|
|
144
|
+
try {
|
|
145
|
+
({ Ollama } = await esmImport('ollama'));
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
throw new Error("'ollama' provider requires the ollama package. Install it with: npm install ollama");
|
|
149
|
+
}
|
|
150
|
+
const client = new Ollama({ host: baseUrl });
|
|
151
|
+
const response = await client.chat({
|
|
152
|
+
model,
|
|
153
|
+
messages: [{ role: 'user', content: prompt }],
|
|
154
|
+
});
|
|
155
|
+
return response.message?.content ?? '';
|
|
167
156
|
}
|
|
168
|
-
async function openaiProvider(prompt, model, apiKey, baseUrl
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (!extraHeaders?.['api-key']) {
|
|
174
|
-
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
157
|
+
async function openaiProvider(prompt, model, apiKey, baseUrl) {
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
159
|
+
let OpenAI;
|
|
160
|
+
try {
|
|
161
|
+
({ OpenAI } = await esmImport('openai'));
|
|
175
162
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
163
|
+
catch {
|
|
164
|
+
throw new Error("'openai' provider requires the openai package. Install it with: npm install openai");
|
|
165
|
+
}
|
|
166
|
+
const client = new OpenAI({
|
|
167
|
+
apiKey,
|
|
168
|
+
...(baseUrl ? { baseURL: baseUrl.replace(/\/$/, '') } : {}),
|
|
169
|
+
});
|
|
170
|
+
const msg = await client.chat.completions.create({
|
|
171
|
+
model,
|
|
172
|
+
messages: [{ role: 'user', content: prompt }],
|
|
173
|
+
temperature: 0.3,
|
|
174
|
+
max_tokens: 4096,
|
|
175
|
+
});
|
|
176
|
+
return msg.choices[0]?.message?.content ?? '';
|
|
177
|
+
}
|
|
178
|
+
async function anthropicProvider(prompt, model, apiKey, baseUrl) {
|
|
179
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
+
let Anthropic;
|
|
181
|
+
try {
|
|
182
|
+
({ default: Anthropic } = await esmImport('@anthropic-ai/sdk'));
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
throw new Error("'anthropic' provider requires @anthropic-ai/sdk. Install it with: npm install @anthropic-ai/sdk");
|
|
186
|
+
}
|
|
187
|
+
const client = new Anthropic({
|
|
188
|
+
apiKey,
|
|
189
|
+
...(baseUrl ? { baseURL: baseUrl.replace(/\/$/, '') } : {}),
|
|
190
|
+
});
|
|
191
|
+
const msg = await client.messages.create({
|
|
192
|
+
model,
|
|
193
|
+
max_tokens: 4096,
|
|
194
|
+
messages: [{ role: 'user', content: prompt }],
|
|
195
|
+
});
|
|
196
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
197
|
+
return msg.content[0]?.text ?? '';
|
|
198
|
+
}
|
|
199
|
+
async function huggingfaceProvider(prompt, model, apiKey) {
|
|
200
|
+
// Hugging Face exposes an OpenAI-compatible /v1 endpoint — use the openai SDK with a custom baseURL
|
|
201
|
+
return openaiProvider(prompt, model, apiKey, 'https://api-inference.huggingface.co/v1');
|
|
202
|
+
}
|
|
203
|
+
async function githubProvider(prompt, model, apiKey) {
|
|
204
|
+
// GitHub Models is OpenAI-compatible — use the openai SDK with the GitHub Models endpoint
|
|
205
|
+
return openaiProvider(prompt, model, apiKey, 'https://models.inference.ai.azure.com');
|
|
206
|
+
}
|
|
207
|
+
async function azureinferenceProvider(prompt, model, apiKey, endpoint) {
|
|
208
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
209
|
+
let ModelClient, AzureKeyCredential;
|
|
210
|
+
try {
|
|
211
|
+
({ default: ModelClient } = await esmImport('@azure-rest/ai-inference'));
|
|
212
|
+
({ AzureKeyCredential } = await esmImport('@azure/core-auth'));
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
throw new Error("'azureinference' provider requires @azure-rest/ai-inference and @azure/core-auth. " +
|
|
216
|
+
'Install with: npm install @azure-rest/ai-inference @azure/core-auth');
|
|
217
|
+
}
|
|
218
|
+
const client = ModelClient(endpoint.replace(/\/$/, ''), new AzureKeyCredential(apiKey));
|
|
219
|
+
const response = await client.path('/chat/completions').post({
|
|
220
|
+
body: {
|
|
180
221
|
model,
|
|
181
222
|
messages: [{ role: 'user', content: prompt }],
|
|
182
223
|
temperature: 0.3,
|
|
183
224
|
max_tokens: 4096,
|
|
184
|
-
}),
|
|
185
|
-
signal: AbortSignal.timeout(120_000),
|
|
186
|
-
}, 'openai-compatible');
|
|
187
|
-
if (!res.ok)
|
|
188
|
-
throw new Error(`openai-compatible ${res.status}: ${await res.text()}`);
|
|
189
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
190
|
-
return (await res.json()).choices?.[0]?.message?.content ?? '';
|
|
191
|
-
}
|
|
192
|
-
async function anthropicProvider(prompt, model, apiKey, baseUrl) {
|
|
193
|
-
const res = await fetchWithRetry(`${baseUrl.replace(/\/$/, '')}/messages`, {
|
|
194
|
-
method: 'POST',
|
|
195
|
-
headers: {
|
|
196
|
-
'Content-Type': 'application/json',
|
|
197
|
-
'x-api-key': apiKey,
|
|
198
|
-
'anthropic-version': '2023-06-01',
|
|
199
225
|
},
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}),
|
|
205
|
-
signal: AbortSignal.timeout(120_000),
|
|
206
|
-
}, 'anthropic');
|
|
207
|
-
if (!res.ok)
|
|
208
|
-
throw new Error(`anthropic ${res.status}: ${await res.text()}`);
|
|
226
|
+
});
|
|
227
|
+
if (response.status !== '200') {
|
|
228
|
+
throw new Error(`Azure AI Inference ${response.status}: ${JSON.stringify(response.body)}`);
|
|
229
|
+
}
|
|
209
230
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
210
|
-
return
|
|
211
|
-
}
|
|
212
|
-
async function huggingfaceProvider(prompt, model, apiKey) {
|
|
213
|
-
// Use the OpenAI-compatible endpoint
|
|
214
|
-
const baseUrl = 'https://api-inference.huggingface.co/v1';
|
|
215
|
-
return openaiProvider(prompt, model, apiKey, baseUrl);
|
|
231
|
+
return response.body.choices?.[0]?.message?.content ?? '';
|
|
216
232
|
}
|
|
217
233
|
// ─── Bedrock credential pre-flight ───────────────────────────────────────────
|
|
218
234
|
function warnIfNoBedrockCredentials() {
|
|
@@ -315,31 +331,27 @@ async function bedrockProvider(prompt, model, region) {
|
|
|
315
331
|
'');
|
|
316
332
|
}
|
|
317
333
|
async function azureaiProvider(prompt, model, apiKey, baseUrl) {
|
|
318
|
-
// Azure OpenAI uses api-key header instead of Authorization: Bearer
|
|
319
|
-
// baseUrl should be the full endpoint:
|
|
320
|
-
// https://{resource}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version=2024-12-01-preview
|
|
321
|
-
// OR just https://{resource}.openai.azure.com — we'll append the path if needed
|
|
322
|
-
let url = baseUrl.replace(/\/$/, '');
|
|
323
|
-
if (!url.includes('/chat/completions')) {
|
|
324
|
-
url = `${url}/openai/deployments/${model}/chat/completions?api-version=2024-12-01-preview`;
|
|
325
|
-
}
|
|
326
|
-
const res = await fetchWithRetry(url, {
|
|
327
|
-
method: 'POST',
|
|
328
|
-
headers: {
|
|
329
|
-
'Content-Type': 'application/json',
|
|
330
|
-
'api-key': apiKey,
|
|
331
|
-
},
|
|
332
|
-
body: JSON.stringify({
|
|
333
|
-
messages: [{ role: 'user', content: prompt }],
|
|
334
|
-
temperature: 0.3,
|
|
335
|
-
max_tokens: 4096,
|
|
336
|
-
}),
|
|
337
|
-
signal: AbortSignal.timeout(120_000),
|
|
338
|
-
}, 'azureai');
|
|
339
|
-
if (!res.ok)
|
|
340
|
-
throw new Error(`Azure AI ${res.status}: ${await res.text()}`);
|
|
341
334
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
342
|
-
|
|
335
|
+
let AzureOpenAI;
|
|
336
|
+
try {
|
|
337
|
+
({ AzureOpenAI } = await esmImport('openai'));
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
throw new Error("'azureai' provider requires the openai package. Install it with: npm install openai");
|
|
341
|
+
}
|
|
342
|
+
const client = new AzureOpenAI({
|
|
343
|
+
apiKey,
|
|
344
|
+
endpoint: baseUrl.replace(/\/$/, ''),
|
|
345
|
+
apiVersion: '2024-12-01-preview',
|
|
346
|
+
deployment: model,
|
|
347
|
+
});
|
|
348
|
+
const msg = await client.chat.completions.create({
|
|
349
|
+
model,
|
|
350
|
+
messages: [{ role: 'user', content: prompt }],
|
|
351
|
+
temperature: 0.3,
|
|
352
|
+
max_tokens: 4096,
|
|
353
|
+
});
|
|
354
|
+
return msg.choices[0]?.message?.content ?? '';
|
|
343
355
|
}
|
|
344
356
|
// ─── Main entry point ─────────────────────────────────────────────────────────
|
|
345
357
|
/**
|
|
@@ -358,7 +370,7 @@ async function generateSpecFromStory(story, format, opts) {
|
|
|
358
370
|
return localProvider(prompt, opts.model);
|
|
359
371
|
}
|
|
360
372
|
case 'ollama': {
|
|
361
|
-
return ollamaProvider(prompt, opts.model ?? '
|
|
373
|
+
return ollamaProvider(prompt, opts.model ?? 'gemma-4-e4b-it', opts.baseUrl ?? 'http://localhost:11434');
|
|
362
374
|
}
|
|
363
375
|
case 'openai': {
|
|
364
376
|
return openaiProvider(prompt, opts.model ?? 'gpt-4o', resolveEnvVar(opts.apiKey ?? ''), opts.baseUrl ?? 'https://api.openai.com/v1');
|
|
@@ -379,6 +391,14 @@ async function generateSpecFromStory(story, format, opts) {
|
|
|
379
391
|
throw new Error('azureai provider requires --ai-url <azure-endpoint>');
|
|
380
392
|
return azureaiProvider(prompt, opts.model ?? 'gpt-4o', resolveEnvVar(opts.apiKey ?? ''), opts.baseUrl);
|
|
381
393
|
}
|
|
394
|
+
case 'github': {
|
|
395
|
+
return githubProvider(prompt, opts.model ?? 'gpt-4o', resolveEnvVar(opts.apiKey ?? process.env['GITHUB_TOKEN'] ?? ''));
|
|
396
|
+
}
|
|
397
|
+
case 'azureinference': {
|
|
398
|
+
if (!opts.baseUrl)
|
|
399
|
+
throw new Error('azureinference provider requires --ai-url <endpoint>');
|
|
400
|
+
return azureinferenceProvider(prompt, opts.model ?? 'gpt-4o', resolveEnvVar(opts.apiKey ?? ''), opts.baseUrl);
|
|
401
|
+
}
|
|
382
402
|
}
|
|
383
403
|
};
|
|
384
404
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-spec.js","sourceRoot":"","sources":["../../src/ai/generate-spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-spec.js","sourceRoot":"","sources":["../../src/ai/generate-spec.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/summarizer.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* dependencies, works fully offline.
|
|
14
14
|
*
|
|
15
15
|
* ollama — local LLM via Ollama REST API (http://localhost:11434).
|
|
16
|
-
* Model suggestion:
|
|
16
|
+
* Model suggestion: gemma-4-e4b-it.
|
|
17
17
|
*
|
|
18
18
|
* openai — OpenAI Chat Completions API (requires API key).
|
|
19
19
|
*
|
|
@@ -22,22 +22,22 @@
|
|
|
22
22
|
* Usage (engine.ts / CLI):
|
|
23
23
|
* const { title, description, steps } = await summarizeTest(test, localType, {
|
|
24
24
|
* provider: 'local',
|
|
25
|
-
* model: '/path/to/
|
|
25
|
+
* model: '/path/to/gemma-4-e4b-it-Q4_K_M.gguf',
|
|
26
26
|
* });
|
|
27
27
|
* test.title = title;
|
|
28
28
|
* test.description = description;
|
|
29
29
|
* test.steps = steps;
|
|
30
30
|
*/
|
|
31
31
|
import { ParsedStep, ParsedTest } from '../types';
|
|
32
|
-
export type AiProvider = 'heuristic' | 'local' | 'ollama' | 'openai' | 'anthropic' | 'huggingface' | 'bedrock' | 'azureai';
|
|
32
|
+
export type AiProvider = 'heuristic' | 'local' | 'ollama' | 'openai' | 'anthropic' | 'huggingface' | 'bedrock' | 'azureai' | 'github' | 'azureinference';
|
|
33
33
|
export interface AiSummaryOpts {
|
|
34
34
|
provider: AiProvider;
|
|
35
35
|
/**
|
|
36
36
|
* For `local`: absolute path to a GGUF model file
|
|
37
|
-
* For `ollama`: model tag, e.g.
|
|
37
|
+
* For `ollama`: model tag, e.g. gemma-4-e4b-it
|
|
38
38
|
* For `openai`: model name, e.g. gpt-4o-mini
|
|
39
39
|
* For `anthropic`: model name, e.g. claude-haiku-4-5-20251001
|
|
40
|
-
* For `huggingface`: model id, e.g.
|
|
40
|
+
* For `huggingface`: model id, e.g. google/gemma-4-e4b-it
|
|
41
41
|
* For `bedrock`: model id, e.g. anthropic.claude-3-haiku-20240307-v1:0
|
|
42
42
|
* For `azureai`: deployment name, e.g. gpt-4o
|
|
43
43
|
*/
|