@skill-map/cli 0.53.1 → 0.53.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -185,12 +185,16 @@ first kind quoted, the second kind never.
185
185
  `findings.md` (in the cwd). Reactive, not proactive: only offer
186
186
  the findings log when the tester flags something, asks "is that
187
187
  normal?", or pastes an error. Never on a clean OK.
188
- 6. **One step at a time inside a chapter.** Finish a chapter (mark
189
- it `done`), then **auto-advance** to the next chapter's
190
- Announcement in the same response, unless the manifest entry is
191
- `pace: per-step` (then ask "¿seguimos?" between steps, as the
192
- fundamentals part does today). The continue-prompt at a **part
193
- boundary** routes back to the ToC menu.
188
+ 6. **The chapter's confirmation IS the go-ahead.** When the tester
189
+ confirms a chapter, mark it `done` and advance straight to the next
190
+ chapter's Announcement. NEVER ask a separate "¿seguimos?" / "shall
191
+ we continue?" between chapters, the per-chapter confirmation already
192
+ gates advancement and a second question is exactly the redundancy
193
+ testers complain about. The ONLY continue-prompt is at a **part
194
+ boundary**, where you route back to the ToC menu. (`pace` controls
195
+ batching only, see the per-step cycle: `per-step` walks one chapter
196
+ per exchange, `auto-advance` may chain chapters that need no tester
197
+ action; neither asks "¿seguimos?".)
194
198
  7. **If the state file already exists** when invoked, do not
195
199
  overwrite anything. Read it, show progress, offer to continue,
196
200
  pick another part, or start over (the last requires explicit
@@ -270,9 +274,11 @@ For every chapter:
270
274
  3. **The tester's part**: the command block(s) and instructions,
271
275
  bundled into one flow, closed by the single confirmation.
272
276
  4. **Verification**: read their reply. If something errored, suggest
273
- a fix before advancing. If fine, mark `done`. Honour the part's
274
- `pace`: `auto-advance` moves straight into the next chapter's
275
- Announcement; `per-step` asks "¿seguimos?" first.
277
+ a fix before advancing. If fine, mark `done` and move straight into
278
+ the next chapter's Announcement (the confirmation is the go-ahead,
279
+ Inviolable rule #6, NO "¿seguimos?"). `pace` only decides batching:
280
+ `per-step` presents one chapter per exchange, `auto-advance` may
281
+ chain chapters that need no tester action into one response.
276
282
 
277
283
  ## Routing + menu (orchestrator)
278
284
 
@@ -1,6 +1,6 @@
1
1
  # Part 0: The live map (prologue) - step library
2
2
 
3
- The live-UI prologue: the tester runs `sm init`, opens the browser, and watches the map update in real time as files are written and edited. `pace: per-step` (ask "¿seguimos?" between steps), `preflight: taught-init` (the tester runs `sm init` as the first taught step, not pre-flight), and the chapters lay the basics fixture progressively, one node at a time. Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
3
+ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches the map update in real time as files are written and edited. `pace: per-step` (one chapter per exchange; the chapter's own confirmation advances to the next, NO separate "¿seguimos?"), `preflight: taught-init` (the tester runs `sm init` as the first taught step, not pre-flight), and the chapters lay the basics fixture progressively, one node at a time. Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
4
4
 
5
5
  ## Chapter `init` - Your first node (~2 min)
6
6
 
@@ -8,25 +8,25 @@ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches
8
8
 
9
9
  ```bash
10
10
  sm init
11
- ls -la .skill-map/
11
+ sm
12
12
  ```
13
13
 
14
- Expected: `.skill-map/skill-map.db` appears (plus config files). The initial scan reports a small node / link / issue count from the demo-agent fixture, NOT 14+ phantom issues from the tutorial's own prose: pre-flight already wrote `.skillmapignore` with the right exclusions in place, so `sm init` leaves that file alone (it only writes when absent) and the scan never sees `sm-tutorial.md` / `findings.md` / `tutorial-state.yml`.
14
+ Expected: `.skill-map/skill-map.db` appears (plus config files), and the initial scan reports a small node / link count from the demo-agent fixture. `sm init` runs and exits; `sm` then starts the UI server and stays running. (Agent context, do not narrate: pre-flight's `.skillmapignore` keeps the tutorial's own files, `sm-tutorial.md` / `findings.md` / `tutorial-state.yml`, out of the scan; `sm init` leaves that file alone since it only writes when absent.)
15
15
 
16
- Before launching the server, ask the tester to set up a **side-by-side view** so they can watch the magic happen without alt-tabbing every step, then launch the server and open the link it prints. Don't hardcode the URL here, the verb itself is the source of truth (it logs the bound `http://host:port` after listen). Tell the tester:
16
+ Give the tester the whole flow in one message with ONE confirmation, do NOT pause for the `sm init` output separately. Don't hardcode the URL, the verb logs the bound `http://host:port` after listen. Tell the tester:
17
17
 
18
- > First, arrange your screen so the **browser** (where the **Map**
19
- > updates in real time) and **this chat** are both visible at once,
20
- > typical layout is browser on the left half, chat on the right
21
- > (or any split that lets you see both). The terminal running
22
- > `sm` can stay off to the side; it just prints scan progress
23
- > lines and you don't need to read them.
18
+ > First, **open your browser** and put it side by side with this
19
+ > chat (browser on one half, chat on the other, any split that lets
20
+ > you see both) so you can watch the **Map** update in real time.
24
21
  >
25
- > Then run `sm`. After a couple of seconds it will print a line
26
- > with the URL where the UI is listening, copy that link and open
27
- > it in the browser you just arranged.
22
+ > Then, in your second terminal, run the two commands above: `sm
23
+ > init` sets the project up (it creates `.skill-map/` and runs a
24
+ > first scan), and `sm` boots the live UI. After a couple of seconds
25
+ > `sm` prints a URL, copy it and open it in your browser. The
26
+ > terminal keeps printing scan lines, you don't need to read them.
28
27
  >
29
- > Tell me when the page is open showing one node, `demo-agent`.
28
+ > You'll see one node in the **Map**: `demo-agent`. Tell me when the
29
+ > page is open showing it.
30
30
 
31
31
  Wait for confirmation. Mark `init`: done.
32
32
 
@@ -127,7 +127,7 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
127
127
  Tell the tester:
128
128
 
129
129
  > Look at the browser. Four new nodes should have popped in:
130
- > `demo-skill`, `demo-command`, `notes/todo`, and `demo-guideline`.
130
+ > `demo-skill`, `demo-command`, **Demo TODO list**, and `demo-guideline`.
131
131
  > Five total now, **still unconnected**: they're floating dots.
132
132
  > The viewport auto-fits whenever a node is added or removed, so
133
133
  > all five should be visible without panning.
@@ -183,9 +183,9 @@ You edit `notes/todo.md` so it becomes the **hub** that points to each of the ot
183
183
  - a `/slash` token → kind `invokes`
184
184
  - a markdown link `[text](path)` → kind `references`
185
185
 
186
- Four bullets, three kinds (the `invokes` kind shows up twice because both the command and the skill are addressed by slash).
186
+ Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets both point at the **same** node (`demo-guideline`), on purpose: a markdown link AND an `@`-mention of it, so the next beat can contrast their confidence (the file link is certain, the name drop is a softer guess).
187
187
 
188
- Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets, two connectors land).
188
+ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets; the `@demo-guideline` mention stays and is the faint connector on those providers too).
189
189
 
190
190
  **Edit `notes/todo.md`**: append these bullets after the `# Pending` heading:
191
191
 
@@ -195,31 +195,34 @@ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider d
195
195
  - [ ] Trigger /demo-skill when the input lands.
196
196
  - [ ] Re-read the
197
197
  [demo-guideline](./demo-guideline.md) before shipping.
