@deepseek-insight/dsi 0.6.8 → 0.6.10

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.
Files changed (45) hide show
  1. package/.agents/skills/dsi-plugin-rack/rack.d.mts +35 -0
  2. package/.agents/skills/dsi-plugin-rack/rack.mjs +168 -26
  3. package/build/client/_app/immutable/assets/0.CRU0GiZX.css +2 -0
  4. package/build/client/_app/immutable/assets/{2.BGqV97Jd.css → 2.BuaCdYrs.css} +1 -1
  5. package/build/client/_app/immutable/chunks/B7sQH3rV.js +1 -0
  6. package/build/client/_app/immutable/chunks/{CZajmeaf.js → Dg3LIDOQ.js} +1 -1
  7. package/build/client/_app/immutable/chunks/{ipGk-mTd.js → XOquLDe4.js} +2 -2
  8. package/build/client/_app/immutable/chunks/ivdzpE2c.js +1 -0
  9. package/build/client/_app/immutable/entry/{app.DEAFrkJ-.js → app.BTSQLfJD.js} +2 -2
  10. package/build/client/_app/immutable/entry/start.DMTgnn1w.js +1 -0
  11. package/build/client/_app/immutable/nodes/{1.BM2g39Jr.js → 1.Bj5dhQm8.js} +1 -1
  12. package/build/client/_app/immutable/nodes/2.D2grr0LI.js +337 -0
  13. package/build/client/_app/version.json +1 -1
  14. package/build/handler.js +4 -4
  15. package/build/index.js +4 -4
  16. package/build/server/chunks/chunks/{engine.js-CrdWRSwf.js → engine.js-1gYqtdBP.js} +17 -2
  17. package/build/server/chunks/chunks/{internal.js-DrVZK6tf.js → internal.js-CiymEM9G.js} +2 -2
  18. package/build/server/chunks/chunks/{state.js-C_zC7v8L.js → state.js-Dve2UFKe.js} +2 -2
  19. package/build/server/chunks/entries/endpoints/api/plugins/apply/{_server.ts.js-CpO--Jwf.js → _server.ts.js-BNEUWbaf.js} +2 -2
  20. package/build/server/chunks/entries/endpoints/api/plugins/reload/{_server.ts.js-BACFXWMj.js → _server.ts.js-Ct28d7_t.js} +2 -2
  21. package/build/server/chunks/entries/endpoints/api/plugins/snapshot/{_server.ts.js-BJg0hLlC.js → _server.ts.js-DswGIO4S.js} +2 -2
  22. package/build/server/chunks/entries/pages/{_error.svelte.js-BLQNkziv.js → _error.svelte.js-DUc94aLg.js} +3 -3
  23. package/build/server/chunks/entries/pages/{_page.svelte.js-U6RBvo4b.js → _page.svelte.js-CGKKJjvq.js} +182 -9
  24. package/build/server/chunks/{handler-B_uG0xBL.js → handler-DndMFIB-.js} +3 -3
  25. package/build/server/chunks/{index.js-CFMhxqkR.js → index.js-XCtYQ9iw.js} +2 -2
  26. package/build/server/chunks/{manifest.js-rflC1wxY.js → manifest.js-B6QH7eda.js} +8 -8
  27. package/build/server/chunks/nodes/{0.js-PpYt5eF3.js → 0.js-B0560RI0.js} +3 -3
  28. package/build/server/chunks/nodes/1.js-DgkiAL8m.js +9 -0
  29. package/build/server/chunks/nodes/{2.js-Bkg7QRk0.js → 2.js-DiZQ86Is.js} +4 -4
  30. package/package.json +1 -1
  31. package/skills/dsi-add-plugin/SKILL.md +53 -0
  32. package/skills/dsi-add-plugin/references/allowbuilds-template.md +55 -0
  33. package/skills/dsi-add-plugin/references/checklist.md +98 -0
  34. package/skills/dsi-add-plugin/references/verification.md +67 -0
  35. package/skills/dsi-rca/SKILL.md +103 -0
  36. package/skills/dsi-rca/references/mermaid-rules.md +46 -0
  37. package/skills/dsi-rca/references/rca-template.md +88 -0
  38. package/template/.dsi/resources/plugins-reff.md +5 -1
  39. package/build/client/_app/immutable/assets/0.Cz4GQ8ND.css +0 -2
  40. package/build/client/_app/immutable/chunks/CFUMLnMa.js +0 -1
  41. package/build/client/_app/immutable/chunks/CZ6XrzVa.js +0 -1
  42. package/build/client/_app/immutable/entry/start.B_n-sOmN.js +0 -1
  43. package/build/client/_app/immutable/nodes/2.BmfcXZrQ.js +0 -332
  44. package/build/server/chunks/nodes/1.js-BQCqfRee.js +0 -9
  45. /package/build/client/_app/immutable/nodes/{0.CKr_pvH3.js → 0.k1Ikzbp6.js} +0 -0
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: dsi-add-plugin
3
+ description: Use when the user runs /dsi-add-plugin or asks to install/add a dsh plugin or an agent-preset into the web profile — covers the five install gates (allowBuilds, prepare, D4 manifest match, bundles mount, RPC verify), local-link vs git-hosted vs npm sources, and the post-install checklist that catches the bundles clobber.
4
+ ---
5
+
6
+ # DSI Add Plugin — the five-gate install playbook
7
+
8
+ Installing a plugin or agent-preset into a dsh profile crosses **five gates**.
9
+ Every install failure this surface has ever produced was one gate failing
10
+ closed while every earlier gate already passed (RCA 2026-10-06, "The Install
11
+ That Fixed Its Way Forward"). Walk the gates IN ORDER; never retry an install
12
+ after a fix without checking the NEXT gate proactively — each fix historically
13
+ bought exactly one gate.
14
+
15
+ Read [references/checklist.md](references/checklist.md) first — it is the
16
+ step-by-step procedure with the exact commands. The other references are
17
+ lookup tables you open when a specific gate bites:
18
+
19
+ - [references/checklist.md](references/checklist.md) — the ordered procedure
20
+ (source classification → gates 1-5 → verify).
21
+ - [references/allowbuilds-template.md](references/allowbuilds-template.md) —
22
+ allowBuilds snippet shapes: exact sha key, wildcard bet, and the placeholder
23
+ trap to grep for.
24
+ - [references/verification.md](references/verification.md) — verification
25
+ commands: offline composition dump, live `agentPresets/list` RPC (with the
26
+ cookie mint), rack snapshot refresh.
27
+
28
+ ## The gates, one line each
29
+
30
+ 1. **Source** — classify what you are installing: npm package, git-hosted
31
+ repo, or local directory (link dep). The source decides which later gates
32
+ apply.
33
+ 2. **allowBuilds (profile)** — the profile's `pnpm-workspace.yaml` must
34
+ allow every git-hosted package's build scripts. Keys for git packages are
35
+ sha-pinned: a new release means a new key.
36
+ 3. **allowBuilds (package)** — a git-hosted package's own prepare runs its
37
+ own `pnpm install` under ITS OWN allowlist. Grep BOTH yaml files for
38
+ placeholder text before trusting any boolean.
39
+ 4. **D4 manifest match** — after `dsh plugin add` succeeds, the profile
40
+ manifest must record a dependency whose repo tail matches the reff URL.
41
+ Reff lines point at REPOSITORY ROOTS, never `/tree/` browse pages.
42
+ 5. **bundles mount** — dependencies install, `dsh.profile.bundles` mounts.
43
+ Every `dsh plugin add` REWRITES the bundles array to just the new plugin:
44
+ after any install, re-append every bundle that should still be mounted.
45
+
46
+ ## Hard rules (earned 2026-10-06)
47
+
48
+ - NEVER hand-edit the manifest's `dependencies` for a dsh-managed plugin —
49
+ shell out to `dsh plugin add` (rack D3). Hand-edits are allowed only for
50
+ local link deps and the bundles array.
51
+ - NEVER trust the installer's success message as the finish line; the mount
52
+ and the RPC are the truth (D4).
53
+ - NEVER force-push; a rejected push stops the skill.
@@ -0,0 +1,55 @@
1
+ # allowBuilds — snippet shapes and the placeholder trap
2
+
3
+ Where: `~/.dsh/profiles/web/pnpm-workspace.yaml` (host profile) and the
4
+ SOURCE REPO's own `pnpm-workspace.yaml` (for git-hosted packages — their
5
+ prepare runs under their own allowlist).
6
+
7
+ ## Shapes that work (pnpm 11.7)
8
+
9
+ ```yaml
10
+ allowBuilds:
11
+ # plain package name (local deps, transitive builds)
12
+ esbuild: true
13
+ node-pty: true
14
+ # git-hosted package, exact tarball sha — what the error prints verbatim
15
+ "@deepseek-insight/dsi@https://codeload.github.com/mitmplay/deepseek-insight/tar.gz/de43c9658dd2bc4221b116fc1420be167facb353": true
16
+ # wildcard bet — cover future shas of the same repo
17
+ "@deepseek-insight/dsi@https://codeload.github.com/mitmplay/**": true
18
+ ```
19
+
20
+ Keys with `: ` or spaces in them MUST be quoted.
21
+
22
+ ## The placeholder trap (armed twice, 2026-10-06)
23
+
24
+ Both of these shipped in real yaml files and LOOK set while blocking:
25
+
26
+ ```yaml
27
+ esbuild: set this to true or false # a string, not a boolean — pnpm treats it as not-allowed
28
+ node-pty: set this to true or false
29
+ ```
30
+
31
+ Pre-flight grep — run against BOTH homes before any install:
32
+
33
+ ```bash
34
+ grep -rn 'set this to true' \
35
+ ~/.dsh/profiles/web/pnpm-workspace.yaml \
36
+ <source-repo>/pnpm-workspace.yaml && echo 'PLACEHOLDER FOUND — fix before installing'
37
+ ```
38
+
39
+ ## The sha treadmill (git-hosted packages)
40
+
41
+ For a git tarball, pnpm's identity for the package embeds the commit sha, so
42
+ the exact key expires with the next release of that repo:
43
+
44
+ 1. Fix anything in the source repo → commit → push → mirror.
45
+ 2. The mirror's new HEAD is the new sha — ADD a new exact key for it (keep
46
+ the old ones; they are inert).
47
+ 3. Keep the wildcard entry too; if pnpm honors it, future releases need
48
+ nothing (unproven as of 2026-10-06 — the exact key remains the fallback).
49
+
50
+ ## pnpmapprove-builds note
51
+
52
+ `pnpm approve-builds` exists as the interactive alternative, but the
53
+ skill's path is hand-editing the yaml: the profile's file lives outside any
54
+ git repo and the edit is one line. Commit source-repo allowlist fixes
55
+ normally (they are real repo changes — d67419a is the exemplar).
@@ -0,0 +1,98 @@
1
+ # Install Checklist — five gates, in order
2
+
3
+ Run top to bottom. Every command was executed live on this surface
4
+ (2026-10-06); the failure each step prevents is named beside it.
5
+
6
+ ## 0. Classify the source
7
+
8
+ | Source | Route | Gates that apply |
9
+ |---|---|---|
10
+ | Local directory (agent-preset, bundle patch only) | link dep + manual bundles append (§4a) | 5 only — no prepare, no pnpm gate |
11
+ | Git-hosted repo | `dsh plugin add github:owner/repo --profile web` | 2, 3, 4, 5 |
12
+ | npm package | `dsh plugin add <name> --profile web` | 5 (a bare name that 404s means it is git-only) |
13
+
14
+ An agent-preset is almost always a **local link**: its bundle patch inserts a
15
+ `preset-*` row, and pnpm cannot install a subdirectory of a repo anyway.
16
+
17
+ ## 1. Pre-flight the content (agent-presets only)
18
+
19
+ Before installing, diff the preset's `cordis.patch.yml` against the SHIPPED
20
+ preset of the RUNNING runtime
21
+ (`~/.npm/_npx/*/node_modules/@deepseek-ai/dsh-web-app/presets/*.patch.yml`):
22
+
23
+ - No row mounts a plugin the shipped presets no longer mount
24
+ (2026-10-06: `dsh-workflow-worker-thread` → `dsh-workflow-ptc`).
25
+ - Every row consuming an isolate realm sits INSIDE the group declaring it
26
+ (the `compaction` group owns `command-compact` + `tool-result-pruner`).
27
+ - Every `name:` exists in the runtime's `@deepseek-ai/` packages.
28
+
29
+ ## 2. Gate: allowBuilds (profile) — git-hosted only
30
+
31
+ ```bash
32
+ grep -n 'allowBuilds' -A 10 ~/.dsh/profiles/web/pnpm-workspace.yaml
33
+ ```
34
+
35
+ - The install error prints the EXACT key to add (it embeds the tarball
36
+ commit sha). Add it verbatim, quoted (the URL contains `:`).
37
+ - Also add a wildcard bet:
38
+ `"pkg@https://codeload.github.com/owner/**": true`.
39
+ - See [allowbuilds-template.md](allowbuilds-template.md).
40
+
41
+ ## 3. Gate: allowBuilds (package) — git-hosted only
42
+
43
+ The tarball's prepare runs its own `pnpm install`. Fix the PACKAGE's
44
+ `pnpm-workspace.yaml` in its source repo, commit, push, AND mirror — the
45
+ push moves the tarball sha, which RE-ARMS gate 2 (add the new sha key).
46
+
47
+ ```bash
48
+ grep -n 'set this to true' <repo>/pnpm-workspace.yaml && echo 'PLACEHOLDER FOUND'
49
+ ```
50
+
51
+ Placeholder text where a boolean belongs is a live trap — both homes have
52
+ shipped one (esbuild in DSI, node-pty in the profile).
53
+
54
+ ## 4. Install
55
+
56
+ ### 4a. Local directory (agent-preset)
57
+
58
+ 1. Add to the profile manifest:
59
+ - `dependencies`: `"@local/<name>": "link:<absolute path>"`
60
+ - `dsh.profile.bundles`: append `"@local/<name>"` — APPEND, never let an
61
+ installer rewrite the array.
62
+ 2. `cd ~/.dsh/profiles/web && pnpm install`
63
+ 3. Confirm the link resolved: `ls node_modules/@local/<name>`
64
+
65
+ ### 4b. Git-hosted / npm
66
+
67
+ ```bash
68
+ dsh plugin add github:owner/repo --profile web
69
+ ```
70
+
71
+ Then **re-open the manifest** and re-append every OTHER bundle that should
72
+ still be mounted (gate 5). Historical clobbers: `dsh-agent-teams`,
73
+ `dsh-agency-agents`, `@local/dsh-app-dev-preset` all vanished this way.
74
+
75
+ ## 5. Gate: D4 manifest match — after every `dsh plugin add`
76
+
77
+ ```bash
78
+ node <rack-engine> refresh --reload
79
+ ```
80
+
81
+ Every reff row must come back `installed` consistent with reality, with no
82
+ errors. If a row says "manifest does not record a dependency matching
83
+ <URL>": the reff URL is a browse page (`/tree/`) or its tail does not match
84
+ the recorded dep. Reff lines point at repository roots.
85
+
86
+ ## 6. Restart, then verify the mount
87
+
88
+ A restart is REQUIRED — the running host mounts bundles at boot only.
89
+
90
+ ```bash
91
+ # offline, no restart needed:
92
+ dsh --profile web --dump-config | grep -n 'preset-<id>'
93
+ # live, after restart (see verification.md for the cookie mint):
94
+ POST /api/agentPresets/list → every preset: broken absent
95
+ ```
96
+
97
+ Only the live RPC answers for the session that resumes. `--dump-config`
98
+ proves composition; the RPC proves mount health.
@@ -0,0 +1,67 @@
1
+ # Verification — prove the mount, not the install
2
+
3
+ Two layers: OFFLINE composition (no restart needed) and LIVE RPC (needs the
4
+ restarted host). The offline dump proves the tree composes; only the live RPC
5
+ proves the preset mounts healthy — do both.
6
+
7
+ ## 1. Offline composition dump (any time)
8
+
9
+ ```bash
10
+ dsh --profile web --dump-config 2>&1 | grep -n 'preset-<id>\|id: <preset-id>'
11
+ ```
12
+
13
+ - Found → the bundle patch composes into the tree.
14
+ - Absent → the bundle is not in `dsh.profile.bundles`, or its patch failed to
15
+ load — check the manifest's bundles array FIRST (the clobber), then the
16
+ patch file.
17
+
18
+ ## 2. Mint a session cookie (live RPC auth)
19
+
20
+ The launch token is kept fresh in `~/.dsi/settings.yaml` key
21
+ `dsh.authToken` by `scripts/dsh-web-synced.sh` (it rewrites the file each
22
+ time the host re-announces its URL). Exchange token → cookie:
23
+
24
+ ```bash
25
+ TOK=$(grep -A2 '^dsh:' ~/.dsi/settings.yaml | grep authToken | sed 's/.*authToken: *//')
26
+ C=$(curl -s -i --max-time 5 "http://127.0.0.1:3080/?token=$TOK" -D - -o /dev/null \
27
+ | grep -i '^set-cookie' | head -1 | sed 's/^[Ss]et-[Cc]ookie: //' | cut -d';' -f1)
28
+ ```
29
+
30
+ A 401 here means a stale token (host restarted without the synced script)
31
+ — reopen the URL `dsh web` printed, or rerun the synced launcher.
32
+
33
+ ## 3. Live preset health — agentPresets/list
34
+
35
+ Wire: POST `{base}/api/{method}` with a `client-request` envelope whose
36
+ payload wraps ONE plain-object `args` field (gateway rejects otherwise):
37
+
38
+ ```bash
39
+ curl -s --max-time 20 -X POST \
40
+ -H "Cookie: $C" -H 'content-type: application/json' \
41
+ -d '{"type":"client-request","rpcId":"r1","method":"agentPresets/list","payload":{"args":{}}}' \
42
+ http://127.0.0.1:3080/api/agentPresets/list
43
+ ```
44
+
45
+ PASS: `result.ok: true` and every preset lacks a `broken` key.
46
+ FAIL: the preset carries `broken: "<reason>"` — that string is the root
47
+ cause verbatim (registry sets it at mount,
48
+ `dsh-agent-preset-registry/lib/index.js:517-518`). The settings badge shows
49
+ only a generic label; the wire keeps the reason.
50
+
51
+ Known failures and their reasons:
52
+
53
+ | broken reason | fix |
54
+ |---|---|
55
+ | `<plugin>: never started` | the plugin row names a plugin this runtime no longer starts — diff against the shipped preset, swap the row |
56
+ | `Preset services require isolate realms: <realm>` | move the consuming row INSIDE the group that declares the realm |
57
+ | (badge-only, no reason) | composition never mounted the preset — check bundles array |
58
+
59
+ ## 4. Rack reconciliation (panel truth)
60
+
61
+ ```bash
62
+ node ~/.agents/skills/dsi-plugin-rack/rack.mjs refresh --reload
63
+ ```
64
+
65
+ Every reff row must agree with reality (installed flag + `pkg`), zero
66
+ `errors`. This rewrites the snapshot cache the plugin panel reads — the UI
67
+ heals on its next fetch, no restart.
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: dsi-rca
3
+ description: Use when writing, reviewing, or marking done any RCA in deepseek-insight's dev/kb/rca/ — before drafting the first line and as the final self-audit before claiming the RCA is finished. Enforces the narrative standard the operator set after rejecting a copy-paste RCA — layman glossary, story-driven failure chains, and a mermaid flowchart AND sequence diagram are hard requirements, not style preferences.
4
+ ---
5
+
6
+ # DeepSeek Insight RCA Standard
7
+
8
+ An RCA that reads like release notes is a failed RCA. This skill exists
9
+ because an agent under context rot pastes the commit message into a template
10
+ and calls it a root-cause analysis — no story, no layman path in, no
11
+ diagrams. The operator rejected exactly that (2026-10-06: *"paragraph seems
12
+ like just copy paste, lack of proper narrative, not layman friendly, and
13
+ worst do not have mermaid flow & sequence diagram"*). Everything below is
14
+ that rejection turned into law.
15
+
16
+ The exemplar that defines the bar:
17
+ `dev/kb/rca/2026-10-06 - RCA — The Renderer That Told the Truth Badly
18
+ (Dull Diagrams, Single-Line Tables, Captures From the Top).md` — three bugs,
19
+ one shared root, four mermaid diagrams, and a glossary a newcomer reads
20
+ before any code.
21
+
22
+ **References (load before drafting):**
23
+
24
+ - `references/rca-template.md` — the copy-verbatim skeleton, section-by-
25
+ section depth guide, and the single-defect variant note. **The template
26
+ lives there, not here; never write an RCA from memory of this page.**
27
+ - `references/mermaid-rules.md` — diagram choice table (flowchart vs
28
+ sequence), the seven syntax gates that have each broken a real diagram,
29
+ and the accessibility/tone rules for label text.
30
+
31
+ ## 1. RCA or ADR or plain KB?
32
+
33
+ - An **ADR** (dev/architectural-decission/, see the `dsi-adr` skill) records
34
+ a *decision and its cost* — what was chosen, what was rejected.
35
+ - A **KB note** documents *how a surface works* today.
36
+ - An **RCA** (dev/kb/rca/) reconstructs *how a defect came to exist and what
37
+ its existence teaches*. If your draft names no decision to revisit and no
38
+ defect to explain, it is not an RCA — rehome it. An RCA that ends without
39
+ a carry-forward lesson is a post-mortem of the code; the lesson is the
40
+ post-mortem of the *process*.
41
+
42
+ ## 2. The hard requirements (any "no" = unfinished)
43
+
44
+ 1. **Narrative, never paste.** Every section explains *why* in plain
45
+ sentences before naming a file or line. Commit messages, diff hunks, and
46
+ test output may be *cited*, never pasted as prose. If a paragraph could
47
+ stand inside a commit message, rewrite it.
48
+ 2. **Quote the operator.** Open with the defect in the operator's (or the
49
+ test's, or the user's) own words. The gap between those words and the
50
+ code is the story the RCA tells.
51
+ 3. **Layman glossary before the body.** A *Words used below* table defines
52
+ every term the body will use in one plain sentence each. A newcomer reads
53
+ the note top-to-bottom without opening the codebase.
54
+ 4. **A mermaid flowchart per failure chain.** Each bug/defect gets its own
55
+ `flowchart TD` tracing decision → inherited consequence → visible
56
+ symptom → complaint. The chain shows how a *reasonable* choice at time T
57
+ became a defect at time T+1 — that is the root in root-cause.
58
+ 5. **A mermaid sequenceDiagram wherever responsibility moves between
59
+ actors** (operator ↔ component ↔ runtime, caller ↔ clone). A flowchart
60
+ shows *how the state went bad*; the sequence shows *who handed it over*.
61
+ Choice table and syntax gates: `references/mermaid-rules.md`.
62
+ 6. **A shared-root paragraph** when the RCA covers multiple defects: one
63
+ paragraph naming the single underlying cause (stale defaults, an
64
+ inheritance chain, a missing contract) that the individual fixes merely
65
+ trimmed. Multi-bug RCAs without a shared root are a changelog.
66
+ 7. **"What does NOT change"** — the blast radius must be bounded in writing,
67
+ so the reader knows what the fix deliberately left alone.
68
+ 8. **"What to carry forward"** — dated, portable lessons (not "be careful";
69
+ rules like *"a clone is a photograph of a fresh document"*), each earned
70
+ by a specific trap in this RCA.
71
+ 9. **Fact discipline (same as the ADR skill):** every fact traces to
72
+ something inspected THIS session — file + line, a simulation's output, a
73
+ test run, a commit sha. Cite the shas.
74
+
75
+ ## 3. The self-audit (before claiming done)
76
+
77
+ Answer each aloud, in the transcript, yes or no:
78
+
79
+ 1. Is every section narrative — could any paragraph be pasted into a commit
80
+ message? (Must be no.)
81
+ 2. Are the operator's own words quoted at the top?
82
+ 3. Would a newcomer who reads only the glossary + opening follow the story
83
+ without the codebase?
84
+ 4. Does EVERY failure chain have a mermaid flowchart, and does every
85
+ multi-actor hand-off have a sequence diagram — all parsing clean per
86
+ `references/mermaid-rules.md`?
87
+ 5. Does a multi-defect RCA name the shared root in one paragraph?
88
+ 6. Is "What does NOT change" present and specific?
89
+ 7. Is every carry-forward lesson a rule earned by a named trap?
90
+ 8. Does every fact carry a source inspected this session (file+line, sha,
91
+ simulation output)?
92
+ 9. Does the note follow the `references/rca-template.md` skeleton — all
93
+ headings present, all guidance deleted?
94
+
95
+ Any "no" is an unfinished RCA. Fix it or shrink its claim — never declare
96
+ done with a standing "no".
97
+
98
+ ## 4. Reviewing an RCA
99
+
100
+ Run the same audit from outside. The three rejection reasons that matter
101
+ most: a section that reads like a commit message; a missing or unparsable
102
+ diagram; a carry-forward list of vibes. Style is negotiable; those three
103
+ are not.
@@ -0,0 +1,46 @@
1
+ # Mermaid Rules for RCAs — Syntax Gates & Diagram Choices
2
+
3
+ Companion to `rca-template.md`. Same discipline as dsi-spec's
4
+ `references/mermaid-pattern.md`: mermaid is grammar, not decoration — an
5
+ unparsable block renders as raw text and fails the narrative contract as
6
+ surely as a missing diagram.
7
+
8
+ ---
9
+
10
+ ## Which diagram, when
11
+
12
+ | Situation | Diagram | Why |
13
+ |---|---|---|
14
+ | One defect's decision → consequence → symptom chain | `flowchart TD` | Shows how a reasonable choice at time T became a defect at time T+1 — the root in root-cause. |
15
+ | Actors hand state/messages to each other (operator → component → runtime → clone) | `sequenceDiagram` | A flowchart shows how state went bad; the sequence shows WHO handed it over. |
16
+ | Multi-defect RCA | one flowchart per defect + at least one sequence for the shared actor story | Per-defect chains stay readable; the sequence carries the shared root. |
17
+
18
+ Hard floor: **every failure chain gets a flowchart; every multi-actor
19
+ hand-off gets a sequence.** A multi-defect RCA with zero diagrams cannot
20
+ pass the self-audit.
21
+
22
+ ## Syntax gates (each one has broken a real diagram)
23
+
24
+ 1. **No `;` in message or label text** — mermaid treats it as a statement
25
+ separator and silently eats the rest of the line.
26
+ 2. **`<br/>` for line breaks inside node labels** — literal newlines inside
27
+ `["…"]` labels are unreliable across renderers.
28
+ 3. **Single-token participant/actor names** — long names go on the `as`
29
+ clause: `participant Op as You (operator)`.
30
+ 4. **Every `alt`/`else`/`opt`/`loop` closes with `end`.**
31
+ 5. **Quote every node label** — `A["text (with parens)"]`; unquoted parens
32
+ and slashes are the classic parse error.
33
+ 6. **Edge labels are pipes with quotes**: `-->|"label text"`.
34
+ 7. **Validate before claiming done** — `mermaid.parse` in a scratch node
35
+ script, or the Preview tab in Zed, or DSI's own MarkdownContent preview.
36
+ An unparsable block is requirement-failing, cosmetic-fixable-later.
37
+
38
+ ## Accessibility & tone
39
+
40
+ - Label text carries the *narrative* ("the reasonable decision at time T"),
41
+ not ids (`A`, `B`) — a diagram read aloud must still tell the story.
42
+ - Dotted edges (`-.->`) mark dead ends and disconnected paths (the legacy
43
+ folder that nothing reads) — visual grammar for "not part of the live
44
+ chain".
45
+ - Keep flowcharts ≤ ~8 boxes; split into per-defect diagrams rather than one
46
+ spaghetti graph.
@@ -0,0 +1,88 @@
1
+ # RCA Template — The Skeleton (copy verbatim, delete the guidance, keep the headings)
2
+
3
+ The bracketed guidance in each section explains the depth that section owes.
4
+ Guidance is scaffolding: it ships in the skill, never in the finished RCA.
5
+
6
+ The exemplar that shows this template fully lived:
7
+ `dev/kb/rca/2026-10-06 - RCA — The Renderer That Told the Truth Badly
8
+ (Dull Diagrams, Single-Line Tables, Captures From the Top).md`.
9
+
10
+ ---
11
+
12
+ ````markdown
13
+ # RCA — <The Name: a memorable claim about the defect, not its title>
14
+
15
+ > RCA note, YYYY-MM-DD. <Two or three sentences in plain language: what
16
+ > broke, for whom, and the shape of the cause. If multiple defects, say how
17
+ > many and promise the shared root. Cite the fix commits by sha.>
18
+
19
+ ## The complaints, in the operator's own words
20
+ <Numbered verbatim quotes of each defect report (user words, test names, or
21
+ error text). These are the entrance of the story — never paraphrase them
22
+ into jargon here.>
23
+
24
+ ## Words used below (layman glossary)
25
+ | Word | Meaning in this note |
26
+ |---|---|
27
+ | **<term>** | <One plain sentence. Every jargon word the body uses lands here first.> |
28
+
29
+ ## The shared root, in one paragraph
30
+ <For multi-defect RCAs: the single underlying cause the individual bugs
31
+ share — a stale default, an inherited property, a missing contract. For a
32
+ single-defect RCA, this section merges into the first bug's story.>
33
+
34
+ ## Bug 1 — <A name that states the defect as a claim>
35
+ ### The failure chain
36
+ ```mermaid
37
+ flowchart TD
38
+ A["<the reasonable decision at time T>"] --> B["<the inherited consequence>"]
39
+ B --> C["<the visible symptom>"]
40
+ C --> D["<the operator-visible complaint>"]
41
+ ```
42
+ ### The fix, and the trap inside it
43
+ <Narrative: what changed, then the secondary defect the fix itself nearly
44
+ introduced (there almost always is one — the inheritance chain, the false
45
+ positive, the escaped emergency net). Say how the trap was caught
46
+ (simulation, test, preview) and why that catcher works.>
47
+
48
+ <Repeat Bug N for each defect.>
49
+
50
+ ## <A mermaid sequenceDiagram whenever actors hand state to each other>
51
+ <operator → component → runtime → clone; label each arrow with the actual
52
+ call or mutation. See references/mermaid-rules.md for syntax gates.>
53
+
54
+ ## What does NOT change
55
+ <Explicit blast-radius bounds: the older protections still standing, the
56
+ modes untouched, the inputs that behave exactly as before.>
57
+
58
+ ## What to carry forward
59
+ <Numbered portable lessons, each phrased as a rule with its earning trap
60
+ attached. "Be careful" is not a lesson; "a clone is a photograph of a fresh
61
+ document" is.>
62
+ ````
63
+
64
+ ---
65
+
66
+ ## Section-by-section depth guide
67
+
68
+ - **The Name** — a claim someone remembers in six months ("The Photograph
69
+ That Reframed Itself"), never the component's name alone ("CanvasCopyButton
70
+ RCA").
71
+ - **The complaints** — the operator's words are the entrance of the story.
72
+ Paraphrasing them into jargon here defeats the whole narrative contract.
73
+ - **The glossary** — every jargon word the body will use, one plain sentence
74
+ each, BEFORE the body. A newcomer reads top-to-bottom without opening the
75
+ codebase.
76
+ - **The shared root** — one paragraph. If you cannot write it, you have a
77
+ changelog, not an RCA: either find the cause the bugs share or split the
78
+ note.
79
+ - **Failure chains** — the chain shows how a *reasonable* choice at time T
80
+ became a defect at time T+1. If your chain's first box is already a
81
+ mistake, you are narrating blame, not cause.
82
+ - **The trap inside the fix** — there almost always is one (an inheritance
83
+ chain, a false positive, an escaped emergency net). An RCA that reports a
84
+ clean one-step fix is usually hiding it. Say how the trap was caught
85
+ (simulation, test, preview) and why that catcher works.
86
+ - **What to carry forward** — rules with their earning trap attached.
87
+ "Be careful" is not a lesson; "a clone is a photograph of a fresh
88
+ document" is.
@@ -1,2 +1,6 @@
1
1
  Plugins Resources:
2
- 1. [dsh-agent-teams(*)](https://github.com/NanmiCoder/dsh-agent-teams) - [NanmiCoder](https://github.com/NanmiCoder)
2
+ 1. [superpowers-dsh](https://github.com/LayneChai/superpowers-dsh) - [LayneChai](https://github.com/LayneChai)
3
+ 2. [deepseek-insight](https://github.com/mitmplay/deepseek-insight/tree/main/plugins) - [Wharsojoj](https://github.com/mitmplay)
4
+ 3. [dsh-agent-teams](https://github.com/NanmiCoder/dsh-agent-teams) - [NanmiCoder](https://github.com/NanmiCoder)
5
+ 4. [sandbase-harness](https://github.com/sandbaseai/sandbase-harness) - [sandbaseai](https://github.com/sandbaseai)
6
+ 5. [dsh-agency-agents](https://github.com/MichengAI/dsh-agency-agents) - [MichengAI](https://github.com/MichengAI)
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-50:oklch(98.2% .018 155.826);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-purple-700:oklch(49.6% .265 301.924);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-neutral-400:oklch(70.8% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-surface:#f8f9fa;--color-surface-alt:#f1f3f5;--color-surface-hover:#e9ecef;--color-surface-border:#dee2e6;--color-surface-elevated:#fff;--color-text-primary:#212529;--color-text-secondary:#6c757d;--color-text-muted:#adb5bd;--color-accent-blue:#3b82f6;--color-accent-purple:#8b5cf6;--color-accent-purple-soft:#9f88fb;--color-accent-purple-ink:#2e1065;--color-accent-rose:#f43f5e;--color-accent-cyan:#06b6d4;--color-status-pass:#10b981;--color-status-fail:#ef4444}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--si-run:#b91c1c}svg{color:var(--color-accent-purple)}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.\!collapse{visibility:collapse!important}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.-top-3{top:calc(var(--spacing) * -3)}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-5{top:calc(var(--spacing) * 5)}.top-8{top:calc(var(--spacing) * 8)}.top-full{top:100%}.-right-3{right:calc(var(--spacing) * -3)}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-5{right:calc(var(--spacing) * 5)}.right-full{right:100%}.bottom-0\.5{bottom:calc(var(--spacing) * .5)}.bottom-1\/2{bottom:50%}.bottom-\[50vh\]{bottom:50vh}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.z-10{z-index:10}.z-30{z-index:30}.z-50{z-index:50}.z-1000,.z-\[1000\]{z-index:1000}.z-auto{z-index:auto}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-px{margin-top:1px}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.ml-1{margin-left:var(--spacing)}.ml-\[-2px\]{margin-left:-2px}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-5{height:calc(var(--spacing) * 5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-16{height:calc(var(--spacing) * 16)}.h-\[18px\]{height:18px}.h-\[22px\]{height:22px}.h-\[50px\]{height:50px}.h-\[62px\]{height:62px}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[28rem\]{max-height:28rem}.max-h-\[30rem\]{max-height:30rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[500px\]{max-height:500px}.max-h-\[calc\(100vh-80px\)\]{max-height:calc(100vh - 80px)}.min-h-0{min-height:0}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-80{min-height:calc(var(--spacing) * 80)}.min-h-\[2\.75rem\]{min-height:2.75rem}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-5{width:calc(var(--spacing) * 5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-15{width:calc(var(--spacing) * 15)}.w-24{width:calc(var(--spacing) * 24)}.w-36{width:calc(var(--spacing) * 36)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-\[18px\]{width:18px}.w-\[22px\]{width:22px}.w-\[62px\]{width:62px}.w-\[200px\]{width:200px}.w-full{width:100%}.w-max{width:max-content}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-\[16rem\]{max-width:16rem}.max-w-\[80\%\]{max-width:80%}.max-w-\[80vw\]{max-width:80vw}.max-w-\[85\%\]{max-width:85%}.max-w-\[min\(100\%\,1600px\)\]{max-width:min(100%,1600px)}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-44{min-width:calc(var(--spacing) * 44)}.min-w-72{min-width:calc(var(--spacing) * 72)}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.cursor-zoom-in{cursor:zoom-in}.resize{resize:both}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-0\.5{column-gap:calc(var(--spacing) * .5)}.gap-x-1{column-gap:var(--spacing)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[2px\]{border-radius:2px}.rounded-\[16px\]{border-radius:16px}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-br-sm{border-bottom-right-radius:var(--radius-sm)}.rounded-bl-sm{border-bottom-left-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-\[\#7c3aed\]{border-color:#7c3aed}.border-\[\#7c3aed\]\/30{border-color:oklab(54.1337% .0963843 -.226968/.3)}.border-\[var\(--color-surface-border\)\]{border-color:var(--color-surface-border)}.border-accent-blue\/20{border-color:#3b82f633}@supports (color:color-mix(in lab, red, red)){.border-accent-blue\/20{border-color:color-mix(in oklab, var(--color-accent-blue) 20%, transparent)}}.border-accent-blue\/30{border-color:#3b82f64d}@supports (color:color-mix(in lab, red, red)){.border-accent-blue\/30{border-color:color-mix(in oklab, var(--color-accent-blue) 30%, transparent)}}.border-accent-purple\/30{border-color:#8b5cf64d}@supports (color:color-mix(in lab, red, red)){.border-accent-purple\/30{border-color:color-mix(in oklab, var(--color-accent-purple) 30%, transparent)}}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-600{border-color:var(--color-emerald-600)}.border-green-300{border-color:var(--color-green-300)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.border-red-500\/30{border-color:color-mix(in oklab, var(--color-red-500) 30%, transparent)}}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-500\/15{border-color:#62748e26}@supports (color:color-mix(in lab, red, red)){.border-slate-500\/15{border-color:color-mix(in oklab, var(--color-slate-500) 15%, transparent)}}.border-slate-500\/20{border-color:#62748e33}@supports (color:color-mix(in lab, red, red)){.border-slate-500\/20{border-color:color-mix(in oklab, var(--color-slate-500) 20%, transparent)}}.border-slate-800{border-color:var(--color-slate-800)}.border-surface-border{border-color:var(--color-surface-border)}.border-surface-border\/30{border-color:#dee2e64d}@supports (color:color-mix(in lab, red, red)){.border-surface-border\/30{border-color:color-mix(in oklab, var(--color-surface-border) 30%, transparent)}}.border-surface-border\/50{border-color:#dee2e680}@supports (color:color-mix(in lab, red, red)){.border-surface-border\/50{border-color:color-mix(in oklab, var(--color-surface-border) 50%, transparent)}}.bg-\[\#7c3aed\]{background-color:#7c3aed}.bg-\[\#7c3aed\]\/10{background-color:oklab(54.1337% .0963843 -.226968/.1)}.bg-\[\#DDD3B0\]{background-color:#ddd3b0}.bg-\[\#E9E3C9\]{background-color:#e9e3c9}.bg-\[\#F5F5DC\]{background-color:beige}.bg-\[\#FDF5E6\]{background-color:#fdf5e6}.bg-\[var\(--color-surface-elevated\)\]{background-color:var(--color-surface-elevated)}.bg-accent-blue\/10{background-color:#3b82f61a}@supports (color:color-mix(in lab, red, red)){.bg-accent-blue\/10{background-color:color-mix(in oklab, var(--color-accent-blue) 10%, transparent)}}.bg-accent-blue\/15{background-color:#3b82f626}@supports (color:color-mix(in lab, red, red)){.bg-accent-blue\/15{background-color:color-mix(in oklab, var(--color-accent-blue) 15%, transparent)}}.bg-accent-blue\/20{background-color:#3b82f633}@supports (color:color-mix(in lab, red, red)){.bg-accent-blue\/20{background-color:color-mix(in oklab, var(--color-accent-blue) 20%, transparent)}}.bg-accent-blue\/30{background-color:#3b82f64d}@supports (color:color-mix(in lab, red, red)){.bg-accent-blue\/30{background-color:color-mix(in oklab, var(--color-accent-blue) 30%, transparent)}}.bg-accent-cyan\/10{background-color:#06b6d41a}@supports (color:color-mix(in lab, red, red)){.bg-accent-cyan\/10{background-color:color-mix(in oklab, var(--color-accent-cyan) 10%, transparent)}}.bg-accent-purple-ink{background-color:var(--color-accent-purple-ink)}.bg-accent-purple-soft{background-color:var(--color-accent-purple-soft)}.bg-accent-purple\/15{background-color:#8b5cf626}@supports (color:color-mix(in lab, red, red)){.bg-accent-purple\/15{background-color:color-mix(in oklab, var(--color-accent-purple) 15%, transparent)}}.bg-accent-purple\/20{background-color:#8b5cf633}@supports (color:color-mix(in lab, red, red)){.bg-accent-purple\/20{background-color:color-mix(in oklab, var(--color-accent-purple) 20%, transparent)}}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/10{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/10{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500\/5{background-color:#62748e0d}@supports (color:color-mix(in lab, red, red)){.bg-slate-500\/5{background-color:color-mix(in oklab, var(--color-slate-500) 5%, transparent)}}.bg-slate-500\/10{background-color:#62748e1a}@supports (color:color-mix(in lab, red, red)){.bg-slate-500\/10{background-color:color-mix(in oklab, var(--color-slate-500) 10%, transparent)}}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-800\/90{background-color:#1d293de6}@supports (color:color-mix(in lab, red, red)){.bg-slate-800\/90{background-color:color-mix(in oklab, var(--color-slate-800) 90%, transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\/40{background-color:color-mix(in oklab, var(--color-slate-900) 40%, transparent)}}.bg-slate-950{background-color:var(--color-slate-950)}.bg-surface{background-color:var(--color-surface)}.bg-surface-alt{background-color:var(--color-surface-alt)}.bg-surface-border{background-color:var(--color-surface-border)}.bg-surface-elevated{background-color:var(--color-surface-elevated)}.bg-surface\/60{background-color:#f8f9fa99}@supports (color:color-mix(in lab, red, red)){.bg-surface\/60{background-color:color-mix(in oklab, var(--color-surface) 60%, transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-\[linear-gradient\(90deg\,\#E6F4D7\,\#FDF5E6_65\%\,\#FEF9EF\)\]{background-image:linear-gradient(90deg,#e6f4d7,#fdf5e6 65%,#fef9ef)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.\[padding\:0_10px\]{padding:0 10px}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-10{padding:calc(var(--spacing) * 10)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-px{padding-block:1px}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-7{padding-right:calc(var(--spacing) * 7)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-1{padding-left:var(--spacing)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6875rem\]{font-size:.6875rem}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#7c3aed\]{color:#7c3aed}.text-\[color\:var\(--color-text-secondary\,\#6c757d\)\]{color:var(--color-text-secondary,#6c757d)}.text-\[var\(--color-accent-purple\)\]{color:var(--color-accent-purple)}.text-\[var\(--color-text-primary\)\]{color:var(--color-text-primary)}.text-\[var\(--color-text-secondary\)\]{color:var(--color-text-secondary)}.text-accent-blue{color:var(--color-accent-blue)}.text-accent-purple{color:var(--color-accent-purple)}.text-accent-purple-ink{color:var(--color-accent-purple-ink)}.text-accent-purple\/80{color:#8b5cf6cc}@supports (color:color-mix(in lab, red, red)){.text-accent-purple\/80{color:color-mix(in oklab, var(--color-accent-purple) 80%, transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-700\/80{color:#b75000cc}@supports (color:color-mix(in lab, red, red)){.text-amber-700\/80{color:color-mix(in oklab, var(--color-amber-700) 80%, transparent)}}.text-amber-800{color:var(--color-amber-800)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-green-500{color:var(--color-green-500)}.text-green-700{color:var(--color-green-700)}.text-neutral-400{color:var(--color-neutral-400)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-slate-100{color:var(--color-slate-100)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-status-pass{color:var(--color-status-pass)}.text-text-muted{color:var(--color-text-muted)}.text-text-muted\/60{color:#adb5bd99}@supports (color:color-mix(in lab, red, red)){.text-text-muted\/60{color:color-mix(in oklab, var(--color-text-muted) 60%, transparent)}}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-slate-300{-webkit-text-decoration-color:var(--color-slate-300);-webkit-text-decoration-color:var(--color-slate-300);-webkit-text-decoration-color:var(--color-slate-300);text-decoration-color:var(--color-slate-300)}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-accent-purple-ink\/30{--tw-ring-color:#2e10654d}@supports (color:color-mix(in lab, red, red)){.ring-accent-purple-ink\/30{--tw-ring-color:color-mix(in oklab, var(--color-accent-purple-ink) 30%, transparent)}}.ring-amber-200{--tw-ring-color:var(--color-amber-200)}.ring-red-200{--tw-ring-color:var(--color-red-200)}.ring-red-300{--tw-ring-color:var(--color-red-300)}.ring-slate-100{--tw-ring-color:var(--color-slate-100)}.ring-slate-200{--tw-ring-color:var(--color-slate-200)}.ring-slate-300{--tw-ring-color:var(--color-slate-300)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background-color\,transform\]{transition-property:background-color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/bubble\:text-\[\#7c3aed\]:is(:where(.group\/bubble):hover *){color:#7c3aed}.group-hover\/bubble\:opacity-100:is(:where(.group\/bubble):hover *),.group-hover\/diagram\:opacity-100:is(:where(.group\/diagram):hover *),.group-hover\/featurespec\:opacity-100:is(:where(.group\/featurespec):hover *),.group-hover\/markdown\:opacity-100:is(:where(.group\/markdown):hover *),.group-hover\/reasoning\:opacity-100:is(:where(.group\/reasoning):hover *),.group-hover\/table\:opacity-100:is(:where(.group\/table):hover *),.group-hover\/terminal\:opacity-100:is(:where(.group\/terminal):hover *){opacity:1}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-slate-300:hover{border-color:var(--color-slate-300)}.hover\:bg-\[\#7c3aed\]\/20:hover{background-color:oklab(54.1337% .0963843 -.226968/.2)}.hover\:bg-accent-purple\/5:hover{background-color:#8b5cf60d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent-purple\/5:hover{background-color:color-mix(in oklab, var(--color-accent-purple) 5%, transparent)}}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-emerald-700:hover{background-color:var(--color-emerald-700)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-200:hover{background-color:var(--color-slate-200)}.hover\:bg-slate-500\/20:hover{background-color:#62748e33}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-500\/20:hover{background-color:color-mix(in oklab, var(--color-slate-500) 20%, transparent)}}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.hover\:bg-surface-hover:hover{background-color:var(--color-surface-hover)}.hover\:text-\[color\:var\(--color-text-primary\,\#212529\)\]:hover{color:var(--color-text-primary,#212529)}.hover\:text-accent-purple:hover{color:var(--color-accent-purple)}.hover\:text-amber-900:hover{color:var(--color-amber-900)}.hover\:text-slate-200:hover{color:var(--color-slate-200)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-text-muted:hover{color:var(--color-text-muted)}.hover\:text-text-primary:hover{color:var(--color-text-primary)}.hover\:ring-accent-purple\/40:hover{--tw-ring-color:#8b5cf666}@supports (color:color-mix(in lab, red, red)){.hover\:ring-accent-purple\/40:hover{--tw-ring-color:color-mix(in oklab, var(--color-accent-purple) 40%, transparent)}}@media (hover:hover){.hover\:group-hover\/bubble\:text-\[\#7c3aed\]:hover:is(:where(.group\/bubble):hover *){color:#7c3aed}}}.focus\:border-slate-500:focus{border-color:var(--color-slate-500)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-slate-400:focus{--tw-ring-color:var(--color-slate-400)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:opacity-100:focus-visible{opacity:1}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-slate-50:disabled{background-color:var(--color-slate-50)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media (pointer:coarse){.pointer-coarse\:opacity-100{opacity:1}}}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--color-surface)}::-webkit-scrollbar-thumb{background:var(--color-surface-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}.scrollbar-none{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-none::-webkit-scrollbar{display:none}body{background-color:var(--color-surface);color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.md-content{overflow-wrap:break-word;word-break:break-word;min-width:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.md-content table{border-collapse:collapse;white-space:nowrap;background:#8b5cf60a;border:1px solid #8b5cf633;border-radius:.5em;width:100%;margin:.5em 0;display:block;overflow:auto hidden}.md-content p{margin-top:.5em;margin-bottom:.25em}.md-content ul{margin:.2em 0;padding-left:1.5em;list-style-type:disc}.md-content ol{margin:.2em 0;padding-left:1.5em;list-style-type:decimal}.md-content li{display:list-item}.md-content h1,.md-content h2,.md-content h3{color:var(--color-text-primary);margin:.75em 0 .3em;font-weight:800}.md-content h1{font-size:1.25em}.md-content h2{font-size:1.1em}.md-content h3{font-size:1em}.md-content blockquote{color:var(--color-text-secondary);border-left:3px solid #8b5cf666;margin:.5em 0;padding:.3em .75em}.md-content strong{color:var(--color-text-primary);font-weight:600}.md-content em{color:#7c3aed}.md-content hr{border:none;border-top:1px solid var(--color-surface-border);margin:.5em 0}.md-content a{color:var(--color-accent-blue);text-underline-offset:2px;text-decoration:underline}.md-content th{color:var(--color-text-primary);background:#8b5cf61f}.md-content th,.md-content td{text-align:left;border:1px solid #8b5cf626;padding:.35em .6em}.md-content tbody tr:nth-child(2n){background:#8b5cf608}.md-content tbody tr:hover{background:#8b5cf614}.md-content code:not(pre code),.md-content :not(pre)>code{color:#7c3aed;background:#8b5cf614;border-radius:.3em;padding:.15em .35em;font-family:SF Mono,Fira Code,JetBrains Mono,monospace;font-size:.8em}.md-content pre{border:1px solid var(--color-surface-border);background:#f1f3f5;border-radius:.5em;max-width:100%;margin:.5em 0;padding:.5em;font-size:.8em;overflow-x:auto}.md-content pre code{color:#212529;font-family:SF Mono,Fira Code,JetBrains Mono,monospace}[data-testid=assistant-turn] .md-content>:last-child{margin-bottom:.25em}[data-testid=assistant-turn] .md-content>:first-child{margin-top:.5em}.md-content .mermaid-diagram{justify-content:center;margin:.5em 0;padding:.5em;display:flex;overflow-x:auto}.md-content .mermaid-diagram svg{max-width:100%;height:auto}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
@@ -1 +0,0 @@
1
- import{r as e}from"../nodes/2.BmfcXZrQ.js";export{e as stringify};
@@ -1 +0,0 @@
1
- import{H as e}from"../nodes/2.BmfcXZrQ.js";export{e as startPanelResize};
@@ -1 +0,0 @@
1
- import{o as e,r as t}from"../chunks/ipGk-mTd.js";export{e as load_css,t as start};