@vijaypjavvadi/bdd2pw 2.0.0 → 2.0.2
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/CHANGELOG.md +191 -0
- package/README.md +78 -0
- package/dist/emitters/facade.js +7 -1
- package/dist/emitters/facade.js.map +1 -1
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/anthropicClient.d.ts +20 -0
- package/dist/llm/anthropicClient.js +47 -2
- package/dist/llm/anthropicClient.js.map +1 -1
- package/dist/llm/cache.d.ts +41 -6
- package/dist/llm/cache.js +93 -56
- package/dist/llm/cache.js.map +1 -1
- package/dist/llm/llmStepMatcher.js +10 -2
- package/dist/llm/llmStepMatcher.js.map +1 -1
- package/dist/llm/types.d.ts +17 -1
- package/dist/utils/commentSafe.d.ts +30 -0
- package/dist/utils/commentSafe.js +39 -0
- package/dist/utils/commentSafe.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,197 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
_Nothing yet._
|
|
11
11
|
|
|
12
|
+
## [2.0.2] — 2026-05-08
|
|
13
|
+
|
|
14
|
+
### Fixed — cache-load failure aborted entire LLM fallback (HIGH, launch-blocker)
|
|
15
|
+
|
|
16
|
+
When `better-sqlite3`'s native binding failed to load (the classic
|
|
17
|
+
`NODE_MODULE_VERSION` mismatch in cloud-jobs runs — Playwright base
|
|
18
|
+
image with Node 18 trying to use a Node 22-prebuilt binary), bdd2pw
|
|
19
|
+
2.0.0 / 2.0.1 silently aborted **the entire `--llm` feature**:
|
|
20
|
+
|
|
21
|
+
- LLM provider was never called.
|
|
22
|
+
- Counter showed `0 successful / 0 attempted`.
|
|
23
|
+
- Every unmatched step landed as a `// TODO:` with the cache-load
|
|
24
|
+
error in the warning text.
|
|
25
|
+
|
|
26
|
+
**Root cause:** `openSqliteCache` only wrapped `require("better-sqlite3")`
|
|
27
|
+
in try/catch. The actual native binding loads when the SQLite
|
|
28
|
+
constructor runs (`sqlite(cachePath)`), and THAT call's failure escaped
|
|
29
|
+
the catch, propagated up through `ensureCache()` → `generateBinding()`
|
|
30
|
+
→ `matchStepWithLLM`, and was caught only by the outer "LLM fallback
|
|
31
|
+
threw" annotation. The fallback in-memory cache never got installed.
|
|
32
|
+
|
|
33
|
+
**Fix:** the try/catch in `src/llm/cache.ts` now wraps the FULL SQLite
|
|
34
|
+
setup — `require`, `ensureDir`, constructor call, pragma, schema, all
|
|
35
|
+
prepared statements. ANY failure falls back to `InMemoryCache`. The
|
|
36
|
+
function now returns `{ cache, persistent, fallbackReason }` so callers
|
|
37
|
+
can surface the degradation once per scaffold instead of once per step.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
// Before (2.0.0/2.0.1):
|
|
41
|
+
let sqlite: any;
|
|
42
|
+
try { sqlite = require("better-sqlite3"); } catch { return new InMemoryCache(); }
|
|
43
|
+
const db = sqlite(cachePath); // ← ESCAPED THE CATCH ON NATIVE BINDING FAILURE
|
|
44
|
+
|
|
45
|
+
// After (2.0.2):
|
|
46
|
+
try {
|
|
47
|
+
const sqlite = require("better-sqlite3");
|
|
48
|
+
await fs.ensureDir(...);
|
|
49
|
+
const db = sqlite(cachePath);
|
|
50
|
+
db.pragma(...); db.exec(...);
|
|
51
|
+
// ... full setup ...
|
|
52
|
+
return { cache: realCache, persistent: true };
|
|
53
|
+
} catch (err) {
|
|
54
|
+
return { cache: new InMemoryCache(), persistent: false, fallbackReason: err.message };
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Added — cache-fallback warning surfaced in BDD_REVIEW.md
|
|
59
|
+
|
|
60
|
+
When the SQLite cache falls back to in-memory, scaffold() now adds a
|
|
61
|
+
`[warn]` review item with the underlying reason and a remediation
|
|
62
|
+
suggestion (`npm rebuild better-sqlite3 --build-from-source`).
|
|
63
|
+
Operators can see at a glance that the cache isn't durable for this
|
|
64
|
+
run, instead of silently re-paying full LLM cost on every retry.
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
[warn] LLM cache backend unavailable — fell back to in-memory cache
|
|
68
|
+
for this run. Underlying reason: The module ... was compiled
|
|
69
|
+
against a different Node.js version using NODE_MODULE_VERSION
|
|
70
|
+
127. This version of Node.js requires NODE_MODULE_VERSION 115.
|
|
71
|
+
Bindings won't persist across runs; every scaffold pays full
|
|
72
|
+
LLM cost.
|
|
73
|
+
[suggestion] Run `npm rebuild better-sqlite3 --build-from-source`
|
|
74
|
+
in the consumer repo, OR ensure the prebuild matches the
|
|
75
|
+
runtime Node version (NODE_MODULE_VERSION).
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The warning fires ONCE per scaffold (not per LLM call) — `cachePersistent`
|
|
79
|
+
is cached on the AnthropicLLMClient after the first `ensureCache()` call.
|
|
80
|
+
|
|
81
|
+
### Added — `LLMClient.cacheBackendPersistent()` and `cacheBackendFallbackReason()`
|
|
82
|
+
|
|
83
|
+
Two new optional methods on the `LLMClient` interface. The scaffold
|
|
84
|
+
review-item generator uses them to drive the warning above. Mock LLM
|
|
85
|
+
clients in user tests don't need to implement them (optional).
|
|
86
|
+
|
|
87
|
+
### Tests
|
|
88
|
+
|
|
89
|
+
- New: `tests/unit/cacheGracefulDegradation.test.ts` — three cases:
|
|
90
|
+
- `better-sqlite3` mocked to throw the exact NODE_MODULE_VERSION
|
|
91
|
+
error from production. Asserts: openSqliteCache returns
|
|
92
|
+
`persistent: false`, the cache is `InMemoryCache`, fallbackReason
|
|
93
|
+
is populated and is a single line.
|
|
94
|
+
- The fallback InMemoryCache supports get/set/size/close normally.
|
|
95
|
+
- `:memory:` short-circuit still works (no SQLite load attempt).
|
|
96
|
+
|
|
97
|
+
### Files
|
|
98
|
+
|
|
99
|
+
- Modified: `src/llm/cache.ts` (try/catch broadened; new `OpenCacheResult`
|
|
100
|
+
return shape), `src/llm/anthropicClient.ts` (cache fallback state
|
|
101
|
+
tracking + new accessors), `src/llm/types.ts` (interface additions),
|
|
102
|
+
`src/index.ts` (review-item warning).
|
|
103
|
+
- New: `tests/unit/cacheGracefulDegradation.test.ts`.
|
|
104
|
+
|
|
105
|
+
### Production impact
|
|
106
|
+
|
|
107
|
+
Before 2.0.2, any environment where `better-sqlite3` couldn't load the
|
|
108
|
+
native binding got **0% LLM coverage** despite paying for the API key,
|
|
109
|
+
the governance sidecar, and the deployment plumbing. After 2.0.2, the
|
|
110
|
+
LLM works in the same environment with bindings stored in-memory for
|
|
111
|
+
the duration of the scaffold run. Cache durability across runs is the
|
|
112
|
+
only thing lost; cost goes up but nothing breaks.
|
|
113
|
+
|
|
114
|
+
### Migration from 2.0.x
|
|
115
|
+
|
|
116
|
+
Pure bug fix — no API change. Just bump the dep pin.
|
|
117
|
+
|
|
118
|
+
After 2.0.2 lands, cloud-jobs-template can drop the `npm rebuild
|
|
119
|
+
better-sqlite3 --build-from-source` workaround (still useful for
|
|
120
|
+
performance — re-running the same .feature gets free cache hits — but
|
|
121
|
+
no longer required for correctness).
|
|
122
|
+
|
|
123
|
+
## [2.0.1] — 2026-05-08
|
|
124
|
+
|
|
125
|
+
### Fixed — multi-line LLM errors broke `.spec.ts` parse (HIGH)
|
|
126
|
+
|
|
127
|
+
A multi-line error message bubbling up from the LLM fallback was being
|
|
128
|
+
embedded into a `// TODO: ...` single-line comment without escaping, so
|
|
129
|
+
only the first line carried the `//` prefix and lines 2-N became parsed
|
|
130
|
+
as TypeScript. Result: `SyntaxError: Missing semicolon`, zero tests
|
|
131
|
+
collected.
|
|
132
|
+
|
|
133
|
+
**Reproduction (from cloud-jobs-template):**
|
|
134
|
+
|
|
135
|
+
1. Playwright base image with Node 18 (`NODE_MODULE_VERSION` 115).
|
|
136
|
+
2. `better-sqlite3@^11.0.0`'s npm-published prebuild targets Node 22
|
|
137
|
+
(`NODE_MODULE_VERSION` 127) — incompatible.
|
|
138
|
+
3. The cache backend throws on load with a 5-line error.
|
|
139
|
+
4. That error string flows into a `// TODO:` comment.
|
|
140
|
+
5. The 4 trailing lines fall outside the comment → spec is unparseable.
|
|
141
|
+
|
|
142
|
+
**Fix:** new `flattenForComment(s: unknown): string` helper in
|
|
143
|
+
`src/utils/commentSafe.ts`. Collapses CR/LF runs into ` | ` separators,
|
|
144
|
+
trims, returns a single-line string safe for embedding inside a
|
|
145
|
+
`// ...` TS comment.
|
|
146
|
+
|
|
147
|
+
Applied at three sites:
|
|
148
|
+
|
|
149
|
+
1. `src/llm/llmStepMatcher.ts` — when LLM `result.error` is non-null.
|
|
150
|
+
2. `src/llm/llmStepMatcher.ts` — when `generateBinding()` itself throws.
|
|
151
|
+
3. `src/emitters/facade.ts` — defensively, before EVERY `// TODO:` line
|
|
152
|
+
gets emitted. This is the belt-and-suspenders catch — any future code
|
|
153
|
+
path that ever puts a multi-line warning into `StepBinding.warning`
|
|
154
|
+
is also covered.
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
// Before:
|
|
158
|
+
out.push(`// TODO: ${b.warning ?? "no rule matched this step"}`);
|
|
159
|
+
// After:
|
|
160
|
+
const safeWarning = flattenForComment(b.warning ?? "no rule matched this step");
|
|
161
|
+
out.push(`// TODO: ${safeWarning}`);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Fixed — LLM call counter only counted successes
|
|
165
|
+
|
|
166
|
+
`LLM fallback: 0 provider call(s) made` was being logged even when the
|
|
167
|
+
fallback attempted (and failed) on every step. Counter only incremented
|
|
168
|
+
on a parsed binding. Operators couldn't tell from the scaffold log
|
|
169
|
+
whether the LLM was being called at all.
|
|
170
|
+
|
|
171
|
+
**Fix:** new `attemptsCounter` increments BEFORE the `await` to provider.
|
|
172
|
+
Budget enforcement now runs against attempts (so a run hitting 50
|
|
173
|
+
consecutive failures stops, instead of looping forever). The scaffold
|
|
174
|
+
review-item line now reads:
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
LLM fallback: 7 successful / 9 attempted (2 failed), max 50. Cache hits counted as 0.
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
`LLMClient.callsAttempted()` is a new optional method on the interface;
|
|
181
|
+
older callers keep working unchanged.
|
|
182
|
+
|
|
183
|
+
### Tests
|
|
184
|
+
|
|
185
|
+
- New: `tests/unit/commentSafe.test.ts` — 8 cases including the exact
|
|
186
|
+
better-sqlite3 mismatch error from the cloud-jobs report.
|
|
187
|
+
- Extended: `tests/unit/llm.test.ts` — two new cases that script
|
|
188
|
+
multi-line errors through both the `result.error` path and the
|
|
189
|
+
`throw` path; assert the resulting `StepBinding.warning` has zero
|
|
190
|
+
newlines.
|
|
191
|
+
|
|
192
|
+
### Files
|
|
193
|
+
|
|
194
|
+
- New: `src/utils/commentSafe.ts`, `tests/unit/commentSafe.test.ts`.
|
|
195
|
+
- Modified: `src/llm/llmStepMatcher.ts`, `src/llm/anthropicClient.ts`,
|
|
196
|
+
`src/llm/types.ts`, `src/emitters/facade.ts`, `src/index.ts`,
|
|
197
|
+
`tests/unit/llm.test.ts`.
|
|
198
|
+
|
|
199
|
+
### Migration from 2.0.0
|
|
200
|
+
|
|
201
|
+
Pure bug fix — no API change. Just bump the dep pin.
|
|
202
|
+
|
|
12
203
|
## [2.0.0] — 2026-05-08
|
|
13
204
|
|
|
14
205
|
### Added — LLM fallback for unmatched steps
|
package/README.md
CHANGED
|
@@ -58,6 +58,84 @@ npx playwright test
|
|
|
58
58
|
|
|
59
59
|
That's it. `./my-tests` now has `pages/login.page.ts`, `tests/login.spec.ts`, `playwright.config.ts`, `package.json`, `tsconfig.json`, `.gitignore`, and `BDD_REVIEW.md`.
|
|
60
60
|
|
|
61
|
+
## LLM fallback (v2.0+)
|
|
62
|
+
|
|
63
|
+
When a Gherkin step doesn't match any of bdd2pw's 30 deterministic rules, you can opt-in to an Anthropic-backed LLM fallback that produces the binding instead of dropping to `// TODO`. Off by default.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Anthropic API key — required when --llm anthropic is set
|
|
67
|
+
export ANTHROPIC_API_KEY=sk-ant-api03-...
|
|
68
|
+
|
|
69
|
+
bdd2pw scaffold ./my.feature \
|
|
70
|
+
--url https://app.example.com \
|
|
71
|
+
--page LoginPage \
|
|
72
|
+
--repo ./out \
|
|
73
|
+
--llm anthropic \
|
|
74
|
+
--governance-url http://localhost:4900
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Every successful LLM-binding is appended to `<repo>/artefacts/candidate-rules.jsonl` so an offline review pipeline can propose new deterministic rules. Auto-write back to `stepMatcher.ts` is deferred to v2.1+ — for v2.0 the LLM is a runtime overlay, never a code generator for the matcher itself.
|
|
78
|
+
|
|
79
|
+
### Governance sanitization (mandatory by default)
|
|
80
|
+
|
|
81
|
+
Per the platform contract, **every prompt passes through the `ai-governance` sidecar's `/sanitize` endpoint** before reaching Anthropic. This scrubs API keys, JWTs, AWS creds, and other secrets that might leak via test data in the `.feature` file. **Fail-closed** — if the sidecar is unreachable, the LLM call is REFUSED and the step falls back to TODO.
|
|
82
|
+
|
|
83
|
+
Two ways to satisfy this:
|
|
84
|
+
|
|
85
|
+
**(a) Internal platform users:** the `ai-governance` service is part of your platform service mesh. Just point bdd2pw at it (`--governance-url http://ai-governance:4900` or wherever).
|
|
86
|
+
|
|
87
|
+
**(b) External users:** run your own sidecar.
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Clone and run the sidecar
|
|
91
|
+
git clone https://github.com/javvadivijayprasad/ai-governance
|
|
92
|
+
cd ai-governance
|
|
93
|
+
python -m venv .venv && .\.venv\Scripts\Activate.ps1 # or `source .venv/bin/activate` on Mac/Linux
|
|
94
|
+
pip install fastapi uvicorn pydantic pyyaml
|
|
95
|
+
PYTHONPATH=src uvicorn service.app:app --port 4900
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Or there's a Docker image once it's published: `docker run -p 4900:4900 ghcr.io/javvadivijayprasad/ai-governance:latest`.
|
|
99
|
+
|
|
100
|
+
**Test-only escape hatch:** `--llm-skip-governance` bypasses the sidecar entirely. Use only when your `.feature` data is synthetic (no real credentials, no PII). For production, **always** keep governance on.
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# UNSAFE for real test data — use only with synthetic fixtures
|
|
104
|
+
bdd2pw scaffold ./my.feature ... --llm anthropic --llm-skip-governance
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Cost + determinism guardrails
|
|
108
|
+
|
|
109
|
+
| Flag | Default | Purpose |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| `--llm-max-calls <n>` | `50` | Hard cap on provider calls per scaffold. Cache hits don't count. |
|
|
112
|
+
| `--llm-cache <path>` | `<repo>/.bdd2pw/llm-cache.sqlite` | SQLite cache keyed by step text + POM signature + model. Same inputs across runs return the same binding — cost goes to zero on re-runs. Pass `:memory:` for one-shot use. |
|
|
113
|
+
| `--llm-model <model>` | `claude-sonnet-4-6` | Override the Anthropic model. |
|
|
114
|
+
|
|
115
|
+
Re-runs of the same `.feature` (after a code edit, retry, etc.) will hit the cache and make zero provider calls. A typical per-scaffold cost on first run: ~$0.005–0.02 USD with Sonnet, depending on how many steps need LLM fallback.
|
|
116
|
+
|
|
117
|
+
### Cloud-jobs deployment recipe
|
|
118
|
+
|
|
119
|
+
If you're running bdd2pw in an automation pipeline (cloud-jobs-template, GitHub Actions, etc.):
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
env:
|
|
123
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} # platform secrets store
|
|
124
|
+
|
|
125
|
+
steps:
|
|
126
|
+
- name: Run scaffold with LLM fallback
|
|
127
|
+
run: |
|
|
128
|
+
bdd2pw scaffold "$FEATURE_FILE" \
|
|
129
|
+
--url "$TARGET_URL" \
|
|
130
|
+
--page "$PAGE_NAME" \
|
|
131
|
+
--repo /work \
|
|
132
|
+
--self-healing \
|
|
133
|
+
--llm anthropic \
|
|
134
|
+
--governance-url http://ai-governance:4900
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Make sure the `ai-governance` sidecar is co-located (k8s sidecar pattern) or reachable on the platform service mesh.
|
|
138
|
+
|
|
61
139
|
## CLI surface — three commands
|
|
62
140
|
|
|
63
141
|
### `scaffold` — generate a fresh repo
|
package/dist/emitters/facade.js
CHANGED
|
@@ -14,6 +14,7 @@ exports.emitPageObject = emitPageObject;
|
|
|
14
14
|
exports.emitTestFile = emitTestFile;
|
|
15
15
|
const pw_emit_1 = require("@vijaypjavvadi/pw-emit");
|
|
16
16
|
const naming_1 = require("../utils/naming");
|
|
17
|
+
const commentSafe_1 = require("../utils/commentSafe");
|
|
17
18
|
class EmitterConsistencyError extends Error {
|
|
18
19
|
constructor(message) {
|
|
19
20
|
super(message);
|
|
@@ -113,7 +114,12 @@ function bindingsToBody(bindings, prelude = []) {
|
|
|
113
114
|
lines.push(`await expect(${b.assertion.locator}).${b.assertion.matcher}(${expected});`);
|
|
114
115
|
}
|
|
115
116
|
else {
|
|
116
|
-
|
|
117
|
+
// v2.0.1 — defensively flatten the warning so any newlines in error
|
|
118
|
+
// messages (e.g. multi-line stack traces from LLM provider errors,
|
|
119
|
+
// native module load failures) don't bleed past the `//` and break
|
|
120
|
+
// the .spec.ts parse.
|
|
121
|
+
const safeWarning = (0, commentSafe_1.flattenForComment)(b.warning ?? "no rule matched this step");
|
|
122
|
+
lines.push(`// TODO: ${safeWarning}`);
|
|
117
123
|
}
|
|
118
124
|
lines.push("");
|
|
119
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/emitters/facade.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/emitters/facade.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -240,11 +240,42 @@ async function scaffold(opts) {
|
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
// Log LLM usage stats so the operator sees what got LLM-matched.
|
|
243
|
+
// v2.0.1: surface ATTEMPTS not just SUCCESSES — a run that "made 0
|
|
244
|
+
// calls" but actually attempted 17 (all failing on a bad API key, a
|
|
245
|
+
// dead governance sidecar, a missing better-sqlite3 native binding,
|
|
246
|
+
// etc.) was previously invisible from the scaffold log.
|
|
247
|
+
// v2.0.2: also surface cache-backend fallback once per scaffold so a
|
|
248
|
+
// NODE_MODULE_VERSION mismatch (or any other cache-load failure) is
|
|
249
|
+
// visible in BDD_REVIEW.md — not silently buried in heal-events or
|
|
250
|
+
// missed entirely.
|
|
243
251
|
if (llm) {
|
|
252
|
+
const succeeded = llm.callsMade();
|
|
253
|
+
const attempted = llm.callsAttempted ? llm.callsAttempted() : succeeded;
|
|
254
|
+
const failed = attempted - succeeded;
|
|
255
|
+
const max = opts.llmConfig?.maxCalls ?? 50;
|
|
256
|
+
const failPart = failed > 0 ? ` (${failed} failed)` : "";
|
|
244
257
|
reviewItems.push({
|
|
245
258
|
severity: "info",
|
|
246
|
-
message: `LLM fallback: ${
|
|
259
|
+
message: `LLM fallback: ${succeeded} successful / ${attempted} attempted${failPart}, max ${max}. Cache hits counted as 0.`,
|
|
247
260
|
});
|
|
261
|
+
// v2.0.2 — cache backend status. We check `=== false` (not falsy) so
|
|
262
|
+
// the null "not yet initialised" case (no LLM calls were made because
|
|
263
|
+
// every step matched a rule) doesn't produce a noisy false alarm.
|
|
264
|
+
const persistent = llm.cacheBackendPersistent
|
|
265
|
+
? llm.cacheBackendPersistent()
|
|
266
|
+
: null;
|
|
267
|
+
if (persistent === false) {
|
|
268
|
+
const reason = llm.cacheBackendFallbackReason
|
|
269
|
+
? llm.cacheBackendFallbackReason()
|
|
270
|
+
: undefined;
|
|
271
|
+
reviewItems.push({
|
|
272
|
+
severity: "warn",
|
|
273
|
+
message: "LLM cache backend unavailable — fell back to in-memory cache for this run." +
|
|
274
|
+
(reason ? ` Underlying reason: ${reason}.` : "") +
|
|
275
|
+
" Bindings won't persist across runs; every scaffold pays full LLM cost.",
|
|
276
|
+
suggestion: "Run `npm rebuild better-sqlite3 --build-from-source` in the consumer repo, OR ensure the prebuild matches the runtime Node version (NODE_MODULE_VERSION).",
|
|
277
|
+
});
|
|
278
|
+
}
|
|
248
279
|
}
|
|
249
280
|
for (const sc of flattened) {
|
|
250
281
|
for (const b of sc.bindings) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,11 +30,31 @@ export declare class AnthropicLLMClient implements LLMClient {
|
|
|
30
30
|
private cache;
|
|
31
31
|
private cachePath;
|
|
32
32
|
private callsCounter;
|
|
33
|
+
private attemptsCounter;
|
|
33
34
|
private anthropic;
|
|
35
|
+
/**
|
|
36
|
+
* v2.0.2 — when SQLite cache fails to load, we fall back to an
|
|
37
|
+
* in-memory cache and surface this once. `cacheFallbackReason` carries
|
|
38
|
+
* the load error so callers can log it.
|
|
39
|
+
*/
|
|
40
|
+
private cachePersistent;
|
|
41
|
+
private cacheFallbackReason;
|
|
34
42
|
constructor(opts: LLMClientOptions, cachePathDefault: string);
|
|
35
43
|
ensureCache(): Promise<BindingCache>;
|
|
36
44
|
budgetExhausted(): boolean;
|
|
45
|
+
/** Successful provider responses (parseable bindings). */
|
|
37
46
|
callsMade(): number;
|
|
47
|
+
/** All provider call attempts, including failures. */
|
|
48
|
+
callsAttempted(): number;
|
|
49
|
+
/**
|
|
50
|
+
* v2.0.2 — true when the SQLite cache loaded successfully, false when
|
|
51
|
+
* we degraded to in-memory. `null` until ensureCache() is called for
|
|
52
|
+
* the first time. Callers can use this to print a one-time warning at
|
|
53
|
+
* the end of a scaffold run.
|
|
54
|
+
*/
|
|
55
|
+
cacheBackendPersistent(): boolean | null;
|
|
56
|
+
/** v2.0.2 — when persistent is false, the underlying load error string. */
|
|
57
|
+
cacheBackendFallbackReason(): string | undefined;
|
|
38
58
|
generateBinding(input: GenerateBindingInput): Promise<GenerateBindingResult>;
|
|
39
59
|
private lazyClient;
|
|
40
60
|
close(): Promise<void>;
|
|
@@ -31,7 +31,14 @@ class AnthropicLLMClient {
|
|
|
31
31
|
constructor(opts, cachePathDefault) {
|
|
32
32
|
this.cache = null;
|
|
33
33
|
this.callsCounter = 0;
|
|
34
|
+
this.attemptsCounter = 0;
|
|
34
35
|
this.anthropic = null; // lazy-loaded SDK instance
|
|
36
|
+
/**
|
|
37
|
+
* v2.0.2 — when SQLite cache fails to load, we fall back to an
|
|
38
|
+
* in-memory cache and surface this once. `cacheFallbackReason` carries
|
|
39
|
+
* the load error so callers can log it.
|
|
40
|
+
*/
|
|
41
|
+
this.cachePersistent = null;
|
|
35
42
|
this.model = opts.model ?? DEFAULT_MODEL;
|
|
36
43
|
this.apiKey = opts.apiKey ?? process.env.ANTHROPIC_API_KEY ?? "";
|
|
37
44
|
this.maxCalls = opts.maxCalls ?? DEFAULT_MAX_CALLS;
|
|
@@ -42,16 +49,50 @@ class AnthropicLLMClient {
|
|
|
42
49
|
}
|
|
43
50
|
async ensureCache() {
|
|
44
51
|
if (!this.cache) {
|
|
45
|
-
|
|
52
|
+
// v2.0.2: openSqliteCache no longer throws — on any failure it
|
|
53
|
+
// falls back to in-memory and surfaces the reason. We stash the
|
|
54
|
+
// result so callers / scaffold() can log a single warning instead
|
|
55
|
+
// of one per LLM call.
|
|
56
|
+
const result = await (0, cache_1.openSqliteCache)(this.cachePath);
|
|
57
|
+
this.cache = result.cache;
|
|
58
|
+
this.cachePersistent = result.persistent;
|
|
59
|
+
this.cacheFallbackReason = result.fallbackReason;
|
|
60
|
+
if (!result.persistent && result.fallbackReason) {
|
|
61
|
+
this.log({
|
|
62
|
+
kind: "error",
|
|
63
|
+
phase: "cache_load",
|
|
64
|
+
message: `Cache backend unavailable, falling back to in-memory for this run. Reason: ${result.fallbackReason}`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
46
67
|
}
|
|
47
68
|
return this.cache;
|
|
48
69
|
}
|
|
49
70
|
budgetExhausted() {
|
|
50
|
-
|
|
71
|
+
// Budget is enforced against ATTEMPTS, not just successes — otherwise a
|
|
72
|
+
// run that hits 50 consecutive failures would loop forever trying.
|
|
73
|
+
return this.attemptsCounter >= this.maxCalls;
|
|
51
74
|
}
|
|
75
|
+
/** Successful provider responses (parseable bindings). */
|
|
52
76
|
callsMade() {
|
|
53
77
|
return this.callsCounter;
|
|
54
78
|
}
|
|
79
|
+
/** All provider call attempts, including failures. */
|
|
80
|
+
callsAttempted() {
|
|
81
|
+
return this.attemptsCounter;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* v2.0.2 — true when the SQLite cache loaded successfully, false when
|
|
85
|
+
* we degraded to in-memory. `null` until ensureCache() is called for
|
|
86
|
+
* the first time. Callers can use this to print a one-time warning at
|
|
87
|
+
* the end of a scaffold run.
|
|
88
|
+
*/
|
|
89
|
+
cacheBackendPersistent() {
|
|
90
|
+
return this.cachePersistent;
|
|
91
|
+
}
|
|
92
|
+
/** v2.0.2 — when persistent is false, the underlying load error string. */
|
|
93
|
+
cacheBackendFallbackReason() {
|
|
94
|
+
return this.cacheFallbackReason;
|
|
95
|
+
}
|
|
55
96
|
async generateBinding(input) {
|
|
56
97
|
const start = Date.now();
|
|
57
98
|
const key = (0, prompt_1.cacheKey)(input, this.model);
|
|
@@ -123,6 +164,10 @@ class AnthropicLLMClient {
|
|
|
123
164
|
let responseText = "";
|
|
124
165
|
let inputTokens = 0;
|
|
125
166
|
let outputTokens = 0;
|
|
167
|
+
// v2.0.1 — count the ATTEMPT before the await. A failed call still cost
|
|
168
|
+
// a round-trip + tokens at the provider; operators need to see them in
|
|
169
|
+
// the scaffold log to debug "LLM fallback: 0 successful / N attempted".
|
|
170
|
+
this.attemptsCounter += 1;
|
|
126
171
|
try {
|
|
127
172
|
this.log({
|
|
128
173
|
kind: "provider_call_start",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropicClient.js","sourceRoot":"","sources":["../../src/llm/anthropicClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;
|
|
1
|
+
{"version":3,"file":"anthropicClient.js","sourceRoot":"","sources":["../../src/llm/anthropicClient.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/cache.d.ts
CHANGED
|
@@ -42,10 +42,45 @@ export declare class InMemoryCache implements BindingCache {
|
|
|
42
42
|
close(): Promise<void>;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* in-memory
|
|
48
|
-
*
|
|
49
|
-
* aren't reused across runs).
|
|
45
|
+
* Result returned by openSqliteCache — exposes both the cache and whether
|
|
46
|
+
* the SQLite backend was actually loaded (vs. having fallen back to
|
|
47
|
+
* in-memory). Callers use the flag to log a single warning per scaffold
|
|
48
|
+
* run, not per LLM call.
|
|
50
49
|
*/
|
|
51
|
-
export
|
|
50
|
+
export interface OpenCacheResult {
|
|
51
|
+
cache: BindingCache;
|
|
52
|
+
/** True when the SQLite backend loaded successfully. */
|
|
53
|
+
persistent: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* When persistent === false, this carries the underlying load error so
|
|
56
|
+
* the caller can log a useful warning (e.g. "NODE_MODULE_VERSION 127
|
|
57
|
+
* mismatch — re-run with `npm rebuild better-sqlite3`").
|
|
58
|
+
*/
|
|
59
|
+
fallbackReason?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Open a SQLite-backed cache at the given path. `better-sqlite3` is an
|
|
63
|
+
* optional dep; the load can fail for several reasons:
|
|
64
|
+
*
|
|
65
|
+
* 1. Module not installed at all (`require("better-sqlite3")` throws).
|
|
66
|
+
* 2. Module loads (JS) but the native `.node` binding doesn't —
|
|
67
|
+
* classic NODE_MODULE_VERSION mismatch when a Node 22-prebuilt
|
|
68
|
+
* binary runs in a Node 18 / 20 environment.
|
|
69
|
+
* 3. File system errors — `ensureDir` denied, read-only mount, etc.
|
|
70
|
+
* 4. Corrupted .sqlite file from a previous run.
|
|
71
|
+
*
|
|
72
|
+
* v2.0.2: ALL of these now fall back to an in-memory cache. v2.0/2.0.1
|
|
73
|
+
* only caught case 1 — case 2 (the common one in cloud-jobs runs)
|
|
74
|
+
* propagated up and aborted the entire LLM fallback. See CHANGELOG.
|
|
75
|
+
*
|
|
76
|
+
* The caller decides whether to log/surface the fallback by inspecting
|
|
77
|
+
* `result.persistent` and `result.fallbackReason`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function openSqliteCache(cachePath: string,
|
|
80
|
+
/**
|
|
81
|
+
* Test-only injection point. Production callers leave this undefined
|
|
82
|
+
* and we use `require("better-sqlite3")` directly. Tests pass a
|
|
83
|
+
* throwing stub to simulate native binding load failures (vi.mock
|
|
84
|
+
* doesn't intercept require()). Not part of the public API.
|
|
85
|
+
*/
|
|
86
|
+
_loader?: () => unknown): Promise<OpenCacheResult>;
|
package/dist/llm/cache.js
CHANGED
|
@@ -56,6 +56,7 @@ exports.InMemoryCache = void 0;
|
|
|
56
56
|
exports.openSqliteCache = openSqliteCache;
|
|
57
57
|
const fs = __importStar(require("fs-extra"));
|
|
58
58
|
const path = __importStar(require("path"));
|
|
59
|
+
const commentSafe_1 = require("../utils/commentSafe");
|
|
59
60
|
/**
|
|
60
61
|
* In-memory cache — used when SQLite isn't available (better-sqlite3
|
|
61
62
|
* not installed) or when the caller passes :memory: as the path. Tests
|
|
@@ -80,71 +81,107 @@ class InMemoryCache {
|
|
|
80
81
|
}
|
|
81
82
|
exports.InMemoryCache = InMemoryCache;
|
|
82
83
|
/**
|
|
83
|
-
* Open a SQLite-backed cache at the given path. better-sqlite3 is an
|
|
84
|
-
* optional dep;
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
84
|
+
* Open a SQLite-backed cache at the given path. `better-sqlite3` is an
|
|
85
|
+
* optional dep; the load can fail for several reasons:
|
|
86
|
+
*
|
|
87
|
+
* 1. Module not installed at all (`require("better-sqlite3")` throws).
|
|
88
|
+
* 2. Module loads (JS) but the native `.node` binding doesn't —
|
|
89
|
+
* classic NODE_MODULE_VERSION mismatch when a Node 22-prebuilt
|
|
90
|
+
* binary runs in a Node 18 / 20 environment.
|
|
91
|
+
* 3. File system errors — `ensureDir` denied, read-only mount, etc.
|
|
92
|
+
* 4. Corrupted .sqlite file from a previous run.
|
|
93
|
+
*
|
|
94
|
+
* v2.0.2: ALL of these now fall back to an in-memory cache. v2.0/2.0.1
|
|
95
|
+
* only caught case 1 — case 2 (the common one in cloud-jobs runs)
|
|
96
|
+
* propagated up and aborted the entire LLM fallback. See CHANGELOG.
|
|
97
|
+
*
|
|
98
|
+
* The caller decides whether to log/surface the fallback by inspecting
|
|
99
|
+
* `result.persistent` and `result.fallbackReason`.
|
|
100
|
+
*/
|
|
101
|
+
async function openSqliteCache(cachePath,
|
|
102
|
+
/**
|
|
103
|
+
* Test-only injection point. Production callers leave this undefined
|
|
104
|
+
* and we use `require("better-sqlite3")` directly. Tests pass a
|
|
105
|
+
* throwing stub to simulate native binding load failures (vi.mock
|
|
106
|
+
* doesn't intercept require()). Not part of the public API.
|
|
88
107
|
*/
|
|
89
|
-
|
|
108
|
+
_loader) {
|
|
90
109
|
// Special case: ":memory:" → always in-memory, no disk.
|
|
91
110
|
if (cachePath === ":memory:") {
|
|
92
|
-
return new InMemoryCache();
|
|
111
|
+
return { cache: new InMemoryCache(), persistent: false };
|
|
93
112
|
}
|
|
94
|
-
let sqlite;
|
|
95
113
|
try {
|
|
96
114
|
// better-sqlite3 is in optionalDependencies. require() so a missing
|
|
97
115
|
// module doesn't break import-time of this file.
|
|
98
116
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
99
|
-
sqlite =
|
|
117
|
+
const sqlite = _loader
|
|
118
|
+
? _loader()
|
|
119
|
+
: require("better-sqlite3");
|
|
120
|
+
await fs.ensureDir(path.dirname(cachePath));
|
|
121
|
+
// v2.0.2: this line in particular is what previously escaped the
|
|
122
|
+
// try/catch — `sqlite(cachePath)` triggers the native binding load,
|
|
123
|
+
// which throws on NODE_MODULE_VERSION mismatch.
|
|
124
|
+
const db = sqlite(cachePath);
|
|
125
|
+
db.pragma("journal_mode = WAL");
|
|
126
|
+
db.exec(`
|
|
127
|
+
CREATE TABLE IF NOT EXISTS llm_cache (
|
|
128
|
+
key TEXT PRIMARY KEY,
|
|
129
|
+
value TEXT NOT NULL,
|
|
130
|
+
model TEXT NOT NULL,
|
|
131
|
+
created_at TEXT NOT NULL
|
|
132
|
+
)
|
|
133
|
+
`);
|
|
134
|
+
const getStmt = db.prepare("SELECT value, model, created_at FROM llm_cache WHERE key = ?");
|
|
135
|
+
const setStmt = db.prepare("INSERT OR REPLACE INTO llm_cache (key, value, model, created_at) VALUES (?, ?, ?, ?)");
|
|
136
|
+
const sizeStmt = db.prepare("SELECT COUNT(*) AS n FROM llm_cache");
|
|
137
|
+
const cache = {
|
|
138
|
+
async get(key) {
|
|
139
|
+
const row = getStmt.get(key);
|
|
140
|
+
if (!row)
|
|
141
|
+
return undefined;
|
|
142
|
+
try {
|
|
143
|
+
return {
|
|
144
|
+
binding: JSON.parse(row.value),
|
|
145
|
+
model: row.model,
|
|
146
|
+
createdAt: row.created_at,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// Corrupted row — pretend it doesn't exist.
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
async set(key, entry) {
|
|
155
|
+
setStmt.run(key, JSON.stringify(entry.binding), entry.model, entry.createdAt);
|
|
156
|
+
},
|
|
157
|
+
async size() {
|
|
158
|
+
const row = sizeStmt.get();
|
|
159
|
+
return row.n;
|
|
160
|
+
},
|
|
161
|
+
async close() {
|
|
162
|
+
db.close();
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
return { cache, persistent: true };
|
|
100
166
|
}
|
|
101
|
-
catch {
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
|
|
167
|
+
catch (err) {
|
|
168
|
+
// ANY failure during SQLite setup → fall back to in-memory.
|
|
169
|
+
// Bindings won't persist across runs; LLM is called every time
|
|
170
|
+
// (subject to the per-scaffold cache the InMemoryCache still
|
|
171
|
+
// provides within a single run). The scaffolder still works.
|
|
172
|
+
//
|
|
173
|
+
// Use flattenForComment (the same helper that protects // TODO
|
|
174
|
+
// lines in 2.0.1) so the fallback reason is single-line but
|
|
175
|
+
// PRESERVES all the diagnostic info — a typical native-binding
|
|
176
|
+
// load error spans 4-5 lines, and the most useful piece
|
|
177
|
+
// (NODE_MODULE_VERSION number) is on line 3. `.split("\n")[0]`
|
|
178
|
+
// would lose it; flattenForComment keeps everything joined
|
|
179
|
+
// with ` | ` separators.
|
|
180
|
+
return {
|
|
181
|
+
cache: new InMemoryCache(),
|
|
182
|
+
persistent: false,
|
|
183
|
+
fallbackReason: (0, commentSafe_1.flattenForComment)(err instanceof Error ? err.message : err),
|
|
184
|
+
};
|
|
106
185
|
}
|
|
107
|
-
await fs.ensureDir(path.dirname(cachePath));
|
|
108
|
-
const db = sqlite(cachePath);
|
|
109
|
-
db.pragma("journal_mode = WAL");
|
|
110
|
-
db.exec(`
|
|
111
|
-
CREATE TABLE IF NOT EXISTS llm_cache (
|
|
112
|
-
key TEXT PRIMARY KEY,
|
|
113
|
-
value TEXT NOT NULL,
|
|
114
|
-
model TEXT NOT NULL,
|
|
115
|
-
created_at TEXT NOT NULL
|
|
116
|
-
)
|
|
117
|
-
`);
|
|
118
|
-
const getStmt = db.prepare("SELECT value, model, created_at FROM llm_cache WHERE key = ?");
|
|
119
|
-
const setStmt = db.prepare("INSERT OR REPLACE INTO llm_cache (key, value, model, created_at) VALUES (?, ?, ?, ?)");
|
|
120
|
-
const sizeStmt = db.prepare("SELECT COUNT(*) AS n FROM llm_cache");
|
|
121
|
-
return {
|
|
122
|
-
async get(key) {
|
|
123
|
-
const row = getStmt.get(key);
|
|
124
|
-
if (!row)
|
|
125
|
-
return undefined;
|
|
126
|
-
try {
|
|
127
|
-
return {
|
|
128
|
-
binding: JSON.parse(row.value),
|
|
129
|
-
model: row.model,
|
|
130
|
-
createdAt: row.created_at,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
// Corrupted row — pretend it doesn't exist.
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
async set(key, entry) {
|
|
139
|
-
setStmt.run(key, JSON.stringify(entry.binding), entry.model, entry.createdAt);
|
|
140
|
-
},
|
|
141
|
-
async size() {
|
|
142
|
-
const row = sizeStmt.get();
|
|
143
|
-
return row.n;
|
|
144
|
-
},
|
|
145
|
-
async close() {
|
|
146
|
-
db.close();
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
186
|
}
|
|
150
187
|
//# sourceMappingURL=cache.js.map
|
package/dist/llm/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/llm/cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/llm/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.matchStepWithLLM = matchStepWithLLM;
|
|
18
18
|
exports.matchStepsWithLLM = matchStepsWithLLM;
|
|
19
19
|
const stepMatcher_1 = require("../transformers/stepMatcher");
|
|
20
|
+
const commentSafe_1 = require("../utils/commentSafe");
|
|
20
21
|
async function matchStepWithLLM(step, pom, pageVar, ctx) {
|
|
21
22
|
// 1) Always try rule-based first.
|
|
22
23
|
const ruleBased = (0, stepMatcher_1.matchStep)(step, pom, pageVar);
|
|
@@ -42,10 +43,14 @@ async function matchStepWithLLM(step, pom, pageVar, ctx) {
|
|
|
42
43
|
if (!result.binding) {
|
|
43
44
|
// Annotate the warning with the LLM error so BDD_REVIEW shows why
|
|
44
45
|
// the LLM didn't help. The step still falls through to TODO.
|
|
46
|
+
// v2.0.1: flattenForComment collapses any newlines in the error so
|
|
47
|
+
// the resulting `// TODO: ...` line stays a single comment.
|
|
48
|
+
// Multi-line stack traces (e.g. native-module load failures) used
|
|
49
|
+
// to bleed past the `//` and break the .spec.ts parse.
|
|
45
50
|
return {
|
|
46
51
|
...ruleBased,
|
|
47
52
|
warning: result.error
|
|
48
|
-
? `${ruleBased.warning} (LLM fallback also failed: ${result.error})`
|
|
53
|
+
? `${ruleBased.warning} (LLM fallback also failed: ${(0, commentSafe_1.flattenForComment)(result.error)})`
|
|
49
54
|
: ruleBased.warning,
|
|
50
55
|
};
|
|
51
56
|
}
|
|
@@ -70,7 +75,10 @@ async function matchStepWithLLM(step, pom, pageVar, ctx) {
|
|
|
70
75
|
return result.binding;
|
|
71
76
|
}
|
|
72
77
|
catch (err) {
|
|
73
|
-
|
|
78
|
+
// v2.0.1: flattenForComment so multi-line error messages (the classic
|
|
79
|
+
// case: better-sqlite3 NODE_MODULE_VERSION mismatch — a 5-line stack
|
|
80
|
+
// trace) don't bleed past the `//` in the emitted spec.
|
|
81
|
+
const message = (0, commentSafe_1.flattenForComment)(err instanceof Error ? err.message : err);
|
|
74
82
|
return {
|
|
75
83
|
...ruleBased,
|
|
76
84
|
warning: `${ruleBased.warning} (LLM fallback threw: ${message})`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llmStepMatcher.js","sourceRoot":"","sources":["../../src/llm/llmStepMatcher.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;
|
|
1
|
+
{"version":3,"file":"llmStepMatcher.js","sourceRoot":"","sources":["../../src/llm/llmStepMatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/types.d.ts
CHANGED
|
@@ -109,8 +109,24 @@ export interface LLMClient {
|
|
|
109
109
|
generateBinding(input: GenerateBindingInput): Promise<GenerateBindingResult>;
|
|
110
110
|
/** Have we hit the max-calls budget for this scaffold? */
|
|
111
111
|
budgetExhausted(): boolean;
|
|
112
|
-
/**
|
|
112
|
+
/** Successful provider responses (parsed bindings). */
|
|
113
113
|
callsMade(): number;
|
|
114
|
+
/**
|
|
115
|
+
* All provider call attempts including failures (v2.0.1+). Optional
|
|
116
|
+
* for backwards compat — older clients return undefined and callers
|
|
117
|
+
* should fall back to `callsMade()` for their stats line.
|
|
118
|
+
*/
|
|
119
|
+
callsAttempted?(): number;
|
|
120
|
+
/**
|
|
121
|
+
* v2.0.2+ — null until first generateBinding(), then true if the
|
|
122
|
+
* persistent SQLite cache loaded, false if we fell back to in-memory
|
|
123
|
+
* (native binding mismatch, missing module, fs error, etc.). Callers
|
|
124
|
+
* surface this in the scaffold review report so operators know cache
|
|
125
|
+
* isn't durable across runs.
|
|
126
|
+
*/
|
|
127
|
+
cacheBackendPersistent?(): boolean | null;
|
|
128
|
+
/** v2.0.2+ — when persistent is false, the underlying load reason. */
|
|
129
|
+
cacheBackendFallbackReason?(): string | undefined;
|
|
114
130
|
/** Close any underlying resources (cache db handle, etc.). */
|
|
115
131
|
close?(): Promise<void>;
|
|
116
132
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flatten any string for safe embedding inside a single-line TS comment.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists (v2.0.1):
|
|
5
|
+
* When the LLM fallback throws an error whose `.message` contains
|
|
6
|
+
* newlines (the classic case is the better-sqlite3 NODE_MODULE_VERSION
|
|
7
|
+
* mismatch — a 5-line stack trace), and that message gets embedded
|
|
8
|
+
* into a `// TODO: ...` comment, only the first line gets the `//`
|
|
9
|
+
* prefix. The remaining lines fall outside the comment and become
|
|
10
|
+
* parsed as TypeScript, producing `SyntaxError: Missing semicolon`.
|
|
11
|
+
* The .spec.ts file is unparseable; cucumber/playwright runs collect
|
|
12
|
+
* zero tests and report a build failure.
|
|
13
|
+
*
|
|
14
|
+
* Apply this anywhere user-supplied error messages, LLM provider
|
|
15
|
+
* strings, or any other text from outside our control gets embedded
|
|
16
|
+
* into emitted source.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Collapse newlines (and runs of whitespace around them) into a ` | `
|
|
20
|
+
* separator, normalise CRLF → LF first, trim, return a single-line
|
|
21
|
+
* string safe for embedding inside a `// ...` TS comment.
|
|
22
|
+
*
|
|
23
|
+
* Examples:
|
|
24
|
+
* "line1\nline2" → "line1 | line2"
|
|
25
|
+
* "line1\r\n\r\nline3" → "line1 | line3"
|
|
26
|
+
* " hello \n world " → "hello | world"
|
|
27
|
+
* undefined → ""
|
|
28
|
+
* { foo: 1 } → "[object Object]"
|
|
29
|
+
*/
|
|
30
|
+
export declare function flattenForComment(s: unknown): string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Flatten any string for safe embedding inside a single-line TS comment.
|
|
4
|
+
*
|
|
5
|
+
* Why this exists (v2.0.1):
|
|
6
|
+
* When the LLM fallback throws an error whose `.message` contains
|
|
7
|
+
* newlines (the classic case is the better-sqlite3 NODE_MODULE_VERSION
|
|
8
|
+
* mismatch — a 5-line stack trace), and that message gets embedded
|
|
9
|
+
* into a `// TODO: ...` comment, only the first line gets the `//`
|
|
10
|
+
* prefix. The remaining lines fall outside the comment and become
|
|
11
|
+
* parsed as TypeScript, producing `SyntaxError: Missing semicolon`.
|
|
12
|
+
* The .spec.ts file is unparseable; cucumber/playwright runs collect
|
|
13
|
+
* zero tests and report a build failure.
|
|
14
|
+
*
|
|
15
|
+
* Apply this anywhere user-supplied error messages, LLM provider
|
|
16
|
+
* strings, or any other text from outside our control gets embedded
|
|
17
|
+
* into emitted source.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.flattenForComment = flattenForComment;
|
|
21
|
+
/**
|
|
22
|
+
* Collapse newlines (and runs of whitespace around them) into a ` | `
|
|
23
|
+
* separator, normalise CRLF → LF first, trim, return a single-line
|
|
24
|
+
* string safe for embedding inside a `// ...` TS comment.
|
|
25
|
+
*
|
|
26
|
+
* Examples:
|
|
27
|
+
* "line1\nline2" → "line1 | line2"
|
|
28
|
+
* "line1\r\n\r\nline3" → "line1 | line3"
|
|
29
|
+
* " hello \n world " → "hello | world"
|
|
30
|
+
* undefined → ""
|
|
31
|
+
* { foo: 1 } → "[object Object]"
|
|
32
|
+
*/
|
|
33
|
+
function flattenForComment(s) {
|
|
34
|
+
return String(s ?? "")
|
|
35
|
+
.replace(/\r\n/g, "\n")
|
|
36
|
+
.replace(/\n+/g, " | ")
|
|
37
|
+
.trim();
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=commentSafe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commentSafe.js","sourceRoot":"","sources":["../../src/utils/commentSafe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAcH,8CAKC;AAjBD;;;;;;;;;;;GAWG;AACH,SAAgB,iBAAiB,CAAC,CAAU;IAC1C,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;SACnB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;SACtB,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vijaypjavvadi/bdd2pw",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Scaffold runnable Playwright TypeScript tests from Gherkin .feature files. Detects existing Page Objects, scans live pages via Microsoft Playwright MCP, emits POMs + specs, ready for execution. CLI + HTTP service. Optional governed LLM fallback (Anthropic / OpenAI / Gemini).",
|
|
5
5
|
"bin": {
|
|
6
6
|
"bdd2pw": "dist/cli.js"
|