198
+ - [ ] Ping @demo-guideline if the conventions change.
198
199
  ```
199
200
 
200
201
  Tell the tester:
201
202
 
202
- > Look at the magic again. `notes/todo` is now the hub: four
203
- > arrows light up between it and the other nodes, and the UI
204
- > palette colours each arrow by the link kind it carries:
203
+ > Look at the magic again. **Demo TODO list** is now the hub: five
204
+ > arrows light up between it and the other nodes, and the UI palette
205
+ > colours each arrow by the link kind it carries:
205
206
  >
206
- > - `notes/todo → demo-agent` (kind: `mentions`)
207
- > - `notes/todo → demo-command` (kind: `invokes`)
208
- > - `notes/todo → demo-skill` (kind: `invokes`)
209
- > - `notes/todo → demo-guideline` (kind: `references`)
207
+ > - `Demo TODO list → demo-agent` (kind: `mentions`)
208
+ > - `Demo TODO list → demo-command` (kind: `invokes`)
209
+ > - `Demo TODO list → demo-skill` (kind: `invokes`)
210
+ > - `Demo TODO list → demo-guideline` (kind: `references`, the markdown link)
211
+ > - `Demo TODO list → demo-guideline` (kind: `mentions`, the @ handle)
210
212
  >
211
213
  > The kind comes from the syntax in the bullet: an `@handle` is
212
214
  > always a mention, a `/skill` or `/command` is always an invoke, a
213
- > markdown link is always a reference. Four arrows, three kinds,
214
- > three colours on the canvas (the two `invokes` share a colour, as
215
- > you would expect).
215
+ > markdown link is always a reference. Five arrows, three kinds.
216
216
  >
217
- > Notice too that the connectors have different transparency.
218
- > Skill-map estimates how sure it is of each connection: a
219
- > `[text](file.md)` that points at a real file (confidence 1.00,
220
- > now that the target exists) looks solid. The opacity tells that
221
- > story at a glance: the more solid the arrow, the more reliable
222
- > the inference.
217
+ > Now look closely: the two arrows to **demo-guideline** are not
218
+ > equally solid. Skill-map draws each connector's **confidence** as
219
+ > opacity, how sure it is the link is real. The markdown link
220
+ > `[demo-guideline](./demo-guideline.md)` points at a real file, so
221
+ > it's certain (1.00) and looks solid; the `@demo-guideline` mention
222
+ > is a looser name drop, a softer guess (0.50), so it's drawn fainter.
223
+ > A glance at the map tells you which links are rock solid and which
224
+ > are skill-map's best guess; the exact number per link is in the
225
+ > inspector, next chapter.
223
226
  >
224
227
  > Confirm when you see it. If a connector is missing, refresh the
225
228
  > browser and let me know.
@@ -233,18 +236,20 @@ The connector opacity tells the confidence story at a glance; the exact per-link
233
236
  > 🆕 Open the Inspector for **Demo TODO list** (click the node on
234
237
  > the map). **Expand** the **Connections** section (it's collapsed
235
238
  > by default): it has two sections, **Outgoing** and **Incoming**.
236
- > Demo TODO list lists 4 links under Outgoing (it's the hub pointing
237
- > at four nodes) and 0 under Incoming; if you open the Inspector for
238
- > any of the four targeted nodes, you'll see 1 under Incoming. Each
239
- > row shows the link kind (`mentions`, `invokes`, `references`) and
240
- > a badge with its confidence: the numeric value (`1.00`, `0.50`,
241
- > …).
239
+ > Demo TODO list lists **5 links** under Outgoing (the hub) and 0
240
+ > under Incoming; open the Inspector for a targeted node to see its
241
+ > Incoming count (demo-guideline shows **2**, the reference plus the
242
+ > mention; the others 1 each). Each row shows the link kind
243
+ > (`mentions`, `invokes`, `references`) and a badge with its
244
+ > confidence: the numeric value. Here you'll see the contrast in
245
+ > numbers, the `references` to demo-guideline reads `1.00`, the
246
+ > `mentions` of it reads `0.50`.
242
247
  >
243
248
  > 💡 Tip: if all these changes left the nodes crowded together, the
244
249
  > map toolbar has a **Re-arrange layout** button (tooltip "Re-arrange
245
- > the visible nodes (re-run auto layout)"): it re-runs the
246
- > auto-layout so everything reads better. If you've moved nodes by
247
- > hand it asks for confirmation first, otherwise it just re-arranges.
250
+ > the visible nodes"): it tidies the layout so everything reads
251
+ > better. If you've moved nodes by hand it asks for confirmation
252
+ > first, otherwise it just re-arranges.
248
253
  >
249
254
  > Let me know when you see it.
250
255
 
@@ -260,7 +265,7 @@ The server has been live since the `init` chapter, leave it running; this chapte
260
265
  > delete the bullet that contains `@demo-agent`. Save. Watch the
261
266
  > UI.
262
267
  >
263
- > Expected: the `notes/todo → demo-agent` connector (kind:
268
+ > Expected: the `Demo TODO list → demo-agent` connector (kind:
264
269
  > `mentions`) disappears in real time. The two nodes stay in the
265
270
  > **Map**; only the edge goes.
266
271
 
@@ -274,13 +279,12 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
274
279
 
275
280
  **Beat 1, open the Files panel (tester does this).**
276
281
 
277
- > Make sure the **Files** panel is open, the one you expanded back
278
- > in the first chapter on the left edge. If you collapsed it since,
279
- > click the expand handle (the `>` arrow, tooltip "Expand files
280
- > panel") to reopen it. The sidebar shows a **folder tree** (a
281
- > nested view of your folders and the nodes inside them): your five
282
- > nodes grouped under `.claude/` and `notes/`, each row showing its
283
- > kind and how many links go in and out.
282
+ > Open the **Files** panel. It sits collapsed against the left edge
283
+ > by default: click the expand handle there (the `>` arrow, its
284
+ > tooltip reads "Expand files panel"). The sidebar opens into a
285
+ > **folder tree** (a nested view of your folders and the nodes inside
286
+ > them): your five nodes grouped under `.claude/` and `notes/`, each
287
+ > row showing its kind and how many links go in and out.
284
288
  >
285
289
  > Tell me when the tree is open.
286
290
 
@@ -297,19 +301,19 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
297
301
 
298
302
  **Beat 3, isolate (tester does this).**
299
303
 
300
- > Last one. In the tree, find the `notes/todo` row: at its right
301
- > edge there's a small **sitemap** icon (its tooltip reads "Isolate
302
- > this node and its direct links on the map"). Click it.
304
+ > Last one. In the tree, find the **Demo TODO list** row: at its
305
+ > right edge there's a small **sitemap** icon (its tooltip reads
306
+ > "Isolate this node and its direct links on the map"). Click it.
303
307
  >
304
- > The Map collapses to `notes/todo` plus only the nodes it links to
305
- > (`demo-command`, `demo-skill`, `demo-guideline`). `demo-agent`,
306
- > which lost its only connector back in the last step, drops out of
307
- > view, and the Inspector opens on `notes/todo`. That's how you
308
+ > The Map collapses to **Demo TODO list** plus only the nodes it
309
+ > links to (`demo-command`, `demo-skill`, `demo-guideline`).
310
+ > `demo-agent`, which lost its only connector back in the last step,
311
+ > drops out of view, and the Inspector opens on **Demo TODO list**.
312
+ > That's how you
308
313
  > focus on one node's neighborhood when a map gets busy.
309
314
  >
310
315
  > To bring the rest back, look at the toolbar along the bottom of
311
- > the Map: there's a **Show all** button (an eye icon, tooltip
312
- > "Clear the map selection and show every node again"). Click it and
316
+ > the Map: there's a **Show all** button (an eye icon). Click it and
313
317
  > all five nodes return.
314
318
  >
315
319
  > Did the map isolate and then restore?
@@ -374,14 +378,19 @@ Adjust the actual tree shown to whatever `ls -la` returns, the goal is "tester r
374
378
 
375
379
  Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with your `Edit` tool. Tell the tester to do it from their editor:
376
380
 
377
- > Last step. Open `.skillmapignore` (it's at the cwd root) in
378
- > your editor of choice. At the end of the file, on a new line,
379
- > append the literal pattern `notes/private-*.md`. Save the
380
- > file. The pattern uses a glob (same as `.gitignore`):
381
+ > Last step. Open `.skillmapignore` (it's at the cwd root) in your
382
+ > editor of choice. At the end of the file, on a new line, append
383
+ > this pattern:
384
+
385
+ ```
386
+ notes/private-*.md
387
+ ```
388
+
389
+ > Save the file. It's a glob (same as `.gitignore`):
381
390
  > `notes/private-*.md` matches `private-credentials.md` and any
382
391
  > future sibling `private-*.md`. A literal path
383
- > (`notes/private-credentials.md`) would also work, the glob
384
- > teaches the broader habit.
392
+ > (`notes/private-credentials.md`) would also work, the glob teaches
393
+ > the broader habit.
385
394
  >
386
395
  > Watch the browser when you save. The
387
396
  > `notes/private-credentials` node should disappear from the
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // cli/entry.ts
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="dd2e1877-e17a-5d0b-86e5-6416814d7a78")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9f7f5ec7-60d4-5ef5-bd36-0d8c26efb81e")}catch(e){}}();
4
4
  import { existsSync as existsSync33 } from "fs";
5
5
  import { Builtins, Cli as Cli2 } from "clipanion";
6
6
 
@@ -246,7 +246,7 @@ function bucketByKind(kind, instance, bag) {
246
246
  // package.json
247
247
  var package_default = {
248
248
  name: "@skill-map/cli",
249
- version: "0.53.1",
249
+ version: "0.53.2",
250
250
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
251
251
  license: "MIT",
252
252
  type: "module",
@@ -30251,4 +30251,4 @@ function resolveBareDefault() {
30251
30251
  process.exit(ExitCode.Error);
30252
30252
  }
30253
30253
  //# sourceMappingURL=cli.js.map
30254
- //# debugId=dd2e1877-e17a-5d0b-86e5-6416814d7a78
30254
+ //# debugId=9f7f5ec7-60d4-5ef5-bd36-0d8c26efb81e
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // kernel/i18n/registry.texts.ts
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5755b8d3-0320-507b-8287-e7141109764a")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9afb619c-58ce-5ee8-a032-63a47cced7ce")}catch(e){}}();
4
4
  var REGISTRY_TEXTS = {
5
5
  duplicateExtension: "Extension already registered: {{kind}}:{{qualifiedId}}",
6
6
  unknownKind: "Unknown extension kind: {{kind}}",
@@ -102,7 +102,7 @@ import { Tiktoken as Tiktoken2 } from "js-tiktoken/lite";
102
102
  // package.json
103
103
  var package_default = {
104
104
  name: "@skill-map/cli",
105
- version: "0.53.1",
105
+ version: "0.53.2",
106
106
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
107
107
  license: "MIT",
108
108
  type: "module",
@@ -3632,4 +3632,4 @@ export {
3632
3632
  runScanWithRenames
3633
3633
  };
3634
3634
  //# sourceMappingURL=index.js.map
3635
- //# debugId=5755b8d3-0320-507b-8287-e7141109764a
3635
+ //# debugId=9afb619c-58ce-5ee8-a032-63a47cced7ce
@@ -1,6 +1,6 @@
1
1
  // kernel/i18n/registry.texts.ts
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c1e3d822-fab9-519a-9e3e-3ad2f7070d52")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2b25d909-dbb1-5543-aa71-06c3d77320aa")}catch(e){}}();
4
4
  var REGISTRY_TEXTS = {
5
5
  duplicateExtension: "Extension already registered: {{kind}}:{{qualifiedId}}",
6
6
  unknownKind: "Unknown extension kind: {{kind}}",
@@ -102,7 +102,7 @@ import { Tiktoken as Tiktoken2 } from "js-tiktoken/lite";
102
102
  // package.json
103
103
  var package_default = {
104
104
  name: "@skill-map/cli",
105
- version: "0.53.1",
105
+ version: "0.53.2",
106
106
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
107
107
  license: "MIT",
108
108
  type: "module",
@@ -3632,4 +3632,4 @@ export {
3632
3632
  runScanWithRenames
3633
3633
  };
3634
3634
  //# sourceMappingURL=index.js.map
3635
- //# debugId=c1e3d822-fab9-519a-9e3e-3ad2f7070d52
3635
+ //# debugId=2b25d909-dbb1-5543-aa71-06c3d77320aa
@@ -1,4 +1,4 @@
1
- import{a as At,c as Nt,d as k,e as Rt}from"./chunk-EQ72PEHT.js";import{a as Et,b as Mt,c as Tt,d as Ot,e as ce,f as de,g as Ie,h as Fe,i as jt}from"./chunk-GEI6INVH.js";import{c as X,d as U,l as Dt,n as Lt,o as je}from"./chunk-OFDQMBSJ.js";import"./chunk-P2DAPRK7.js";import{a as vt,b as xt,c as Ct,d as wt,h as yt,p as St,q as Pt,r as It,s as Ft}from"./chunk-JXRIGHET.js";import{A as Me,B as Te,M as kt,Q as Oe,R as le,c as oe,i as Se,j as Pe,l as ht,o as _t,p as Ee,r as re,s as ae,t as se,u as ft,w as _e,x as bt}from"./chunk-GBKHMJ4B.js";import{k as ut,l as mt}from"./chunk-LCOYSPKE.js";import"./chunk-4SG4352Z.js";import{$ as tt,$a as K,Bb as st,Ea as it,Eb as L,Ec as Be,Fa as J,Fb as W,Fc as pt,Gb as w,Ha as o,Ib as d,J as Ye,K as ve,L as Je,Lb as lt,Mb as ct,N as Ze,Nb as Ce,Ob as we,P as y,Tb as ze,U as et,Ub as G,V as P,Vb as dt,W as E,Wa as z,Wb as he,Xa as ot,Xb as l,Yb as p,Za as rt,Zb as u,_a as at,_b as R,ba as nt,ga as _,gc as ie,ia as B,ic as gt,jb as b,ka as Ve,mb as m,nb as h,ob as xe,pb as q,pc as ke,qb as j,rb as D,sb as f,sc as v,tb as s,tc as ye,ub as a,uc as $,vb as T,wb as x,xb as C,yb as ne}from"./chunk-Q2A6FWC7.js";import{a as H,b as Y}from"./chunk-WCABR6TI.js";function yn(t,r){if(t&1&&(x(0,"p",6),l(1),C()),t&2){let e=d();o(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Vt=(()=>{class t{dataSource=y(X);updateCheck=y(Nt);theme=y(je);visible=$.required();texts=k;health=_(null);loadError=_(null);markSrc=v(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");cliVersion=v(()=>this.updateCheck.current()??this.health()?.implVersion??this.texts.aboutUnknown);specVersion=v(()=>this.health()?.specVersion??this.texts.aboutLoading);schemaVersion=v(()=>this.health()?.schemaVersion??this.texts.aboutLoading);cwd=v(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=v(()=>{let e=this.health();return e?this.texts.aboutDbValue(e.db,Sn(e.dbPath,e.cwd)):this.texts.aboutLoading});constructor(){B(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let e=await this.dataSource.health();this.health.set(e)}catch(e){let i=e instanceof U||e instanceof Error?e.message:String(e);this.loadError.set(i)}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-about"]],inputs:{visible:[1,"visible"]},decls:57,vars:25,consts:[["aria-labelledby","settings-about-heading","data-testid","settings-about",1,"settings-about"],[1,"settings-about__header"],["alt","","aria-hidden","true","data-testid","settings-about-logo",1,"settings-about__logo",3,"src"],[1,"settings-about__heading-text"],["id","settings-about-heading",1,"settings-about__title"],[1,"settings-about__intro"],["data-testid","settings-about-error",1,"settings-about__error"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-star",1,"settings-about__star",3,"href"],["aria-hidden","true",1,"fa-solid","fa-star","settings-about__star-icon"],[1,"settings-about__star-text"],[1,"settings-about__star-heading"],[1,"settings-about__star-body"],[1,"settings-about__star-cta"],["aria-hidden","true",1,"fa-solid","fa-star"],[1,"settings-about__list"],[1,"settings-about__row"],[1,"settings-about__label"],[1,"settings-about__value"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-website",1,"settings-about__link",3,"href"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-github",1,"settings-about__link",3,"href"],["data-testid","settings-about-cli",1,"settings-about__value"],["data-testid","settings-about-spec",1,"settings-about__value"],["data-testid","settings-about-schema",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"]],template:function(i,n){i&1&&(x(0,"section",0)(1,"header",1),ne(2,"img",2),x(3,"div",3)(4,"h2",4),l(5),C(),x(6,"p",5),l(7),C()()(),m(8,yn,2,2,"p",6),x(9,"a",7),ne(10,"i",8),x(11,"span",9)(12,"span",10),l(13),C(),x(14,"span",11),l(15),C()(),x(16,"span",12),ne(17,"i",13),l(18),C()(),x(19,"dl",14)(20,"div",15)(21,"dt",16),l(22),C(),x(23,"dd",17)(24,"a",18),l(25),C()()(),x(26,"div",15)(27,"dt",16),l(28),C(),x(29,"dd",17)(30,"a",19),l(31),C()()(),x(32,"div",15)(33,"dt",16),l(34),C(),x(35,"dd",20),l(36),C()(),x(37,"div",15)(38,"dt",16),l(39),C(),x(40,"dd",21),l(41),C()(),x(42,"div",15)(43,"dt",16),l(44),C(),x(45,"dd",22),l(46),C()(),x(47,"div",15)(48,"dt",16),l(49),C(),x(50,"dd",23),l(51),C()(),x(52,"div",15)(53,"dt",16),l(54),C(),x(55,"dd",24),l(56),C()()()()),i&2&&(o(2),W("src",n.markSrc(),J),o(3),u(" ",n.texts.aboutHeading," "),o(2),p(n.texts.aboutIntro),o(),h(n.loadError()?8:-1),o(),W("href",n.texts.aboutGithubUrl,J),b("aria-label",n.texts.aboutStarA11y),o(4),p(n.texts.aboutStarHeading),o(2),p(n.texts.aboutStarBody),o(3),u(" ",n.texts.aboutStarCta," "),o(4),p(n.texts.aboutWebsiteLabel),o(2),W("href",n.texts.aboutWebsiteUrl,J),o(),p(n.texts.aboutWebsiteUrl),o(3),p(n.texts.aboutGithubLabel),o(2),W("href",n.texts.aboutGithubUrl,J),o(),p(n.texts.aboutGithubUrl),o(3),p(n.texts.aboutCliLabel),o(2),u(" ",n.cliVersion()," "),o(3),p(n.texts.aboutSpecLabel),o(2),u(" ",n.specVersion()," "),o(3),p(n.texts.aboutSchemaLabel),o(2),u(" ",n.schemaVersion()," "),o(3),p(n.texts.aboutFolderLabel),o(2),u(" ",n.cwd()," "),o(3),p(n.texts.aboutDbLabel),o(2),u(" ",n.dbDisplay()," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-about[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-about__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.settings-about__logo[_ngcontent-%COMP%]{width:64px;height:64px;flex-shrink:0}.settings-about__heading-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;min-width:0}.settings-about__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-about__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-about__error[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;border-radius:var(--p-border-radius);background:var(--p-message-error-background);color:var(--p-message-error-color);font-size:.875rem}.settings-about__list[_ngcontent-%COMP%]{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-about__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:.75rem;padding:.5rem .75rem;border-radius:var(--p-border-radius)}.settings-about__row[_ngcontent-%COMP%]:nth-child(odd){background:var(--p-content-hover-background)}.settings-about__label[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--p-text-muted-color)}.settings-about__value[_ngcontent-%COMP%]{margin:0;font-family:var(--sm-font-mono);font-size:.875rem;word-break:break-all}.settings-about__link[_ngcontent-%COMP%]{color:var(--p-primary-color);text-decoration:none}.settings-about__link[_ngcontent-%COMP%]:hover, .settings-about__link[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}.settings-about__star[_ngcontent-%COMP%]{--star-accent: #f4b400;display:flex;align-items:center;gap:.875rem;padding:.875rem 1rem;border-radius:var(--p-border-radius);border:1px solid color-mix(in oklab,var(--star-accent) 45%,transparent);background:color-mix(in oklab,var(--star-accent) 12%,transparent);color:var(--p-text-color);text-decoration:none;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .15s ease}.settings-about__star[_ngcontent-%COMP%]:hover, .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 22%,transparent);border-color:color-mix(in oklab,var(--star-accent) 70%,transparent);transform:translateY(-1px);outline:none}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 18%,transparent);border-color:color-mix(in oklab,var(--star-accent) 55%,transparent)}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 30%,transparent);border-color:var(--star-accent)}.settings-about__star-icon[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--star-accent);flex-shrink:0}.settings-about__star-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-about__star-heading[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.settings-about__star-body[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--p-text-muted-color);line-height:1.4}.settings-about__star-cta[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .75rem;border-radius:var(--sm-radius-pill);background:var(--star-accent);color:#1a1a1a;font-weight:600;font-size:.8125rem;white-space:nowrap;flex-shrink:0}.settings-about__star[_ngcontent-%COMP%]:hover .settings-about__star-cta[_ngcontent-%COMP%], .settings-about__star[_ngcontent-%COMP%]:focus-visible .settings-about__star-cta[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 88%,white)}"],changeDetection:0})}return t})();function Sn(t,r){if(!t||!r)return t;let e=r.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var De=(()=>{class t{ownerSig=_(null);dirtyCount=v(()=>{let e=this.ownerSig();return e?e.dirtyIds().size:0});register(e){this.ownerSig.set(e)}deregister(e){this.ownerSig()===e&&this.ownerSig.set(null)}async applyChanges(){let e=this.ownerSig();return e?e.applyChanges():{ok:!1}}discardChanges(){this.ownerSig()?.discardChanges()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=ve({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var zt={schemaVersion:1,entries:[{version:"0.53.1",date:"2026-06-08",kind:"user-facing",highlights:[{body:'When you upgrade and re-scan, the cache-rebuild prompt is short and reassuring, and once you confirm it no longer prints a redundant "rebuilt" notice. Automatic rebuilds (for example with `--yes`) still show a one-line confirmation.',packages:["@skill-map/cli"]},{body:"New maps now lay out left-to-right by default (with the Balanced algorithm), so the skill dependency chain reads along the natural left-to-right axis. You can switch back to top-to-bottom from the graph toolbar or Settings.",packages:["@skill-map/cli"]},{body:"The interactive tutorial now opens on a numbered menu to pick where to start, and walks each step with a single confirmation instead of several. Its references to the live UI match what is on screen.",packages:["@skill-map/cli"]}]},{version:"0.53.0",date:"2026-06-07",kind:"user-facing",highlights:[{body:"The inspector now offers Supersede, Set stability and Edit tags buttons; each opens a small form pre-filled with the node's current value.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'The inspector now renders the Bump button and the stale indicator from a plugin instead of hardcoded UI. Writing a `.sm` sidecar now asks for consent every time, with an "always allow" checkbox that persists the permission for the project.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugin contributions in the inspector now appear as one collapsed section per plugin, ordered by the new `order` fields you can set in `plugin.json` and your extension manifest. The inspector also shows every action button a plugin contributes.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm plugins doctor` now reports view-contribution errors from your last scan (and exits non-zero if any), and the Settings plugin panel shows a per-plugin warning badge with the failed emissions, so a plugin whose chips silently vanished now tells you why.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Clearer plugin errors: a wrong view-slot name now gives a short message linking to the slot catalog, and the warning spells out that the plugin and all its extensions were skipped. It also no longer appears twice when the server starts.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The interactive tutorial (`sm tutorial`) now walks a full campaign: you build a real static portfolio site and the `.claude/` harness that maintains it, from `sm init` to the live site, picking parts from the in-skill menu.",packages:["@skill-map/cli"]},{body:"In the interactive tutorial you can now jump straight into any part of the portfolio campaign from the menu (say the maintenance or MCP part). If you skipped the earlier parts, the tutorial sets the project up for you so you can start right there.",packages:["@skill-map/cli"]},{body:"`sm tutorial master` is gone. Run `sm tutorial`: the advanced parts (plugins, settings, view-slots) and the CLI in depth are now chapters you pick from a menu inside the tutorial, after the live-UI prologue.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.52.0",date:"2026-06-05",kind:"user-facing",highlights:[{body:"Disabling a provider plugin now removes it as a choice in **Settings \u2192 Project \u2192 Active provider**. The provider stays listed but greyed out and labelled `(disabled)`, so you can no longer switch the lens to a provider whose extractors would not run.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Bumping a node now records **who** bumped it: the audit `by` fields show your Git author name (`git config user.name`) instead of `cli` / `ui`, when the project is a Git repo. It falls back to `cli` / `ui` outside a Git repo or when no `user.name` is configured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'**Inspector polish.** The body now renders rich markdown with code syntax highlighting and updates live after a re-scan. Node tags moved to a clickable row in the header, and "isolate" on the map now shows a node plus its direct neighbors.',packages:["@skill-map/cli"]},{body:"`sm check` now **fails** (non-zero exit) when a `.sm` sidecar is malformed or breaks schema validation. These were previously reported as warnings and did not affect the exit code. Fix or remove the offending sidecar to make the check pass.",packages:["@skill-map/cli"]}]},{version:"0.51.0",date:"2026-06-04",kind:"user-facing",highlights:[{body:"`sm serve` now refuses a non-loopback `--host` (for example `0.0.0.0`): the local server has no auth and is loopback-only, so bind it to `127.0.0.1` or `::1`. Multi-host serve reopens after v0.6.0.",packages:["@skill-map/cli"]}]},{version:"0.50.1",date:"2026-06-04",kind:"user-facing",highlights:[{body:"The redundant-reference finding now reads with shorter, more direct wording so the duplicated target and where it appears are easier to scan at a glance.",packages:["@skill-map/cli"]},{body:`The map palettes now count only the nodes you've curated visible. Selecting a hidden file no longer jumps the camera to empty space, and "Re-arrange layout" only asks to confirm when you have moved nodes yourself.`,packages:["@skill-map/cli"]}]},{version:"0.50.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:`The Files and Map tabs are gone: skill-map opens on one screen, file tree left, graph right. Tick files or folders (or the 0/1/2 depth buttons) to pick what the map shows; the tree's map icon isolates a node's whole chain. "Re-arrange layout" tidies just what's visible.`,packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.49.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:"**New workspace view**: the file list, graph, and inspector now share one screen. Drag the divider to resize the file rail, click a file to focus its node on the map, and use the tree checkboxes to choose which nodes the map shows (`Show all` clears the selection).",packages:["@skill-map/cli"]}]},{version:"0.48.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"**Card footer icon order restored.** The status icons in the bottom-right of each card are back to their previous order: lifecycle/stability first, then the stale indicator, then warnings and errors on the far right.",packages:["@skill-map/cli"]},{body:"`sm plugins create` now takes the extension kind as a required first argument: `sm plugins create <kind> <plugin-id>` (kinds: provider, extractor, analyzer, action, formatter, hook). Previously it only scaffolded extractors.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After `sm tutorial`, start the tutorial by typing `run the tutorial` (or `ejecuta el tutorial`), matching the website.",packages:["@skill-map/cli"]}]},{version:"0.47.1",date:"2026-05-31",kind:"internal",highlights:[]},{version:"0.47.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"skill-map now notices when your local DB schema is out of date (not just an older version): `sm scan` and `sm serve` offer to rebuild the cache, and read commands warn instead of failing with a confusing database error.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Settings \u2192 Plugins now has a unified filter bar (All, then Built-in / Project, then the kinds), so you can quickly isolate your project's own plugins and extensions from the built-ins.",packages:["@skill-map/cli"]},{body:"**Pick your tokenizer.** `tokenizer` in settings.json now selects the encoder for token counts: `cl100k_base` (default, GPT-4) or `o200k_base` (GPT-4o). Any other value is ignored with a warning. Changing it recomputes counts on the next scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'When the dev server stops, the UI now shows a "connection lost" banner with a Reconnect button instead of failing silently, and it refreshes automatically once the connection is back.',packages:["@skill-map/cli"]}]},{version:"0.46.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"`sm scan` no longer glues the `Auto-detected activeProvider` notice onto the results line. The auto-detect message now prints on its own line, right above the scan summary.",packages:["@skill-map/cli"]},{body:"`sm plugins --help` (and `db`, `config`, `job`, and the other command groups) now print a tidy overview with a one-line description and a list of their subcommands, matching the look of `sm scan --help`, instead of a terse internal list.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Config cleanup.** Several settings.json keys that never did anything (`i18n`, `providers`, `history`, `autoMigrate`, `scan.followSymlinks`, per-plugin `config` / `extensions`) were removed. If still present they are now ignored and reported with a warning on load.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm plugins list` / `show` and the Settings \u2192 Plugins UI now consistently say "plugin" instead of "bundle". The only place "bundle" remains is the name for toggling a whole plugin (all its extensions) at once.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.45.1",date:"2026-05-30",kind:"internal",highlights:[]},{version:"0.45.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"`sm tutorial` can now target other agents: `--for agent-skills` (open-standard layout, used by Antigravity and OpenAI Codex) or `--for claude` (default). It now requires an empty directory: run it in a fresh folder, or pass `--force` to seed into the current one.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.44.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"Under the Antigravity lens, `sm scan` now warns when a `.agents/skills` skill shadows a built-in `agy` slash command (e.g. a skill named `goal` collides with `/goal`), so you can rename it before the runtime silently ignores the file.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now report crashes anonymously to help fix bugs, and it is OFF by default. Turn it on or off in Settings, or set `SKILL_MAP_TELEMETRY=0` to force it off. File contents, paths, and your settings are never sent.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now share anonymous usage (which commands and views you use) to guide development, OFF by default. Toggle CLI usage, UI usage, and error reports independently in Settings, or set `SKILL_MAP_TELEMETRY=0` to force all off. Files and paths are never sent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.43.0",date:"2026-05-29",kind:"user-facing",highlights:[{body:"The skill-map website and in-app links (Settings, About and the demo banner) now point to **skill-map.ai** (previously skill-map.dev). Spec schema URLs are now `https://skill-map.ai/spec/v0/...`.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/web"]},{body:"Claude skills and commands now show their `disallowed-tools` in the inspector. Tags come only from `.sm` sidecars now: the `sm list --tag-source` flag is removed and cards show a single tag style. Agent Skills `license` / `compatibility` / `metadata` fields are recognized.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After updating skill-map, the next `sm scan` rebuilds the local database when it was created by an older version (your `.sm` sidecar files are never touched). On a terminal it asks first; pass `--yes` to skip the prompt.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.42.0",date:"2026-05-28",kind:"user-facing",highlights:[{body:"The lens picker in **Settings \u2192 Project** now lists exactly the providers installed in your project. The phantom **Gemini** and **Cursor** options are gone, and **OpenAI Codex** / **Antigravity** now show their correct name and colour on node cards.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.41.0",date:"2026-05-27",kind:"user-facing",highlights:[{body:"New `--max-nodes <N>` on `sm scan` / `sm watch` / `sm serve` caps how many files the walker accepts (default 256, bidirectional). Past the limit, a persistent banner links to **Settings \u2192 Project** to trim `.skillmapignore`.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm -version` and `sm -help` now suggest `--version` / `--help` consistently, even from a directory with no skill-map project.",packages:["@skill-map/cli"]}]},{version:"0.40.1",date:"2026-05-26",kind:"user-facing",highlights:[{body:"Update chip copies the install command on click. Settings copy polished across General + Project. Path is now the second column in the list view. Filtered-empty views unified across List + Graph with a Reset button. Matrix theme retints dropdowns and toggle buttons.",packages:["@skill-map/cli"]}]},{version:"0.40.0",date:"2026-05-26",kind:"user-facing",highlights:[{body:"**Changelog tab is now bounded.** The Settings \u2192 Changelog tab shows the most recent 10 releases and links out to the full changelog on GitHub for older entries.",packages:["@skill-map/cli"]},{body:"Plugins no longer have a bundle-level switch; each extension toggles on its own. `sm plugins disable <bundle>` cascades across the bundle's extensions (multi-extension bundles need `--yes`). The kind filter narrows extensions inside matched bundles instead of leaking siblings.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Cleaner Plugins view.** Settings \u2192 Plugins and `sm plugins show <bundle>` no longer print a per-extension version chip for built-in plugins (they all share the CLI version). External (user-authored) plugins are unchanged and still show per-extension semver.",packages:["@skill-map/cli"]},{body:'`sm scan` summary now splits findings per severity (`N errors \xB7 M warnings \xB7 K info`), colored and collapsed when zero. The graph view gains a third palette to filter cards with errors / warnings; the perf-HUD says "links" instead of "edges".',packages:["@skill-map/cli"]},{body:"**List view** is live. Click **List** in the topbar for a sortable, filterable table of every node (Kind, Name, Tags, Path, Tokens, Stability, Stale, Issues). Click a row to inspect on the graph. Graph card chips now share the same icons as the list.",packages:["@skill-map/cli"]},{body:'Graph cards drop the corner badge for routine warnings; count + tooltip stay on the footer chip. Broken refs now escalate `sm scan` to exit 1 (were exit 0). `sm init` prints the "no provider markers" advisory as a two-line yellow `\u26A0` block.',packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm check --analyzers <id>` now errors with the valid id list when mistyped, instead of silently saying "No issues." `/invoke` and `@mention` links from any markdown body now contribute to the target\'s `IN`. `sm plugins doctor` summary spells out its bundle + extension split.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.39.0",date:"2026-05-25",kind:"user-facing",highlights:[{body:"Renamed `core/field-unknown` to `core/annotation-field-unknown` so the sidecar typo-guard rule groups with the other `core/annotation-*` rules. Update references in `settings.json` or `sm check --analyzers <id>` to the new name.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Renamed 14 built-in extension ids to a `<area>-<detail>` shape (e.g. `core/broken-ref` is now `core/reference-broken`). If you reference these by qualified id in `settings.json` or via `sm check --analyzers <id>`, update to the new names.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"In dev builds the topbar and the `sm serve` banner now show only the `dev` marker instead of pairing it with the published version number.",packages:["@skill-map/cli"]},{body:"When a scan adds or removes nodes, the graph view animates the camera to frame the new layout, refreshes auto positions so nodes never land on top of each other, and keeps your manually-dragged pins where you put them.",packages:["@skill-map/cli"]},{body:"`sm` log lines now lead with a coloured glyph per level (`\u26A0 WARN`, `\u2715 ERROR`, `\u2139 INFO`) so advisories stand out from the rest of the output.",packages:["@skill-map/cli"]},{body:"In Settings, expanding a bundle plugin (claude, antigravity, openai, agent-skills) now shows the correct per-extension state and the toggles persist, the next scan honours them. `sm plugins list` reflects effective state too.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugins always list `core` first across CLI, BFF, and Settings; the project path stays visible in the topbar (truncated with `\u2026` on the LEFT so the project name reaches the eye); and the SPA reconnects on its own when `sm serve` restarts.",packages:["@skill-map/cli"]},{body:'`sm list` IN counts and the inspector\'s "Linked nodes \u2192 INCOMING" now include every `@mention` and `/invoke`, not just markdown links. `sm plugins doctor` no longer raises a spurious `claude/agent` warning on a clean install.',packages:["@skill-map/cli"]}]},{version:"0.38.0",date:"2026-05-24",kind:"user-facing",highlights:[{body:"`sm <verb> --json` now also suppresses info banners on stderr, keeping both streams clean for piping into `jq`.",packages:["@skill-map/cli"]}]},{version:"0.37.0",date:"2026-05-23",kind:"user-facing",highlights:[{body:"`sm scan` now warns once when provider markers on disk drifted since `activeProvider` was set (e.g. you added `.codex/` after picking the `claude` lens). Run `sm config set activeProvider <id>` to switch the lens, or ignore the warn and keep going, it never blocks the scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Clearer CLI errors.** Errors from `sm serve`, `bump`, `db`, `plugins`, `refresh`, `list`, `watch`, `graph`, `hooks`, and `sidecar` now print a `\u2715` headline plus a dim hint on the next line. Fixes a `sm refresh` persist-failure that rendered `{{glyph}}` literally.",packages:["@skill-map/cli"]},{body:"`sm` now detects when the local `.skill-map/` DB was written by an incompatible CLI version: newer minor or different major refuses to open with a clear hint; older same-major prints a one-shot warning and continues. Defensive parse errors include the same hint.",packages:["@skill-map/cli"]},{body:'`sm init --force` now also resets the DB (was overwriting only the config files). Solves the "Failed to read scan rows" crash on the first auto-scan when re-initialising a project that already had a DB from an older CLI version.',packages:["@skill-map/cli"]},{body:"**Two scan-time bugs fixed.** Resolved `/slash` and `@mention` links now correctly land at confidence `1.0` (were stuck at the emit floor), and the markdown-link extractor no longer flags `[label](path)` shown inside backticks or fenced code blocks as broken references.",packages:["@skill-map/cli"]},{body:"Cross-provider files (e.g. a `.codex/agents/*.toml` while the lens is `claude`) are no longer claimed by the foreign provider. They surface as plain markdown / unclassified instead, matching how the agent itself would see them at runtime.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Card chips for incoming / outgoing links no longer count self-loops, so a node that links back to itself stops showing inflated 1 in / 1 out. The `core/self-loop` analyzer still surfaces the self-reference as a warning, only the misleading count goes away.",packages:["@skill-map/cli"]},{body:"**CLI + inspector polish.** `sm init` now prompts for the active lens when markers compete; `sm config set activeProvider` rejects unknown ids upfront; error blocks across the CLI gain a `\u2715` glyph + hint; the inspector hides self-loops and paints kinds in their canonical colour.",packages:["@skill-map/cli"]},{body:'**Inspector overhaul.** Links show numeric confidence, a Findings list, per-row issue chips, and per-site "Occurs at" lines. New "External references" section. Self-loops hidden by default. Two new analyzers flag redundant multi-form references and self-loops.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm scan` now warns when two extractors detect overlapping byte ranges. The graph keeps the winner; the issue panel explains which detection lost and why, so a markdown link wrapping an `@`-directive no longer looks like silent disappearing intent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.36.0",date:"2026-05-22",kind:"user-facing",highlights:[{body:"**Gemini CLI support retired.** Antigravity CLI projects (Google's May 2026 replacement) scan via the open-standard `.agents/skills/` paths under the existing `agent-skills` lens. Run `sm config set activeProvider antigravity` to flag a project as Antigravity-flavoured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Files whose name shadows a built-in are flagged.** A file like `.claude/commands/help.md` now emits a `warn` (Claude's runtime ignores it for its own `/help`), and incoming `/help` edges resolve to it at confidence `0.1` instead of `1.0`.",packages:["@skill-map/cli","@skill-map/spec"]}]}]};var Bt=zt;var En=(t,r)=>r.version;function Mn(t,r){if(t&1&&(x(0,"p",3),l(1),C()),t&2){let e=d();o(),u(" ",e.texts.changelogEmpty," ")}}function Tn(t,r){if(t&1&&(x(0,"p",12),l(1),C()),t&2){let e=d(3);o(),u(" ",e.texts.changelogInternalRelease," ")}}function On(t,r){if(t&1&&(x(0,"li",17),l(1),C()),t&2){let e=r.$implicit;o(),p(e)}}function In(t,r){if(t&1&&(x(0,"ul",16),j(1,On,2,1,"li",17,q),C()),t&2){let e=d().$implicit,i=d(4);b("aria-label",i.texts.changelogAffectedPackages),o(),D(e.packages)}}function Fn(t,r){if(t&1&&(x(0,"li",14),ne(1,"div",15),m(2,In,3,1,"ul",16),C()),t&2){let e=r.$implicit;o(),W("innerHTML",e.bodyHtml,it),o(),h(e.packages.length?2:-1)}}function jn(t,r){if(t&1&&(x(0,"ul",13),j(1,Fn,3,2,"li",14,xe),C()),t&2){let e=d().$implicit;o(),D(e.highlights)}}function Dn(t,r){if(t&1&&(x(0,"li",8)(1,"header",9)(2,"span",10),l(3),C(),x(4,"span",11),l(5),C()(),m(6,Tn,2,1,"p",12)(7,jn,3,0,"ul",13),C()),t&2){let e=r.$implicit;G("settings-changelog__entry--internal",e.kind==="internal"),b("data-testid","settings-changelog-entry-"+e.version),o(3),u("v",e.version),o(2),p(e.date),o(),h(e.kind==="internal"?6:7)}}function Ln(t,r){if(t&1&&(x(0,"ol",4),j(1,Dn,8,6,"li",7,En),C()),t&2){let e=d();o(),D(e.entries())}}var An=10,$t=(()=>{class t{markdown=y(jt);texts=k;entries=_([]);hasEntries=v(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let e=[],i=Bt.entries.slice(0,An);for(let n of i){let c=[];for(let g of n.highlights)c.push({bodyHtml:await this.markdown.render(g.body),packages:g.packages});e.push({version:n.version,date:this.formatDate(n.date),kind:n.kind,highlights:c})}this.entries.set(e)}formatDate(e){let i=new Date(e+"T00:00:00Z");return Number.isNaN(i.getTime())?e:new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(i)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-changelog"]],decls:11,vars:7,consts:[["data-testid","settings-changelog",1,"settings-changelog"],["id","settings-changelog-heading",1,"settings-changelog__title"],[1,"settings-changelog__intro"],["data-testid","settings-changelog-empty",1,"settings-changelog__empty"],["role","list",1,"settings-changelog__list"],["data-testid","settings-changelog-footer",1,"settings-changelog__footer"],["target","_blank","rel","noopener noreferrer",1,"settings-changelog__footer-link",3,"href"],[1,"settings-changelog__entry",3,"settings-changelog__entry--internal"],[1,"settings-changelog__entry"],[1,"settings-changelog__entry-header"],[1,"settings-changelog__version"],[1,"settings-changelog__date"],[1,"settings-changelog__internal-body"],["role","list",1,"settings-changelog__highlights"],[1,"settings-changelog__highlight"],[1,"settings-changelog__highlight-body",3,"innerHTML"],["role","list",1,"settings-changelog__packages"],[1,"settings-changelog__package"]],template:function(i,n){i&1&&(x(0,"section",0)(1,"h2",1),l(2),C(),x(3,"p",2),l(4),C(),m(5,Mn,2,1,"p",3)(6,Ln,3,0,"ol",4),x(7,"p",5),l(8),x(9,"a",6),l(10),C()()()),i&2&&(b("aria-labelledby","settings-changelog-heading"),o(2),u(" ",n.texts.changelogHeading," "),o(2),p(n.texts.changelogIntro),o(),h(n.hasEntries()?6:5),o(3),u(" ",n.texts.changelogFooterText," "),o(),W("href",n.texts.changelogFooterUrl,J),o(),u(" ",n.texts.changelogFooterLinkLabel," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-changelog__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-changelog__empty[_ngcontent-%COMP%]{margin:1.5rem 0 0;font-size:.9rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.settings-changelog__entry[_ngcontent-%COMP%]{border-left:2px solid var(--p-primary-color);padding:.25rem 0 .25rem .85rem}.settings-changelog__entry--internal[_ngcontent-%COMP%]{border-left-color:var(--sm-border)}.settings-changelog__entry-header[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:.6rem;margin-bottom:.45rem}.settings-changelog__version[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.95rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__date[_ngcontent-%COMP%]{font-size:.78rem;color:var(--sm-text-muted)}.settings-changelog__internal-body[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__highlights[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.7rem}.settings-changelog__highlight[_ngcontent-%COMP%]{font-size:.88rem;line-height:1.5;color:var(--p-text-color)}.settings-changelog__highlight-body[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p+p{margin-top:.45rem}[_nghost-%COMP%] .settings-changelog__highlight-body code{font-family:var(--sm-font-mono);font-size:.82rem;padding:.05rem .3rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--p-text-color)}[_nghost-%COMP%] .settings-changelog__highlight-body a{color:var(--p-primary-color);text-decoration:underline}[_nghost-%COMP%] .settings-changelog__highlight-body strong{font-weight:600}.settings-changelog__packages[_ngcontent-%COMP%]{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem}.settings-changelog__package[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.7rem;padding:.1rem .4rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--sm-text-muted);border:1px solid var(--sm-border);line-height:1.4}.settings-changelog__footer[_ngcontent-%COMP%]{margin:1.75rem 0 0;padding-top:1rem;border-top:1px solid var(--sm-border);font-size:.82rem;color:var(--sm-text-muted);text-align:center}.settings-changelog__footer-link[_ngcontent-%COMP%]{margin-left:.3rem;color:var(--p-primary-color);text-decoration:none;font-weight:500}.settings-changelog__footer-link[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})}return t})();var Gt=`
1
+ import{a as At,c as Nt,d as k,e as Rt}from"./chunk-EQ72PEHT.js";import{a as Et,b as Mt,c as Tt,d as Ot,e as ce,f as de,g as Ie,h as Fe,i as jt}from"./chunk-GEI6INVH.js";import{c as X,d as U,l as Dt,n as Lt,o as je}from"./chunk-OFDQMBSJ.js";import"./chunk-P2DAPRK7.js";import{a as vt,b as xt,c as Ct,d as wt,h as yt,p as St,q as Pt,r as It,s as Ft}from"./chunk-JXRIGHET.js";import{A as Me,B as Te,M as kt,Q as Oe,R as le,c as oe,i as Se,j as Pe,l as ht,o as _t,p as Ee,r as re,s as ae,t as se,u as ft,w as _e,x as bt}from"./chunk-GBKHMJ4B.js";import{k as ut,l as mt}from"./chunk-LCOYSPKE.js";import"./chunk-4SG4352Z.js";import{$ as tt,$a as K,Bb as st,Ea as it,Eb as L,Ec as Be,Fa as J,Fb as W,Fc as pt,Gb as w,Ha as o,Ib as d,J as Ye,K as ve,L as Je,Lb as lt,Mb as ct,N as Ze,Nb as Ce,Ob as we,P as y,Tb as ze,U as et,Ub as G,V as P,Vb as dt,W as E,Wa as z,Wb as he,Xa as ot,Xb as l,Yb as p,Za as rt,Zb as u,_a as at,_b as R,ba as nt,ga as _,gc as ie,ia as B,ic as gt,jb as b,ka as Ve,mb as m,nb as h,ob as xe,pb as q,pc as ke,qb as j,rb as D,sb as f,sc as v,tb as s,tc as ye,ub as a,uc as $,vb as T,wb as x,xb as C,yb as ne}from"./chunk-Q2A6FWC7.js";import{a as H,b as Y}from"./chunk-WCABR6TI.js";function yn(t,r){if(t&1&&(x(0,"p",6),l(1),C()),t&2){let e=d();o(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Vt=(()=>{class t{dataSource=y(X);updateCheck=y(Nt);theme=y(je);visible=$.required();texts=k;health=_(null);loadError=_(null);markSrc=v(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");cliVersion=v(()=>this.updateCheck.current()??this.health()?.implVersion??this.texts.aboutUnknown);specVersion=v(()=>this.health()?.specVersion??this.texts.aboutLoading);schemaVersion=v(()=>this.health()?.schemaVersion??this.texts.aboutLoading);cwd=v(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=v(()=>{let e=this.health();return e?this.texts.aboutDbValue(e.db,Sn(e.dbPath,e.cwd)):this.texts.aboutLoading});constructor(){B(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let e=await this.dataSource.health();this.health.set(e)}catch(e){let i=e instanceof U||e instanceof Error?e.message:String(e);this.loadError.set(i)}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-about"]],inputs:{visible:[1,"visible"]},decls:57,vars:25,consts:[["aria-labelledby","settings-about-heading","data-testid","settings-about",1,"settings-about"],[1,"settings-about__header"],["alt","","aria-hidden","true","data-testid","settings-about-logo",1,"settings-about__logo",3,"src"],[1,"settings-about__heading-text"],["id","settings-about-heading",1,"settings-about__title"],[1,"settings-about__intro"],["data-testid","settings-about-error",1,"settings-about__error"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-star",1,"settings-about__star",3,"href"],["aria-hidden","true",1,"fa-solid","fa-star","settings-about__star-icon"],[1,"settings-about__star-text"],[1,"settings-about__star-heading"],[1,"settings-about__star-body"],[1,"settings-about__star-cta"],["aria-hidden","true",1,"fa-solid","fa-star"],[1,"settings-about__list"],[1,"settings-about__row"],[1,"settings-about__label"],[1,"settings-about__value"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-website",1,"settings-about__link",3,"href"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-github",1,"settings-about__link",3,"href"],["data-testid","settings-about-cli",1,"settings-about__value"],["data-testid","settings-about-spec",1,"settings-about__value"],["data-testid","settings-about-schema",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"]],template:function(i,n){i&1&&(x(0,"section",0)(1,"header",1),ne(2,"img",2),x(3,"div",3)(4,"h2",4),l(5),C(),x(6,"p",5),l(7),C()()(),m(8,yn,2,2,"p",6),x(9,"a",7),ne(10,"i",8),x(11,"span",9)(12,"span",10),l(13),C(),x(14,"span",11),l(15),C()(),x(16,"span",12),ne(17,"i",13),l(18),C()(),x(19,"dl",14)(20,"div",15)(21,"dt",16),l(22),C(),x(23,"dd",17)(24,"a",18),l(25),C()()(),x(26,"div",15)(27,"dt",16),l(28),C(),x(29,"dd",17)(30,"a",19),l(31),C()()(),x(32,"div",15)(33,"dt",16),l(34),C(),x(35,"dd",20),l(36),C()(),x(37,"div",15)(38,"dt",16),l(39),C(),x(40,"dd",21),l(41),C()(),x(42,"div",15)(43,"dt",16),l(44),C(),x(45,"dd",22),l(46),C()(),x(47,"div",15)(48,"dt",16),l(49),C(),x(50,"dd",23),l(51),C()(),x(52,"div",15)(53,"dt",16),l(54),C(),x(55,"dd",24),l(56),C()()()()),i&2&&(o(2),W("src",n.markSrc(),J),o(3),u(" ",n.texts.aboutHeading," "),o(2),p(n.texts.aboutIntro),o(),h(n.loadError()?8:-1),o(),W("href",n.texts.aboutGithubUrl,J),b("aria-label",n.texts.aboutStarA11y),o(4),p(n.texts.aboutStarHeading),o(2),p(n.texts.aboutStarBody),o(3),u(" ",n.texts.aboutStarCta," "),o(4),p(n.texts.aboutWebsiteLabel),o(2),W("href",n.texts.aboutWebsiteUrl,J),o(),p(n.texts.aboutWebsiteUrl),o(3),p(n.texts.aboutGithubLabel),o(2),W("href",n.texts.aboutGithubUrl,J),o(),p(n.texts.aboutGithubUrl),o(3),p(n.texts.aboutCliLabel),o(2),u(" ",n.cliVersion()," "),o(3),p(n.texts.aboutSpecLabel),o(2),u(" ",n.specVersion()," "),o(3),p(n.texts.aboutSchemaLabel),o(2),u(" ",n.schemaVersion()," "),o(3),p(n.texts.aboutFolderLabel),o(2),u(" ",n.cwd()," "),o(3),p(n.texts.aboutDbLabel),o(2),u(" ",n.dbDisplay()," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-about[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-about__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.settings-about__logo[_ngcontent-%COMP%]{width:64px;height:64px;flex-shrink:0}.settings-about__heading-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;min-width:0}.settings-about__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-about__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-about__error[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;border-radius:var(--p-border-radius);background:var(--p-message-error-background);color:var(--p-message-error-color);font-size:.875rem}.settings-about__list[_ngcontent-%COMP%]{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-about__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:.75rem;padding:.5rem .75rem;border-radius:var(--p-border-radius)}.settings-about__row[_ngcontent-%COMP%]:nth-child(odd){background:var(--p-content-hover-background)}.settings-about__label[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--p-text-muted-color)}.settings-about__value[_ngcontent-%COMP%]{margin:0;font-family:var(--sm-font-mono);font-size:.875rem;word-break:break-all}.settings-about__link[_ngcontent-%COMP%]{color:var(--p-primary-color);text-decoration:none}.settings-about__link[_ngcontent-%COMP%]:hover, .settings-about__link[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}.settings-about__star[_ngcontent-%COMP%]{--star-accent: #f4b400;display:flex;align-items:center;gap:.875rem;padding:.875rem 1rem;border-radius:var(--p-border-radius);border:1px solid color-mix(in oklab,var(--star-accent) 45%,transparent);background:color-mix(in oklab,var(--star-accent) 12%,transparent);color:var(--p-text-color);text-decoration:none;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .15s ease}.settings-about__star[_ngcontent-%COMP%]:hover, .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 22%,transparent);border-color:color-mix(in oklab,var(--star-accent) 70%,transparent);transform:translateY(-1px);outline:none}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 18%,transparent);border-color:color-mix(in oklab,var(--star-accent) 55%,transparent)}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 30%,transparent);border-color:var(--star-accent)}.settings-about__star-icon[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--star-accent);flex-shrink:0}.settings-about__star-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-about__star-heading[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.settings-about__star-body[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--p-text-muted-color);line-height:1.4}.settings-about__star-cta[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .75rem;border-radius:var(--sm-radius-pill);background:var(--star-accent);color:#1a1a1a;font-weight:600;font-size:.8125rem;white-space:nowrap;flex-shrink:0}.settings-about__star[_ngcontent-%COMP%]:hover .settings-about__star-cta[_ngcontent-%COMP%], .settings-about__star[_ngcontent-%COMP%]:focus-visible .settings-about__star-cta[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 88%,white)}"],changeDetection:0})}return t})();function Sn(t,r){if(!t||!r)return t;let e=r.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var De=(()=>{class t{ownerSig=_(null);dirtyCount=v(()=>{let e=this.ownerSig();return e?e.dirtyIds().size:0});register(e){this.ownerSig.set(e)}deregister(e){this.ownerSig()===e&&this.ownerSig.set(null)}async applyChanges(){let e=this.ownerSig();return e?e.applyChanges():{ok:!1}}discardChanges(){this.ownerSig()?.discardChanges()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=ve({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var zt={schemaVersion:1,entries:[{version:"0.53.2",date:"2026-06-08",kind:"user-facing",highlights:[{body:'Opening a project with one node no longer zooms in too far: the map fits content at natural size (you can still wheel-zoom in). The "Re-arrange layout" tooltip is shorter.',packages:["@skill-map/cli"]}]},{version:"0.53.1",date:"2026-06-08",kind:"user-facing",highlights:[{body:'When you upgrade and re-scan, the cache-rebuild prompt is short and reassuring, and once you confirm it no longer prints a redundant "rebuilt" notice. Automatic rebuilds (for example with `--yes`) still show a one-line confirmation.',packages:["@skill-map/cli"]},{body:"New maps now lay out left-to-right by default (with the Balanced algorithm), so the skill dependency chain reads along the natural left-to-right axis. You can switch back to top-to-bottom from the graph toolbar or Settings.",packages:["@skill-map/cli"]},{body:"The interactive tutorial now opens on a numbered menu to pick where to start, and walks each step with a single confirmation instead of several. Its references to the live UI match what is on screen.",packages:["@skill-map/cli"]}]},{version:"0.53.0",date:"2026-06-07",kind:"user-facing",highlights:[{body:"The inspector now offers Supersede, Set stability and Edit tags buttons; each opens a small form pre-filled with the node's current value.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'The inspector now renders the Bump button and the stale indicator from a plugin instead of hardcoded UI. Writing a `.sm` sidecar now asks for consent every time, with an "always allow" checkbox that persists the permission for the project.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugin contributions in the inspector now appear as one collapsed section per plugin, ordered by the new `order` fields you can set in `plugin.json` and your extension manifest. The inspector also shows every action button a plugin contributes.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm plugins doctor` now reports view-contribution errors from your last scan (and exits non-zero if any), and the Settings plugin panel shows a per-plugin warning badge with the failed emissions, so a plugin whose chips silently vanished now tells you why.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Clearer plugin errors: a wrong view-slot name now gives a short message linking to the slot catalog, and the warning spells out that the plugin and all its extensions were skipped. It also no longer appears twice when the server starts.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The interactive tutorial (`sm tutorial`) now walks a full campaign: you build a real static portfolio site and the `.claude/` harness that maintains it, from `sm init` to the live site, picking parts from the in-skill menu.",packages:["@skill-map/cli"]},{body:"In the interactive tutorial you can now jump straight into any part of the portfolio campaign from the menu (say the maintenance or MCP part). If you skipped the earlier parts, the tutorial sets the project up for you so you can start right there.",packages:["@skill-map/cli"]},{body:"`sm tutorial master` is gone. Run `sm tutorial`: the advanced parts (plugins, settings, view-slots) and the CLI in depth are now chapters you pick from a menu inside the tutorial, after the live-UI prologue.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.52.0",date:"2026-06-05",kind:"user-facing",highlights:[{body:"Disabling a provider plugin now removes it as a choice in **Settings \u2192 Project \u2192 Active provider**. The provider stays listed but greyed out and labelled `(disabled)`, so you can no longer switch the lens to a provider whose extractors would not run.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Bumping a node now records **who** bumped it: the audit `by` fields show your Git author name (`git config user.name`) instead of `cli` / `ui`, when the project is a Git repo. It falls back to `cli` / `ui` outside a Git repo or when no `user.name` is configured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'**Inspector polish.** The body now renders rich markdown with code syntax highlighting and updates live after a re-scan. Node tags moved to a clickable row in the header, and "isolate" on the map now shows a node plus its direct neighbors.',packages:["@skill-map/cli"]},{body:"`sm check` now **fails** (non-zero exit) when a `.sm` sidecar is malformed or breaks schema validation. These were previously reported as warnings and did not affect the exit code. Fix or remove the offending sidecar to make the check pass.",packages:["@skill-map/cli"]}]},{version:"0.51.0",date:"2026-06-04",kind:"user-facing",highlights:[{body:"`sm serve` now refuses a non-loopback `--host` (for example `0.0.0.0`): the local server has no auth and is loopback-only, so bind it to `127.0.0.1` or `::1`. Multi-host serve reopens after v0.6.0.",packages:["@skill-map/cli"]}]},{version:"0.50.1",date:"2026-06-04",kind:"user-facing",highlights:[{body:"The redundant-reference finding now reads with shorter, more direct wording so the duplicated target and where it appears are easier to scan at a glance.",packages:["@skill-map/cli"]},{body:`The map palettes now count only the nodes you've curated visible. Selecting a hidden file no longer jumps the camera to empty space, and "Re-arrange layout" only asks to confirm when you have moved nodes yourself.`,packages:["@skill-map/cli"]}]},{version:"0.50.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:`The Files and Map tabs are gone: skill-map opens on one screen, file tree left, graph right. Tick files or folders (or the 0/1/2 depth buttons) to pick what the map shows; the tree's map icon isolates a node's whole chain. "Re-arrange layout" tidies just what's visible.`,packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.49.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:"**New workspace view**: the file list, graph, and inspector now share one screen. Drag the divider to resize the file rail, click a file to focus its node on the map, and use the tree checkboxes to choose which nodes the map shows (`Show all` clears the selection).",packages:["@skill-map/cli"]}]},{version:"0.48.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"**Card footer icon order restored.** The status icons in the bottom-right of each card are back to their previous order: lifecycle/stability first, then the stale indicator, then warnings and errors on the far right.",packages:["@skill-map/cli"]},{body:"`sm plugins create` now takes the extension kind as a required first argument: `sm plugins create <kind> <plugin-id>` (kinds: provider, extractor, analyzer, action, formatter, hook). Previously it only scaffolded extractors.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After `sm tutorial`, start the tutorial by typing `run the tutorial` (or `ejecuta el tutorial`), matching the website.",packages:["@skill-map/cli"]}]},{version:"0.47.1",date:"2026-05-31",kind:"internal",highlights:[]},{version:"0.47.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"skill-map now notices when your local DB schema is out of date (not just an older version): `sm scan` and `sm serve` offer to rebuild the cache, and read commands warn instead of failing with a confusing database error.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Settings \u2192 Plugins now has a unified filter bar (All, then Built-in / Project, then the kinds), so you can quickly isolate your project's own plugins and extensions from the built-ins.",packages:["@skill-map/cli"]},{body:"**Pick your tokenizer.** `tokenizer` in settings.json now selects the encoder for token counts: `cl100k_base` (default, GPT-4) or `o200k_base` (GPT-4o). Any other value is ignored with a warning. Changing it recomputes counts on the next scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'When the dev server stops, the UI now shows a "connection lost" banner with a Reconnect button instead of failing silently, and it refreshes automatically once the connection is back.',packages:["@skill-map/cli"]}]},{version:"0.46.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"`sm scan` no longer glues the `Auto-detected activeProvider` notice onto the results line. The auto-detect message now prints on its own line, right above the scan summary.",packages:["@skill-map/cli"]},{body:"`sm plugins --help` (and `db`, `config`, `job`, and the other command groups) now print a tidy overview with a one-line description and a list of their subcommands, matching the look of `sm scan --help`, instead of a terse internal list.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Config cleanup.** Several settings.json keys that never did anything (`i18n`, `providers`, `history`, `autoMigrate`, `scan.followSymlinks`, per-plugin `config` / `extensions`) were removed. If still present they are now ignored and reported with a warning on load.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm plugins list` / `show` and the Settings \u2192 Plugins UI now consistently say "plugin" instead of "bundle". The only place "bundle" remains is the name for toggling a whole plugin (all its extensions) at once.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.45.1",date:"2026-05-30",kind:"internal",highlights:[]},{version:"0.45.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"`sm tutorial` can now target other agents: `--for agent-skills` (open-standard layout, used by Antigravity and OpenAI Codex) or `--for claude` (default). It now requires an empty directory: run it in a fresh folder, or pass `--force` to seed into the current one.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.44.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"Under the Antigravity lens, `sm scan` now warns when a `.agents/skills` skill shadows a built-in `agy` slash command (e.g. a skill named `goal` collides with `/goal`), so you can rename it before the runtime silently ignores the file.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now report crashes anonymously to help fix bugs, and it is OFF by default. Turn it on or off in Settings, or set `SKILL_MAP_TELEMETRY=0` to force it off. File contents, paths, and your settings are never sent.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now share anonymous usage (which commands and views you use) to guide development, OFF by default. Toggle CLI usage, UI usage, and error reports independently in Settings, or set `SKILL_MAP_TELEMETRY=0` to force all off. Files and paths are never sent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.43.0",date:"2026-05-29",kind:"user-facing",highlights:[{body:"The skill-map website and in-app links (Settings, About and the demo banner) now point to **skill-map.ai** (previously skill-map.dev). Spec schema URLs are now `https://skill-map.ai/spec/v0/...`.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/web"]},{body:"Claude skills and commands now show their `disallowed-tools` in the inspector. Tags come only from `.sm` sidecars now: the `sm list --tag-source` flag is removed and cards show a single tag style. Agent Skills `license` / `compatibility` / `metadata` fields are recognized.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After updating skill-map, the next `sm scan` rebuilds the local database when it was created by an older version (your `.sm` sidecar files are never touched). On a terminal it asks first; pass `--yes` to skip the prompt.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.42.0",date:"2026-05-28",kind:"user-facing",highlights:[{body:"The lens picker in **Settings \u2192 Project** now lists exactly the providers installed in your project. The phantom **Gemini** and **Cursor** options are gone, and **OpenAI Codex** / **Antigravity** now show their correct name and colour on node cards.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.41.0",date:"2026-05-27",kind:"user-facing",highlights:[{body:"New `--max-nodes <N>` on `sm scan` / `sm watch` / `sm serve` caps how many files the walker accepts (default 256, bidirectional). Past the limit, a persistent banner links to **Settings \u2192 Project** to trim `.skillmapignore`.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm -version` and `sm -help` now suggest `--version` / `--help` consistently, even from a directory with no skill-map project.",packages:["@skill-map/cli"]}]},{version:"0.40.1",date:"2026-05-26",kind:"user-facing",highlights:[{body:"Update chip copies the install command on click. Settings copy polished across General + Project. Path is now the second column in the list view. Filtered-empty views unified across List + Graph with a Reset button. Matrix theme retints dropdowns and toggle buttons.",packages:["@skill-map/cli"]}]},{version:"0.40.0",date:"2026-05-26",kind:"user-facing",highlights:[{body:"**Changelog tab is now bounded.** The Settings \u2192 Changelog tab shows the most recent 10 releases and links out to the full changelog on GitHub for older entries.",packages:["@skill-map/cli"]},{body:"Plugins no longer have a bundle-level switch; each extension toggles on its own. `sm plugins disable <bundle>` cascades across the bundle's extensions (multi-extension bundles need `--yes`). The kind filter narrows extensions inside matched bundles instead of leaking siblings.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Cleaner Plugins view.** Settings \u2192 Plugins and `sm plugins show <bundle>` no longer print a per-extension version chip for built-in plugins (they all share the CLI version). External (user-authored) plugins are unchanged and still show per-extension semver.",packages:["@skill-map/cli"]},{body:'`sm scan` summary now splits findings per severity (`N errors \xB7 M warnings \xB7 K info`), colored and collapsed when zero. The graph view gains a third palette to filter cards with errors / warnings; the perf-HUD says "links" instead of "edges".',packages:["@skill-map/cli"]},{body:"**List view** is live. Click **List** in the topbar for a sortable, filterable table of every node (Kind, Name, Tags, Path, Tokens, Stability, Stale, Issues). Click a row to inspect on the graph. Graph card chips now share the same icons as the list.",packages:["@skill-map/cli"]},{body:'Graph cards drop the corner badge for routine warnings; count + tooltip stay on the footer chip. Broken refs now escalate `sm scan` to exit 1 (were exit 0). `sm init` prints the "no provider markers" advisory as a two-line yellow `\u26A0` block.',packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm check --analyzers <id>` now errors with the valid id list when mistyped, instead of silently saying "No issues." `/invoke` and `@mention` links from any markdown body now contribute to the target\'s `IN`. `sm plugins doctor` summary spells out its bundle + extension split.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.39.0",date:"2026-05-25",kind:"user-facing",highlights:[{body:"Renamed `core/field-unknown` to `core/annotation-field-unknown` so the sidecar typo-guard rule groups with the other `core/annotation-*` rules. Update references in `settings.json` or `sm check --analyzers <id>` to the new name.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Renamed 14 built-in extension ids to a `<area>-<detail>` shape (e.g. `core/broken-ref` is now `core/reference-broken`). If you reference these by qualified id in `settings.json` or via `sm check --analyzers <id>`, update to the new names.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"In dev builds the topbar and the `sm serve` banner now show only the `dev` marker instead of pairing it with the published version number.",packages:["@skill-map/cli"]},{body:"When a scan adds or removes nodes, the graph view animates the camera to frame the new layout, refreshes auto positions so nodes never land on top of each other, and keeps your manually-dragged pins where you put them.",packages:["@skill-map/cli"]},{body:"`sm` log lines now lead with a coloured glyph per level (`\u26A0 WARN`, `\u2715 ERROR`, `\u2139 INFO`) so advisories stand out from the rest of the output.",packages:["@skill-map/cli"]},{body:"In Settings, expanding a bundle plugin (claude, antigravity, openai, agent-skills) now shows the correct per-extension state and the toggles persist, the next scan honours them. `sm plugins list` reflects effective state too.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugins always list `core` first across CLI, BFF, and Settings; the project path stays visible in the topbar (truncated with `\u2026` on the LEFT so the project name reaches the eye); and the SPA reconnects on its own when `sm serve` restarts.",packages:["@skill-map/cli"]},{body:'`sm list` IN counts and the inspector\'s "Linked nodes \u2192 INCOMING" now include every `@mention` and `/invoke`, not just markdown links. `sm plugins doctor` no longer raises a spurious `claude/agent` warning on a clean install.',packages:["@skill-map/cli"]}]},{version:"0.38.0",date:"2026-05-24",kind:"user-facing",highlights:[{body:"`sm <verb> --json` now also suppresses info banners on stderr, keeping both streams clean for piping into `jq`.",packages:["@skill-map/cli"]}]},{version:"0.37.0",date:"2026-05-23",kind:"user-facing",highlights:[{body:"`sm scan` now warns once when provider markers on disk drifted since `activeProvider` was set (e.g. you added `.codex/` after picking the `claude` lens). Run `sm config set activeProvider <id>` to switch the lens, or ignore the warn and keep going, it never blocks the scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Clearer CLI errors.** Errors from `sm serve`, `bump`, `db`, `plugins`, `refresh`, `list`, `watch`, `graph`, `hooks`, and `sidecar` now print a `\u2715` headline plus a dim hint on the next line. Fixes a `sm refresh` persist-failure that rendered `{{glyph}}` literally.",packages:["@skill-map/cli"]},{body:"`sm` now detects when the local `.skill-map/` DB was written by an incompatible CLI version: newer minor or different major refuses to open with a clear hint; older same-major prints a one-shot warning and continues. Defensive parse errors include the same hint.",packages:["@skill-map/cli"]},{body:'`sm init --force` now also resets the DB (was overwriting only the config files). Solves the "Failed to read scan rows" crash on the first auto-scan when re-initialising a project that already had a DB from an older CLI version.',packages:["@skill-map/cli"]},{body:"**Two scan-time bugs fixed.** Resolved `/slash` and `@mention` links now correctly land at confidence `1.0` (were stuck at the emit floor), and the markdown-link extractor no longer flags `[label](path)` shown inside backticks or fenced code blocks as broken references.",packages:["@skill-map/cli"]},{body:"Cross-provider files (e.g. a `.codex/agents/*.toml` while the lens is `claude`) are no longer claimed by the foreign provider. They surface as plain markdown / unclassified instead, matching how the agent itself would see them at runtime.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Card chips for incoming / outgoing links no longer count self-loops, so a node that links back to itself stops showing inflated 1 in / 1 out. The `core/self-loop` analyzer still surfaces the self-reference as a warning, only the misleading count goes away.",packages:["@skill-map/cli"]},{body:"**CLI + inspector polish.** `sm init` now prompts for the active lens when markers compete; `sm config set activeProvider` rejects unknown ids upfront; error blocks across the CLI gain a `\u2715` glyph + hint; the inspector hides self-loops and paints kinds in their canonical colour.",packages:["@skill-map/cli"]},{body:'**Inspector overhaul.** Links show numeric confidence, a Findings list, per-row issue chips, and per-site "Occurs at" lines. New "External references" section. Self-loops hidden by default. Two new analyzers flag redundant multi-form references and self-loops.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm scan` now warns when two extractors detect overlapping byte ranges. The graph keeps the winner; the issue panel explains which detection lost and why, so a markdown link wrapping an `@`-directive no longer looks like silent disappearing intent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.36.0",date:"2026-05-22",kind:"user-facing",highlights:[{body:"**Gemini CLI support retired.** Antigravity CLI projects (Google's May 2026 replacement) scan via the open-standard `.agents/skills/` paths under the existing `agent-skills` lens. Run `sm config set activeProvider antigravity` to flag a project as Antigravity-flavoured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Files whose name shadows a built-in are flagged.** A file like `.claude/commands/help.md` now emits a `warn` (Claude's runtime ignores it for its own `/help`), and incoming `/help` edges resolve to it at confidence `0.1` instead of `1.0`.",packages:["@skill-map/cli","@skill-map/spec"]}]}]};var Bt=zt;var En=(t,r)=>r.version;function Mn(t,r){if(t&1&&(x(0,"p",3),l(1),C()),t&2){let e=d();o(),u(" ",e.texts.changelogEmpty," ")}}function Tn(t,r){if(t&1&&(x(0,"p",12),l(1),C()),t&2){let e=d(3);o(),u(" ",e.texts.changelogInternalRelease," ")}}function On(t,r){if(t&1&&(x(0,"li",17),l(1),C()),t&2){let e=r.$implicit;o(),p(e)}}function In(t,r){if(t&1&&(x(0,"ul",16),j(1,On,2,1,"li",17,q),C()),t&2){let e=d().$implicit,i=d(4);b("aria-label",i.texts.changelogAffectedPackages),o(),D(e.packages)}}function Fn(t,r){if(t&1&&(x(0,"li",14),ne(1,"div",15),m(2,In,3,1,"ul",16),C()),t&2){let e=r.$implicit;o(),W("innerHTML",e.bodyHtml,it),o(),h(e.packages.length?2:-1)}}function jn(t,r){if(t&1&&(x(0,"ul",13),j(1,Fn,3,2,"li",14,xe),C()),t&2){let e=d().$implicit;o(),D(e.highlights)}}function Dn(t,r){if(t&1&&(x(0,"li",8)(1,"header",9)(2,"span",10),l(3),C(),x(4,"span",11),l(5),C()(),m(6,Tn,2,1,"p",12)(7,jn,3,0,"ul",13),C()),t&2){let e=r.$implicit;G("settings-changelog__entry--internal",e.kind==="internal"),b("data-testid","settings-changelog-entry-"+e.version),o(3),u("v",e.version),o(2),p(e.date),o(),h(e.kind==="internal"?6:7)}}function Ln(t,r){if(t&1&&(x(0,"ol",4),j(1,Dn,8,6,"li",7,En),C()),t&2){let e=d();o(),D(e.entries())}}var An=10,$t=(()=>{class t{markdown=y(jt);texts=k;entries=_([]);hasEntries=v(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let e=[],i=Bt.entries.slice(0,An);for(let n of i){let c=[];for(let g of n.highlights)c.push({bodyHtml:await this.markdown.render(g.body),packages:g.packages});e.push({version:n.version,date:this.formatDate(n.date),kind:n.kind,highlights:c})}this.entries.set(e)}formatDate(e){let i=new Date(e+"T00:00:00Z");return Number.isNaN(i.getTime())?e:new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(i)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-changelog"]],decls:11,vars:7,consts:[["data-testid","settings-changelog",1,"settings-changelog"],["id","settings-changelog-heading",1,"settings-changelog__title"],[1,"settings-changelog__intro"],["data-testid","settings-changelog-empty",1,"settings-changelog__empty"],["role","list",1,"settings-changelog__list"],["data-testid","settings-changelog-footer",1,"settings-changelog__footer"],["target","_blank","rel","noopener noreferrer",1,"settings-changelog__footer-link",3,"href"],[1,"settings-changelog__entry",3,"settings-changelog__entry--internal"],[1,"settings-changelog__entry"],[1,"settings-changelog__entry-header"],[1,"settings-changelog__version"],[1,"settings-changelog__date"],[1,"settings-changelog__internal-body"],["role","list",1,"settings-changelog__highlights"],[1,"settings-changelog__highlight"],[1,"settings-changelog__highlight-body",3,"innerHTML"],["role","list",1,"settings-changelog__packages"],[1,"settings-changelog__package"]],template:function(i,n){i&1&&(x(0,"section",0)(1,"h2",1),l(2),C(),x(3,"p",2),l(4),C(),m(5,Mn,2,1,"p",3)(6,Ln,3,0,"ol",4),x(7,"p",5),l(8),x(9,"a",6),l(10),C()()()),i&2&&(b("aria-labelledby","settings-changelog-heading"),o(2),u(" ",n.texts.changelogHeading," "),o(2),p(n.texts.changelogIntro),o(),h(n.hasEntries()?6:5),o(3),u(" ",n.texts.changelogFooterText," "),o(),W("href",n.texts.changelogFooterUrl,J),o(),u(" ",n.texts.changelogFooterLinkLabel," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-changelog__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-changelog__empty[_ngcontent-%COMP%]{margin:1.5rem 0 0;font-size:.9rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.settings-changelog__entry[_ngcontent-%COMP%]{border-left:2px solid var(--p-primary-color);padding:.25rem 0 .25rem .85rem}.settings-changelog__entry--internal[_ngcontent-%COMP%]{border-left-color:var(--sm-border)}.settings-changelog__entry-header[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:.6rem;margin-bottom:.45rem}.settings-changelog__version[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.95rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__date[_ngcontent-%COMP%]{font-size:.78rem;color:var(--sm-text-muted)}.settings-changelog__internal-body[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__highlights[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.7rem}.settings-changelog__highlight[_ngcontent-%COMP%]{font-size:.88rem;line-height:1.5;color:var(--p-text-color)}.settings-changelog__highlight-body[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p+p{margin-top:.45rem}[_nghost-%COMP%] .settings-changelog__highlight-body code{font-family:var(--sm-font-mono);font-size:.82rem;padding:.05rem .3rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--p-text-color)}[_nghost-%COMP%] .settings-changelog__highlight-body a{color:var(--p-primary-color);text-decoration:underline}[_nghost-%COMP%] .settings-changelog__highlight-body strong{font-weight:600}.settings-changelog__packages[_ngcontent-%COMP%]{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem}.settings-changelog__package[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.7rem;padding:.1rem .4rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--sm-text-muted);border:1px solid var(--sm-border);line-height:1.4}.settings-changelog__footer[_ngcontent-%COMP%]{margin:1.75rem 0 0;padding-top:1rem;border-top:1px solid var(--sm-border);font-size:.82rem;color:var(--sm-text-muted);text-align:center}.settings-changelog__footer-link[_ngcontent-%COMP%]{margin-left:.3rem;color:var(--p-primary-color);text-decoration:none;font-weight:500}.settings-changelog__footer-link[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})}return t})();var Gt=`
2
2
  .p-toggleswitch {
3
3
  display: inline-block;
4
4
  width: dt('toggleswitch.width');