@skill-map/cli 0.53.5 → 0.53.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +4 -2
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +33 -7
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +1 -1
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +0 -16
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +8 -32
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +1 -16
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +4 -22
- package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +3 -3
- package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +17 -18
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +0 -2
- package/dist/cli.js +33 -7
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/{chunk-MWDBZ2BE.js → chunk-PRP3JSUU.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-QLIHFXBC.js → main-O4DGYJ62.js} +1 -1
- package/package.json +1 -1
|
@@ -42,8 +42,10 @@ prefix when a part spans several files: `settings-*` →
|
|
|
42
42
|
`part-authoring.md`).
|
|
43
43
|
|
|
44
44
|
> For the tester this is a single guided session, never a course
|
|
45
|
-
> catalogue.
|
|
46
|
-
>
|
|
45
|
+
> catalogue. Refer to a chapter by its tester-facing `section.chapter`
|
|
46
|
+
> number plus its friendly title (`_core.md` §Numbering); never expose
|
|
47
|
+
> the internal `order` index ("Part 6", off by one from the menu), a
|
|
48
|
+
> raw "chapter id", or tour jargon ("the settings tour").
|
|
47
49
|
|
|
48
50
|
## Pre-flight (run once, silent on success)
|
|
49
51
|
|
|
@@ -8,9 +8,32 @@ library assumes it. Do NOT restate these rules inside a part file.
|
|
|
8
8
|
The tutorial is **one book**: an ordered sequence of **chapters
|
|
9
9
|
grouped in parts**, listed in `_manifest.yml`. A chapter is the
|
|
10
10
|
minimal unit (1 to a few steps). For the tester it is a single
|
|
11
|
-
guided session, never a "course catalogue"
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
guided session, never a "course catalogue": refer to a chapter by its
|
|
12
|
+
tester-facing `section.chapter` number (§Numbering) plus its friendly
|
|
13
|
+
title, never by a raw "chapter id" or tour jargon ("the settings
|
|
14
|
+
tour"). The menu uses friendly titles; once they pick, you just walk
|
|
15
|
+
that path.
|
|
16
|
+
|
|
17
|
+
## Numbering (the `section.chapter` scheme)
|
|
18
|
+
|
|
19
|
+
Two numbering systems coexist; keep them apart:
|
|
20
|
+
|
|
21
|
+
- **Internal (authoring only)**: the `order` field in `_manifest.yml`
|
|
22
|
+
and the `# Part N` file headers, 0-based (Part 0 the prologue …
|
|
23
|
+
Part 8 the MCP appendix). Use it in `**Context**:` blocks and author
|
|
24
|
+
notes; NEVER say it to the tester, it is off by one from what they
|
|
25
|
+
see.
|
|
26
|
+
- **Tester-facing (`S.N`)**: every part is a **section** numbered by
|
|
27
|
+
its 1-based position in the menu (section `1` is the prologue), and
|
|
28
|
+
every chapter inside it carries a `section.chapter` number like a
|
|
29
|
+
semver minor, resetting per section: section `5`'s chapters are
|
|
30
|
+
`5.1`, `5.2`, … This `S.N` form is the ONLY number you say out loud;
|
|
31
|
+
it matches the menu number the tester picked.
|
|
32
|
+
|
|
33
|
+
So the third chapter of section 5 announces as `5.3`, and the
|
|
34
|
+
prologue's first chapter is `1.1`. The numbers are derived at render
|
|
35
|
+
time from the menu order and the chapter's position in its part,
|
|
36
|
+
nothing is stored in the manifest.
|
|
14
37
|
|
|
15
38
|
## Tone
|
|
16
39
|
|
|
@@ -263,10 +286,12 @@ Never call `TaskCreate` / `TaskUpdate` (Inviolable rule #4).
|
|
|
263
286
|
|
|
264
287
|
For every chapter:
|
|
265
288
|
|
|
266
|
-
1. **Announcement**: "Capítulo N: `<title>`. ~M min." then a blank
|
|
289
|
+
1. **Announcement**: "Capítulo S.N: `<title>`. ~M min." then a blank
|
|
267
290
|
line, then (optionally) one sentence of context on its own
|
|
268
|
-
paragraph. `
|
|
269
|
-
|
|
291
|
+
paragraph. `S` is the section number (the part's 1-based menu
|
|
292
|
+
position) and `N` is the 1-based index of the chapter inside that
|
|
293
|
+
part, resetting per part (§Numbering), so section 5's third chapter
|
|
294
|
+
announces as `Capítulo 5.3`. The context paragraph renders ONLY when
|
|
270
295
|
the source has a `**Context**:` field; if omitted, announce the
|
|
271
296
|
title alone. The title comes from the chapter's `title` in
|
|
272
297
|
`_manifest.yml` (translated per §Tone), not the internal id.
|
|
@@ -339,7 +364,8 @@ and go straight to §Final wrap-up.
|
|
|
339
364
|
|
|
340
365
|
Render the menu numbered and formatted (NOT a bare list), translated
|
|
341
366
|
to the tester's language. A one-line intro, then per part a **bold
|
|
342
|
-
numbered title line** (number + title + `(~M min)
|
|
367
|
+
numbered title line** (the section number + title + `(~M min)`, that
|
|
368
|
+
number is the `S` major in the chapter `S.N` scheme, §Numbering) as plain prose,
|
|
343
369
|
immediately followed by a single-level `> ` blockquote one-line
|
|
344
370
|
description (what the part covers, derived from its title + chapters).
|
|
345
371
|
A **completed part** keeps its plain title (NO `✓` on the title line)
|
|
@@ -62,8 +62,6 @@ description: |
|
|
|
62
62
|
tools so the `core/tools-counter` extractor emits a count.
|
|
63
63
|
tools: [Read, Bash, Edit]
|
|
64
64
|
model: sonnet
|
|
65
|
-
metadata:
|
|
66
|
-
version: "1.0.0"
|
|
67
65
|
---
|
|
68
66
|
|
|
69
67
|
# master-agent
|
|
@@ -82,17 +80,6 @@ description: |
|
|
|
82
80
|
Example skill paired with the master-agent for the advanced
|
|
83
81
|
tutorial. Links to the agent so extractors and analyzers have
|
|
84
82
|
something to chew on.
|
|
85
|
-
inputs:
|
|
86
|
-
- name: target
|
|
87
|
-
type: path
|
|
88
|
-
description: File to process.
|
|
89
|
-
required: true
|
|
90
|
-
outputs:
|
|
91
|
-
- name: report
|
|
92
|
-
type: string
|
|
93
|
-
description: Markdown summary.
|
|
94
|
-
metadata:
|
|
95
|
-
version: "1.0.0"
|
|
96
83
|
---
|
|
97
84
|
|
|
98
85
|
# master-skill
|
|
@@ -115,9 +102,6 @@ name: Ideas backlog
|
|
|
115
102
|
description: |
|
|
116
103
|
Free-form notes for the advanced tutorial. Demonstrates the
|
|
117
104
|
catch-all markdown kind alongside the agent and skill.
|
|
118
|
-
tags: [notes, master]
|
|
119
|
-
metadata:
|
|
120
|
-
version: "1.0.0"
|
|
121
105
|
---
|
|
122
106
|
|
|
123
107
|
# Ideas
|
|
@@ -63,50 +63,28 @@ sm check --json
|
|
|
63
63
|
|
|
64
64
|
Expected: the error surfaces the dangling link from `notes/todo.md` to the non-existent `missing-page.md`. The `--analyzers` filter lets you focus on a single issue type; `--json` emits the structured payload (useful for CI / scripting). When done, the tester can leave the bullet in place or delete it, the rest of the deep-dive doesn't depend on it.
|
|
65
65
|
|
|
66
|
-
If the tester asks about `sm orphans` vs `sm check`:
|
|
67
|
-
|
|
68
|
-
- `sm check` reports broken-refs and other rule-driven issues
|
|
69
|
-
(the deterministic catalog).
|
|
70
|
-
- `sm orphans` is a **different scope**: auto-rename / orphan-node
|
|
71
|
-
detection (a node whose file disappeared, or a candidate rename
|
|
72
|
-
the kernel is still unsure about). Our fixture doesn't produce
|
|
73
|
-
orphans of that kind, so `sm orphans` will print "No orphan /
|
|
74
|
-
auto-rename issues", that's expected, not a bug.
|
|
75
|
-
|
|
76
66
|
Mark `issues`: done.
|
|
77
67
|
|
|
78
68
|
## Chapter `annotations` - Annotations and the .sm consent prompt (~3 min)
|
|
79
69
|
|
|
80
|
-
**Context**:
|
|
70
|
+
**Context**: skill-map keeps each tracked `.md`'s metadata (version, history, tags, annotations) in a sibling **`.sm` companion file** so the `.md` stays clean, and the first time it writes one in a project it asks for consent (remembered in the gitignored `settings.local.json`). The Maintain part walks that consent flow in full; this chapter does not re-teach it. The CLI focus here is what Maintain does not cover: the **three sidecar verbs** and the `--yes` non-interactive switch. A tester who jumped straight here gets a one-line refresher in the demo below.
|
|
81
71
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
We'll demonstrate by creating an empty annotation scaffold for `notes/todo.md`. **Reset any prior consent state first** so the prompt actually appears (an earlier step may have flipped the flag without you noticing, in which case `sm sidecar annotate` would skip straight past the prompt and the lesson would not land):
|
|
72
|
+
Create a scaffold for `notes/todo.md` so there is a `.sm` on disk to talk about. **Reset any prior consent state first** so the prompt appears (an earlier step may have flipped the flag, in which case the verb skips straight past it):
|
|
85
73
|
|
|
86
74
|
```bash
|
|
87
75
|
rm -f notes/todo.sm .skill-map/settings.local.json
|
|
88
76
|
sm sidecar annotate notes/todo.md
|
|
89
77
|
```
|
|
90
78
|
|
|
91
|
-
Expected: a short explanation
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
cat notes/todo.sm
|
|
95
|
-
cat .skill-map/settings.local.json
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**Why the prompt?** The choice is **per-user, per-project**: stored in the gitignored `settings.local.json` so each contributor consents independently and nothing about the choice travels via the repo. Once accepted, the flag stays set and skill-map will never ask again on this checkout (the next `sm sidecar annotate` or `sm bump` goes through silently). On a CI / non-interactive session, pass `--yes` to grant up-front.
|
|
79
|
+
Expected: a short explanation, then a `[Y/n]` prompt (capital Y = default Yes, just hit Enter). After accepting, `notes/todo.sm` appears with an `identity:` block plus an empty `annotations: {}`, and `.skill-map/settings.local.json` records `{ "allowEditSmFiles": true }` so it never asks again on this checkout (the choice is per-user, per-project, gitignored).
|
|
99
80
|
|
|
100
|
-
|
|
81
|
+
The part the CLI adds on top, the three sidecar verbs (all share that same consent gate):
|
|
101
82
|
|
|
102
|
-
- `sm sidecar annotate
|
|
103
|
-
|
|
104
|
-
- `sm
|
|
105
|
-
sidecar's version and refreshes its hashes, same consent gate.
|
|
106
|
-
- `sm sidecar refresh <node>` is the hash-only update (no version
|
|
107
|
-
bump).
|
|
83
|
+
- `sm sidecar annotate <node>` is the scaffold verb you just ran (creates a fresh `.sm`).
|
|
84
|
+
- `sm bump <node>` is the day-to-day verb: it increments the sidecar's version and refreshes its hashes.
|
|
85
|
+
- `sm sidecar refresh <node>` is the hash-only update (no version bump).
|
|
108
86
|
|
|
109
|
-
|
|
87
|
+
And for automation: a CI / non-interactive session has no one to answer the `[Y/n]`, so pass `--yes` to grant consent up front (`sm sidecar annotate <node> --yes`).
|
|
110
88
|
|
|
111
89
|
Mark `annotations`: done.
|
|
112
90
|
|
|
@@ -131,7 +109,6 @@ name: note-with-external-link
|
|
|
131
109
|
description: |
|
|
132
110
|
Demo note that links out to a sibling project (hijoB) sitting
|
|
133
111
|
next to this one. Used to teach scan.referencePaths.
|
|
134
|
-
tags: [demo, link-validation]
|
|
135
112
|
---
|
|
136
113
|
|
|
137
114
|
# Note with external link
|
|
@@ -147,7 +124,6 @@ description: |
|
|
|
147
124
|
Target of the cross-folder link. Lives outside hijoA's scan
|
|
148
125
|
scope on purpose: that is precisely what scan.referencePaths
|
|
149
126
|
is designed to bridge.
|
|
150
|
-
tags: [demo, link-validation]
|
|
151
127
|
---
|
|
152
128
|
|
|
153
129
|
# External spec
|
|
@@ -14,15 +14,6 @@ name: check-links
|
|
|
14
14
|
description: |
|
|
15
15
|
Validates the portfolio's internal links before publishing. Walks
|
|
16
16
|
every generated page and reports any link whose target is missing.
|
|
17
|
-
inputs:
|
|
18
|
-
- name: root
|
|
19
|
-
type: path
|
|
20
|
-
description: Folder of generated pages to check.
|
|
21
|
-
required: true
|
|
22
|
-
outputs:
|
|
23
|
-
- name: report
|
|
24
|
-
type: string
|
|
25
|
-
description: List of broken links, empty when all resolve.
|
|
26
17
|
---
|
|
27
18
|
|
|
28
19
|
# check-links
|
|
@@ -55,7 +46,7 @@ Wait for confirmation. Mark `check-links`: done.
|
|
|
55
46
|
|
|
56
47
|
On `agent-skills` / Antigravity there is no `command` kind, so skip this whole chapter and fold its purpose into the prose of the next one.
|
|
57
48
|
|
|
58
|
-
Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. The frontmatter fence (`---`) MUST sit on column 0 with no leading spaces: present the block below exactly as written, and if the tester pastes it indented, have them strip the leading whitespace. An indented `---` does not parse as YAML, so the `publish` node would land without its `name
|
|
49
|
+
Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. The frontmatter fence (`---`) MUST sit on column 0 with no leading spaces: present the block below exactly as written, and if the tester pastes it indented, have them strip the leading whitespace. An indented `---` does not parse as YAML, so the `publish` node would land without its `name` or `description`.
|
|
59
50
|
|
|
60
51
|
> Create `.claude/commands/publish.md` with exactly this content (the first line is `---`, nothing before it):
|
|
61
52
|
|
|
@@ -65,12 +56,6 @@ name: publish
|
|
|
65
56
|
description: |
|
|
66
57
|
Publishes the portfolio: runs the link check, hands off to the
|
|
67
58
|
content editor for any last fixes, then follows the deploy runbook.
|
|
68
|
-
shortcut: "ctrl+alt+p"
|
|
69
|
-
args:
|
|
70
|
-
- name: root
|
|
71
|
-
type: path
|
|
72
|
-
description: Folder of generated pages to publish.
|
|
73
|
-
required: true
|
|
74
59
|
---
|
|
75
60
|
|
|
76
61
|
# publish
|
|
@@ -43,15 +43,6 @@ Create these five files (with `Write`), exactly in this order. Per §Provider de
|
|
|
43
43
|
description: |
|
|
44
44
|
Example skill that walks a file and returns a Markdown report.
|
|
45
45
|
Showcases the `skill` kind in the demo map.
|
|
46
|
-
inputs:
|
|
47
|
-
- name: target
|
|
48
|
-
type: path
|
|
49
|
-
description: File to process.
|
|
50
|
-
required: true
|
|
51
|
-
outputs:
|
|
52
|
-
- name: report
|
|
53
|
-
type: string
|
|
54
|
-
description: Markdown summary.
|
|
55
46
|
---
|
|
56
47
|
|
|
57
48
|
# demo-skill
|
|
@@ -70,20 +61,14 @@ Create these five files (with `Write`), exactly in this order. Per §Provider de
|
|
|
70
61
|
---
|
|
71
62
|
name: demo-command
|
|
72
63
|
description: |
|
|
73
|
-
Example slash
|
|
74
|
-
|
|
75
|
-
shortcut: "ctrl+alt+d"
|
|
76
|
-
args:
|
|
77
|
-
- name: target
|
|
78
|
-
type: path
|
|
79
|
-
description: File the command will hand off to the skill.
|
|
80
|
-
required: true
|
|
64
|
+
Example slash command that wraps the demo-skill. Showcases the
|
|
65
|
+
`command` kind.
|
|
81
66
|
---
|
|
82
67
|
|
|
83
68
|
# demo-command
|
|
84
69
|
|
|
85
|
-
Quick
|
|
86
|
-
|
|
70
|
+
Quick entry point for running the demo flow on a target file.
|
|
71
|
+
Connectors land in the next sub-step.
|
|
87
72
|
```
|
|
88
73
|
|
|
89
74
|
3. `notes/todo.md`, classified as `kind: markdown` today
|
|
@@ -96,7 +81,6 @@ Create these five files (with `Write`), exactly in this order. Per §Provider de
|
|
|
96
81
|
Live list of things to review in the demo. Will become the
|
|
97
82
|
hub that points to the rest of the fixture in the next
|
|
98
83
|
sub-step.
|
|
99
|
-
tags: [notes, demo]
|
|
100
84
|
---
|
|
101
85
|
|
|
102
86
|
# Pending
|
|
@@ -112,7 +96,6 @@ Create these five files (with `Write`), exactly in this order. Per §Provider de
|
|
|
112
96
|
Static reference notes the rest of the demo points at. The hub
|
|
113
97
|
reaches it with a bare `@`-mention, which stays a faint guess
|
|
114
98
|
(0.50) because it can't resolve to a known entity.
|
|
115
|
-
tags: [notes, demo]
|
|
116
99
|
---
|
|
117
100
|
|
|
118
101
|
# Demo Guideline
|
|
@@ -135,7 +118,6 @@ Create these five files (with `Write`), exactly in this order. Per §Provider de
|
|
|
135
118
|
Sibling of demo-guideline. The hub reaches it with an
|
|
136
119
|
`@`-mention that carries the `.md` extension, so the link
|
|
137
120
|
resolves to this file and lands certain (1.00).
|
|
138
|
-
tags: [notes, demo]
|
|
139
121
|
---
|
|
140
122
|
|
|
141
123
|
# Demo Guideline 2
|
|
@@ -80,8 +80,8 @@ Tell the tester:
|
|
|
80
80
|
>
|
|
81
81
|
> **Step 2, brief the editor** (`@content-editor`). The check found
|
|
82
82
|
> nothing to fix, so there is no brief to hand off this time, that is
|
|
83
|
-
> the happy path. (
|
|
84
|
-
> step earns its keep.)
|
|
83
|
+
> the happy path. (Maintaining the harness is where a link actually
|
|
84
|
+
> breaks, and that is where this step earns its keep.)
|
|
85
85
|
>
|
|
86
86
|
> **Step 3, follow the deploy runbook** (`docs/DEPLOY.md`). It lists:
|
|
87
87
|
> generate the pages (done), run the link check (done), start the
|
|
@@ -122,7 +122,7 @@ Tell the tester:
|
|
|
122
122
|
> Last step, the fun one. In your terminal, run these two commands:
|
|
123
123
|
>
|
|
124
124
|
> `npm install` downloads the one small library the server needs
|
|
125
|
-
> (Express). If you already ran it
|
|
125
|
+
> (Express). If you already ran it earlier it just confirms it is
|
|
126
126
|
> there. Then `node server.js` starts the server; it prints a line
|
|
127
127
|
> like `Listening on http://localhost:3000`.
|
|
128
128
|
>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Part 4: Maintain the
|
|
1
|
+
# Part 4: Maintain the harness (step library, `maintain`)
|
|
2
2
|
|
|
3
3
|
This is the upkeep part. The harness from Part 2 is wired and clean; real projects drift, links break, drafts pile up, names collide. Here the tester breaks something on purpose and fixes it, meets the analyzer catalogue that catches those problems, finds an orphan nobody links to, clears a reserved-name warning, and learns the `.sm` companion files that carry the tool's bookkeeping. `pace: auto-advance` (walk straight into the next chapter once one is marked done), `preflight: seed` (it builds on the portfolio harness from Parts 1 and 2, reusing the accumulated state when its predecessors are done, no fresh fixture of its own). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
|
|
4
4
|
|
|
@@ -113,7 +113,7 @@ Wait for confirmation. Mark `analyzers`: done.
|
|
|
113
113
|
|
|
114
114
|
## Chapter `orphans` - A page nobody links to (~3 min)
|
|
115
115
|
|
|
116
|
-
**Context**: a different kind of loose end. A node can be perfectly valid and still be an orphan: nothing in the harness links to it. We create a draft page that no one references; it lands on the **Map** as a floating dot, and `sm show` confirms it has no incoming links. The point is to separate three ideas the tester now has names for: orphan (nothing points at it) vs broken-ref (a link with no target) vs issue (a rule violation). Note: orphan-ness is a property of the graph (visible on the Map / inspector), there is no `sm check` analyzer for it. The separate `sm orphans` verb is unrelated
|
|
116
|
+
**Context**: a different kind of loose end. A node can be perfectly valid and still be an orphan: nothing in the harness links to it. We create a draft page that no one references; it lands on the **Map** as a floating dot, and `sm show` confirms it has no incoming links. The point is to separate three ideas the tester now has names for: orphan (nothing points at it) vs broken-ref (a link with no target) vs issue (a rule violation). Note: orphan-ness is a property of the graph (visible on the Map / inspector), there is no `sm check` analyzer for it. The separate `sm orphans` verb is unrelated (it surfaces history stranded by a rename, not unlinked pages), so do NOT run it or bring it up with the tester here.
|
|
117
117
|
|
|
118
118
|
`Write` `docs/draft.md` (markdown kind), a half-finished page nobody has wired up yet:
|
|
119
119
|
|
|
@@ -123,7 +123,6 @@ name: draft
|
|
|
123
123
|
description: |
|
|
124
124
|
Half-finished page nobody links to yet. Here to show what an
|
|
125
125
|
orphan looks like: a valid node with no incoming connectors.
|
|
126
|
-
tags: [docs, portfolio, draft]
|
|
127
126
|
---
|
|
128
127
|
|
|
129
128
|
# Draft page
|
|
@@ -163,16 +162,12 @@ Tell the tester:
|
|
|
163
162
|
> - **issue**: any rule violation `sm check` reports (broken-ref is
|
|
164
163
|
> one family; name-reserved, self-loop and the rest are others).
|
|
165
164
|
>
|
|
166
|
-
> An orphan is not automatically a problem
|
|
167
|
-
> up yet
|
|
168
|
-
>
|
|
169
|
-
>
|
|
170
|
-
>
|
|
171
|
-
>
|
|
172
|
-
> different tool. It tracks history left stranded when you rename a
|
|
173
|
-
> file that had tracked state, not pages with no links, so it will
|
|
174
|
-
> not list `docs/draft`. Running it here prints "no orphan issues",
|
|
175
|
-
> which is correct.)
|
|
165
|
+
> An orphan is not automatically a problem. Sometimes it is a draft you
|
|
166
|
+
> have not wired up yet; sometimes it is a node you deliberately keep on
|
|
167
|
+
> its own, isolated on purpose, and that is just as valid. skill-map is
|
|
168
|
+
> only pointing out that the page is not reachable from anywhere, not
|
|
169
|
+
> telling you to fix it: if you link to it later it stops being an
|
|
170
|
+
> orphan, and if you never do, that was your call, not an error.
|
|
176
171
|
>
|
|
177
172
|
> Did `docs/draft` land as a floating dot, with `sm show` confirming
|
|
178
173
|
> no links in?
|
|
@@ -191,11 +186,6 @@ name: init
|
|
|
191
186
|
description: |
|
|
192
187
|
Bootstraps a fresh portfolio scaffold. Named init on purpose, to
|
|
193
188
|
collide with the runtime built-in and trigger name-reserved.
|
|
194
|
-
args:
|
|
195
|
-
- name: target
|
|
196
|
-
type: path
|
|
197
|
-
description: Folder to scaffold into.
|
|
198
|
-
required: true
|
|
199
189
|
---
|
|
200
190
|
|
|
201
191
|
# init
|
|
@@ -280,6 +270,15 @@ sm sidecar annotate AGENTS.md
|
|
|
280
270
|
> layer (gitignored), so each contributor consents on their own
|
|
281
271
|
> checkout and the choice never travels through git.
|
|
282
272
|
>
|
|
273
|
+
> **Tip:** that `.sm` is also where the inspector gets a node's
|
|
274
|
+
> **Metadata**. With the live `sm` still running, click the `AGENTS`
|
|
275
|
+
> node on the **Map**: the inspector now shows a **Metadata** section
|
|
276
|
+
> that was not there before you created the companion file. It reads
|
|
277
|
+
> straight from `AGENTS.sm`, so a node with no `.sm` has no Metadata
|
|
278
|
+
> section at all. For now it reads **never bumped**, because you only
|
|
279
|
+
> scaffolded the file; once you start running `sm bump AGENTS.md` that
|
|
280
|
+
> panel fills in **Created** and **Last bumped**.
|
|
281
|
+
>
|
|
283
282
|
> Did the prompt appear, and does `AGENTS.sm` exist now?
|
|
284
283
|
|
|
285
284
|
Wait for confirmation. You MAY use `Read` on `AGENTS.sm` to verify it landed. Mark `sidecar`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu).
|
|
@@ -139,7 +139,6 @@ runbook), so Part 4's maintenance beats have something to point at.
|
|
|
139
139
|
name: style-guide
|
|
140
140
|
description: |
|
|
141
141
|
Writing and markup conventions every portfolio page follows.
|
|
142
|
-
tags: [docs, portfolio]
|
|
143
142
|
---
|
|
144
143
|
|
|
145
144
|
# Style guide
|
|
@@ -155,7 +154,6 @@ tags: [docs, portfolio]
|
|
|
155
154
|
name: deploy-runbook
|
|
156
155
|
description: |
|
|
157
156
|
How the portfolio gets published once the pages are written.
|
|
158
|
-
tags: [docs, portfolio]
|
|
159
157
|
---
|
|
160
158
|
|
|
161
159
|
# Deploy runbook
|
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]="
|
|
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]="3bc438eb-6e57-550d-aab1-392242aca915")}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.
|
|
249
|
+
version: "0.53.6",
|
|
250
250
|
description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
|
|
251
251
|
license: "MIT",
|
|
252
252
|
type: "module",
|
|
@@ -14839,6 +14839,13 @@ var HELP_TEXTS = {
|
|
|
14839
14839
|
* Tagline mirrors README.md "In a sentence", keep them in sync.
|
|
14840
14840
|
*/
|
|
14841
14841
|
compactHeader: "{{binary}} {{version}}: the missing map for Markdown-based generative-AI ecosystems",
|
|
14842
|
+
/**
|
|
14843
|
+
* Tutorial call-to-action rendered at the very top of the compact
|
|
14844
|
+
* overview, directly under the header and above USAGE, to point new
|
|
14845
|
+
* users at `sm tutorial`. `{{glyph}}` is a green `▶` when color is on,
|
|
14846
|
+
* a bare `▶` otherwise.
|
|
14847
|
+
*/
|
|
14848
|
+
compactTutorialCta: "{{glyph}} New to skill-map? Run `sm tutorial` for a hands-on, guided walkthrough.",
|
|
14842
14849
|
compactUsageHeading: "USAGE",
|
|
14843
14850
|
compactUsageLine: " sm <command> [options]",
|
|
14844
14851
|
compactExamplesHeading: "EXAMPLES",
|
|
@@ -14916,9 +14923,16 @@ var HelpCommand = class extends Command15 {
|
|
|
14916
14923
|
});
|
|
14917
14924
|
verbParts = Option14.Rest({ required: 0 });
|
|
14918
14925
|
format = Option14.String("--format", "human");
|
|
14926
|
+
// `HelpCommand` extends Clipanion's `Command` directly (see block
|
|
14927
|
+
// comment), so it does not inherit `SmCommand`'s `--no-color`. Declared
|
|
14928
|
+
// here because the human overview now emits a coloured tutorial glyph;
|
|
14929
|
+
// `ansiFor` still layers `NO_COLOR` / `FORCE_COLOR` / TTY on top.
|
|
14930
|
+
noColor = Option14.Boolean("--no-color", false, {
|
|
14931
|
+
description: "Disable ANSI color codes."
|
|
14932
|
+
});
|
|
14919
14933
|
async execute() {
|
|
14920
14934
|
const stderr = this.context.stderr;
|
|
14921
|
-
const ansi = ansiFor({ isTTY: stderr.isTTY === true, noColorFlag:
|
|
14935
|
+
const ansi = ansiFor({ isTTY: stderr.isTTY === true, noColorFlag: this.noColor });
|
|
14922
14936
|
const errGlyph = ansi.red("\u2715");
|
|
14923
14937
|
const format = normalizeFormat(this.format);
|
|
14924
14938
|
if (!format) {
|
|
@@ -14954,7 +14968,9 @@ var HelpCommand = class extends Command15 {
|
|
|
14954
14968
|
return ExitCode.NotFound;
|
|
14955
14969
|
}
|
|
14956
14970
|
if (format === "human") {
|
|
14957
|
-
this.context.stdout
|
|
14971
|
+
const stdout = this.context.stdout;
|
|
14972
|
+
const stdoutAnsi = ansiFor({ isTTY: stdout.isTTY === true, noColorFlag: this.noColor });
|
|
14973
|
+
this.context.stdout.write(renderCompactOverview(verbs, stdoutAnsi));
|
|
14958
14974
|
return ExitCode.Ok;
|
|
14959
14975
|
}
|
|
14960
14976
|
const doc = {
|
|
@@ -15255,10 +15271,12 @@ function truncate2(text, width) {
|
|
|
15255
15271
|
function padRight(value, width) {
|
|
15256
15272
|
return value.length >= width ? value : value + " ".repeat(width - value.length);
|
|
15257
15273
|
}
|
|
15258
|
-
function renderCompactOverview(verbs) {
|
|
15274
|
+
function renderCompactOverview(verbs, ansi) {
|
|
15259
15275
|
const lines = [];
|
|
15260
15276
|
lines.push(tx(HELP_TEXTS.compactHeader, { binary: BINARY_LABEL, version: VERSION }));
|
|
15261
15277
|
lines.push("");
|
|
15278
|
+
lines.push(tx(HELP_TEXTS.compactTutorialCta, { glyph: ansi.green("\u25B6") }));
|
|
15279
|
+
lines.push("");
|
|
15262
15280
|
lines.push(HELP_TEXTS.compactUsageHeading);
|
|
15263
15281
|
lines.push(HELP_TEXTS.compactUsageLine);
|
|
15264
15282
|
lines.push("");
|
|
@@ -15303,9 +15321,17 @@ function renderCompactOverview(verbs) {
|
|
|
15303
15321
|
}
|
|
15304
15322
|
var RootHelpCommand = class extends Command15 {
|
|
15305
15323
|
static paths = [["-h"], ["--help"]];
|
|
15324
|
+
// Mirrors `HelpCommand.noColor`: this command extends Clipanion's
|
|
15325
|
+
// `Command` directly, so the flag is declared here to gate the
|
|
15326
|
+
// coloured tutorial glyph in the overview.
|
|
15327
|
+
noColor = Option14.Boolean("--no-color", false, {
|
|
15328
|
+
description: "Disable ANSI color codes."
|
|
15329
|
+
});
|
|
15306
15330
|
async execute() {
|
|
15307
15331
|
const verbs = buildVerbCatalog(this.cli);
|
|
15308
|
-
this.context.stdout
|
|
15332
|
+
const stdout = this.context.stdout;
|
|
15333
|
+
const ansi = ansiFor({ isTTY: stdout.isTTY === true, noColorFlag: this.noColor });
|
|
15334
|
+
this.context.stdout.write(renderCompactOverview(verbs, ansi));
|
|
15309
15335
|
return ExitCode.Ok;
|
|
15310
15336
|
}
|
|
15311
15337
|
};
|
|
@@ -30251,4 +30277,4 @@ function resolveBareDefault() {
|
|
|
30251
30277
|
process.exit(ExitCode.Error);
|
|
30252
30278
|
}
|
|
30253
30279
|
//# sourceMappingURL=cli.js.map
|
|
30254
|
-
//# debugId=
|
|
30280
|
+
//# debugId=3bc438eb-6e57-550d-aab1-392242aca915
|
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]="
|
|
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]="e4042206-8e88-53b7-93f5-c2c9bbb77b3e")}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.
|
|
105
|
+
version: "0.53.6",
|
|
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=
|
|
3635
|
+
//# debugId=e4042206-8e88-53b7-93f5-c2c9bbb77b3e
|
package/dist/kernel/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]="
|
|
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]="edd337e5-10f2-5ebc-92b6-0e1ea1dd4e3f")}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.
|
|
105
|
+
version: "0.53.6",
|
|
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=
|
|
3635
|
+
//# debugId=edd337e5-10f2-5ebc-92b6-0e1ea1dd4e3f
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as At,c as Nt,d as k,e as Rt}from"./chunk-NBXEOYS4.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-4CXAL43H.js";import"./chunk-P2DAPRK7.js";import{a as vt,b as xt,c as wt,d as Ct,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 C,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 we,Ob as Ce,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 w,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),w()),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),w(),x(6,"p",5),l(7),w()()(),m(8,yn,2,2,"p",6),x(9,"a",7),ne(10,"i",8),x(11,"span",9)(12,"span",10),l(13),w(),x(14,"span",11),l(15),w()(),x(16,"span",12),ne(17,"i",13),l(18),w()(),x(19,"dl",14)(20,"div",15)(21,"dt",16),l(22),w(),x(23,"dd",17)(24,"a",18),l(25),w()()(),x(26,"div",15)(27,"dt",16),l(28),w(),x(29,"dd",17)(30,"a",19),l(31),w()()(),x(32,"div",15)(33,"dt",16),l(34),w(),x(35,"dd",20),l(36),w()(),x(37,"div",15)(38,"dt",16),l(39),w(),x(40,"dd",21),l(41),w()(),x(42,"div",15)(43,"dt",16),l(44),w(),x(45,"dd",22),l(46),w()(),x(47,"div",15)(48,"dt",16),l(49),w(),x(50,"dd",23),l(51),w()(),x(52,"div",15)(53,"dt",16),l(54),w(),x(55,"dd",24),l(56),w()()()()),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.5",date:"2026-06-09",kind:"internal",highlights:[]},{version:"0.53.4",date:"2026-06-08",kind:"user-facing",highlights:[{body:"The built-in tutorial's CLI deep-dive now rebuilds its own demo fixture when you enter it, so it works correctly even after you have run the project campaign, and it always appears in the menu instead of staying hidden until the prologue is done.",packages:["@skill-map/cli"]},{body:"The files panel's collapse button is now a chevron instead of an `\u2715`, so it clearly hides the panel rather than clearing the search. The built-in tutorial fixes a stray self-link in its command examples and reminds you to open a third terminal during the maintenance part.",packages:["@skill-map/cli"]}]},{version:"0.53.3",date:"2026-06-08",kind:"user-facing",highlights:[{body:`Three new Neon graph themes (red/green/blue) with a glow effect in the map's theme picker. Toolbar tooltips are shorter and "edge style" is now "connector style". The built-in tutorial adds a third part and a reworked ending.`,packages:["@skill-map/cli"]}]},{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),w()),t&2){let e=d();o(),u(" ",e.texts.changelogEmpty," ")}}function Tn(t,r){if(t&1&&(x(0,"p",12),l(1),w()),t&2){let e=d(3);o(),u(" ",e.texts.changelogInternalRelease," ")}}function On(t,r){if(t&1&&(x(0,"li",17),l(1),w()),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),w()),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),w()),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),w()),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),w(),x(4,"span",11),l(5),w()(),m(6,Tn,2,1,"p",12)(7,jn,3,0,"ul",13),w()),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),w()),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),w(),x(3,"p",2),l(4),w(),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),w()()()),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-NBXEOYS4.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-4CXAL43H.js";import"./chunk-P2DAPRK7.js";import{a as vt,b as xt,c as wt,d as Ct,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 C,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 we,Ob as Ce,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 w,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),w()),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),w(),x(6,"p",5),l(7),w()()(),m(8,yn,2,2,"p",6),x(9,"a",7),ne(10,"i",8),x(11,"span",9)(12,"span",10),l(13),w(),x(14,"span",11),l(15),w()(),x(16,"span",12),ne(17,"i",13),l(18),w()(),x(19,"dl",14)(20,"div",15)(21,"dt",16),l(22),w(),x(23,"dd",17)(24,"a",18),l(25),w()()(),x(26,"div",15)(27,"dt",16),l(28),w(),x(29,"dd",17)(30,"a",19),l(31),w()()(),x(32,"div",15)(33,"dt",16),l(34),w(),x(35,"dd",20),l(36),w()(),x(37,"div",15)(38,"dt",16),l(39),w(),x(40,"dd",21),l(41),w()(),x(42,"div",15)(43,"dt",16),l(44),w(),x(45,"dd",22),l(46),w()(),x(47,"div",15)(48,"dt",16),l(49),w(),x(50,"dd",23),l(51),w()(),x(52,"div",15)(53,"dt",16),l(54),w(),x(55,"dd",24),l(56),w()()()()),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.6",date:"2026-06-09",kind:"user-facing",highlights:[{body:"`sm --help` now opens with a pointer to `sm tutorial`, the guided hands-on walkthrough. The tutorial reads cleaner too: the maintain part is renamed, chapters are numbered (5.1, 5.2\u2026), and the annotations lesson no longer repeats across parts.",packages:["@skill-map/cli"]}]},{version:"0.53.5",date:"2026-06-09",kind:"internal",highlights:[]},{version:"0.53.4",date:"2026-06-08",kind:"user-facing",highlights:[{body:"The built-in tutorial's CLI deep-dive now rebuilds its own demo fixture when you enter it, so it works correctly even after you have run the project campaign, and it always appears in the menu instead of staying hidden until the prologue is done.",packages:["@skill-map/cli"]},{body:"The files panel's collapse button is now a chevron instead of an `\u2715`, so it clearly hides the panel rather than clearing the search. The built-in tutorial fixes a stray self-link in its command examples and reminds you to open a third terminal during the maintenance part.",packages:["@skill-map/cli"]}]},{version:"0.53.3",date:"2026-06-08",kind:"user-facing",highlights:[{body:`Three new Neon graph themes (red/green/blue) with a glow effect in the map's theme picker. Toolbar tooltips are shorter and "edge style" is now "connector style". The built-in tutorial adds a third part and a reworked ending.`,packages:["@skill-map/cli"]}]},{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),w()),t&2){let e=d();o(),u(" ",e.texts.changelogEmpty," ")}}function Tn(t,r){if(t&1&&(x(0,"p",12),l(1),w()),t&2){let e=d(3);o(),u(" ",e.texts.changelogInternalRelease," ")}}function On(t,r){if(t&1&&(x(0,"li",17),l(1),w()),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),w()),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),w()),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),w()),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),w(),x(4,"span",11),l(5),w()(),m(6,Tn,2,1,"p",12)(7,jn,3,0,"ul",13),w()),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),w()),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),w(),x(3,"p",2),l(4),w(),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),w()()()),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');
|
package/dist/ui/index.html
CHANGED
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
<style>:root{--ff-white:#ffffff;--ff-black:#000000;--ff-gray-0:#ffffff;--ff-gray-25:#fcfcfc;--ff-gray-50:#f8f8f7;--ff-gray-75:#f2f2f0;--ff-gray-100:#e9e9e6;--ff-gray-150:#dcdcd7;--ff-gray-200:#c9c9c1;--ff-gray-300:#afafa5;--ff-gray-400:#8d8d81;--ff-gray-500:#69695f;--ff-gray-600:#505048;--ff-gray-700:#3c3c36;--ff-gray-800:#272722;--ff-gray-900:#1b1b18;--ff-gray-950:#141412;--ff-gray-1000:#0f0f0d;--ff-alpha-black-04:rgba(15, 15, 13, .04);--ff-alpha-black-06:rgba(15, 15, 13, .06);--ff-alpha-black-08:rgba(15, 15, 13, .08);--ff-alpha-black-10:rgba(15, 15, 13, .1);--ff-alpha-black-12:rgba(15, 15, 13, .12);--ff-alpha-black-15:rgba(15, 15, 13, .15);--ff-alpha-black-20:rgba(15, 15, 13, .2);--ff-alpha-black-30:rgba(15, 15, 13, .3);--ff-alpha-black-40:rgba(15, 15, 13, .4);--ff-alpha-black-60:rgba(15, 15, 13, .6);--ff-alpha-white-04:rgba(255, 255, 255, .04);--ff-alpha-white-06:rgba(255, 255, 255, .06);--ff-alpha-white-08:rgba(255, 255, 255, .08);--ff-alpha-white-10:rgba(255, 255, 255, .1);--ff-alpha-white-12:rgba(255, 255, 255, .12);--ff-alpha-white-15:rgba(255, 255, 255, .15);--ff-alpha-white-20:rgba(255, 255, 255, .2);--ff-alpha-white-30:rgba(255, 255, 255, .3);--ff-alpha-white-40:rgba(255, 255, 255, .4);--ff-alpha-white-60:rgba(255, 255, 255, .6);--ff-blue-100:#e8f2ff;--ff-blue-200:#bad8ff;--ff-blue-300:#7db7ff;--ff-blue-400:#4176ff;--ff-blue-500:#2759db;--ff-blue-600:#1b3f9e;--ff-green-100:#e7f7ef;--ff-green-300:#71c795;--ff-green-400:#2b9b5f;--ff-green-500:#1e7748;--ff-yellow-100:#fff5de;--ff-yellow-300:#e1b354;--ff-yellow-400:#bb8121;--ff-yellow-500:#916112;--ff-red-100:#feeceb;--ff-red-300:#e48d85;--ff-red-400:#c55245;--ff-red-500:#9e3a2f;--ff-radius-4:4px;--ff-radius-6:6px;--ff-radius-pill:999px;--ff-font-family-sans:"Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ff-font-family-mono:ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;--ff-font-size-xs:12px;--ff-font-size-sm:14px;--ff-font-size-md:16px;--ff-font-size-lg:18px;--ff-shadow-1:0 1px 2px rgba(15, 15, 13, .05), 0 8px 20px rgba(15, 15, 13, .04);--ff-shadow-2:0 10px 28px rgba(15, 15, 13, .08), 0 3px 10px rgba(15, 15, 13, .05);--ff-shadow-3:0 18px 48px rgba(15, 15, 13, .12), 0 6px 16px rgba(15, 15, 13, .08)}:root{--ff-color-surface-page:var(--ff-gray-25);--ff-color-surface-canvas:var(--ff-gray-25);--ff-color-surface-card:var(--ff-white);--ff-color-surface-group:rgba(65, 118, 255, .14);--ff-color-surface-group-active:rgba(65, 118, 255, .2);--ff-color-surface-muted:var(--ff-gray-50);--ff-color-surface-soft:var(--ff-gray-75);--ff-color-surface-accent-soft:rgba(65, 118, 255, .1);--ff-color-border-default:var(--ff-alpha-black-12);--ff-color-border-subtle:var(--ff-alpha-black-08);--ff-color-border-strong:var(--ff-alpha-black-20);--ff-color-border-accent:var(--ff-blue-500);--ff-color-text-primary:var(--ff-gray-800);--ff-color-text-secondary:var(--ff-gray-500);--ff-color-text-tertiary:var(--ff-gray-400);--ff-color-text-inverse:var(--ff-white);--ff-color-accent:var(--ff-blue-500);--ff-color-accent-strong:var(--ff-blue-600);--ff-color-success:var(--ff-green-400);--ff-color-warning:var(--ff-yellow-400);--ff-color-danger:var(--ff-red-400);--ff-color-disabled-surface:var(--ff-gray-100);--ff-color-disabled-border:var(--ff-alpha-black-10);--ff-color-disabled-text:var(--ff-gray-300);--ff-color-selection-fill:rgba(65, 118, 255, .12);--ff-color-selection-stroke:rgba(65, 118, 255, .28);--ff-color-grid:var(--ff-alpha-black-08);--ff-color-grid-strong:var(--ff-alpha-black-15);--ff-color-connector-connected:var(--ff-blue-500);--ff-color-connection:var(--ff-gray-600);--ff-color-connection-muted:var(--ff-gray-300);--ff-color-connection-hover:var(--ff-alpha-black-12);--ff-color-grouping-drop-target-border:var(--ff-gray-800);--ff-color-grouping-drop-target-border-active:var(--ff-gray-800);--ff-color-waypoint-fill:var(--ff-white);--ff-color-waypoint-stroke:var(--ff-blue-500);--ff-color-waypoint-candidate-fill:var(--ff-white);--ff-color-waypoint-candidate-stroke:var(--ff-green-400);--ff-color-minimap-surface:var(--ff-white);--ff-color-minimap-node:var(--ff-gray-700);--ff-color-minimap-view:rgba(65, 118, 255, .14);--ff-color-magnetic-line:var(--ff-blue-500);--ff-color-magnetic-rect-fill:rgba(65, 118, 255, .08);--ff-color-magnetic-rect-border:rgba(65, 118, 255, .24);--ff-radius-node:var(--ff-radius-4);--ff-radius-group:var(--ff-radius-4);--ff-radius-control:var(--ff-radius-4);--ff-radius-socket-square:var(--ff-radius-6);--ff-radius-pill:var(--ff-radius-pill);--ff-font-sans:var(--ff-font-family-sans);--ff-font-mono:var(--ff-font-family-mono);--ff-font-size-body:var(--ff-font-size-sm);--ff-font-size-label:var(--ff-font-size-xs);--ff-shadow-surface:var(--ff-shadow-1);--ff-shadow-floating:var(--ff-shadow-2)}:root{--ff-flow-background-color:var(--ff-color-surface-page);--ff-flow-text-color:var(--ff-color-text-primary);--ff-flow-font-family:var(--ff-font-sans);--ff-flow-font-size:var(--ff-font-size-body);--ff-canvas-background-color:var(--ff-color-surface-canvas);--ff-node-background-color:var(--ff-color-surface-card);--ff-node-background-color-inverse:var(--ff-color-text-primary);--ff-node-border-color:var(--ff-color-border-default);--ff-node-border-color-selected:var(--ff-color-border-accent);--ff-node-color:var(--ff-color-text-primary);--ff-node-border-radius:var(--ff-radius-node);--ff-node-shadow:var(--ff-shadow-surface);--ff-node-shadow-selected:var(--ff-shadow-floating);--ff-node-width:120px;--ff-node-min-height:56px;--ff-node-padding:24px;--ff-group-background-color:var(--ff-color-surface-group);--ff-group-background-color-active:var(--ff-color-surface-group-active);--ff-group-border-color:var(--ff-color-border-subtle);--ff-group-border-color-selected:var(--ff-color-border-accent);--ff-group-border-color-active:var(--ff-color-border-accent);--ff-group-color:var(--ff-color-text-secondary);--ff-group-border-radius:var(--ff-radius-group);--ff-group-min-width:180px;--ff-group-min-height:120px;--ff-group-padding:24px;--ff-grouping-drop-target-border-color:var(--ff-color-grouping-drop-target-border);--ff-grouping-drop-target-border-style:dashed;--ff-grouping-drop-target-border-width:1px;--ff-grouping-drop-target-border-color-active:var(--ff-color-grouping-drop-target-border-active);--ff-grouping-drop-target-border-style-active:dashed;--ff-grouping-drop-target-border-width-active:2px;--ff-handle-background-color:var(--ff-color-surface-card);--ff-handle-border-color:var(--ff-color-border-strong);--ff-handle-color:var(--ff-color-text-secondary);--ff-handle-size:12px;--ff-handle-radius:var(--ff-radius-control);--ff-rotate-handle-size:16px;--ff-connector-background-color:var(--ff-color-surface-card);--ff-connector-border-color:var(--ff-color-border-default);--ff-connector-connected-color:var(--ff-color-connector-connected);--ff-connector-accent-color:var(--ff-color-accent);--ff-connector-disabled-color:var(--ff-color-disabled-surface);--ff-connector-disabled-border-color:var(--ff-color-disabled-border);--ff-connector-size:16px;--ff-connector-node-ring-color:var(--ff-canvas-background-color);--ff-outlet-background-color:var(--ff-color-surface-muted);--ff-outlet-border-color:var(--ff-color-border-default);--ff-outlet-color:var(--ff-color-accent);--ff-outlet-disabled-background-color:var(--ff-color-disabled-surface);--ff-outlet-disabled-border-color:var(--ff-color-disabled-border);--ff-outlet-disabled-color:var(--ff-color-disabled-text);--ff-outlet-border-radius:var(--ff-radius-pill);--ff-outlet-padding-y:6px;--ff-outlet-padding-x:12px;--ff-connection-color:var(--ff-color-connection);--ff-snap-connection-color:var(--ff-color-connection-muted);--ff-connection-hover-color:var(--ff-color-connection-hover);--ff-connection-selected-color:var(--ff-color-accent);--ff-connection-label-color:var(--ff-color-text-secondary);--ff-connection-content-color:var(--ff-node-color);--ff-connection-content-background-color:var(--ff-node-background-color);--ff-connection-content-border-color:var(--ff-node-border-color);--ff-connection-content-border-color-selected:var(--ff-connection-selected-color);--ff-connection-content-border-radius:var(--ff-node-border-radius);--ff-connection-content-font-size:13px;--ff-connection-content-padding-y:2px;--ff-connection-content-padding-x:8px;--ff-connection-width:2px;--ff-connection-hit-width:14px;--ff-connection-drag-handle-fill:var(--ff-color-surface-card);--ff-connection-drag-handle-stroke:var(--ff-color-accent);--ff-marker-color:var(--ff-connection-color);--ff-waypoint-fill:var(--ff-color-waypoint-fill);--ff-waypoint-stroke:var(--ff-color-waypoint-stroke);--ff-waypoint-candidate-fill:var(--ff-color-waypoint-candidate-fill);--ff-waypoint-candidate-stroke:var(--ff-color-waypoint-candidate-stroke);--ff-background-line-color:var(--ff-color-grid);--ff-background-dot-color:var(--ff-color-grid-strong);--ff-selection-area-color:var(--ff-color-selection-fill);--ff-selection-area-border-color:var(--ff-color-selection-stroke);--ff-minimap-background-color:var(--ff-color-minimap-surface);--ff-minimap-border-color:var(--ff-color-border-default);--ff-minimap-node-color:var(--ff-color-minimap-node);--ff-minimap-node-selected-color:var(--ff-color-accent);--ff-minimap-view-color:var(--ff-color-minimap-view);--ff-minimap-view-border-color:var(--ff-color-selection-stroke);--ff-minimap-border-radius:var(--ff-radius-node);--ff-minimap-shadow:var(--ff-shadow-floating);--ff-magnetic-line-color:var(--ff-color-magnetic-line);--ff-magnetic-rect-fill:var(--ff-color-magnetic-rect-fill);--ff-magnetic-rect-border-color:var(--ff-color-magnetic-rect-border);--ff-external-item-background-color:var(--ff-color-surface-card);--ff-external-item-border-color:var(--ff-color-border-default);--ff-external-item-color:var(--ff-color-text-primary);--ff-external-item-disabled-color:var(--ff-color-disabled-text);--ff-external-item-disabled-background-color:var(--ff-color-disabled-surface);--ff-external-item-border-radius:var(--ff-radius-node);--ff-external-item-shadow:var(--ff-shadow-surface);--ff-external-item-preview-shadow:var(--ff-shadow-floating);--ff-external-item-placeholder-background-color:var(--ff-color-surface-soft);--ff-external-item-placeholder-border-color:var(--ff-color-border-subtle)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}:root{--fa-family-brands:"Font Awesome 7 Brands";--fa-font-brands:normal 400 1em/1 var(--fa-family-brands)}:root{--fa-font-regular:normal 400 1em/1 var(--fa-family-classic)}:root{--fa-family-classic:"Font Awesome 7 Free";--fa-font-solid:normal 900 1em/1 var(--fa-family-classic);--fa-style-family-classic:var(--fa-family-classic)}:root{--sm-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--sm-font-display-brand:"Geist", system-ui, sans-serif;--sm-radius-sm:3px;--sm-radius-md:4px;--sm-radius-lg:.5rem;--sm-radius-xl:.65rem;--sm-radius-pill:999px;--sm-violet-50:#F5F3FF;--sm-violet-100:#EDE9FE;--sm-violet-200:#DDD6FE;--sm-violet-300:#C4B5FD;--sm-violet-400:#A78BFA;--sm-violet-500:#8B5CF6;--sm-violet-600:#7C3AED;--sm-violet-700:#6D28D9;--sm-violet-800:#4C1D95;--sm-violet-900:#2E1065}html,body{margin:0;padding:0;height:100dvh;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--sm-bg-page);color:var(--p-text-color)}*,*:before,*:after{box-sizing:border-box}*{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--p-text-color) 30%,transparent) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--p-text-color) 25%,transparent);border-radius:var(--sm-radius-pill);border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb,var(--p-text-color) 45%,transparent)}:root{--sm-bg-page:#f8fafc;--sm-bg-content:#ffffff;--sm-bg-hover:#f1f5f9;--sm-border:#e2e8f0;--sm-nav-active-bg:#eff6ff;--sm-edge-invokes:#b8843a;--sm-edge-invokes-active:#f59e0b;--sm-edge-references:#7daa90;--sm-edge-references-active:#10b981;--sm-edge-mentions:#6fa2c0;--sm-edge-mentions-active:#0ea5e9;--sm-edge-supersedes:#9ca3af;--sm-edge-supersedes-active:#4b5563;--sm-edge-neutral:#6b7280;--sm-link-in-bg:#e0e7ff;--sm-link-in-fg:#3730a3;--sm-link-out-bg:#fef3c7;--sm-link-out-fg:#92400e;--sm-severity-info:#1e3a8a;--sm-severity-success:#065f46;--sm-severity-warn:#ca8a04;--sm-severity-error:#991b1b;--sm-severity-info-bg:rgba(219, 234, 254, .35);--sm-severity-success-bg:rgba(209, 250, 229, .35);--sm-severity-warn-bg:rgba(254, 243, 199, .35);--sm-severity-error-bg:rgba(254, 226, 226, .35);--sm-stat-tokens-bg:rgba(59, 130, 246, .14);--sm-stat-bytes-bg:rgba(245, 158, 11, .16);--sm-hl-comment:#6e7781;--sm-hl-keyword:#cf222e;--sm-hl-string:#0a3069;--sm-hl-number:#0550ae;--sm-hl-title:#8250df;--sm-hl-attr:#0550ae;--sm-hl-built-in:#953800;--sm-hl-meta:#6e7781;--sm-hl-addition:#116329;--sm-hl-deletion:#82071e;--sm-accent-fg:#ffffff;--sm-shadow-topbar:0 1px 2px rgba(0, 0, 0, .03);--sm-shadow-eventlog:0 -4px 16px rgba(0, 0, 0, .08);--sm-shadow-floating:0 4px 14px rgba(0, 0, 0, .08);--sm-shadow-card:0 1px 2px rgba(0, 0, 0, .05);--sm-shadow-card-hover:0 3px 12px rgba(0, 0, 0, .12);--sm-shadow-panel:0 4px 24px rgba(0, 0, 0, .12)}</style><link rel="stylesheet" href="styles-L6FZYH7X.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-L6FZYH7X.css"></noscript></head>
|
|
37
37
|
<body>
|
|
38
38
|
<sm-root></sm-root>
|
|
39
|
-
<link rel="modulepreload" href="chunk-NBXEOYS4.js"><link rel="modulepreload" href="chunk-HWQTV6ZL.js"><link rel="modulepreload" href="chunk-UBQUCSQ4.js"><link rel="modulepreload" href="chunk-4CXAL43H.js"><link rel="modulepreload" href="chunk-P2DAPRK7.js"><link rel="modulepreload" href="chunk-GBKHMJ4B.js"><link rel="modulepreload" href="chunk-LCOYSPKE.js"><link rel="modulepreload" href="chunk-4SG4352Z.js"><link rel="modulepreload" href="chunk-Q2A6FWC7.js"><link rel="modulepreload" href="chunk-WCABR6TI.js"><script src="main-
|
|
39
|
+
<link rel="modulepreload" href="chunk-NBXEOYS4.js"><link rel="modulepreload" href="chunk-HWQTV6ZL.js"><link rel="modulepreload" href="chunk-UBQUCSQ4.js"><link rel="modulepreload" href="chunk-4CXAL43H.js"><link rel="modulepreload" href="chunk-P2DAPRK7.js"><link rel="modulepreload" href="chunk-GBKHMJ4B.js"><link rel="modulepreload" href="chunk-LCOYSPKE.js"><link rel="modulepreload" href="chunk-4SG4352Z.js"><link rel="modulepreload" href="chunk-Q2A6FWC7.js"><link rel="modulepreload" href="chunk-WCABR6TI.js"><script src="main-O4DGYJ62.js" type="module"></script></body>
|
|
40
40
|
</html>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import{a as B,b as w,c as pe,d as rt,e as ot}from"./chunk-NBXEOYS4.js";import{D as Ze,E as ee,F as it,g as Xe,i as He,j as We,u as U,v as Ge,w as ce}from"./chunk-HWQTV6ZL.js";import{b as Le,f as Ne,g as ze,h as oe,i as Fe,j as je,k as Ue}from"./chunk-UBQUCSQ4.js";import{a as Qe,c as q,d as h,e as z,f as Ye,g as F,h as j,i as he,j as qe,k as et,m as tt,o as nt}from"./chunk-4CXAL43H.js";import{a as Ee,b as Ie,c as Q,d as Ae,e as De,f as $e}from"./chunk-P2DAPRK7.js";import{B as Ke,J as se,K as ae,Q as le,R as de,m as Be,n as Ve,t as Je}from"./chunk-GBKHMJ4B.js";import{r as Oe}from"./chunk-LCOYSPKE.js";import"./chunk-4SG4352Z.js";import{$ as Ce,Eb as O,Fa as ne,Gb as S,Ha as a,Hb as ie,Ib as f,K as E,O as H,P as s,Tb as Me,Ub as ue,V as T,W as R,Wa as I,Wb as Te,Xb as g,Yb as _,Zb as P,ab as Pe,da as ke,db as G,f as ye,fa as xe,ga as L,gb as we,hb as Se,ia as te,jb as v,m as X,mb as C,nb as k,sb as b,sc as c,tb as d,tc as re,ub as p,vb as x,wb as N,xb as W,yb as Z,zc as Re}from"./chunk-Q2A6FWC7.js";import"./chunk-WCABR6TI.js";var fe="skill-map",A={brand:fe,alpha:"ALPHA - do not use in production",devChip:"dev",devChipTooltip:"BFF launched from a local checkout (not the npm install).",devChipA11y:"Development build: BFF is running from a local checkout.",lensChipTooltip:t=>`Active lens: ${t}. The map reflects how ${t} interprets your files.`,lensChipA11y:t=>`Active provider lens: ${t}.`,nav:{searchLabel:"Search nodes by name or tag",searchTooltip:"Search",searchPlaceholder:"Search by name or tag...",searchAriaLabel:"Search nodes by name or tag",searchClearLabel:"Clear search"},actions:{},badge:{nodes:"nodes",mapInfo:(t,n)=>{let e=`Run scan
|
|
2
2
|
${t.toLocaleString()} nodes \xB7 ${n.raw.toLocaleString()} links`;if(n.raw===n.drawn)return e;let i=[],r=n.brokenSource+n.brokenTarget;return r>0&&i.push(`${r} broken`),n.selfLoops>0&&i.push(`${n.selfLoops} self-loop${n.selfLoops===1?"":"s"}`),n.duplicates>0&&i.push(`${n.duplicates} duplicate${n.duplicates===1?"":"s"}`),`${e}
|
|
3
3
|
${n.drawn.toLocaleString()} drawn (${i.join(", ")})`},mapInfoA11y:(t,n)=>`Map contains ${t} nodes and ${n.raw} links; ${n.drawn} drawn on the canvas`},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The map and inspector need room to breathe. Pop this open on a screen at least 768px wide. See you there."},documentTitle:(t,n)=>{let e=t?`${t} - ${fe}`:fe;return n?`${e} v${n}`:e}};var st=[{path:"",pathMatch:"full",loadComponent:()=>import("./chunk-7OJPO3XD.js").then(t=>t.WorkspaceView),title:A.brand},{path:"intentional-fail",loadComponent:()=>import("./chunk-K2MAVAHG.js").then(t=>t.IntentionalFail)},{path:"**",redirectTo:""}];var D={errors:{unknownMode:t=>`SKILL_MAP_MODE: unknown value "${t}"`,restPrefix:t=>`BFF error [${t}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(t,n)=>`Demo bundle fetch failed for "${t}": ${n}`,demoParseFailed:(t,n)=>`Demo bundle parse failed for "${t}": ${n}`,graphFormatNotInDemo:t=>`Graph format "${t}" is not bundled in demo mode (only "ascii").`}};function me(t){let n=new TextEncoder().encode(t),e="";for(let i=0;i<n.length;i++)e+=String.fromCharCode(n[i]);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var m="/api",at=(()=>{class t{http;ws;kindRegistry;providerRegistry;contributionsRegistry;constructor(e,i,r,o,l){this.http=e??s(Q),this.ws=i??s(F),this.kindRegistry=r??s(U),this.contributionsRegistry=o??s(ce),this.providerRegistry=l??s(B)}async health(){return this.getJson(`${m}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${m}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async runScan(){return this.patchJson(`${m}/scan`,{},"POST")}async listNodes(e={}){let i=At(e),r=await this.getJson(`${m}/nodes${i}`);return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async getNode(e,i={}){let r=me(e),o=i.includeBody?"?include=body":"";try{let l=await this.getJson(`${m}/nodes/${r}${o}`);return this.ingestRegistry(l.kindRegistry),this.ingestContributionsRegistry(l.contributionsRegistry),this.ingestProviderRegistry(l.providerRegistry),l}catch(l){if(l instanceof h&&l.code==="not-found")return null;throw l}}async listLinks(e={}){let i=Dt(e),r=await this.getJson(`${m}/links${i}`);return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async listIssues(e={}){let i=$t(e),r=await this.getJson(`${m}/issues${i}`);return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async loadGraph(e="ascii"){let i=`${m}/graph?format=${encodeURIComponent(e)}`;try{return await X(this.http.get(i,{responseType:"text"}))}catch(r){throw this.translateError(r)}}async loadConfig(){let e=await this.getJson(`${m}/config`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.value}async listPlugins(){let e=await this.getJson(`${m}/plugins`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e}async setPluginEnabled(e,i){let r=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}`,{enabled:i});return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async setPluginExtensionEnabled(e,i,r){let o=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}/extensions/${encodeURIComponent(i)}`,{enabled:r});return this.ingestRegistry(o.kindRegistry),this.ingestContributionsRegistry(o.contributionsRegistry),this.ingestProviderRegistry(o.providerRegistry),o}async applyPluginChanges(e){let i=await this.patchJson(`${m}/plugins`,{changes:e});return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async getPreferences(){return await this.getJson(`${m}/preferences`)}async setPreferences(e){return await this.patchJson(`${m}/preferences`,e)}async getProjectPreferences(){return await this.getJson(`${m}/project-preferences`)}async setProjectPreferences(e){return await this.patchJson(`${m}/project-preferences`,e)}async getProjectIgnore(){return await this.getJson(`${m}/project-ignore`)}async setProjectIgnore(e){return await this.patchJson(`${m}/project-ignore`,e)}async getActiveProvider(){return await this.getJson(`${m}/active-provider`)}async setActiveProvider(e){return await this.patchJson(`${m}/active-provider`,{activeProvider:e})}async setFavorite(e){let i=me(e);try{await X(this.http.put(`${m}/favorites/${i}`,null))}catch(r){throw this.translateError(r)}}async unsetFavorite(e){let i=me(e);try{await X(this.http.delete(`${m}/favorites/${i}`))}catch(r){throw this.translateError(r)}}async bumpSidecar(e,i={}){let r={nodePath:e};return i.force!==void 0&&(r.force=i.force),i.confirm!==void 0&&(r.confirm=i.confirm),this.patchJson(`${m}/sidecar/bump`,r,"POST")}async dispatchAction(e,i,r={}){let o=e.split("/").map(encodeURIComponent).join("/"),l={nodePath:i};return r.input!==void 0&&(l.input=r.input),r.confirm!==void 0&&(l.confirm=r.confirm),r.always!==void 0&&(l.always=r.always),this.patchJson(`${m}/actions/${o}`,l,"POST")}async getUpdateStatus(){return this.getJson(`${m}/update-status`)}async getRegisteredAnnotations(){return(await this.getJson(`${m}/annotations/registered`)).items}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}ingestProviderRegistry(e){e&&this.providerRegistry.ingest(e)}ingestContributionsRegistry(e){this.contributionsRegistry.setRegistry(e)}async lookupContribution(e,i,r){let o=new URLSearchParams({path:r});try{return(await this.getJson(`${m}/contributions/${encodeURIComponent(e)}/${encodeURIComponent(i)}?${o.toString()}`)).items[0]??null}catch{return null}}events(){return this.ws.events$}async getJson(e){try{return await X(this.http.get(e))}catch(i){throw this.translateError(i)}}async patchJson(e,i,r="PATCH"){try{let o=r==="POST"?this.http.post(e,i):this.http.patch(e,i);return await X(o)}catch(o){throw this.translateError(o)}}translateError(e){if(e instanceof h)return e;if(e instanceof Ie){let r=Lt(e.error);return r?new h(r.error.code,r.error.message,r.error.details):new h("internal",e.message||D.errors.malformedResponse)}let i=e instanceof Error?e.message:String(e);return new h("internal",i)}static \u0275fac=function(i){return new(i||t)(H(Q),H(F),H(U),H(ce),H(B))};static \u0275prov=E({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function At(t){let n=new URLSearchParams;t.kind&&t.kind.length>0&&n.set("kind",t.kind.join(",")),t.hasIssues!==void 0&&n.set("hasIssues",String(t.hasIssues)),t.path&&n.set("path",t.path),t.limit!==void 0&&n.set("limit",String(t.limit)),t.offset!==void 0&&n.set("offset",String(t.offset));let e=n.toString();return e?`?${e}`:""}function Dt(t){let n=new URLSearchParams;t.kind&&t.kind.length>0&&n.set("kind",t.kind.join(",")),t.from&&n.set("from",t.from),t.to&&n.set("to",t.to);let e=n.toString();return e?`?${e}`:""}function $t(t){let n=new URLSearchParams;t.severity&&n.set("severity",t.severity),t.analyzerId&&n.set("analyzerId",t.analyzerId),t.node&&n.set("node",t.node),t.nodes&&t.nodes.length>0&&n.set("nodes",t.nodes.join(","));let e=n.toString();return e?`?${e}`:""}function Lt(t){if(typeof t!="object"||t===null)return null;let n=t;if(n.ok!==!1)return null;let e=n.error;if(typeof e!="object"||e===null)return null;let i=e;return typeof i.code!="string"||typeof i.message!="string"?null:{ok:!1,error:{code:i.code,message:i.message,details:i.details}}}var Nt="data.json",zt="data.meta.json",ge=class{fetchImpl;metaPromise=null;dataPromise=null;kindRegistry;providerRegistry;constructor(n=globalThis.fetch.bind(globalThis),e,i){this.fetchImpl=n,this.kindRegistry=e??s(U),this.providerRegistry=i??s(B)}async health(){return(await this.loadMeta()).health}async loadScan(){let[n,e]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),n}async listNodes(n={}){let e=await this.loadMeta();if(Ft(n))return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),e.nodes;let i=await this.loadData(),r=i.issues,o=i.nodes;if(n.kind&&n.kind.length>0){let V=new Set(n.kind);o=o.filter(J=>V.has(J.kind))}if(n.path){let V=Bt(n.path);o=o.filter(J=>V.test(J.path))}if(n.hasIssues===!0){let V=lt(r);o=o.filter(J=>V.has(J.path))}else if(n.hasIssues===!1){let V=lt(r);o=o.filter(J=>!V.has(J.path))}let l=o.length,u=n.offset??0,M=n.limit??1e3,y=o.slice(u,u+M);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),{schemaVersion:"1",kind:"nodes",items:y,filters:{kind:n.kind??null,hasIssues:n.hasIssues??null,path:n.path?[n.path]:null},counts:{total:l,returned:y.length,page:{offset:u,limit:M}},kindRegistry:e.nodes.kindRegistry,providerRegistry:e.nodes.providerRegistry}}async getNode(n,e={}){let[i,r]=await Promise.all([this.loadData(),this.loadMeta()]),o=i.nodes.find(y=>y.path===n);if(!o)return null;let l=i.links.filter(y=>y.target===n),u=i.links.filter(y=>y.source===n),M=i.issues.filter(y=>y.nodeIds.includes(n));return this.kindRegistry.ingest(r.nodes.kindRegistry),this.providerRegistry.ingest(r.nodes.providerRegistry),{schemaVersion:"1",kind:"node",item:o,links:{incoming:l,outgoing:u},issues:M,kindRegistry:r.nodes.kindRegistry,providerRegistry:r.nodes.providerRegistry}}async listLinks(n={}){let e=await this.loadMeta();if(jt(n))return this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),e.links;let r=(await this.loadData()).links;if(n.kind&&n.kind.length>0){let o=new Set(n.kind);r=r.filter(l=>o.has(l.kind))}return n.from&&(r=r.filter(o=>o.source===n.from)),n.to&&(r=r.filter(o=>o.target===n.to)),this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),{schemaVersion:"1",kind:"links",items:r,filters:{kind:n.kind??null,from:n.from??null,to:n.to??null},counts:{total:r.length,returned:r.length},kindRegistry:e.links.kindRegistry,providerRegistry:e.links.providerRegistry}}async listIssues(n={}){let e=await this.loadMeta();if(Ut(n))return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),e.issues;let r=(await this.loadData()).issues;if(n.severity&&(r=r.filter(o=>o.severity===n.severity)),n.analyzerId&&(r=r.filter(o=>o.analyzerId===n.analyzerId)),n.node&&(r=r.filter(o=>o.nodeIds.includes(n.node))),n.nodes&&n.nodes.length>0){let o=new Set(n.nodes);r=r.filter(l=>l.nodeIds.some(u=>o.has(u)))}return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),{schemaVersion:"1",kind:"issues",items:r,filters:{severity:n.severity??null,analyzerId:n.analyzerId??null,node:n.node??null,nodes:n.nodes&&n.nodes.length>0?[...n.nodes]:null},counts:{total:r.length,returned:r.length},kindRegistry:e.issues.kindRegistry,providerRegistry:e.issues.providerRegistry}}async loadGraph(n="ascii"){if(n!=="ascii")throw new h("bad-query",D.errors.graphFormatNotInDemo(n));return(await this.loadMeta()).graph.ascii}async loadConfig(){let n=await this.loadMeta();return this.kindRegistry.ingest(n.config.kindRegistry),this.providerRegistry.ingest(n.config.providerRegistry),n.config.value}async listPlugins(){let n=await this.loadMeta();return this.kindRegistry.ingest(n.plugins.kindRegistry),this.providerRegistry.ingest(n.plugins.providerRegistry),n.plugins}async setFavorite(n){throw new h("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async unsetFavorite(n){throw new h("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async setPluginEnabled(n,e){throw new h("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async setPluginExtensionEnabled(n,e,i){throw new h("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async applyPluginChanges(n){throw new h("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async runScan(){throw new h("demo-readonly","Manual scan is not available in demo mode (static bundle is immutable).")}async getPreferences(){return{updateCheck:{enabled:!0},telemetry:{errorsEnabled:!1,usageCliEnabled:!1,usageUiEnabled:!1,anonymousId:null,environment:"prod"}}}async setPreferences(n){throw new h("demo-readonly","Preference toggles are not available in demo mode (static bundle is immutable).")}async getProjectPreferences(){return{scan:{referencePaths:[]}}}async setProjectPreferences(n){throw new h("demo-readonly","Project preferences are not available in demo mode (static bundle is immutable).")}async getProjectIgnore(){return{patterns:[]}}async setProjectIgnore(n){throw new h("demo-readonly","Ignore patterns are not available in demo mode (static bundle is immutable).")}async getActiveProvider(){return{activeProvider:null,detected:[],source:"none",selectable:[]}}async setActiveProvider(n){throw new h("demo-readonly","Active provider lens is not available in demo mode (static bundle is immutable).")}async lookupContribution(){return null}async bumpSidecar(n,e={}){throw new h("demo-readonly","Sidecar bump is not available in demo mode (static bundle is immutable).")}async dispatchAction(n,e,i={}){throw new h("demo-readonly","Actions are not available in demo mode (static bundle is immutable).")}async getUpdateStatus(){return{current:(await this.loadMeta()).health.implVersion,latest:null,isOutdated:!1,checkedAt:null,shownAt:null}}async getRegisteredAnnotations(){return[]}events(){return ye}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(zt)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(Nt)),this.dataPromise}async fetchJson(n){let e;try{e=await this.fetchImpl(n)}catch(i){let r=i instanceof Error?i.message:String(i);throw new h("internal",D.errors.demoFetchFailed(n,r))}if(!e.ok)throw new h("internal",D.errors.demoFetchFailed(n,`HTTP ${e.status}`));try{return await e.json()}catch(i){let r=i instanceof Error?i.message:String(i);throw new h("internal",D.errors.demoParseFailed(n,r))}}};function Ft(t){return!(t.kind&&t.kind.length>0||t.hasIssues!==void 0||t.path||t.offset!==void 0&&t.offset!==0||t.limit!==void 0)}function jt(t){return!(t.kind&&t.kind.length>0||t.from||t.to)}function Ut(t){return!(t.severity||t.analyzerId||t.node||t.nodes&&t.nodes.length>0)}function lt(t){let n=new Set;for(let e of t)for(let i of e.nodeIds)n.add(i);return n}function Bt(t){let e=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${e}$`)}function dt(){let t=s(z);if(t==="live")return new at(s(Q),s(F));if(t==="demo")return new ge;let n=t;throw new Error(D.errors.unknownMode(String(n)))}var ct="search",pt="kinds",mt="linkKinds",gt="favoritesOnly",ut="severities",Vt=["error","warn"],ht=(()=>{class t{filters=s(We);router=s(Fe);activatedRoute=s(Ne);kindRegistry=s(U);destroyRef=s(Ce);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.pipe(Qe(this.destroyRef)).subscribe(e=>{if(e instanceof Le){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),te(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),i=new URLSearchParams;for(let[r,o]of Object.entries(e.queryParams))Array.isArray(o)?i.set(r,o.join(",")):o!=null&&i.set(r,String(o));return this.activatedRoute,i}applyUrlToFilters(e){let i=e.get(ct)??"";i!==this.filters.searchText()&&this.filters.setSearchText(i);let r=Jt(e.get(pt),this.kindRegistry.kinds().map(y=>y.name));ve(r,this.filters.selectedKinds())||this.filters.setKinds(r);let o=e.get(gt)==="true";o!==this.filters.favoritesOnly()&&this.filters.setFavoritesOnly(o);let l=Kt(e.get(mt));ve(l,this.filters.selectedLinkKinds())||this.filters.setLinkKinds(l);let u=Xt(e.get(ut)),M=[];this.filters.severityErrorActive()&&M.push("error"),this.filters.severityWarnActive()&&M.push("warn"),ve(u,M)||this.filters.setSeverityFilters(u)}computeQueryParams(){let e=this.filters.searchText().trim(),i=this.filters.selectedKinds(),r=this.filters.selectedLinkKinds(),o=this.filters.favoritesOnly(),l=[];return this.filters.severityErrorActive()&&l.push("error"),this.filters.severityWarnActive()&&l.push("warn"),{[ct]:e.length>0?e:null,[pt]:i.length>0?i.join(","):null,[mt]:r.length>0?r.join(","):null,[gt]:o?"true":null,[ut]:l.length>0?l.join(","):null}}writeQueryParams(e){let i=this.currentParams(),r=new Map(Object.entries(e)),o=!1;for(let[l,u]of r)if((i.get(l)??null)!==u){o=!0;break}o&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=E({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Jt(t,n){if(!t)return[];let e=new Set(n);return t.split(",").map(i=>i.trim()).filter(i=>e.has(i))}function Kt(t){if(!t)return[];let n=new Set(He);return t.split(",").map(e=>e.trim()).filter(e=>n.has(e))}function Xt(t){if(!t)return[];let n=new Set(Vt);return t.split(",").map(e=>e.trim()).filter(e=>n.has(e))}function ve(t,n){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!==n[e])return!1;return!0}var ft={healthFailed:t=>`ProjectInfoService: /api/health probe failed (${t})`};var Y=(()=>{class t{dataSource=s(q);status=L(null);cwd=c(()=>this.status()?.cwd??null);implVersion=c(()=>this.status()?.implVersion??null);dev=c(()=>this.status()?.dev===!0);activeProviderState=L(null);activeProvider=c(()=>this.activeProviderState());async load(){try{let e=await this.dataSource.health();this.status.set(e)}catch(e){let i=e instanceof Error?e.message:String(e);console.warn(ft.healthFailed(i))}await this.reloadActiveProvider()}async reloadActiveProvider(){try{let e=await this.dataSource.getActiveProvider();this.activeProviderState.set(e.activeProvider)}catch{}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=E({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var bt=(()=>{class t extends oe{title=s($e);projectInfo=s(Y);constructor(){super(),te(()=>{let e=vt(this.projectInfo.cwd()),i=this.projectInfo.implVersion();this.title.setTitle(A.documentTitle(e,i))})}updateTitle(e){let i=vt(this.projectInfo.cwd()),r=this.projectInfo.implVersion();this.title.setTitle(A.documentTitle(i,r))}static \u0275fac=function(i){return new(i||t)};static \u0275prov=E({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function vt(t){if(!t)return null;let n=t.replace(/[\\/]+$/,"");if(!n||n===".")return null;let e=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\"));return(e>=0?n.slice(e+1):n)||null}var be=!1,_e=null;async function _t(t){if(be||he===""||!t.consentEnabled)return;let n=await import("./chunk-KHARMPTZ.js");n.init({dsn:he,release:t.release??void 0,environment:t.environment,integrations:e=>e.filter(i=>i.name!=="BrowserSession"),tracesSampleRate:0,sendDefaultPii:!1,allowUrls:[/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?\//],beforeSend:e=>qe(e)}),_e=n,be=!0}function yt(t){!be||_e===null||_e.captureException(t)}var Ct=(()=>{class t{handleError(e){console.error(e),yt(e)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=E({token:t,factory:t.\u0275fac})}return t})();function Ht(...t){for(let n of t)Promise.resolve(n.load())}var kt={providers:[xe(),{provide:ke,useClass:Ct},je(st,Ue()),{provide:oe,useClass:bt},Ae(De()),Ve({}),G(async()=>{let t=s(Be),[{default:n},{definePreset:e}]=await Promise.all([import("./chunk-43S72FTV.js"),import("./chunk-5ITZXW3A.js")]),i=e(n,{semantic:{primary:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#4C1D95",900:"#2E1065",950:"#1E0A4D"}}});t.setThemeConfig({theme:{preset:i,options:{darkModeSelector:".app-dark"}}})}),{provide:z,useFactory:Ye},{provide:q,useFactory:dt},G(async()=>{let t=s(q),n=s(ee);try{let[e,i]=await Promise.all([t.getPreferences(),t.health()]);await Promise.all([_t({consentEnabled:e.telemetry.errorsEnabled,release:i.implVersion?`skill-map-cli@${i.implVersion}`:null,environment:e.telemetry.environment}),et({consentEnabled:e.telemetry.usageUiEnabled,distinctId:e.telemetry.anonymousId})]),tt({environment:e.telemetry.environment}),n.syncTheme()}catch{}}),G(()=>{Ht(s(j),s(pe),s(Y))}),G(()=>{s(ht),s(Ge),s(ee)})]};var K={toggleToAuto:"Switch to auto theme (follow system)",toggleToLight:"Switch to light theme",toggleToDark:"Switch to dark theme",currentAuto:"Auto theme (follows system)",currentLight:"Light theme",currentDark:"Dark theme"};var xt={body:"You are viewing a static demo of skill-map's UI. Install it:",installCommand:"npm i -g @skill-map/cli",homeCta:"\u2190 Back to skill-map.ai",homeHref:"/",dismissAria:"Dismiss demo banner"};function Qt(t,n){if(t&1){let e=O();d(0,"div",0),x(1,"span",1),d(2,"p",2),g(3),d(4,"code",3),g(5),p()(),d(6,"a",4),g(7),p(),d(8,"p-button",5),S("onClick",function(){T(e);let r=f();return R(r.dismiss())}),p()()}if(t&2){let e=f();a(3),P(" ",e.texts.body," "),a(2),_(e.texts.installCommand),a(),b("href",e.texts.homeHref,ne),a(),_(e.texts.homeCta),a(),b("ariaLabel",e.texts.dismissAria)("text",!0)("rounded",!0)}}var Pt="sm.demoBannerDismissed",wt=(()=>{class t{mode=s(z);texts=xt;dismissed=L(this.readDismissed());visible=c(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(Pt,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(Pt)==="1"}catch{return!1}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-demo-banner"]],decls:1,vars:1,consts:[["role","status","data-testid","demo-banner",1,"demo-banner"],["aria-hidden","true",1,"demo-banner__icon","fa-solid","fa-circle-info"],[1,"demo-banner__body"],["data-testid","demo-banner-install",1,"demo-banner__cmd"],["data-testid","demo-banner-home",1,"demo-banner__home",3,"href"],["icon","fa-solid fa-xmark","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(i,r){i&1&&C(0,Qt,9,7,"div",0),i&2&&k(r.visible()?0:-1)},dependencies:[de,le],styles:["[_nghost-%COMP%]{display:block}.demo-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--p-highlight-background);color:var(--p-text-color);font-size:.875rem}.demo-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--p-primary-color)}.demo-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.demo-banner__cmd[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-md);padding:.05rem .4rem;font-size:.85em;margin-left:.25rem}.demo-banner__home[_ngcontent-%COMP%]{color:var(--p-primary-color);font-weight:500;text-decoration:none;white-space:nowrap}.demo-banner__home[_ngcontent-%COMP%]:hover, .demo-banner__home[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}"],changeDetection:0})}return t})();var St={bodyAtLimit:(t,n)=>`Your graph has ${t} ${t===1?"node":"nodes"}, at the recommended limit of ${n}. Past this point the map gets hard to read and analyzer signal degrades.`,bodyOverLimit:(t,n,e)=>`Your graph has ${t} nodes, over the recommended limit of ${n} (currently allowed via --max-nodes ${e}). Past this point the map gets hard to read and analyzer signal degrades.`,bodyCapped:(t,n,e)=>`Scan capped at ${n} ${n===1?"node":"nodes"} (${e==="override"?"--max-nodes":"scan.maxNodes"}). The walker stopped at ${t} ${t===1?"file":"files"}, additional files were dropped. The map and analyzers only see what made it through.`,cta:"Edit .skillmapignore",ctaAria:"Open Settings to edit ignored patterns"};function Yt(t,n){if(t&1){let e=O();N(0,"div",0),Z(1,"span",1),N(2,"p",2),g(3),W(),N(4,"button",3),ie("click",function(){T(e);let r=f();return R(r.onCta())}),g(5),W()()}if(t&2){let e=f();v("data-mode",e.state().mode),a(3),P(" ",e.state().body," "),a(),v("aria-label",e.texts.ctaAria),a(),P(" ",e.texts.cta," ")}}var Mt=(()=>{class t{loader=s(j);texts=St;openSettings=re();state=c(()=>{let e=this.loader.scan();if(!e)return{mode:"hidden",body:""};let i=e.recommendedNodeLimit;if(i===void 0)return{mode:"hidden",body:""};let r=e.overrideMaxNodes??null,o=r??i,l=e.stats.filesWalked,u=e.stats.nodesCount;return l>o?{mode:"capped",body:this.texts.bodyCapped(l,o,r!==null?"override":"setting")}:u<i?{mode:"hidden",body:""}:r!==null&&u>i?{mode:"overLimit",body:this.texts.bodyOverLimit(u,i,r)}:{mode:"atLimit",body:this.texts.bodyAtLimit(u,i)}});visible=c(()=>this.state().mode!=="hidden");onCta(){this.openSettings.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-oversized-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","oversized-banner",1,"oversized-banner"],["aria-hidden","true",1,"oversized-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","oversized-banner-body",1,"oversized-banner__body"],["type","button","data-testid","oversized-banner-cta",1,"oversized-banner__cta",3,"click"]],template:function(i,r){i&1&&C(0,Yt,6,4,"div",0),i&2&&k(r.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.oversized-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem}.oversized-banner[data-mode=capped][_ngcontent-%COMP%]{background:var(--sm-severity-error-bg);color:var(--sm-severity-error)}.oversized-banner[data-mode=overLimit][_ngcontent-%COMP%], .oversized-banner[data-mode=atLimit][_ngcontent-%COMP%]{background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.oversized-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem}.oversized-banner[data-mode=capped][_ngcontent-%COMP%] .oversized-banner__icon[_ngcontent-%COMP%]{color:var(--sm-severity-error)}.oversized-banner[data-mode=overLimit][_ngcontent-%COMP%] .oversized-banner__icon[_ngcontent-%COMP%], .oversized-banner[data-mode=atLimit][_ngcontent-%COMP%] .oversized-banner__icon[_ngcontent-%COMP%]{color:var(--sm-severity-warn)}.oversized-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.oversized-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.oversized-banner__cta[_ngcontent-%COMP%]:hover, .oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Tt={headline:t=>`${t} ${t===1?"file":"files"} skipped, ${t===1?"it exceeds":"they exceed"} the max file size.`,more:"...",seeConsole:"See the full list in the console.",cta:"Open Project settings",ctaAria:"Open Settings to adjust the max file size or ignore patterns"};function Zt(t,n){if(t&1&&(d(0,"span",4),g(1),p()),t&2){let e=f(2);b("pTooltip",e.state().tooltip),a(),_(e.texts.more)}}function qt(t,n){if(t&1){let e=O();d(0,"div",0),x(1,"span",1),d(2,"p",2),g(3),d(4,"span",3),g(5),p(),C(6,Zt,2,2,"span",4),p(),d(7,"button",5),S("click",function(){T(e);let r=f();return R(r.onCta())}),g(8),p()()}if(t&2){let e=f();a(3),P(" ",e.texts.headline(e.state().count)," "),a(2),P(" ",e.state().first," "),a(),k(e.state().hasMore?6:-1),a(),v("aria-label",e.texts.ctaAria),a(),P(" ",e.texts.cta," ")}}var en=5,Rt=(()=>{class t{loader=s(j);texts=Tt;openSettings=re();state=c(()=>{let e=this.loader.scan(),i=e?.oversizedFiles??[],r=e?.stats?.filesOversized??i.length;if(r<=0)return{visible:!1,count:0,first:"",hasMore:!1,tooltip:""};let o=i[0]?this.describe(i[0]):"",l=r>1,u="";if(l){let M=i.slice(1);r-1>en?u=this.texts.seeConsole:u=M.map(y=>this.describe(y)).join(`
|
|
4
|
-
`)}return{visible:!0,count:r,first:o,hasMore:l,tooltip:u}});visible=c(()=>this.state().visible);describe(e){return`${e.path.split("/").pop()??e.path} (${Xe(e.bytes)})`}onCta(){this.openSettings.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-skipped-files-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","skipped-files-banner",1,"skipped-files-banner"],["aria-hidden","true",1,"skipped-files-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","skipped-files-banner-body",1,"skipped-files-banner__body"],["data-testid","skipped-files-banner-first",1,"skipped-files-banner__first"],["data-testid","skipped-files-banner-more",1,"skipped-files-banner__more",3,"pTooltip"],["type","button","data-testid","skipped-files-banner-cta",1,"skipped-files-banner__cta",3,"click"]],template:function(i,r){i&1&&C(0,qt,9,5,"div",0),i&2&&k(r.visible()?0:-1)},dependencies:[ae,se],styles:["[_nghost-%COMP%]{display:block}.skipped-files-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.skipped-files-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.skipped-files-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.skipped-files-banner__first[_ngcontent-%COMP%]{font-weight:600}.skipped-files-banner__more[_ngcontent-%COMP%]{font-weight:600;cursor:help}.skipped-files-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.skipped-files-banner__cta[_ngcontent-%COMP%]:hover, .skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Ot={body:"Connection to the server was lost. Live updates are paused.",reconnectCta:"Reconnect",reconnectAria:"Retry the connection to the server"};function tn(t,n){if(t&1){let e=O();N(0,"div",0),Z(1,"span",1),N(2,"p",2),g(3),W(),N(4,"button",3),ie("click",function(){T(e);let r=f();return R(r.reconnect())}),Z(5,"span",4),g(6),W()()}if(t&2){let e=f();a(3),_(e.texts.body),a(),v("aria-label",e.texts.reconnectAria),a(2),P(" ",e.texts.reconnectCta," ")}}var Et=(()=>{class t{mode=s(z);ws=s(F);texts=Ot;visible=c(()=>this.mode==="live"&&this.ws.connectionState()==="lost");reconnect(){this.ws.reconnect()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-connection-banner"]],decls:1,vars:1,consts:[["role","alert","data-testid","connection-banner",1,"connection-banner"],["aria-hidden","true",1,"connection-banner__icon","fa-solid","fa-plug-circle-xmark"],[1,"connection-banner__body"],["type","button","data-testid","connection-banner-reconnect",1,"connection-banner__cta",3,"click"],["aria-hidden","true",1,"fa-solid","fa-rotate-right"]],template:function(i,r){i&1&&C(0,tn,7,3,"div",0),i&2&&k(r.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.connection-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--sm-severity-error-bg);color:var(--sm-severity-error);font-size:.875rem}.connection-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-error)}.connection-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.connection-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.connection-banner__cta[_ngcontent-%COMP%]:hover, .connection-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.connection-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var nn=()=>[import("./chunk-MWDBZ2BE.js").then(t=>t.SettingsModal)];function rn(t,n){if(t&1&&(d(0,"span",11),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),v("aria-label",e.texts.devChipA11y),a(),_(e.texts.devChip)}}function on(t,n){if(t&1&&(d(0,"span",12),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),v("aria-label",e.versionA11y()),a(),_(e.versionLabel())}}function sn(t,n){if(t&1&&(d(0,"span",24),g(1),p()),t&2){let e=n,i=f();Me("--provider-color",e.color)("--provider-color-dark",e.colorDark??e.color),b("pTooltip",i.texts.lensChipTooltip(e.label)),v("aria-label",i.texts.lensChipA11y(e.label)),a(),_(e.label)}}function an(t,n){if(t&1){let e=O();d(0,"button",25),S("click",function(){T(e);let r=f();return R(r.copyUpdateCommand())}),x(1,"i",26),d(2,"span"),g(3),p()(),d(4,"a",27),x(5,"i",28),p()}if(t&2){let e=f();b("pTooltip",e.updateChipTooltip()),v("aria-label",e.updateChipA11y()),a(),Te(e.updateChipIcon()),a(2),_(e.updateChipText()),a(),b("href",e.npmLinkUrl,ne)("pTooltip",e.npmLinkTooltip),v("aria-label",e.npmLinkA11y)}}function ln(t,n){if(t&1&&(d(0,"p",15)(1,"bdi",29),g(2),p()()),t&2){let e=n;v("title",e),a(2),_(e)}}function dn(t,n){if(t&1){let e=O();d(0,"sm-settings-modal",30),S("visibleChange",function(r){T(e);let o=f();return R(o.onSettingsVisibleChange(r))}),p()}if(t&2){let e=f();b("visible",e.settingsOpen())}}var It=(()=>{class t{loader=s(j);theme=s(nt);projectInfo=s(Y);providerRegistry=s(B);scanTrigger=s(ot);usageTracker=s(ee);updateCheck=s(pe);texts=A;settingsTexts=rt;settingsOpen=L(!1);openSettings(){this.settingsOpen.set(!0),this.usageTracker.trackFeature("settings")}onSettingsVisibleChange(e){this.settingsOpen.set(e),e||this.projectInfo.reloadActiveProvider()}scanning=this.scanTrigger.scanning;scanError=this.scanTrigger.scanError;triggerScan(){return this.scanTrigger.run()}updateChipCopied=L(!1);updateChipText=c(()=>this.updateChipCopied()?w.copiedLabel:w.available);updateChipIcon=c(()=>this.updateChipCopied()?"pi pi-check":"pi pi-download");updateChipTooltip=c(()=>this.updateChipCopied()?w.copiedTooltip:w.tooltip(this.updateCheck.latest()??""));updateChipA11y=c(()=>w.a11yLabel(this.updateCheck.latest()??""));npmLinkUrl=w.npmLinkUrl;npmLinkTooltip=w.npmLinkTooltip;npmLinkA11y=w.npmLinkA11y;async copyUpdateCommand(){try{await navigator.clipboard.writeText(w.copyCommand),this.updateChipCopied.set(!0),setTimeout(()=>this.updateChipCopied.set(!1),2e3)}catch{}}versionLabel=c(()=>w.versionLabel(this.updateCheck.current()??""));versionTooltip=c(()=>w.versionTooltip(this.updateCheck.current()??""));versionA11y=c(()=>w.versionA11yLabel(this.updateCheck.current()??""));isDevBuild=this.projectInfo.dev;lensChip=c(()=>this.providerRegistry.lensChip(this.projectInfo.activeProvider()));count=this.loader.count;linkAnalysis=c(()=>it(this.loader.nodes(),this.loader.scan()));linkCount=c(()=>this.linkAnalysis().raw);mapInfoTooltip=c(()=>A.badge.mapInfo(this.count(),this.linkAnalysis()));mapInfoA11y=c(()=>A.badge.mapInfoA11y(this.count(),this.linkAnalysis()));rootLabel=c(()=>{let e=this.projectInfo.cwd();if(e&&e!==".")return e;let i=this.loader.scan()?.roots??[];if(i.length===0)return"";let r=i[0].replace(/[\\/]+$/,"");return!r||r==="."?"":r});isDevMode=Re();themeMode=this.theme.mode;markSrc=c(()=>this.theme.extraTheme()==="matrix"?"skill-map-mark-matrix.svg":this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=c(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"fa-regular fa-moon"}});themeLabel=c(()=>{switch(this.themeMode()){case"auto":return K.toggleToLight;case"light":return K.toggleToDark;case"dark":return K.toggleToAuto}});themeTooltip=c(()=>{switch(this.themeMode()){case"auto":return K.currentAuto;case"light":return K.currentLight;case"dark":return K.currentDark}});toggleTheme(){this.theme.toggle()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-root"]],decls:39,vars:30,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"fa-solid","fa-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],[3,"openSettings"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["width","32","height","32","priority","","alt","","aria-hidden","true",1,"shell__brand-mark",3,"ngSrc"],["tooltipPosition","bottom","data-testid","shell-dev",1,"shell__dev",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"--provider-color","--provider-color-dark","pTooltip"],[1,"shell__alpha"],["data-testid","shell-root-label",1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["slot","topbar.nav.start",3,"node"],[1,"shell__actions"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true",1,"pi","pi-sync"],["tooltipPosition","left","severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-sliders-h","tooltipPosition","left","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"pTooltip"],["type","button","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"click","pTooltip"],["aria-hidden","true"],["target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-npm-link",1,"shell__update-npm-link",3,"href","pTooltip"],["aria-hidden","true",1,"pi","pi-external-link"],["dir","ltr"],[3,"visibleChange","visible"]],template:function(i,r){if(i&1&&(d(0,"div",0)(1,"div",1),x(2,"i",2),d(3,"h2",3),g(4),p(),d(5,"p",4),g(6),p(),d(7,"p",5),g(8),p()()(),d(9,"div",6),x(10,"sm-demo-banner"),d(11,"sm-oversized-banner",7),S("openSettings",function(){return r.openSettings()}),p(),d(12,"sm-skipped-files-banner",7),S("openSettings",function(){return r.openSettings()}),p(),x(13,"sm-connection-banner"),d(14,"header",8)(15,"div",9),x(16,"img",10),d(17,"div")(18,"h1"),g(19),C(20,rn,2,3,"span",11)(21,on,2,3,"span",12),C(22,sn,2,7,"span",13),d(23,"span",14),g(24),p(),C(25,an,6,8),p(),C(26,ln,3,2,"p",15),p()(),d(27,"nav",16),x(28,"sm-view-contributions-host",17),p(),d(29,"div",18)(30,"button",19),S("click",function(){return r.triggerScan()}),x(31,"i",20),p(),d(32,"p-button",21),S("onClick",function(){return r.toggleTheme()}),p(),d(33,"p-button",22),S("onClick",function(){return r.openSettings()}),p()()(),d(34,"main",23),x(35,"router-outlet"),p(),Pe(36,dn,1,1),we(37,36,nn),p()),i&2){let o,l,u;a(4),_(r.texts.viewportWarning.title),a(2),_(r.texts.viewportWarning.subtitle),a(2),_(r.texts.viewportWarning.body),a(8),b("ngSrc",r.markSrc()),a(3),P(" ",r.texts.brand," "),a(),k(r.isDevBuild()?20:(o=r.updateCheck.current())?21:-1,o),a(2),k((l=r.lensChip())?22:-1,l),a(),v("aria-label",r.texts.alpha),a(),_(r.texts.alpha),a(),k(r.updateCheck.isOutdated()&&!r.isDevMode?25:-1),a(),k((u=r.rootLabel())?26:-1,u),a(),v("aria-label",r.texts.a11y.viewSwitcher),a(),b("node",null),a(2),ue("is-spinning",r.scanning()),b("pTooltip",r.mapInfoTooltip())("disabled",r.scanning()),v("aria-label",r.mapInfoA11y()),a(),ue("pi-spin",r.scanning()),a(),b("icon",r.themeIcon())("ariaLabel",r.themeLabel())("pTooltip",r.themeTooltip())("text",!0)("rounded",!0),a(),b("ariaLabel",r.settingsTexts.a11y.triggerLabel)("pTooltip",r.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),a(4),Se(r.settingsOpen())}},dependencies:[ze,de,le,Ke,ae,se,Je,Oe,wt,Mt,Rt,Et,Ze],styles:['[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--shell-topbar-bg) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__alpha[_ngcontent-%COMP%]{font-family:var(--sm-font-display-brand);font-weight:600;font-size:10px;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:#ad322b;background:#ad322b14;border-radius:var(--sm-radius-sm);padding:4px 8px;margin-left:8px;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle;white-space:nowrap}.app-dark[_nghost-%COMP%] .shell__alpha[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__alpha[_ngcontent-%COMP%]{color:#e07570;background:#cf464024}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-mono);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__dev[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-display-brand);font-size:10px;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a5a00;background:#d69e2e29;vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%]{color:#fbd38d;background:#d69e2e38}.shell__lens[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-size:11px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--provider-color);background:color-mix(in srgb,var(--provider-color) 14%,transparent);vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%]{color:var(--provider-color-dark);background:color-mix(in srgb,var(--provider-color-dark) 24%,transparent)}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:var(--sm-radius-pill);text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__update-npm-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:3px 4px;color:var(--p-primary-color);text-decoration:none;border-radius:var(--sm-radius-pill);transition:color .12s ease,background-color .12s ease;vertical-align:middle}.shell__update-npm-link[_ngcontent-%COMP%]:hover, .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-700);background:var(--p-primary-50)}.shell__update-npm-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]{color:var(--p-primary-300)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-200);background:#ffffff0a}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase;max-width:40rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;position:relative}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search.is-open[_ngcontent-%COMP%] .shell__nav-search[_ngcontent-%COMP%]{color:var(--shell-topbar-text-strong)}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]{position:relative;color:var(--shell-topbar-text-strong)}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]:after{content:"";position:absolute;top:.45rem;right:.45rem;width:6px;height:6px;border-radius:50%;background:var(--p-primary-color)}.shell__search-input[_ngcontent-%COMP%]{width:240px;height:2.25rem}.shell__search-clear[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;padding:0;border:none;border-radius:50%;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;line-height:1}.shell__search-clear[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;--p-button-text-secondary-color: var(--shell-topbar-text-muted);--p-button-text-secondary-hover-color: var(--shell-topbar-text-strong);--p-button-text-secondary-hover-background: var(--shell-topbar-hover-bg);--p-button-text-secondary-active-color: var(--shell-topbar-text-strong);--p-button-text-secondary-active-background: var(--shell-topbar-hover-bg)}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--sm-radius-pill);background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{max-width:26rem}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}'],changeDetection:0})}return t})();Ee(It,kt).catch(t=>console.error(t));
|
|
4
|
+
`)}return{visible:!0,count:r,first:o,hasMore:l,tooltip:u}});visible=c(()=>this.state().visible);describe(e){return`${e.path.split("/").pop()??e.path} (${Xe(e.bytes)})`}onCta(){this.openSettings.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-skipped-files-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","skipped-files-banner",1,"skipped-files-banner"],["aria-hidden","true",1,"skipped-files-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","skipped-files-banner-body",1,"skipped-files-banner__body"],["data-testid","skipped-files-banner-first",1,"skipped-files-banner__first"],["data-testid","skipped-files-banner-more",1,"skipped-files-banner__more",3,"pTooltip"],["type","button","data-testid","skipped-files-banner-cta",1,"skipped-files-banner__cta",3,"click"]],template:function(i,r){i&1&&C(0,qt,9,5,"div",0),i&2&&k(r.visible()?0:-1)},dependencies:[ae,se],styles:["[_nghost-%COMP%]{display:block}.skipped-files-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.skipped-files-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.skipped-files-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.skipped-files-banner__first[_ngcontent-%COMP%]{font-weight:600}.skipped-files-banner__more[_ngcontent-%COMP%]{font-weight:600;cursor:help}.skipped-files-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.skipped-files-banner__cta[_ngcontent-%COMP%]:hover, .skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Ot={body:"Connection to the server was lost. Live updates are paused.",reconnectCta:"Reconnect",reconnectAria:"Retry the connection to the server"};function tn(t,n){if(t&1){let e=O();N(0,"div",0),Z(1,"span",1),N(2,"p",2),g(3),W(),N(4,"button",3),ie("click",function(){T(e);let r=f();return R(r.reconnect())}),Z(5,"span",4),g(6),W()()}if(t&2){let e=f();a(3),_(e.texts.body),a(),v("aria-label",e.texts.reconnectAria),a(2),P(" ",e.texts.reconnectCta," ")}}var Et=(()=>{class t{mode=s(z);ws=s(F);texts=Ot;visible=c(()=>this.mode==="live"&&this.ws.connectionState()==="lost");reconnect(){this.ws.reconnect()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-connection-banner"]],decls:1,vars:1,consts:[["role","alert","data-testid","connection-banner",1,"connection-banner"],["aria-hidden","true",1,"connection-banner__icon","fa-solid","fa-plug-circle-xmark"],[1,"connection-banner__body"],["type","button","data-testid","connection-banner-reconnect",1,"connection-banner__cta",3,"click"],["aria-hidden","true",1,"fa-solid","fa-rotate-right"]],template:function(i,r){i&1&&C(0,tn,7,3,"div",0),i&2&&k(r.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.connection-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--sm-severity-error-bg);color:var(--sm-severity-error);font-size:.875rem}.connection-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-error)}.connection-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.connection-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.connection-banner__cta[_ngcontent-%COMP%]:hover, .connection-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.connection-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var nn=()=>[import("./chunk-PRP3JSUU.js").then(t=>t.SettingsModal)];function rn(t,n){if(t&1&&(d(0,"span",11),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),v("aria-label",e.texts.devChipA11y),a(),_(e.texts.devChip)}}function on(t,n){if(t&1&&(d(0,"span",12),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),v("aria-label",e.versionA11y()),a(),_(e.versionLabel())}}function sn(t,n){if(t&1&&(d(0,"span",24),g(1),p()),t&2){let e=n,i=f();Me("--provider-color",e.color)("--provider-color-dark",e.colorDark??e.color),b("pTooltip",i.texts.lensChipTooltip(e.label)),v("aria-label",i.texts.lensChipA11y(e.label)),a(),_(e.label)}}function an(t,n){if(t&1){let e=O();d(0,"button",25),S("click",function(){T(e);let r=f();return R(r.copyUpdateCommand())}),x(1,"i",26),d(2,"span"),g(3),p()(),d(4,"a",27),x(5,"i",28),p()}if(t&2){let e=f();b("pTooltip",e.updateChipTooltip()),v("aria-label",e.updateChipA11y()),a(),Te(e.updateChipIcon()),a(2),_(e.updateChipText()),a(),b("href",e.npmLinkUrl,ne)("pTooltip",e.npmLinkTooltip),v("aria-label",e.npmLinkA11y)}}function ln(t,n){if(t&1&&(d(0,"p",15)(1,"bdi",29),g(2),p()()),t&2){let e=n;v("title",e),a(2),_(e)}}function dn(t,n){if(t&1){let e=O();d(0,"sm-settings-modal",30),S("visibleChange",function(r){T(e);let o=f();return R(o.onSettingsVisibleChange(r))}),p()}if(t&2){let e=f();b("visible",e.settingsOpen())}}var It=(()=>{class t{loader=s(j);theme=s(nt);projectInfo=s(Y);providerRegistry=s(B);scanTrigger=s(ot);usageTracker=s(ee);updateCheck=s(pe);texts=A;settingsTexts=rt;settingsOpen=L(!1);openSettings(){this.settingsOpen.set(!0),this.usageTracker.trackFeature("settings")}onSettingsVisibleChange(e){this.settingsOpen.set(e),e||this.projectInfo.reloadActiveProvider()}scanning=this.scanTrigger.scanning;scanError=this.scanTrigger.scanError;triggerScan(){return this.scanTrigger.run()}updateChipCopied=L(!1);updateChipText=c(()=>this.updateChipCopied()?w.copiedLabel:w.available);updateChipIcon=c(()=>this.updateChipCopied()?"pi pi-check":"pi pi-download");updateChipTooltip=c(()=>this.updateChipCopied()?w.copiedTooltip:w.tooltip(this.updateCheck.latest()??""));updateChipA11y=c(()=>w.a11yLabel(this.updateCheck.latest()??""));npmLinkUrl=w.npmLinkUrl;npmLinkTooltip=w.npmLinkTooltip;npmLinkA11y=w.npmLinkA11y;async copyUpdateCommand(){try{await navigator.clipboard.writeText(w.copyCommand),this.updateChipCopied.set(!0),setTimeout(()=>this.updateChipCopied.set(!1),2e3)}catch{}}versionLabel=c(()=>w.versionLabel(this.updateCheck.current()??""));versionTooltip=c(()=>w.versionTooltip(this.updateCheck.current()??""));versionA11y=c(()=>w.versionA11yLabel(this.updateCheck.current()??""));isDevBuild=this.projectInfo.dev;lensChip=c(()=>this.providerRegistry.lensChip(this.projectInfo.activeProvider()));count=this.loader.count;linkAnalysis=c(()=>it(this.loader.nodes(),this.loader.scan()));linkCount=c(()=>this.linkAnalysis().raw);mapInfoTooltip=c(()=>A.badge.mapInfo(this.count(),this.linkAnalysis()));mapInfoA11y=c(()=>A.badge.mapInfoA11y(this.count(),this.linkAnalysis()));rootLabel=c(()=>{let e=this.projectInfo.cwd();if(e&&e!==".")return e;let i=this.loader.scan()?.roots??[];if(i.length===0)return"";let r=i[0].replace(/[\\/]+$/,"");return!r||r==="."?"":r});isDevMode=Re();themeMode=this.theme.mode;markSrc=c(()=>this.theme.extraTheme()==="matrix"?"skill-map-mark-matrix.svg":this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=c(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"fa-regular fa-moon"}});themeLabel=c(()=>{switch(this.themeMode()){case"auto":return K.toggleToLight;case"light":return K.toggleToDark;case"dark":return K.toggleToAuto}});themeTooltip=c(()=>{switch(this.themeMode()){case"auto":return K.currentAuto;case"light":return K.currentLight;case"dark":return K.currentDark}});toggleTheme(){this.theme.toggle()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=I({type:t,selectors:[["sm-root"]],decls:39,vars:30,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"fa-solid","fa-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],[3,"openSettings"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["width","32","height","32","priority","","alt","","aria-hidden","true",1,"shell__brand-mark",3,"ngSrc"],["tooltipPosition","bottom","data-testid","shell-dev",1,"shell__dev",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"--provider-color","--provider-color-dark","pTooltip"],[1,"shell__alpha"],["data-testid","shell-root-label",1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["slot","topbar.nav.start",3,"node"],[1,"shell__actions"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true",1,"pi","pi-sync"],["tooltipPosition","left","severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-sliders-h","tooltipPosition","left","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"pTooltip"],["type","button","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"click","pTooltip"],["aria-hidden","true"],["target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-npm-link",1,"shell__update-npm-link",3,"href","pTooltip"],["aria-hidden","true",1,"pi","pi-external-link"],["dir","ltr"],[3,"visibleChange","visible"]],template:function(i,r){if(i&1&&(d(0,"div",0)(1,"div",1),x(2,"i",2),d(3,"h2",3),g(4),p(),d(5,"p",4),g(6),p(),d(7,"p",5),g(8),p()()(),d(9,"div",6),x(10,"sm-demo-banner"),d(11,"sm-oversized-banner",7),S("openSettings",function(){return r.openSettings()}),p(),d(12,"sm-skipped-files-banner",7),S("openSettings",function(){return r.openSettings()}),p(),x(13,"sm-connection-banner"),d(14,"header",8)(15,"div",9),x(16,"img",10),d(17,"div")(18,"h1"),g(19),C(20,rn,2,3,"span",11)(21,on,2,3,"span",12),C(22,sn,2,7,"span",13),d(23,"span",14),g(24),p(),C(25,an,6,8),p(),C(26,ln,3,2,"p",15),p()(),d(27,"nav",16),x(28,"sm-view-contributions-host",17),p(),d(29,"div",18)(30,"button",19),S("click",function(){return r.triggerScan()}),x(31,"i",20),p(),d(32,"p-button",21),S("onClick",function(){return r.toggleTheme()}),p(),d(33,"p-button",22),S("onClick",function(){return r.openSettings()}),p()()(),d(34,"main",23),x(35,"router-outlet"),p(),Pe(36,dn,1,1),we(37,36,nn),p()),i&2){let o,l,u;a(4),_(r.texts.viewportWarning.title),a(2),_(r.texts.viewportWarning.subtitle),a(2),_(r.texts.viewportWarning.body),a(8),b("ngSrc",r.markSrc()),a(3),P(" ",r.texts.brand," "),a(),k(r.isDevBuild()?20:(o=r.updateCheck.current())?21:-1,o),a(2),k((l=r.lensChip())?22:-1,l),a(),v("aria-label",r.texts.alpha),a(),_(r.texts.alpha),a(),k(r.updateCheck.isOutdated()&&!r.isDevMode?25:-1),a(),k((u=r.rootLabel())?26:-1,u),a(),v("aria-label",r.texts.a11y.viewSwitcher),a(),b("node",null),a(2),ue("is-spinning",r.scanning()),b("pTooltip",r.mapInfoTooltip())("disabled",r.scanning()),v("aria-label",r.mapInfoA11y()),a(),ue("pi-spin",r.scanning()),a(),b("icon",r.themeIcon())("ariaLabel",r.themeLabel())("pTooltip",r.themeTooltip())("text",!0)("rounded",!0),a(),b("ariaLabel",r.settingsTexts.a11y.triggerLabel)("pTooltip",r.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),a(4),Se(r.settingsOpen())}},dependencies:[ze,de,le,Ke,ae,se,Je,Oe,wt,Mt,Rt,Et,Ze],styles:['[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--shell-topbar-bg) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__alpha[_ngcontent-%COMP%]{font-family:var(--sm-font-display-brand);font-weight:600;font-size:10px;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:#ad322b;background:#ad322b14;border-radius:var(--sm-radius-sm);padding:4px 8px;margin-left:8px;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle;white-space:nowrap}.app-dark[_nghost-%COMP%] .shell__alpha[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__alpha[_ngcontent-%COMP%]{color:#e07570;background:#cf464024}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-mono);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__dev[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-display-brand);font-size:10px;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a5a00;background:#d69e2e29;vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%]{color:#fbd38d;background:#d69e2e38}.shell__lens[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-size:11px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--provider-color);background:color-mix(in srgb,var(--provider-color) 14%,transparent);vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%]{color:var(--provider-color-dark);background:color-mix(in srgb,var(--provider-color-dark) 24%,transparent)}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:var(--sm-radius-pill);text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__update-npm-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:3px 4px;color:var(--p-primary-color);text-decoration:none;border-radius:var(--sm-radius-pill);transition:color .12s ease,background-color .12s ease;vertical-align:middle}.shell__update-npm-link[_ngcontent-%COMP%]:hover, .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-700);background:var(--p-primary-50)}.shell__update-npm-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]{color:var(--p-primary-300)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-200);background:#ffffff0a}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase;max-width:40rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;position:relative}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search.is-open[_ngcontent-%COMP%] .shell__nav-search[_ngcontent-%COMP%]{color:var(--shell-topbar-text-strong)}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]{position:relative;color:var(--shell-topbar-text-strong)}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]:after{content:"";position:absolute;top:.45rem;right:.45rem;width:6px;height:6px;border-radius:50%;background:var(--p-primary-color)}.shell__search-input[_ngcontent-%COMP%]{width:240px;height:2.25rem}.shell__search-clear[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;padding:0;border:none;border-radius:50%;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;line-height:1}.shell__search-clear[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;--p-button-text-secondary-color: var(--shell-topbar-text-muted);--p-button-text-secondary-hover-color: var(--shell-topbar-text-strong);--p-button-text-secondary-hover-background: var(--shell-topbar-hover-bg);--p-button-text-secondary-active-color: var(--shell-topbar-text-strong);--p-button-text-secondary-active-background: var(--shell-topbar-hover-bg)}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--sm-radius-pill);background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{max-width:26rem}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}'],changeDetection:0})}return t})();Ee(It,kt).catch(t=>console.error(t));
|