norn-cli 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md DELETED
@@ -1,1529 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to the "Norn" extension will be documented in this file.
4
-
5
- ## [3.0.0] - 2026-08-11
6
-
7
- ### Added
8
- - **`.nornagent` files — the Agent Workbench** - a new file type that declares AI agents alongside your API tests. An imported `.nornagent` sidecar declares the models and agents; a `.norn` sequence owns execution order and calls them with `var reply = run <Agent> "…"`. Agents can be given MCP-backed tools, `accepts` / `returns` JSON Schema contracts that are validated on every boundary, and other agents they are allowed to call.
9
- - **Agent graph canvas** - a read-only VS Code canvas for a `.nornagent` file showing who calls whom, the contract on each boundary, and how each hop turned out. Hover for models, timings, usage, prompts, payloads, and contract issues.
10
- - **Run recording, replay, and stepping** - runs are recorded by default under `.norn-cache/runs/` (last 20 kept). Replay a recording to step it in the existing `norn` debugger, or play it back hop by hop on the canvas — nothing re-executes and no model is called. The graph toolbar labels each run with the `.norn` file it came from, and **This file — current view** returns you to the open file.
11
- - **`judge` statements — AI evals in a sequence** - `judge <value> with <Agent> expects "…"` scores free text that an assertion cannot. The judge rules on each expectation independently and quotes its evidence; Norn computes the pass or fail, so the verdict never comes from the model. A long checklist lives in a file with `expects file <path>`, where an ordinary Markdown list works as-is. Every ruling carries a reason, and a quote that cannot be found in the judged text is flagged.
12
- - **Judge results everywhere a run is reported** - verdicts appear in the response panel, on the agent graph, in the CLI summary, and in per-statement JUnit output, and travel with the run's trace and recording. A failed verdict fails the sequence and exits the CLI non-zero.
13
- - **Request body variable highlighting** - a variable used as a request body is now coloured as a variable rather than as a header group reference.
14
-
15
- ### Changed
16
- - **`model` blocks in `.nornagent`** - a model is declared as a block naming every input it needs:
17
-
18
- ```nornagent
19
- model Workbench
20
- provider openai
21
- name gpt-4o
22
- apiKey {{$env.OPENAI_API_KEY}}
23
- end model
24
- ```
25
-
26
- This replaces the earlier one-line `model <Alias>: <provider>/<model-id>` form, which implied both the provider/model split and an undeclared environment-variable name. `apiKey` and `baseUrl` are ordinary Norn templates resolved per run, so the file says exactly which value it needs and the secret itself stays in the environment.
27
-
28
- ## [2.9.1] - 2026-06-22
29
-
30
- ### Fixed
31
- - **Windows PTY terminal packaging** - packaged VSIX builds now include the Windows `node-pty` `conpty.node` prebuilds, fixing Norn Terminal startup failures that reported `Failed to load native module: conpty.node`.
32
- - **Windows terminal command cleanup** - intercepted commands such as `:pin` and completed shell commands now clear from the compact terminal input on Windows before appearing in the main terminal timeline.
33
-
34
- ### Changed
35
- - **Native PTY staging** - `vscode:prepublish` now stages the external `node-pty` runtime, stages available npm prebuilds by default, excludes Windows `.pdb` debug files from packages, and keeps explicit `--platform` / `--arch` staging available for platform-specific proof builds.
36
-
37
- ### Testing
38
- - **Release verification** - `npm test` passed with 80 Extension Host tests. `npm run test:regression` ran 195 CLI regression sequences with 195 passing.
39
- - **Website docs review** - no website changes were needed for this Windows terminal-fix release.
40
-
41
- ## [2.9.0] - 2026-06-21
42
-
43
- ### Added
44
- - **Git status terminal bloom** - bare `git status` commands in Norn Terminal now render a status-first graph that shows upstream divergence, HEAD, working-tree buckets, conflicts, detached/unborn states, and preserved raw output fallback while leaving scoped status commands such as `git status -s`, pathspecs, and shell pipelines untouched.
45
- - **Live Git status tile** - `:pin` / `:dash` can pin the latest Git status bloom into the terminal live rail, where it refreshes against the current working directory.
46
-
47
- ### Changed
48
- - **Terminal bloom documentation** - updated the website docs, local terminal guidance, and prototype notes for the Git status bloom behavior and limits.
49
-
50
- ### Testing
51
- - **Release verification** - `npm test` passed with 78 Extension Host tests. `npm run test:regression` ran 195 CLI regression sequences with 195 passing.
52
- - **Website docs review** - updated website docs for the Git status bloom and `npm run build` passed in the website repo.
53
-
54
- ## [2.8.2] - 2026-06-21
55
-
56
- ### Changed
57
- - **Norn Terminal command viewport** — the compact xterm dock now expands while ordinary commands are running, preserving terminal-native animations and interactive prompts, then collapses back into the semantic timeline once the command completes.
58
-
59
- ### Fixed
60
- - **Interactive terminal history** — cleaned semantic command previews for PowerShell/readline-style prompts so carriage returns, escape sequences, and progressive input redraws no longer appear as stray `=`, `P`, or duplicated input fragments.
61
- - **Terminal transcript selection** — fixed main-view copy behavior so selecting transcript text is not immediately interrupted by xterm focus restoration.
62
-
63
- ### Testing
64
- - **Release verification** — `npm test` passed. `npm run test:regression` ran 195 CLI regression sequences with 195 passing.
65
- - **Website docs review** — no website changes were needed for this bug-fix release.
66
-
67
- ## [2.8.1] - 2026-06-20
68
-
69
- ### Changed
70
- - **Norn Terminal agent focus** — hid the raw terminal dock, resize grip, and session selector while a Claude/Codex chat is focused, and restyled the reply composer/session tabs around the Norn Aurora surface.
71
- - **Agent activity indicator** — replaced the CSS keyframe-only network mark with a reduced-motion-aware orbiting activity mark that only animates while visible.
72
-
73
- ### Fixed
74
- - **Per-session agent rail** — scoped agent rail cards and focus cycling to the terminal session that launched them, preventing agents from other terminal tabs from showing or keeping focus when switching sessions.
75
-
76
- ### Testing
77
- - **Release verification** — `npm test` passed with 72 Extension Host tests. `npm run test:regression` ran 195 CLI regression sequences with 195 passing.
78
- - **Website docs review** — no website changes were needed; `npm run build` passed in the website repo.
79
-
80
- ## [2.8.0] - 2026-06-20
81
-
82
- ### Changed
83
- - **PTY-backed Norn Terminal** — promoted the PTY-backed terminal to the only registered `Norn: Open Terminal` route, removed the experimental PTY command and setting, and kept interactive commands inside Norn's raw PTY surface instead of handing them off to a separate VS Code terminal.
84
- - **Native terminal agents** — refined Codex and Claude terminal sessions with earlier thinking indicators, persisted session replay, native agent launch/focus behavior, and bounded command/file/tool transcript cards that stay readable in the terminal rail.
85
- - **Terminal documentation** — updated the project terminal skills, rollout plan, and website docs for the promoted PTY route and removed experimental toggle.
86
-
87
- ### Fixed
88
- - **Agent transcript replay** — restored saved shell/tool activity as command and file-edit cards instead of generic tool blobs, including large edit diffs that previously lost their diff rendering after truncation.
89
- - **Terminal layout polish** — contained long assistant text, command output, code, and diffs so focused agent panes do not paint under the rail or collapse during long restored sessions.
90
-
91
- ### Testing
92
- - **Release verification** — `npm test` passed with 69 Extension Host tests. `npm run test:regression` ran 195 CLI regression sequences with 193 passing; Peter explicitly accepted the two known local SQL Server fixture connection failures (`SmokeLiveSqlServerSql`, `SeedLiveSqlServerDummyData`) at `127.0.0.1:14333`.
93
- - **Website docs review** — updated `src/pages/docs/kubernetes.astro` and `src/pages/docs/vscode.astro` in the website repo; `npm run build` passed there.
94
-
95
- ## [2.7.0] - 2026-06-14
96
-
97
- ### Added
98
- - **Kubernetes runbooks (VS Code + CLI)** — added the `.nornk8s` file type with syntax highlighting, a Kubernetes-inspired file icon, standalone commands, reusable `sequence` helpers, automatic `runbook sequence` CLI entry points, context selection, `.nornenv` variables, label-selector pod capture, and confirmed deployment restarts.
99
- - **Live Kubernetes views** — standalone `get pods`, `describe pod`, and `logs` commands now open styled VS Code views with unhealthy-first pod sorting, pod details and events, live pod watches, live log following, level filters, folded stack traces, pause/resume, and snapshot refresh while paused.
100
- - **Norn Terminal** — added an editor-area terminal that upgrades supported pod, log, event, restart, and rollout commands into structured blooms and live tiles while preserving normal shell fallback. Compact terminal tabs retain independent transcripts, working directories, environments, Kubernetes scopes, running tasks, and live views, with rename and close controls.
101
- - **Kubernetes IntelliSense** — added cached namespace, pod, and deployment suggestions scoped by context and file namespace, `get pods` and `logs` flag suggestions, common `--tail` values, chained suggestions, and complete sequence-block insertion.
102
-
103
- ### Changed
104
- - **CLI regression reliability** — replaced external httpbin.org and Docker MCP dependencies with deterministic local HTTP and MCP fixtures.
105
- - **Environment selection UI** — removed the global Norn environment selector from the VS Code status bar; environments remain selectable through CodeLens, `.nornenv` actions, and `Norn: Select Environment`.
106
- - **Product metadata and docs** — updated Norn descriptions and documentation to cover API tests, database checks, and Kubernetes runbooks.
107
-
108
- ### Fixed
109
- - **Kubernetes completion replacement** — multiword completions replace the full typed command prefix instead of producing duplicated text such as `get get pods`.
110
- - **Kubernetes live scope** — selector-filtered pod dashboards preserve selectors across watch updates and panel navigation.
111
- - **Kubernetes CLI output safety** — complete kubectl output is redacted before printing, and empty `.nornk8s --json` runs now emit valid JSON.
112
- - **Release packaging** — excluded caches, environment files, internal Docs, agent instructions, and development scripts from published artifacts.
113
-
114
- ### Testing
115
- - **Kubernetes runtime coverage** — added Extension Host coverage for parsing, execution, safety, live views, caches, permission fallbacks, CLI behavior, and IntelliSense.
116
-
117
- ## [2.6.1] - 2026-05-30
118
-
119
- ### Changed
120
- - **VS Code webview theme polish** — response, coverage, and Postman panels now use theme-aware colors for JSON, cards, tabs, request details, and inline assertion values so light and high-contrast themes render more consistently.
121
- - **Response panel layout polish** — long assertion expected/actual values now wrap inside their panels, and request detail/tabs spacing was tightened to reduce visual crowding.
122
-
123
- ## [2.6.0] - 2026-05-28
124
-
125
- ### Added
126
- - **Verbatim string literals** — added C#-style `@"..."` strings for Norn values, assertions, regex patterns, request URLs, sequence arguments/defaults, SQL arguments, schema paths, assertion messages, and `@data` values. Backslashes are literal, doubled quotes decode to a single quote, and `{{...}}` tokens inside verbatim strings are not interpolated.
127
- - **Escape-aware highlighting** — `.norn` syntax highlighting now distinguishes decoded escapes from ordinary backslash text, including escaped quotes/backslashes in normal strings, regex escapes in `matches` patterns, doubled quotes in verbatim strings, and valid JSON escapes in request bodies.
128
- - **Configurable HTTP request timeouts** — added a shared `http.timeoutMs` option in `norn.config.json`, a VS Code `norn.request.timeoutMs` setting for local overrides, and CLI `--timeout` duration parsing for values such as `180s`, `3m`, and `300000ms`.
129
-
130
- ### Changed
131
- - **Regex assertion authoring** — `matches` patterns are now guided toward quoted string patterns, with `@"..."` recommended for regexes that contain many backslashes or literal quotes.
132
- - **Starter config output** — generated `norn.config.json` files now stay minimal and rely on schema-backed IntelliSense instead of inline `_comment` guidance fields.
133
-
134
- ### Fixed
135
- - **Quoted string handling** — escaped quotes and backslashes are decoded consistently across variables, request URLs, run arguments, sequence defaults, SQL arguments, `@data` values, `matchesSchema` paths, and assertion messages while preserving unknown escapes such as `\A` as literal text.
136
- - **Editor assistance with verbatim strings** — diagnostics, inlay hints, and hover providers no longer treat `{{...}}` inside verbatim strings as interpolated Norn variables.
137
- - **Sequence tag diagnostics** — `@smoke`, `@team(...)`, and other sequence tags are recognized by editor diagnostics again instead of being reported as unknown statements.
138
- - **Failure output expected values** — CLI, HTML/JUnit reports, and the response panel now prefer the resolved expected value for failed assertions instead of falling back to the raw expression text.
139
- - **Test Explorer environment resolution** — Test Explorer now uses the only available `.nornenv` environment for isolated single-env fixtures when no active environment has been selected, fixing nested regression cases such as encrypted env imports.
140
-
141
- ### Testing
142
- - **Editor diagnostics automation** — added an Extension Host suite that discovers `tests/EditorDiagnostics/valid` and `tests/EditorDiagnostics/negative`, keeping clean fixtures at zero diagnostics and intentional error fixtures at exact expected counts.
143
- - **Runtime negative automation** — converted former manual runtime error cases into `tests/RuntimeNegative` scenarios that assert CLI exit codes and stable error guidance.
144
- - **Test Explorer automation** — added Extension Host checks for Test Explorer fixture exclusion patterns and single-env `.nornenv` resolution.
145
- - **Pre-release verification** — added `npm run test:prerelease` and updated release verification to run Extension Host automation plus the local CLI Regression suite.
146
- - **Test suite cleanup** — moved reusable `.nornenv` import and contract fixtures into Regression, moved API coverage fixtures into `tests/ApiCoverage`, and removed stale scratch/demo test folders.
147
-
148
- ## [2.4.0] - 2026-05-25
149
-
150
- ### Added
151
- - **Per-folder and persisted active environment** — the active env is now tracked per `.nornenv` file (keyed by absolute path) and persisted to the workspace memento. In monorepos each folder remembers its own selection, and selections survive VS Code restart. The status bar shows the env for the current editor's nearest `.nornenv`. Stale entries (deleted `.nornenv` files) are pruned on load.
152
- - **Region-pattern refactor** — when a `.nornenv` contains a flat `[env:STAGE_REGION]` matrix (e.g. `dev_us`, `dev_uk`, `prod_us`, `prod_uk`), the top of the file shows a "Refactor N envs into S+R templates" CodeLens. Clicking it classifies each variable by axis (stage / region / leaf-specific) and lifts shared values into `[template:STAGE]` + `[template:REGION]` blocks, leaving only true leaf-specific overrides in the env sections. Missing values and `connectionString` declarations stay leaf-specific, per-declaration `secret` keywords are preserved, and the same generator is available in the CLI via `--refactor-region-pattern` / `--write`. The VS Code refactor is one `WorkspaceEdit` so a single Cmd+Z reverses it.
153
-
154
- ## [2.3.0] - 2026-05-20
155
-
156
- ### Added
157
- - **Inlay hints + hover across every Norn file type**:
158
- - `.norn`: every `{{name}}` / `{{$env.name}}` token resolves under the active env, with three-scope precedence — sequence-local `var` declarations ← file-level `var` declarations ← active env's effective vars. Runtime values (`$1.body.x`, `run X()`, request captures) are intentionally not rendered inline; hover narrates them with source line.
159
- - `.nornapi`: every `{{...}}` token in headers groups and endpoint definitions resolves under the active env.
160
- - `.nornsql`: the `connection NAME` line shows the resolved `NAME_connectionString` from `.nornenv` (masked if a `secret connectionString`). Hover narrates the source. Any `{{...}}` in SQL bodies is handled for parity.
161
- - Resolution and reference parsing live in `src/inlayHintResolver.ts` so every provider behaves identically.
162
- - **`.nornenv` Templates And Extends (Extension + CLI)**:
163
- - Added `[template:NAME]` sections and multi-parent template `extends` on `[env:...]` / `[template:...]` headers.
164
- - Resolved env values as `common <- template1 <- template2 <- self`; templates compose into envs but are not selectable in the status bar or CLI `-e`.
165
- - Added `.nornenv` Activate/Deactivate and Peek inherited CodeLens actions, folding ranges, smart header decorations, hover resolution chains, inlay hints for `{{...}}`, and inherited-variable completions.
166
- - Added diagnostics for unknown extends parents, invalid env parents, extends cycles, out-of-scope cross-section references, and typo-like override names.
167
-
168
- ### Fixed
169
- - Endpoint path arguments now keep bare `.nornenv` names as literal path values unless the reference is explicit (`{{name}}` / `{{$env.name}}`), while declared file/sequence variables still resolve in endpoint calls.
170
-
171
- ## [2.2.0] - 2026-05-09
172
-
173
- ### Added
174
- - **Starter Catalogue (VS Code)**:
175
- - Added a Project Setup starter catalogue in the sidebar with a Back button and readable stacked sample titles/descriptions.
176
- - Added Explorer folder context-menu parity for opening the same starter catalogue.
177
- - Added self-contained generated starter folders for simple requests, scripts plus JSON data, a runnable SQL demo, a real SQL connection starter, and an advanced end-to-end flow with `.nornenv`, `.nornapi`, helper sequences, tests, and schema contracts.
178
-
179
- ### Fixed
180
- - **Environment Template Diagnostics (VS Code)**:
181
- - Allowed `.nornenv` variables such as `{{primaryUserId}}` and `{{postTitle}}` in assertion and condition expression contexts when those values are intentionally resolved from the environment file.
182
- - Kept the bare-variable diagnostic for local, file, and sequence variables so runtime values are still read directly in expressions.
183
-
184
- - **Sequence Argument Resolution (Extension + CLI)**:
185
- - Resolved bare variable paths such as `user.id` and array-indexed paths such as `todosResponse.body[0]` before binding `run SomeSequence(...)` parameters.
186
- - Fixed advanced schema-validation flows where unresolved literal argument text could produce empty responses and misleading `matchesSchema` object errors.
187
-
188
- ### Changed
189
- - **Website Docs and Skills**:
190
- - Updated website VS Code docs for the starter catalogue, self-contained samples, SQL starter split, advanced flow, and Explorer context-menu behavior.
191
- - Added starter-catalog maintenance guidance and updated value-resolution guidance for sequence argument binding.
192
-
193
- ## [2.1.0] - 2026-05-08
194
-
195
- ### Improved
196
- - **Contract Validation Results (Extension + CLI)**:
197
- - Replaced raw `matchesSchema` assertion text in CLI, Test Explorer, and Response Panel output with schema names and property/path-level validation counts.
198
- - Added richer Response Panel contract cards with validation pills, validated-property details, concise issue summaries, warning-only styling, and direct `View Contract Details` navigation.
199
- - Added a validated-properties tab and `Back to Results` navigation to Contract Details.
200
-
201
- - **`.nornapi` Authoring (VS Code)**:
202
- - Added diagnostics for unresolved endpoint variables such as `{{baseUrl}}` when the nearest `.nornenv` file does not define them.
203
- - Added active-environment diagnostics for `{{$env.name}}` references in endpoint URLs and header groups.
204
- - Updated `.nornapi` syntax highlighting so `{{...}}` interpolation matches `.norn` coloring while path parameters such as `{id}` stay distinct.
205
-
206
- ### Fixed
207
- - **Response Panel Stability**:
208
- - Fixed contract-result rendering paths that could leave the sequence response panel stuck on the initial spinner or after returning from Contract Details.
209
- - Preserved the completed result header styling when rebuilding result pages for contract navigation.
210
-
211
- - **Contract Validation Noise**:
212
- - Suppressed Ajv warnings for OpenAPI numeric formats such as `int32`, `int64`, `float`, and `double`.
213
- - Cleaned up Contract Details display for root-level and missing-property errors so it no longer shows placeholder paths or fake missing actual values.
214
- - Removed the extension activation debug log from the VS Code debug console.
215
-
216
- ### Changed
217
- - **Website Docs**:
218
- - Updated website documentation and the website `.nornapi` grammar copy for the new contract-result and authoring behavior.
219
-
220
- ## [2.0.1] - 2026-04-30
221
-
222
- ### Changed
223
- - **Norn Icon Refresh**:
224
- - Updated the extension package icon to match the Norn API/network mark used on the website and Activity Bar.
225
- - Replaced the stylized `.norn` file icon with a teal-blue test tube icon.
226
- - Recolored `.nornapi`, `.nornsql`, and `.nornenv` file icons to use the Norn teal-blue brand palette.
227
-
228
- ## [2.0.0] - 2026-04-29
229
-
230
- ### Added
231
- - **SQL Environment Templates (Extension + CLI)**:
232
- - Added `.nornenv` template interpolation for SQL connection/profile values using `{{name}}` and `{{$env.name}}` references.
233
- - Resolved SQL connection templates from the active merged `.nornenv`, including imported files and selected `[env:...]` overrides.
234
- - Added CLI redaction support for resolved secret-derived template values.
235
- - Added regression coverage for imported `.nornenv` template variables and live SQL Server execution.
236
-
237
- ### Improved
238
- - **`.nornenv` Authoring (VS Code)**:
239
- - Added template-variable IntelliSense inside `.nornenv` values, including single-brace completion to `{{name}}`.
240
- - Added syntax highlighting for `{{...}}` template references inside environment values and connection strings.
241
- - Added diagnostics for unsupported, missing, and invalid-scope `.nornenv` template references.
242
-
243
- ### Changed
244
- - **Breaking Config Consolidation**:
245
- - Replaced separate SQL and MCP project config files with a single `norn.config.json` file.
246
- - Moved SQL connection aliases and custom SQL adapters under `sql.connections` and `sql.adapters`.
247
- - Moved MCP server aliases under `mcp.servers` and updated schema-backed IntelliSense for the unified config file.
248
-
249
- ### Fixed
250
- - **SQL Connection Safety**:
251
- - Rejected invalid environment-to-environment SQL connection template references before adapter invocation.
252
- - Masked the SQL environment-template regression fixture output so sample secrets are not printed in CLI logs.
253
-
254
- ## [1.13.1] - 2026-04-28
255
-
256
- ### Improved
257
- - **MCP Tool Discovery Display (VS Code)**:
258
- - Replaced raw JSON rendering for `run mcp list` steps in the response panel with a readable tool directory showing names, descriptions, parameter metadata, required markers, and structured-output badges.
259
- - Kept the underlying captured `tools` value unchanged for assertions, runtime variables, reports, and CLI parity.
260
-
261
- - **Variable IntelliSense (VS Code)**:
262
- - Added sequence-local variables and sequence parameters to `{{...}}` interpolation completions, including single-brace partial typing such as `{s`.
263
- - Added completion fallback for `.nornenv` variable names when no active environment is selected.
264
- - Fixed completion replacement ranges so selected interpolation suggestions apply on the current cursor line.
265
-
266
- ### Fixed
267
- - **Norn API IntelliSense (VS Code)**:
268
- - Fixed `.nornapi` block detection so top-level `headers` suggestions appear after `end endpoints`, while header-name suggestions still work inside `headers ... end headers` blocks.
269
-
270
- ## [1.13.0] - 2026-04-26
271
-
272
- ### Added
273
- - **Cached API Response IntelliSense (VS Code)**:
274
- - Added sampled response-shape caching in `.norn-cache/api-response-intellisense.json` after successful `Send Request` and `Run Sequence` runs.
275
- - Added cached property completions for `$N.body.` and captured response variables such as `user.body.`, including nested object paths.
276
- - Added source-aware and environment-aware response-shape reuse for later body-path authoring in the editor.
277
-
278
- ### Improved
279
- - **Response Authoring and Diagnostics (VS Code)**:
280
- - Improved response-property completions so partial property names filter correctly for captured responses, body paths, and common headers.
281
- - Added undefined-base-variable diagnostics for bare `assert`, `if`, `return`, `print`, and property-assignment expressions without flagging runtime-shaped JSON paths when the base variable exists.
282
- - Added clearer print diagnostics when a plain word is interpreted as an undefined variable instead of a quoted string literal.
283
-
284
- ### Changed
285
- - **Website Docs**:
286
- - Added website docs for cached response-body IntelliSense, cache privacy boundaries, and the VS Code sequence authoring workflow.
287
-
288
- ## [1.12.0] - 2026-04-20
289
-
290
- ### Added
291
- - **MCP Tool Arguments (Extension + CLI)**:
292
- - Added positional MCP tool arguments for `run mcp call <alias> <tool>(...)`, bound in tool-schema order alongside existing named arguments.
293
- - Added schema-aware MCP tool resolution before tool execution so required, duplicate, and unknown parameter checks use the server's declared input schema consistently.
294
- - Added regression coverage for positional and mixed MCP argument calls in both the fake MCP fixtures and the docker-backed MCP regression.
295
-
296
- ### Improved
297
- - **MCP Editor Authoring (VS Code)**:
298
- - Added config-scoped `.norn-cache` persistence for listed MCP tool metadata so tool-name completions and parameter hints work from cached discovery data.
299
- - Added compact MCP parameter hints with schema-backed descriptions for the active parameter and cleaner tool insertion with `()`.
300
- - Suppressed unrelated bare-variable suggestions while typing inside MCP tool argument lists.
301
-
302
- ### Fixed
303
- - **MCP Diagnostics and Fixture Metadata**:
304
- - Fixed diagnostics so positional MCP tool arguments are not treated like duplicate named arguments.
305
- - Enriched the fake MCP regression tool schemas with parameter descriptions so cached hint text stays meaningful during local testing.
306
-
307
- ## [1.11.0] - 2026-04-19
308
-
309
- ### Added
310
- - **Deterministic MCP Tools (Extension + CLI)**:
311
- - Added `norn.mcp.json` project config with nearest-file resolution, stdio and HTTP transports, and shared alias-based runtime behavior.
312
- - Added `run mcp list <alias>` and `run mcp call <alias> <tool>(name: value)` with variable capture support in both VS Code and the CLI.
313
- - Added deterministic MCP session reuse per resolved config file plus alias for the lifetime of a sequence run, including nested and imported sequences.
314
- - Added MCP tool output-schema validation, paginated `tools/list` draining, dedicated CLI/report output, response-panel rendering, and regression fixtures for stdio and HTTP MCP servers.
315
-
316
- ### Improved
317
- - **Project Setup UX (VS Code)**:
318
- - Added `Create SQL starter files` and `Create MCP starter config` commands to the Norn sidebar and Explorer folder context menu.
319
- - Added starter `norn.mcp.json` content with inline `_comment` guidance fields for alias usage, local vs remote servers, and optional config fields.
320
- - Added MCP-specific response panel styling so MCP steps no longer reuse SQL visuals.
321
-
322
- ### Fixed
323
- - **Array Count Path Access**:
324
- - Fixed structured path resolution so array values can be asserted with `.count` consistently across captured variables, response-body paths, and MCP tool lists.
325
-
326
- ### Changed
327
- - **Website Docs**:
328
- - Added MCP documentation to the website, including config setup, `run mcp` usage, CLI parity notes, and VS Code project-setup flows.
329
-
330
- ## [1.10.6] - 2026-03-28
331
-
332
- ### Fixed
333
- - **Structured Variable Storage**:
334
- - Kept structured runtime values as real objects instead of JSON strings so the debugger, assertions, and path access all see the same types.
335
- - Preserved compatibility for existing string-backed values when resolving paths.
336
-
337
- ### Changed
338
- - **Docs**:
339
- - Updated the advanced website docs to note that structured values stay as objects in memory.
340
-
341
- ## [1.10.5] - 2026-03-28
342
-
343
- ### Improved
344
- - **URL-Encoded Request Bodies (Extension + CLI)**:
345
- - Added stricter shared validation for `application/x-www-form-urlencoded` request bodies so malformed lines now fail fast with clear preflight errors in both the editor and CLI.
346
- - Added support for single-line ampersand-delimited form bodies such as `key1=value1&key2=value2`.
347
- - Preserved raw-request header-group workflows by stripping standalone header-group lines from the request body before validation and send.
348
-
349
- ### Fixed
350
- - **Imported Parameterized Sequences**:
351
- - Fixed `.norn` import resolution so imported helper sequences keep their parameter lists and can be invoked correctly from other files.
352
-
353
- - **Form Body Syntax Highlighting**:
354
- - Fixed `.norn` syntax coloring so URL-encoded body lines are highlighted correctly after inline headers in raw request blocks.
355
-
356
- ## [1.10.4] - 2026-03-21
357
-
358
- ### Improved
359
- - **Request Failure Response Panel**:
360
- - Refreshed request-failure views with a clearer error summary, request context bar, structured issue cards, and common-cause guidance.
361
-
362
- ### Changed
363
- - **Regression + Contributor Tooling**:
364
- - Standardized regression test docs and scripts around `node ./dist/cli.js`, added `npm run validate:skills`, and refreshed bundled skill/demo assets.
365
-
366
- ### Fixed
367
- - **SQL Server Live Regression Fixture**:
368
- - Made the SQL Server Docker regression setup safe to rerun during repeated local release verification.
369
-
370
- ## [1.10.2] - 2026-03-15
371
-
372
- ### Fixed
373
- - **Sequence Return + Response Panel UX**:
374
- - Fixed `var result = run SomeSequence` so single-value returns can capture literal values like `return "Bar"` instead of resolving to empty output.
375
- - Fixed streaming/final response panel step timers so print/SQL rows show per-step duration instead of elapsed-from-start totals.
376
- - Fixed the streaming step counter so hidden `wait` steps no longer inflate the top-bar step total.
377
- - Fixed `.norn` syntax highlighting so quoted string literals after `return` use normal string coloring.
378
-
379
- - **Request Parsing + CLI Error Output**:
380
- - Fixed request parsing to stop bodies at the next Norn block boundary, preventing later named requests or sequence declarations from leaking into request bodies.
381
- - Fixed CLI text and HTML reports to preserve multiline request/sequence error details instead of collapsing them into single-line output.
382
-
383
- - **API Coverage + Import UX**:
384
- - Fixed API coverage to follow status assertions on captured request variables and named requests that call `.nornapi` endpoints.
385
- - Fixed the OpenAPI import section picker so selecting `All` stays mutually exclusive with individual section selections.
386
-
387
- ## [1.7.0] - 2026-03-07
388
-
389
- ### Added
390
- - **Explicit Environment Lookup (Extension + CLI)**:
391
- - Added `{{$env.name}}` so tests, sequences, endpoints, header groups, and interpolated strings can read directly from the active environment even when a file variable, local variable, or sequence parameter uses the same name.
392
- - Added IntelliSense for the `$env` namespace and environment variable suggestions after typing `{{$env.`.
393
- - Added diagnostics for invalid `{{$env...}}` references and warnings when local/file/parameter variables shadow environment variables.
394
-
395
- ### Fixed
396
- - **Assertion String Literal Escaping**:
397
- - Fixed escaped quotes in assertion string literals and quoted `var` expressions so values like `\"{orderId}\"` compare correctly instead of failing with visually identical expected/actual output.
398
-
399
- - **Parameterized Test Snippet UX**:
400
- - Updated `@data` completion to insert `data()` with the cursor inside the parentheses instead of placeholder values.
401
-
402
- - **Decorator Syntax Highlighting**:
403
- - Fixed `.norn` syntax coloring so decorator lines such as `@data(...)` keep their highlighting when they follow request blocks like `DELETE ...`.
404
-
405
- ## [1.6.2] - 2026-03-07
406
-
407
- ### Fixed
408
- - **`.nornenv` IntelliSense and Diagnostics**:
409
- - Fixed `[env:` completion in `.nornenv` files so accepting the suggestion after typing `[` no longer inserts `[[env:`.
410
- - Fixed `.nornenv` diagnostics and syntax highlighting so secret names that start with `var` (for example `secret varnaCityApiKey = ...`) are no longer flagged as invalid.
411
-
412
- - **Encrypted Secret UX (Extension + CLI)**:
413
- - Fixed secret-key cache placement so new secret-key caches are created in the project root `.norn-cache` instead of nested folders beside individual `.nornenv` files.
414
- - Reused an existing secret-key cache when one is already present in the project, avoiding duplicate `.norn-cache` folders.
415
- - Fixed Windows CRLF handling for `.nornenv` secret parsing so the `Encrypt Secret` CodeLens remains available reliably on Windows and secret rewrites preserve the file's original line endings.
416
-
417
- ## [1.6.1] - 2026-03-04
418
-
419
- ### Fixed
420
- - **Parameterized Debug Launch (VS Code)**:
421
- - Fixed `Debug Sequence` launch from editor/CodeLens so `@data` / `@theory` case arguments are passed into the debug session.
422
- - Added case selection prompt when multiple parameterized cases exist, so a single concrete case is debugged without unresolved placeholders.
423
-
424
- - **CLI `--sequence` Parameterized Execution**:
425
- - Fixed `node ./dist/cli.js <file> -s <sequence>` to execute `@data` / `@theory` cases (instead of ignoring case args and failing on unresolved variables).
426
- - Aligned `--sequence` behavior with full test execution mode for parameterized sequences.
427
-
428
- ## [1.6.0] - 2026-03-04
429
-
430
- ### Added
431
- - **Native VS Code Debugger for `.norn` Sequences (v1)**:
432
- - Added Debug Adapter Protocol integration for debug type `norn`.
433
- - Added line breakpoints in `.norn` files, including imported sequence sources.
434
- - Added stepping controls: continue, pause, step over, step into sequence calls, step out, and stop.
435
- - Added debugger variable scopes for runtime variables and response history (`$1`, `$2`, ...).
436
- - Added launch support via `launch.json` with `file`, `sequence`, optional `env`, and `stopOnEntry`.
437
-
438
- - **Debugger Entry Points**:
439
- - Added `Debug Sequence` command (`norn.debugSequence`).
440
- - Added `▷ Debug Sequence` CodeLens on runnable sequences.
441
- - Added Testing sidebar `Debug Tests` profile (single-target debug in v1).
442
-
443
- ### Improved
444
- - **Debugger Runtime Behavior**:
445
- - Added breakpoint line verification/auto-adjust to nearest executable step in the same sequence.
446
- - Added failure-stop behavior for request/assertion failures before session termination.
447
- - Added source/line mapping across root and imported sequence files for call stack and stepping.
448
- - Added smart launch default for `stopOnEntry` in command/test-driven debug starts (disabled when breakpoints already exist).
449
-
450
- - **Documentation and Skills**:
451
- - Added README debugger usage and `launch.json` example.
452
- - Added debugger integration skill docs under `.github/skills/norn-debugger-integration`.
453
- - Documented debugger as a VS Code-only v1 exception to CLI feature parity policy.
454
-
455
- ## [1.5.4] - 2026-03-02
456
-
457
- ### Improved
458
- - **Norn Cache Git Ignore Behavior**:
459
- - Stopped modifying the repository root `.gitignore` when secret keys are cached.
460
- - Added local cache-level ignore behavior by writing `.norn-cache/.gitignore` with `*`.
461
- - Keeps `.norn-cache` contents out of Git without mutating user-managed root ignore files.
462
-
463
- ## [1.5.3] - 2026-03-02
464
-
465
- ### Added
466
- - **Native Encrypted `.nornenv` Secrets (Extension + CLI)**:
467
- - Added encrypted secret format support: `secret name = ENC[NORN_AGE_V1:kid=<id>:<payload>]`.
468
- - Added automatic secret decryption during environment resolution for both VS Code execution and CLI runs.
469
- - Added `norn secrets` command group: `keygen`, `import-key`, `encrypt`, `rotate`, `rekey`, `audit`, `keys`, `forget`.
470
- - Added `.nornenv` CodeLens actions: `Encrypt Secret`, `View Decrypted`, `Rotate Secret`, `Delete Secret`.
471
- - Added encrypted environment regression coverage with chained `.nornenv` imports.
472
-
473
- - **TLS Certificate Verification Toggle (Extension + CLI)**:
474
- - Added VS Code setting `norn.security.verifyTlsCertificates` (default `true`) to control TLS certificate verification for HTTPS requests and Swagger/OpenAPI fetches.
475
- - Added CLI flag `--insecure` to disable TLS certificate verification for local/self-signed development environments.
476
- - Wired shared runtime TLS behavior so extension request execution, CLI execution, Swagger imports, schema extraction, coverage refresh, and chat Swagger fetches use the same verification mode.
477
-
478
- ### Improved
479
- - **Secrets UX and Safety**:
480
- - Added known `kid` picker so users can select previously used key IDs instead of typing each time.
481
- - Added first-time encryption flow to generate a new shared key once (or use an existing key from vault), then cache locally.
482
- - Improved decrypted secret display to a secure modal flow with masked preview, explicit reveal, and copy action (no plaintext editor tab).
483
- - Added best-effort auto-ignore for `.norn-cache/` in repo `.gitignore` when secret keys are first cached.
484
-
485
- ## [1.5.2] - 2026-02-28
486
-
487
- ### Improved
488
- - **Premium Aurora UI Design**:
489
- - Updated Home sidebar with aurora gradient welcome card, styled file type pills, and resource links.
490
- - Updated response panels with aurora-styled headers, status badges, and tabbed navigation.
491
- - Updated assertion failure details with gradient backgrounds and styled error highlighting.
492
- - Updated API Coverage panel with gradient headers, progress bars, and styled endpoint sections.
493
- - Updated Contract Report panel with gradient summary cards and styled issue lists.
494
- - Added consistent 3D-style colored icons for print, script, timer, and sequence group steps.
495
-
496
- ## [1.5.1] - 2026-02-28
497
-
498
- ### Improved
499
- - **Path IntelliSense (Import + Scripts)**:
500
- - Added relative path completions for `import` statements and script commands (`run bash`, `run powershell`, `run js`, `run readJson`) in `.norn` files.
501
- - Suggestions now resolve from the active file directory and continue navigation on `/`.
502
- - File suggestions prioritize relevant extensions by context (for example `.norn`/`.nornapi` for imports, `.ps1` for PowerShell, `.js` for JS).
503
-
504
- - **.nornenv IntelliSense**:
505
- - Added relative import path IntelliSense in `.nornenv` files.
506
- - `.nornenv` is now visible in path suggestions by default, even when hidden files are not explicitly prefixed.
507
-
508
- - **Suggestion Icon Consistency**:
509
- - Path completion entries now consistently use file/folder icons in suggest lists to avoid iconless entries.
510
-
511
- ## [1.5.0] - 2026-02-26
512
-
513
- ### Added
514
- - **Postman Import (VS Code, v1)**:
515
- - Added a new `Norn` Activity Bar sidebar entry with `Postman Imports` actions for collection and environment JSON imports.
516
- - Added a review-before-write import wizard flow (`Select -> Review -> Result`) for safer migration into Norn files.
517
- - Added Postman import generation for `.nornapi`, `.norn`, and `.nornenv` outputs with warnings/blockers surfaced before writes.
518
- - Added Postman import test fixtures under `tests/PostmanImport/`.
519
-
520
- ### Improved
521
- - **Postman Import Conversion Output**:
522
- - Collection-level Postman variables now generate into top-level global entries in `.nornenv` instead of being duplicated in each `.norn` file.
523
- - Path/query placeholders are converted into endpoint parameters while base URL placeholders remain environment-driven variables.
524
- - Environment imports now append into an existing `.nornenv` (with warnings for duplicate env names) instead of blocking import.
525
-
526
- ## [1.4.5] - 2026-02-24
527
-
528
- ### Fixed
529
- - **Diagnostics False Positive (JSON Property Assignment)**:
530
- - Fixed editor squiggles on valid JSON property assignments with array indexing, for example `config.users[0].name = "Updated Alice"`.
531
-
532
- ## [1.4.4] - 2026-02-24
533
-
534
- ### Improved
535
- - **Error UX (Extension + CLI)**:
536
- - Added structured, more actionable request/sequence error messages with environment-aware hints.
537
- - Improved preflight validation so unresolved variables and invalid URLs are caught before request execution.
538
- - Standardized error formatting across extension response panel and CLI output.
539
-
540
- - **Response Panel Error Readability**:
541
- - Sequence errors/warnings now render as timeline entries (same visual style as execution steps) and appear at the end of the run.
542
- - Error details are grouped into clearer sections with primary fields surfaced first.
543
-
544
- - **Diagnostics Coverage and Persistence**:
545
- - Expanded `.norn` editor diagnostics for malformed statements and invalid command combinations.
546
- - Added workspace-wide diagnostic refresh so Explorer error badges persist after files are closed.
547
-
548
- ### Fixed
549
- - **Diagnostics False Positives**:
550
- - Fixed false squiggles for valid request body variable lines (for example `payload` used as a request body).
551
- - Fixed false squiggles for endpoint calls with parameters (for example `GET MultiParam(hello, world)` and named args).
552
- - Fixed false squiggles for commented-out empty variable references (`{{}}`) in comment lines.
553
-
554
- - **Preflight Validation Regression**:
555
- - Fixed request preflight validation incorrectly blocking some `GET`/`HEAD` requests due to unresolved placeholders detected in parsed body content.
556
-
557
- ## [1.4.3] - 2026-02-22
558
-
559
- ### Improved
560
- - **@norn Chat Context Efficiency**:
561
- - Chat participant now sends heavyweight grounding context only on the first turn of a conversation.
562
- - Follow-up turns reuse conversation history without re-injecting full system prompt and active-file payload each message.
563
- - Reduces token usage and improves chat responsiveness in multi-turn sessions.
564
-
565
- ## [1.4.2] - 2026-02-21
566
-
567
- ### Fixed
568
- - **API Coverage (Template Path Segments)**:
569
- - Fixed endpoint path normalization for coverage when `.nornapi` endpoint URLs contain multiple leading template variables, e.g. `{{baseUrl}}/{{version}}/pet/{petId}`.
570
- - Prevents false 0% coverage in workspace samples where endpoint URLs are composed from `baseUrl` + `version` path segments.
571
-
572
- ### Added
573
- - **Regression Fixture (Coverage Scope)**:
574
- - Added `tests/ApiCoverage/coverage-scope/template-version.nornapi` and `tests/ApiCoverage/coverage-scope/template-version-covered.norn` to lock in template-path coverage behavior.
575
-
576
- ## [1.4.1] - 2026-02-21
577
-
578
- ### Changed
579
- - Updated logo icon
580
-
581
- ## [1.4.0] - 2026-02-21
582
-
583
- ### Added
584
- - **@norn Copilot Chat Participant**:
585
- - New `@norn` chat participant for GitHub Copilot Chat integration.
586
- - Slash commands: `/generate` (create Norn requests/sequences), `/explain` (understand existing code), `/convert` (cURL/HTTP to Norn).
587
- - Inline LLM tools for file editing, workspace reading, Swagger parsing, diagnostics inspection, and test execution.
588
- - `norn_runTest` tool allows the AI to run test sequences and report results directly in chat.
589
- - `norn_applyEdit` and `norn_createFile` tools let the AI modify or create `.norn`, `.nornapi`, and `.nornenv` files.
590
- - `norn_readSwagger` tool parses OpenAPI specs to help generate tests for APIs.
591
- - `norn_getDiagnostics` tool inspects current errors/warnings in Norn files.
592
- - Comprehensive system prompt teaches the AI the full Norn language specification.
593
- - Gracefully skipped when GitHub Copilot is not installed.
594
-
595
- ### Improved
596
- - **Test Execution (Chat Tools)**:
597
- - Environment resolution for `norn_runTest` now auto-selects the first available environment when none is active.
598
- - Test results in chat now display the environment used and available alternatives.
599
- - Clear error messages when environment-specific variables fail to resolve.
600
-
601
- ### Fixed
602
- - **Chat Participant Robustness**:
603
- - Added cancellation token checks to prevent runaway tool-calling loops.
604
- - Ambiguous `searchText` in `norn_applyEdit` replace action now returns an error instead of silently replacing the first match.
605
- - Glob pattern normalization in `norn_readWorkspaceFile` prevents double `**/` prefixes.
606
-
607
- ## [1.3.21] - 2026-02-17
608
-
609
- ### Fixed
610
- - **API Coverage Scope (Swagger CodeLens/Panel)**:
611
- - Coverage for a `.nornapi` file now only includes `.norn` tests in that file's directory and descendants.
612
- - Parent/sibling directories are no longer counted when opening coverage from a specific `.nornapi` file.
613
- - `run SequenceName` resolution for coverage is now scoped by directory tree to avoid cross-folder name collisions.
614
- - **Endpoint Path Mapping for Coverage**:
615
- - Fixed coverage endpoint mapping when `.nornapi` endpoints use variable-prefixed URLs such as `{{baseUrl}}/path`.
616
- - This prevents false 0% coverage in isolated folder setups.
617
- - **Coverage UI Accuracy**:
618
- - Swagger coverage CodeLens now shows a stable `Show Coverage` action instead of stale global percentages.
619
- - Coverage status bar now behaves as a context-aware action button and no longer shows drifting percentage values.
620
- - Status bar click target now follows the active `.nornapi` editor context.
621
- - **Diagnostics – Invalid JSON Body Shape**:
622
- - Added `.norn` diagnostic for JSON-like request body properties missing surrounding `{ }` in `POST`/`PUT`/`PATCH` requests.
623
- - Example now flagged: property lines like `"username": "value"` directly under a request without an object wrapper.
624
- - Diagnostic correctly skips form-style bodies when `Content-Type` is `application/x-www-form-urlencoded` or `multipart/form-data` (inline header or header group).
625
-
626
- ## [1.3.20] - 2026-02-15
627
-
628
- ### Fixed
629
- - **API Coverage (Run Sequences)**:
630
- - Status assertions written after `run` calls are now applied to the returned request from the called sequence.
631
- - Coverage now correctly reflects patterns like `var user = run GetUser` followed by `assert user.status == 200`.
632
- - **Coverage Assertion Scanning**:
633
- - Improved scan boundaries so assertions do not leak across `var ... = run ...` step boundaries.
634
- - **Compile Compatibility (Node 16)**:
635
- - Added compatibility shims in ESLint config for `structuredClone` and `AbortSignal.throwIfAborted` so `npm run compile` succeeds on older Node runtimes.
636
-
637
- ## [1.3.19] - 2026-02-15
638
-
639
- ### Added
640
- - **Swagger Request Body IntelliSense (Endpoint Calls)**:
641
- - Added request body template insertion for `POST`/`PUT`/`PATCH` endpoint calls backed by Swagger metadata.
642
- - Added inline JSON key suggestions inside request bodies using cached Swagger request schemas.
643
- - Added persistent request-schema cache in `.norn-cache/swagger-body-intellisense.json`.
644
-
645
- ### Improved
646
- - **Swagger Schema Cache Availability**:
647
- - Extension now warms request-body schema cache from `.nornapi` `swagger` URLs on startup and on `.nornapi` save.
648
-
649
- ### Fixed
650
- - **Request Body Completions**:
651
- - Fixed endpoint-to-swagger path mapping when endpoint URLs use variable prefixes like `{{baseUrl}}/...`.
652
- - Fixed body-start completion filtering so template suggestions appear reliably when typing `{` / `[`.
653
- - Fixed template insertion indentation and fallback behavior when schema has no required fields.
654
-
655
- ## [1.3.18] - 2026-02-15
656
-
657
- ### Improved
658
- - **Environment Resolution (Extension + CLI)**: `.nornenv` resolution is now file-aware and uses the closest ancestor file.
659
- - VS Code execution paths now resolve env variables from the current document path.
660
- - CLI directory runs now resolve environments per test file path (including nested folders).
661
- - CodeLens and environment status now reflect the active editor/file context.
662
-
663
- ### Fixed
664
- - **IntelliSense in Request Bodies**:
665
- - Header completions are suppressed when starting JSON body lines (`{` or `[`).
666
- - Header suggestions remain available for non-body lines, including raw URL requests (e.g., `POST "https://..."`).
667
- - **Syntax Highlighting**:
668
- - Fixed header coloring after endpoint calls where header-group token matching could break on `Content-Type`.
669
- - Improved assert string highlighting with variable interpolation inside quoted strings.
670
-
671
- ### Added
672
- - **Regression Coverage**:
673
- - Added env-resolution regression tests for parent vs nested `.nornenv` precedence.
674
-
675
- ## [1.3.17] - 2026-02-14
676
-
677
- ### Fixed
678
- - **Import Resolution**: Improved duplicate import handling while preserving circular import detection
679
- - Re-importing already loaded files is now treated as a no-op instead of a false circular error
680
- - True cycles are still detected via active import stack tracking
681
- - **Sequence Var-Request Parsing**: Fixed multi-line `var x = METHOD ...` request collection
682
- - Headers and JSON/form bodies are now preserved until the next real command boundary
683
- - Body-only shorthand continues to parse correctly
684
- - **Syntax Highlighting**: Improved `var` request URL/header/body highlighting in `.norn` files
685
- - Better distinction between endpoint captures and raw URL captures
686
- - Header groups and body lines now color consistently in URL-style var requests
687
-
688
- ## [1.3.16] - 2026-02-13
689
-
690
- ### Fixed
691
- - **IntelliSense**: Additional completion fixes and reliability improvements
692
-
693
- ## [1.3.15] - 2026-02-13
694
-
695
- ### Fixed
696
- - **IntelliSense**: Applied fixes to improve completion reliability and keyword suggestions
697
- - **Regression Stability**: Updated Petstore contract schema for `findByStatus` to handle responses where `photoUrls` may be omitted
698
-
699
- ## [1.3.14] - 2026-02-12
700
-
701
- ### Fixed
702
- - **Assertion Equality for Objects/Arrays**: `==` and `!=` now perform deep structural comparison for objects and arrays
703
- - `assert $1.body.args == {}` now correctly passes for empty-object payloads
704
- - Scalar comparisons retain existing coercion behavior
705
- - **Regression Stability**: Updated empty-literals regression coverage for current `httpbin` behavior
706
- - `files` in `GET /get` may be omitted, so the test now asserts `!exists`
707
-
708
- ## [1.3.13] - 2026-02-10
709
-
710
- ### Fixed
711
- - **Script Variable Resolution**: Fixed `print` showing raw command text instead of script output
712
- - `extractVariables` now skips runtime-computed values (`var x = run ...`, `var x = $1...`, `var x = METHOD url`)
713
- - Variables are only pre-populated for static assignments, not scripts/captures
714
- - **Test Explorer Script Paths**: Fixed script path resolution when running tests through Test Explorer
715
- - Scripts in imported sequences now resolve relative to the imported file, not the importing file
716
- - Added `sequenceSources` parameter to Test Explorer execution path
717
-
718
- ## [1.3.12] - 2026-02-10
719
-
720
- ### Fixed
721
- - **Variable Request with Form Body**: Fixed `var x = POST EndpointName HeaderGroup` not passing URL-encoded body
722
- - Body lines following the var request command are now correctly collected and sent
723
- - Example: `var result = POST PostFormData FormData` followed by `key=value` lines now works
724
-
725
- ## [1.3.11] - 2026-02-09
726
-
727
- ### Fixed
728
- - **Syntax Highlighting**: Fixed header value colors in sequences
729
- - `Content-Type: application/json` now correctly colors the entire value
730
- - `/json` part no longer incorrectly highlighted as URL
731
- - **Syntax Highlighting**: Fixed numbers in variable names being highlighted separately
732
- - `item3.status` now shows as single variable color instead of `item` + `3` in different colors
733
- - Added proper variable pattern matching in assert statements
734
-
735
- ## [1.3.10] - 2026-02-09
736
-
737
- ### Fixed
738
- - **Type Preservation in Property Assignments**: Bare variables now preserve their original type
739
- - `payload.userId = myNumericVar` keeps the number type instead of converting to string
740
- - Script outputs that are valid JSON (numbers, booleans, objects) are now properly typed
741
- - Use `payload.field = "{{var}}"` to force string type when needed
742
-
743
- ## [1.3.9] - 2026-02-09
744
-
745
- ### Added
746
- - **`pwsh` Script Type**: Added `pwsh` as an alias for `powershell` in script commands
747
- - `var x = run pwsh "./script.ps1"` now works alongside `run powershell`
748
- - **Bare Variable Support in Property Assignments**: Variables can be assigned without `{{}}` syntax
749
- - `payload.userId = dynamicUserId` now works (previously required `{{dynamicUserId}}`)
750
- - **Request Body in Verbose Output**: CLI `-v` flag now shows the actual request body and headers sent
751
- - Helps debug payload issues by showing exactly what was transmitted
752
-
753
- ### Fixed
754
- - **Script Output Capture**: Fixed variable shadowing bug that could affect JSON parsing of script output
755
-
756
- ## [1.3.8] - 2026-02-09
757
-
758
- ### Fixed
759
- - **Named Requests with Endpoint Syntax**: Fixed `run RequestName` failing when the named request uses `.nornapi` endpoint syntax
760
- - `[PostFormWithEndpoint]` with `POST HttpBinPost Form` now works correctly when invoked via `run PostFormWithEndpoint`
761
- - Endpoint is resolved and headers/body are properly applied
762
-
763
- ## [1.3.7] - 2026-02-09
764
-
765
- ### Fixed
766
- - **Named Requests with Header Groups**: Fixed `run RequestName` failing when the named request uses header groups
767
- - `run GetWithJsonHeader` now correctly applies the `Json` header group instead of appending it to the URL
768
- - Regression from 1.3.4 header groups fix
769
-
770
- ## [1.3.6] - 2026-02-09
771
-
772
- ### Added
773
- - **Empty Array and Object Assertions**: Support for asserting against empty literals
774
- - `assert $1.body.items == []` now works for empty array comparison
775
- - `assert $1.body.data == {}` now works for empty object comparison
776
-
777
- ## [1.3.5] - 2026-02-09
778
-
779
- ### Fixed
780
- - **Endpoint Syntax Body Extraction**: Fixed form body not being sent with named requests using endpoint syntax
781
- - `[PostFormWithEndpoint]` followed by `POST HttpBinPost Form` and body lines now works correctly
782
- - Applies to standalone named requests (outside sequences) using `.nornapi` endpoints
783
- - **Header Group Syntax Highlighting**: Fixed header group not showing green when on same line as URL
784
- - `POST {{url}}/post Form` now correctly colors `Form` as header group
785
-
786
- ## [1.3.4] - 2026-02-09
787
-
788
- ### Fixed
789
- - **Header Groups with Raw URLs**: Header groups now work with regular URL requests, not just endpoint syntax
790
- - `GET https://example.com/api Json` now correctly applies the Json header group
791
- - Header groups on separate lines after URL also work
792
- - Both extension and CLI support this fix
793
- - Named requests (`[RequestName]`) also support header groups with raw URLs
794
- - **CLI Named Requests with Endpoints**: Fixed body not being sent when using endpoint syntax
795
- - `POST HttpBinPost Form` with body lines now correctly sends the form data
796
- - **Syntax Highlighting for Form Parameters**: Added proper coloring for URL-encoded form body parameters
797
- - `firstname=Alice` now shows key as parameter (purple), `=` as operator, value as string
798
-
799
- ## [1.3.3] - 2026-02-08
800
-
801
- ### Fixed
802
- - **Contract View Panel**: Fixed webview rendering issue that showed raw JavaScript code
803
- - Removed embedded script tags that broke HTML parsing
804
- - "View Contract Details" button now works correctly
805
- - **Contract View Styling**: Unified appearance with Contract Report
806
- - Response JSON now has proper syntax highlighting (colored keys, strings, numbers)
807
- - Schema JSON has consistent styling without background highlight artifacts
808
- - **Gutter Decorations**: Removed contract gutter icons and line highlights for cleaner editor appearance
809
-
810
- ## [1.3.2] - 2026-02-08
811
-
812
- ### Improved
813
- - **Contract Report View**: Enhanced property highlighting in the annotated JSON view
814
- - Color-coded property highlights (green=valid, yellow=warning, red=error)
815
- - Highlights wrap only the property content, not the entire line
816
- - Selection-style highlighting similar to assert hover
817
- - Improved indentation and spacing
818
-
819
- ### Fixed
820
- - **Syntax Highlighting**: Fixed JSON body coloring after nested objects
821
- - Properties following `{ }` objects now correctly colored
822
- - **matchesSchema Keyword**: Fixed partial coloring issue
823
- - Entire keyword now highlights as operator (was matching "matches" first)
824
-
825
- ## [1.3.1] - 2026-02-08
826
-
827
- - **Clickable JSON Properties**: Click any JSON value in the response panel to generate an assertion
828
- - Hover over any value (string, number, boolean, null) to highlight it
829
- - Click to automatically insert `assert $var.body.path == value` at the end of the sequence
830
- - Works with nested objects and arrays (e.g., `body.user.address.city`, `body.items[0].name`)
831
- - String values are properly escaped with quotes
832
- - Toast notification confirms assertion added
833
-
834
- - **Response Comparison**: Compare any two API responses with VS Code's built-in diff view
835
- - New "⇄ Compare" button next to "📋 Copy" on response bodies
836
- - Click on first response, then click another to open side-by-side diff
837
- - Responses are pretty-printed JSON for easy comparison
838
- - Toast notification guides user: "Select another response to compare"
839
- - Works in both sequence results and single request views
840
- - State resets automatically after diff opens
841
-
842
- ## [1.3.0] - 2026-02-07
843
-
844
- ### Added- **Retry and Backoff**: Automatically retry failed HTTP requests with configurable backoff
845
- - Syntax: `GET url retry 3 backoff 200 ms` (retry up to 3 times with 200ms linear backoff)
846
- - Works with direct URLs, named endpoints, and named requests
847
- - Supports time units: `ms`, `s`, `seconds`, `milliseconds`
848
- - Response panel shows retry indicator: 🔄 `retried 2x`
849
- - CLI shows retry attempts in real-time
850
- - Retries on 5xx errors, 429 rate limiting, and network failures
851
-
852
- ### Improved
853
- - **Syntax highlighting**: Variable references `{{var}}` now highlighted inside print strings
854
- - **Better pattern recognition**: `test sequence` correctly terminates request blocks in all contexts
855
-
856
- ## [1.2.5] - 2026-02-07
857
-
858
- ### Improved
859
- - **Rich HTML Reports**: Completely redesigned HTML report output for QA professionals
860
- - **Pass rate badge**: Large visual indicator showing pass percentage (green/yellow/red)
861
- - **Filter bar**: Search tests by name, filter by All/Passed/Failed
862
- - **Clickable stat cards**: Click total/passed/failed to filter results
863
- - **Expand/Collapse All**: Buttons to quickly expand or collapse all test details
864
- - **Failures first**: Failed tests automatically sorted to top and expanded
865
- - **Friendly assertion names**: Shows `user.body.status` instead of `$1.body.status`
866
- - **JSON path context**: Failed assertions show the path that failed
867
- - **Variable labels on requests**: Shows `user = GET /api/users` instead of `$1`
868
- - **Environment display**: Shows which environment was used in report header
869
-
870
- ## [1.2.4] - 2026-02-07
871
-
872
- ### Improved
873
- - **Enhanced failure experience**: Failed assertions now display much richer context
874
- - **Friendly variable names**: Shows `user.body.status` instead of `$1.body.status` when response was assigned to a variable
875
- - **Auto-expand failures**: Failed assertions automatically expand to show details
876
- - **Inline response preview**: Failed assertions include a collapsible preview of the related response body
877
- - **JSON path highlighting**: The failing field is highlighted in the response preview
878
- - **Request labels**: Request steps in sequences show variable names (e.g., `user`) instead of `$1`
879
- - Same improvements apply to CLI output and Test Explorer
880
-
881
- ## [1.2.3] - 2026-02-07
882
-
883
- ### Added
884
- - **Duplicate import detection**: Errors shown when importing files with duplicate definitions
885
- - Header groups and endpoints from `.nornapi` files
886
- - Named requests and sequences from `.norn` files
887
- - Blocks execution in CLI, VS Code, and Test Explorer
888
- - Red squiggly on import line with descriptive error message
889
-
890
- ### Fixed
891
- - **.nornenv validation**: `secret var = value` now shows error (use `secret name = value` instead)
892
- - Syntax highlighting marks invalid pattern in red
893
- - Diagnostic message explains correct usage
894
- - **IntelliSense context**: Script types (`bash`, `powershell`, `js`, `readJson`) only appear after `run` keyword
895
- - **var keyword highlighting**: `var` keyword stays colored while typing variable name
896
-
897
- ## [1.2.2] - 2026-02-05
898
-
899
- ### Added
900
- - **Coverage for sub-sequences**: Coverage now follows `run SequenceName` calls to track API calls in nested sequences
901
- - **Coverage for named request blocks**: Named request blocks (`[RequestName]`) with hardcoded URLs are now matched to swagger endpoints by URL path
902
- - **Auto-refresh coverage on save**: Coverage panel updates automatically when `.norn` or `.nornapi` files are saved
903
-
904
- ### Improved
905
- - **IntelliSense for .nornapi files**: Content-Type header completions now work in `.nornapi` files (previously only worked in `.norn`)
906
-
907
- ## [1.2.1] - 2026-02-03
908
-
909
- ### Added
910
- - **Inline headers for API endpoints**: Stack custom headers below endpoint calls from `.nornapi` files
911
- - Example: `GET Login` followed by `x-api-key: "my-key"` on the next line
912
- - Mix inline headers with header groups (e.g., `Common`)
913
- - Inline headers take precedence over header group values
914
- - Syntax highlighting for inline headers after API endpoint calls
915
-
916
- ### Improved
917
- - **IntelliSense for header values**: After selecting `Content-Type`, IntelliSense automatically triggers to show content type options (`application/json`, etc.)
918
- - **Removed snippet tab stops**: Header completions no longer leave you in snippet mode requiring Tab to exit
919
- - **Better trigger characters**: Added `:` as trigger character for immediate header value suggestions
920
-
921
- ## [1.2.0] - 2026-02-02
922
-
923
- ### Added
924
- - **Swagger API Coverage**: See percentage coverage of your OpenAPI/Swagger endpoints
925
- - Status bar indicator shows coverage percentage when swagger specs are detected
926
- - Click to open detailed coverage panel with per-endpoint breakdown
927
- - Coverage tracks asserted status codes (200, 400, 404, etc.) per endpoint
928
- - Supports wildcard matching (2xx, 4xx, 5xx)
929
- - Only counts `test sequence` blocks toward coverage
930
- - CodeLens on swagger lines shows coverage at a glance
931
- - Automatic recalculation after test execution
932
- - Caches swagger specs for performance
933
-
934
- ## [1.1.4] - 2026-02-02
935
-
936
- ### Fixed
937
- - **Inline comments**: Fixed syntax highlighting and execution for inline comments
938
- - **URL highlighting**: URLs now colored as strings with variable interpolation support
939
- - **Duplicate detection**: Diagnostics for duplicate variables, named requests, and sequences
940
-
941
- ## [1.1.3] - 2026-02-01
942
-
943
- ### Fixed
944
- - **@data shorthand for single parameter**: `@data(1, 2, 3)` with a single parameter now correctly creates 3 test cases instead of 1 case with 3 values
945
- - Example: `@data(1, 2, 3) test sequence Foo(id)` now runs 3 times with `id=1`, `id=2`, `id=3`
946
- - Multi-parameter syntax unchanged: `@data(1, "a")` per line for each test case
947
-
948
- ## [1.1.2] - 2026-02-01
949
-
950
- ### Added
951
- - **VS Code Test Explorer Integration**: Run test sequences from the Testing sidebar
952
- - Automatic test discovery for all `.norn` files
953
- - Tests grouped by tag (`@smoke`, `@regression`, etc.)
954
- - Colorful streaming output with ANSI colors
955
- - Persistent output when selecting tests
956
- - Detailed failure info with expected vs actual diffs
957
- - Request/response details for failed HTTP calls
958
-
959
- - **Parameterized Tests**: Data-driven testing with `@data` and `@theory` annotations
960
- - `@data(1, "Widget")` syntax for inline test data
961
- - `@theory("./testdata.json")` for external data files
962
- - Typed value parsing (numbers, booleans, strings)
963
- - Each data row creates a separate test case in Test Explorer
964
- - Example: `@data(1, 200)` with `test sequence ValidateStatus(id, expectedStatus)`
965
-
966
- - **Test Sequence Validation**: Diagnostics for test annotations
967
- - Error if `@data`/`@theory` used on regular sequences (must use `test sequence`)
968
- - Error if tags like `@smoke` used on regular sequences
969
- - Error if test sequence has required params but no `@data`/`@theory`
970
-
971
- ### Improved
972
- - **Test Explorer Output**: Rich colorized output with icons
973
- - HTTP methods in cyan, status codes color-coded (green/red/yellow)
974
- - Checkmarks for passed assertions, X for failures
975
- - Clear test headers when running multiple tests
976
- - Duration shown for each test
977
-
978
- ## [1.1.0] - 2026-02-01
979
-
980
- ### Added
981
- - **Test Sequences**: Mark sequences as tests with `test sequence Name` syntax
982
- - Only `test sequence` blocks run from CLI; plain `sequence` blocks are helpers
983
- - Use helpers for shared setup/utility sequences called by tests
984
- - Example: `test sequence AuthFlow` runs from CLI, `sequence SetupUser` is a helper
985
-
986
- - **Directory Discovery**: Run all test sequences in a directory tree
987
- - `npx norn tests/` recursively finds and runs all `.norn` files
988
- - Aggregates results across all files with combined summary
989
- - Only `test sequence` blocks are executed
990
-
991
- - **Output Directory**: Save reports to a custom location with timestamped filenames
992
- - `--output-dir ./reports` saves results to specified directory
993
- - Auto-generates timestamped filenames: `tests-2026-02-01-120000-results.xml`
994
- - Works with `--junit` and `--html` reporters
995
-
996
- - **Secret Variables**: Mark sensitive environment variables with `secret` keyword
997
- - Syntax: `secret apiKey = my-secret-key` in `.nornenv` files
998
- - Values automatically redacted as `***` in all CLI output
999
- - Prevents accidental exposure of tokens, passwords, API keys
1000
-
1001
- - **Human-Readable CLI Output**: Colorized, formatted output for terminal
1002
- - Pass/fail indicators with colors and Unicode symbols
1003
- - Assertion results with expected vs actual values
1004
- - Request/response details in verbose mode
1005
-
1006
- - **JUnit Reporter**: Generate XML reports for CI/CD pipelines
1007
- - `--junit` flag outputs JUnit-compatible XML
1008
- - Compatible with GitHub Actions, Jenkins, Azure DevOps
1009
- - Includes test names, durations, failure messages
1010
-
1011
- - **HTML Reporter**: Generate visual HTML reports
1012
- - `--html` flag outputs styled HTML report
1013
- - Expandable sections for requests, responses, assertions
1014
- - Easy sharing and archiving of test results
1015
-
1016
- ### Fixed
1017
- - **Print Statement Variable Resolution**: `{{$1.status}}` now resolves correctly in print statements
1018
- - Response references (`$1`, `$2`, etc.) are now stored in runtime variables
1019
- - Works in both print statements and variable assignments
1020
-
1021
- ## [1.0.26] - 2026-01-31
1022
-
1023
- ### Added
1024
- - **Sequence Tags**: Tag sequences with `@smoke`, `@team(CustomerExp)` for filtering in CI/CD
1025
- - Simple tags: `@smoke @regression` before `sequence` declaration
1026
- - Key-value tags: `@team(CustomerExp)`, `@priority(high)`, `@jira(NORN-123)`
1027
- - Multiple tags on same line or separate lines
1028
- - Case-insensitive tag matching
1029
-
1030
- - **CLI Tag Filtering**: Filter sequences by tags when running from command line
1031
- - `--tag smoke` - AND logic (can repeat: `--tag smoke --tag auth`)
1032
- - `--tags smoke,regression` - OR logic (comma-separated)
1033
- - Key-value matching: `--tag team(CustomerExp)`
1034
- - Nested sequences silently skipped when tag filter is active and they don't match
1035
-
1036
- - **Tag IntelliSense**: Type `@` to see existing tags from workspace
1037
- - Auto-completes simple tags and key-value tags
1038
- - Suggests common tags: `smoke`, `regression`, `wip`, `skip`, `team`, `priority`
1039
-
1040
- - **Tag Diagnostics**: Warning when tags are placed incorrectly (not before `sequence`)
1041
-
1042
- ### Changed
1043
- - **Regression Test Filtering**: Regression CLI runs support `--tag` and `--tags` options
1044
- - Example: `node ./dist/cli.js tests/Regression/ --env prelive --tag smoke` runs only smoke-tagged sequences
1045
-
1046
- ## [1.0.25] - 2026-01-28
1047
-
1048
- ### Added
1049
- - **Capture Named Request Response**: `var response = run NamedRequest` now works
1050
- - Previously only `run NamedRequest` (without capture) worked
1051
- - Now you can capture the full HTTP response including `status`, `body`, and `headers`
1052
- - Example: `var resp = run GetSingleTodo` then `assert resp.status == 200`
1053
-
1054
- ## [1.0.24] - 2026-01-27
1055
-
1056
- ### Changed
1057
- - **Single Return Values**: Single returns now pass the raw value, not a wrapped object
1058
- - `return myValue` → caller receives the value directly (e.g., `"level-3-data"`)
1059
- - `return a, b` → caller receives `{a: valueA, b: valueB}` object
1060
- - This matches intuitive behavior: "return the value" means pass the value itself
1061
- - Example: `var result = run GetEmail` where `GetEmail` does `return email` → `result` is the email string
1062
-
1063
- ### Fixed
1064
- - **Regression Tests**: Updated test expectations to match correct single-return behavior
1065
- - Tests now correctly assert raw values instead of accessing `.property` on single returns
1066
-
1067
- ## [1.0.23] - 2026-01-26
1068
-
1069
- ### Fixed
1070
- - **Sequence Return Value Consistency**: Single and multiple return statements now behave identically
1071
- - Fixed `assert result.value == "data"` failing with "Variable not defined" for single returns
1072
- - All return values are now wrapped in a JSON object, so `result.myValue` works consistently
1073
-
1074
- - **API Endpoint Request Bodies**: POST/PUT/PATCH with endpoint syntax now includes the body
1075
- - Fixed `POST HttpBinPost Json` followed by `{"test": "data"}` sending empty body
1076
- - Body lines after endpoint requests are now correctly extracted and sent
1077
-
1078
- - **Variable Quote Stripping**: Quoted string values are now stored without quotes
1079
- - Fixed `var url = "https://example.com"` being used as `"https://example.com"/path`
1080
- - Quotes are stripped during variable extraction for cleaner substitution
1081
-
1082
- ## [1.0.22] - 2026-01-26
1083
-
1084
- ### Fixed
1085
- - **Standalone API Requests**: `GET GetPetById(1)` now works outside of sequences
1086
- - Fixed "Invalid URL" error when clicking CodeLens on API endpoint requests
1087
- - API detection now correctly skips blank lines, comments, and import lines
1088
-
1089
- ## [1.0.21] - 2026-01-25
1090
-
1091
- ### Fixed
1092
- - **Script Variable Capture**: `var id = run powershell "script.ps1"` now correctly captures and parses JSON output
1093
- - Script output is automatically parsed as JSON when valid, enabling `id[0].property` access
1094
- - Fixed detection to not confuse `run powershell` with `run SequenceName`
1095
-
1096
- - **Sequence Return Values**: `return id[0].id` now correctly returns nested values
1097
- - Fixed path parsing for array and property access in return statements
1098
- - Return values preserve their type (number, object, etc.) instead of being stringified
1099
-
1100
- - **Sub-sequence API Endpoints**: API endpoints now work correctly in sub-sequences
1101
- - Fixed `GET GetUser(id)` not resolving when called from `run Get_200(id)`
1102
- - API definitions are now properly passed to nested sequence calls
1103
-
1104
- ## [1.0.20] - 2026-01-25
1105
-
1106
- ### Added
1107
- - **Swagger/OpenAPI Import**: Import endpoints from OpenAPI specifications in `.nornapi` files
1108
- - Add `swagger https://api.example.com/swagger.json` to your `.nornapi` file
1109
- - Click "Import Endpoints" CodeLens button to fetch and parse the spec
1110
- - Select which sections to import (All, or specific tags like pet/store/user)
1111
- - Customize the base URL for generated endpoints
1112
- - Supports OpenAPI 2.0 (Swagger) and OpenAPI 3.x specifications
1113
- - Generates clean endpoint definitions: `EndpointName: METHOD /path`
1114
-
1115
- ## [1.0.19] - 2026-01-25
1116
-
1117
- ### Improved
1118
- - **Simplified IntelliSense**: Completions now insert just the keyword without extra placeholders
1119
- - HTTP methods insert `GET ` instead of `GET https://` with snippet
1120
- - `var`, `run`, `assert` insert just the keyword for natural typing
1121
- - Endpoint completions insert just the name, letting you add `()` manually
1122
-
1123
- - **Better Syntax Highlighting for JSON Bodies**: Full JSON coloring in request bodies
1124
- - Property keys highlighted as property names
1125
- - String values highlighted as strings
1126
- - Numbers highlighted as numbers
1127
- - Variable references `{{var}}` highlighted inside strings
1128
- - Works with or without blank line between headers and body
1129
-
1130
- - **Print Statement Syntax Highlighting**: Distinct colors for different elements
1131
- - Quoted strings show string color
1132
- - Variables show variable color
1133
- - `+` operator highlighted
1134
-
1135
- - **Variable Assignment Highlighting**: Better coloring for `var x = value`
1136
- - Variable paths like `result[0].id` highlighted as variables (not strings)
1137
-
1138
- ### Added
1139
- - **Missing Concatenation Diagnostics**: Red squiggly when `+` is missing between values in print
1140
- - `print "Result: " result` shows error between string and variable
1141
- - Suggests adding `+` operator
1142
-
1143
- - **Missing Parameter Diagnostics**: Red squiggly when calling sequence without required parameters
1144
- - `run Teardown` shows error if `Teardown(sessionId)` requires a parameter
1145
- - Shows required parameter names in error message
1146
-
1147
- ### Fixed
1148
- - Auto-closing parentheses now works - typing `(` inserts `)`
1149
- - IntelliSense triggers when typing inside parentheses
1150
-
1151
- ## [1.0.18] - 2026-01-24
1152
-
1153
- ### Added
1154
- - **Variable Request Capture**: Capture HTTP responses into variables for stable assertions
1155
- - Syntax: `var user = GET {{baseUrl}}/users/1` or `var user = GET GetUser(1) Json`
1156
- - Access response properties: `user.body.username`, `user.status`, `user.headers`
1157
- - Eliminates need for fragile `$1`, `$2` references that break when requests change
1158
- - Full support for named endpoints with header groups
1159
-
1160
- - **IntelliSense for Variable Request Capture**
1161
- - HTTP methods (GET, POST, etc.) shown after `var x = `
1162
- - Endpoint suggestions from `.nornapi` files after method
1163
- - Header group suggestions after endpoint (Auth, Json, etc.)
1164
- - Response property completions for captured variables (`user.body.`, `user.headers.`)
1165
-
1166
- - **Diagnostics for Variable Request Capture**
1167
- - Red squiggly for undefined endpoints in `var x = GET UnknownEndpoint`
1168
- - Red squiggly for undefined header groups in `var x = GET GetUser(1) InvalidGroup`
1169
-
1170
- - **Syntax Highlighting for Variable Request Capture**
1171
- - Endpoint name styled as function
1172
- - Parameters styled appropriately
1173
- - Header groups styled in green (matching other header group references)
1174
-
1175
- ## [1.0.17] - 2026-01-24
1176
-
1177
- ### Added
1178
- - **API Definition Files (.nornapi)**: New file format for defining reusable API configurations
1179
- - Define header groups with `headers GroupName` / `end headers`
1180
- - Define endpoint templates with `endpoints /path` / `end endpoints`
1181
- - Import into .norn files with `import "./api.nornapi"`
1182
- - IntelliSense support for .nornapi keywords and common headers
1183
- - Custom file icon for .nornapi files
1184
-
1185
- - **Enhanced Sequence Request Display**: Request steps in sequences now show full details
1186
- - URL display with method badge (color-coded by HTTP method)
1187
- - Tabs for Body, Headers, and Cookies (same as single request view)
1188
- - Copy button for response body
1189
- - JSON syntax highlighting in response body
1190
-
1191
- - **File Icons**: Custom icons for Norn file types
1192
- - `.nornapi` files show network connection icon
1193
- - `.nornenv` files show globe icon
1194
-
1195
- ### Fixed
1196
- - Comments no longer show diagnostic errors for undefined variables
1197
- - Lines starting with `#` or `//` are properly skipped during variable validation
1198
-
1199
- ## [1.0.16] - 2026-01-24
1200
-
1201
- ### Added
1202
- - **Sequence Parameters**: Sequences can now accept parameters with optional default values
1203
- - Declare parameters: `sequence Login(username, password = "secret123")`
1204
- - Call with positional args: `run Login("admin", "mypass")`
1205
- - Call with named args: `run Login(password: "pass", username: "user")`
1206
- - Parameters with defaults are optional
1207
- - Required parameters must come before optional ones
1208
-
1209
- - **Sequence Return Values**: Sequences can return multiple values
1210
- - Return statement: `return token, userId`
1211
- - Capture in caller: `var result = run Login("admin")`
1212
- - Access fields: `{{result.token}}`, `{{result.userId}}`
1213
-
1214
- - **IntelliSense for Return Fields**: Property completions for sequence return values
1215
- - Type `{{result.` to see available fields from the sequence's return statement
1216
- - Works for sequences in the same file and imported files
1217
-
1218
- - **CLI Print Support**: Print statements now display in CLI output with `[print]` prefix
1219
-
1220
- ### Fixed
1221
- - Sequence parameters no longer show as undefined variables in diagnostics
1222
- - CodeLens "Run Sequence" now shows for sequences where all parameters have defaults
1223
-
1224
- ### Examples
1225
-
1226
- ```norn
1227
- sequence CreateUser(name, role = "user", active = "true")
1228
- print Creating {{name}} with role {{role}}
1229
- POST {{baseUrl}}/users
1230
- Content-Type: application/json
1231
- {"name": "{{name}}", "role": "{{role}}", "active": {{active}}}
1232
-
1233
- var id = $1.body.id
1234
- return id, name, role
1235
- end sequence
1236
-
1237
- sequence TestUsers
1238
- # Positional args
1239
- var admin = run CreateUser("Admin", "admin", "true")
1240
- print Admin ID: {{admin.id}}
1241
-
1242
- # Named args (any order)
1243
- var guest = run CreateUser(role: "guest", name: "Guest")
1244
- print Guest ID: {{guest.id}}
1245
-
1246
- # Use defaults
1247
- run CreateUser("DefaultUser")
1248
- end sequence
1249
- ```
1250
-
1251
- ## [1.0.15] - 2026-01-24
1252
-
1253
- ### Added
1254
- - **Sequence Composition**: Sequences can now call other sequences with `run SequenceName`
1255
- - Enables modular test design with reusable setup/teardown patterns
1256
- - Variables set in called sequences are available to the caller
1257
- - Sequences can be nested to any depth
1258
- - Circular references are detected and reported as errors
1259
- - Sub-sequences shown in collapsible groups in the response panel
1260
-
1261
- - **File Imports**: Import named requests and sequences from other files
1262
- - `import "./common.norn"` - import from relative path
1263
- - Nested imports supported (imported files can import other files)
1264
- - Circular imports detected and reported
1265
- - Variables resolved at import time (baked in), not exported
1266
- - `.nornenv` environment variables shared across all files
1267
-
1268
- - **Response Panel Improvements**:
1269
- - Steps start collapsed by default for cleaner view
1270
- - "Expand All" / "Collapse All" button in sequence header
1271
- - Sub-sequence calls shown in collapsible groups with 📦 icon
1272
- - Failed sub-sequences show error styling
1273
-
1274
- ### Examples
1275
-
1276
- ```norn
1277
- # common.norn - shared utilities
1278
- var baseUrl = https://api.example.com
1279
-
1280
- [AuthRequest]
1281
- POST {{baseUrl}}/auth/login
1282
- Content-Type: application/json
1283
- {"username": "admin", "password": "secret"}
1284
-
1285
- sequence SharedSetup
1286
- run AuthRequest
1287
- var token = $1.body.accessToken
1288
- end sequence
1289
- ```
1290
-
1291
- ```norn
1292
- # main-test.norn
1293
- import "./common.norn"
1294
-
1295
- sequence MyTests
1296
- run SharedSetup
1297
-
1298
- GET {{baseUrl}}/users/me
1299
- Authorization: Bearer {{token}}
1300
- assert $1.status == 200
1301
- end sequence
1302
- ```
1303
-
1304
- ## [1.0.14] - 2026-01-23
1305
-
1306
- ### Added
1307
- - **Variable expression assignment**: Assign variables from expressions without `{{}}`
1308
- - `var id = data.users[0].id` - extract from JSON variable
1309
- - `var name = "John"` - quoted string literals
1310
- - `var count = 123` - numeric literals
1311
- - `var active = true` - boolean literals
1312
- - **PowerShell output parsing**: Automatic parsing of PowerShell table/list output to JSON
1313
- - Table format with headers and `---` separators
1314
- - List format with `Key : Value` pairs
1315
- - ANSI escape code stripping for clean output
1316
- - **Improved syntax highlighting**: Different colors for value types in variable assignments
1317
- - Quoted strings, numbers, booleans, variable references, URLs
1318
- - **IntelliSense for variable assignments**: After `var x = `, shows:
1319
- - Defined variables with their values
1320
- - Keywords: `true`, `false`, `null`
1321
- - Run commands
1322
- - **Diagnostic for invalid assignments**: Red squiggly for:
1323
- - Unquoted strings with spaces: `var x = hello world`
1324
- - Undefined variable references: `var x = unknownVar`
1325
-
1326
- ### Examples
1327
-
1328
- ```norn
1329
- sequence DataExtraction
1330
- # Load JSON data
1331
- var config = run readJson ./config.json
1332
-
1333
- # Extract values directly (no {{}} needed)
1334
- var userId = config.users[0].id
1335
- var userName = config.users[0].name
1336
-
1337
- # Use string literals with interpolation
1338
- var greeting = "Hello {{userName}}"
1339
-
1340
- # PowerShell scripts now auto-parse to JSON
1341
- var dbResult = run powershell ./query.ps1
1342
- var recordId = dbResult.Id
1343
-
1344
- print Result | User {{userId}}: {{userName}}
1345
- end sequence
1346
- ```
1347
-
1348
- ## [1.0.13] - 2026-01-22
1349
-
1350
- ### Added
1351
- - **`wait` command**: Pause execution for a specified duration
1352
- - Formats: `wait 2s`, `wait 500ms`, `wait 1.5 seconds`
1353
- - Useful for testing async operations or rate-limited APIs
1354
- - **`if` statements**: Conditional execution of steps based on response data
1355
- - Use any assertion operator: `if $1.status == 200 ... end if`
1356
- - Supports nesting: multiple if blocks can be nested
1357
- - Skipped steps are not executed when condition is false
1358
- - **`isType` assertion**: Type checking for response values
1359
- - Supported types: `number`, `string`, `boolean`, `array`, `object`, `null`
1360
- - Example: `assert $1.body.id isType number`
1361
- - Example: `assert $1.body.tags isType array`
1362
- - **CLI improvements**:
1363
- - `--env` / `-e`: Select environment from `.nornenv`
1364
- - `--request` / `-r`: Run a specific named request
1365
- - `--timeout` / `-t`: Request timeout in seconds
1366
- - `--verbose` now shows response headers
1367
-
1368
- ### Examples
1369
-
1370
- ```norn
1371
- sequence ConditionalExample
1372
- GET {{baseUrl}}/users/1
1373
-
1374
- # Type assertions
1375
- assert $1.body.id isType number
1376
- assert $1.body.name isType string
1377
- assert $1.body.roles isType array
1378
-
1379
- # Conditional execution
1380
- if $1.status == 200
1381
- print Success | User found
1382
-
1383
- # Wait before next request (rate limiting)
1384
- wait 1s
1385
-
1386
- GET {{baseUrl}}/users/1/profile
1387
- assert $2.status == 200
1388
- end if
1389
-
1390
- if $1.status == 404
1391
- print Not Found | User does not exist
1392
- end if
1393
- end sequence
1394
- ```
1395
-
1396
- ## [1.0.12] - 2026-01-22
1397
-
1398
- ### Added
1399
- - **JSON file reading**: Load JSON files into variables with `var config = run readJson ./path/to/file.json`
1400
- - Access nested properties: `{{config.database.host}}`, `{{config.users[0].name}}`
1401
- - Modify properties inline: `config.apiKey = {{newKey}}`
1402
- - **IntelliSense for `run` commands**: Typing `run` and selecting it automatically triggers IntelliSense showing available options:
1403
- - Script types: `bash`, `powershell`, `js`, `readJson`
1404
- - Named requests defined in the file
1405
- - **Method icons**: Script type completions now show method icons for better visual distinction
1406
- - **Smart IntelliSense triggers**: Space after `run` automatically shows available options
1407
-
1408
- ### Changed
1409
- - **Simplified completions**: Removed snippet placeholders from `run` command completions - now inserts plain text for cleaner experience
1410
- - **Refactored completion logic**: `run` command completions now share logic between standalone `run` and `var x = run` contexts
1411
-
1412
- ## [1.0.11] - 2026-01-21
1413
-
1414
- ### Added
1415
- - **Assertions**: New `assert` command for validating HTTP responses in sequences
1416
- - Operators: `==`, `!=`, `>`, `>=`, `<`, `<=`, `contains`, `startsWith`, `endsWith`, `matches`, `exists`, `!exists`
1417
- - Assert on status: `assert $1.status == 200`
1418
- - Assert on body: `assert $1.body.userId == 1`
1419
- - Assert on headers: `assert $1.headers.Content-Type contains "application/json"`
1420
- - Assert duration: `assert $1.duration < 5000`
1421
- - Custom failure messages: `assert $1.body.id == 999 | "Expected different ID"`
1422
- - **IntelliSense for response properties**: After typing `$1.`, shows completions for `status`, `statusText`, `headers`, `body`, `duration`
1423
- - **Assertion syntax highlighting**: `assert` commands now have proper syntax coloring
1424
-
1425
- ### Changed
1426
- - **BREAKING**: Response body access now requires explicit `body.` prefix
1427
- - Before: `$1.userId` or `$1[0].title`
1428
- - After: `$1.body.userId` or `$1.body[0].title`
1429
- - This makes it clearer what you're accessing (status vs headers vs body)
1430
-
1431
- ## [1.0.10] - 2026-01-20
1432
-
1433
- ### Fixed
1434
- - **PowerShell 7 support**: Now prefers `pwsh` (PowerShell 7+) over `powershell` (Windows PowerShell 5.1) for script execution. PowerShell 7 has newer SqlClient drivers that support additional connection string options like `HostNameInCertificate`. Falls back to Windows PowerShell if pwsh is not installed.
1435
-
1436
- ## [1.0.9] - 2026-01-20
1437
-
1438
- ### Added
1439
- - **Streaming sequence results**: Sequence steps now appear in the response panel as they complete, providing real-time feedback during long-running sequences
1440
- - **Variable assignment IntelliSense**: After typing `var x = run `, IntelliSense now shows available script types (bash, powershell, js) AND named requests to run
1441
- - **Named request capture syntax**: Support for `var result = run MyRequest` to capture a named request's response into a variable
1442
-
1443
- ### Fixed
1444
- - **`run` keyword highlighting**: The `run` keyword is now properly highlighted while typing, before completing the full command
1445
- - **Partial command highlighting**: `var x = run` and `var x = run bash` now highlight correctly while still typing
1446
- - **IntelliSense after `run `**: Typing `run ` (with trailing space) now properly triggers IntelliSense suggestions
1447
- - **Sequence re-run cleanup**: Running a sequence again now properly clears previous results instead of appending to them
1448
-
1449
- ## [1.0.8] - 2026-01-19
1450
-
1451
- ### Added
1452
- - **Add env file**: When no `.nornenv` file exists, CodeLens shows "**+ Add env file**" - clicking it creates a template file with common variables and dev/prod environments ready to customize
1453
-
1454
- ### Fixed
1455
- - **Parser fix**: Body extraction now stops at request boundaries (`[SomeName]`, `sequence`, HTTP methods). Previously `[SomeName]` after URL-encoded params was incorrectly included in the body.
1456
-
1457
- ## [1.0.7] - 2026-01-19
1458
-
1459
- ### Fixed
1460
- - **Syntax highlighting**: Proper stateful parsing - headers before blank line get header color, body params after blank line get parameter color (like the parser does)
1461
-
1462
- ## [1.0.6] - 2026-01-19
1463
-
1464
- ### Fixed
1465
- - **URL-encoded body support**: Now supports `key: value` format (colon) in addition to `key=value` for form data
1466
- - **Syntax highlighting**: Body parameters now have distinct highlighting from headers (different color for `username:` vs `Content-Type:`)
1467
-
1468
- ## [1.0.5] - 2026-01-19
1469
-
1470
- ### Fixed
1471
- - **Fixed**: File icon resolution
1472
- - **Fixed header/body parsing**: Parser now uses blank line to separate headers from body (standard HTTP convention). This fixes 400 errors when URL-encoded form data params like `username: value` were incorrectly parsed as headers.
1473
-
1474
- ## [1.0.4] - 2026-01-19
1475
-
1476
- ### Added
1477
- - **Named Requests**: Define reusable requests with `[RequestName]` and call them with `run RequestName` in sequences
1478
- - **Environment Support**: Create `.nornenv` file with environment-specific variables
1479
- - Common variables available in all environments
1480
- - Switch environments via status bar or CodeLens
1481
- - Environment variables shown in IntelliSense with source indicator
1482
- - **URL-encoded Form Data**: Support for `application/x-www-form-urlencoded` with multi-line format
1483
- - **Environment Selector in CodeLens**: Click `env: dev` next to Send Request to switch environments
1484
-
1485
- ### Changed
1486
- - Changed language ID from `http` to `norn` to avoid conflicts with other extensions
1487
- - Improved syntax highlighting for `[RequestName]` declarations and `run` commands
1488
-
1489
- ### Fixed
1490
- - Diagnostics now respect environment variables (no false "undefined variable" errors)
1491
- - Diagnostics refresh when switching environments
1492
- - Named request names now enforce no-spaces rule with error highlighting
1493
-
1494
- ## [1.0.3] - 2026-01-18
1495
-
1496
- - Fix 'sequence' not being recognized as a keyword
1497
- - Fixed an issue where if the name was of the sequence had a '-' it will be highlighted incorrectly
1498
-
1499
- ## [1.0.2] - 2026-01-18
1500
-
1501
- ### Added
1502
- - Capture entire response body with `var data = $1`
1503
- - Capture array elements with `var item = $1[0]`
1504
- - Extended evaluation period to 30 days
1505
-
1506
- ### Fixed
1507
- - Array index capture syntax now works correctly (`$1[0].field`)
1508
-
1509
- ## [1.0.1] - 2026-01-18
1510
-
1511
- ### Fixed
1512
- - Improved file icon resolution (128x128)
1513
- - Updated license badge in README
1514
-
1515
- ## [1.0.0] - 2025-01-15
1516
-
1517
- ### Added
1518
- - **HTTP Requests**: Send GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS requests
1519
- - **Variables**: Define with `var name = value`, reference with `{{name}}`
1520
- - **Sequences**: Chain multiple requests with `sequence Name` / `end sequence`
1521
- - **Response Capture**: Capture values from responses with `$N.path` syntax
1522
- - **Script Execution**: Run bash, PowerShell, or JavaScript scripts with `run` command
1523
- - **Print Statements**: Debug output with `print Message` or `print Title | Body`
1524
- - **Cookie Support**: Automatic cookie jar with persistence across requests
1525
- - **Syntax Highlighting**: Full highlighting for HTTP methods, headers, JSON bodies
1526
- - **IntelliSense**: Autocomplete for methods, headers, variables, and keywords
1527
- - **Diagnostics**: Error highlighting for undefined variables
1528
- - **CLI Tool**: Run requests from terminal with JSON output for CI/CD pipelines
1529
- - **Response Panel**: Webview with formatted JSON and execution results