@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.
- package/.agents/skills/dsi-plugin-rack/rack.d.mts +35 -0
- package/.agents/skills/dsi-plugin-rack/rack.mjs +168 -26
- package/build/client/_app/immutable/assets/0.CRU0GiZX.css +2 -0
- package/build/client/_app/immutable/assets/{2.BGqV97Jd.css → 2.BuaCdYrs.css} +1 -1
- package/build/client/_app/immutable/chunks/B7sQH3rV.js +1 -0
- package/build/client/_app/immutable/chunks/{CZajmeaf.js → Dg3LIDOQ.js} +1 -1
- package/build/client/_app/immutable/chunks/{ipGk-mTd.js → XOquLDe4.js} +2 -2
- package/build/client/_app/immutable/chunks/ivdzpE2c.js +1 -0
- package/build/client/_app/immutable/entry/{app.DEAFrkJ-.js → app.BTSQLfJD.js} +2 -2
- package/build/client/_app/immutable/entry/start.DMTgnn1w.js +1 -0
- package/build/client/_app/immutable/nodes/{1.BM2g39Jr.js → 1.Bj5dhQm8.js} +1 -1
- package/build/client/_app/immutable/nodes/2.D2grr0LI.js +337 -0
- package/build/client/_app/version.json +1 -1
- package/build/handler.js +4 -4
- package/build/index.js +4 -4
- package/build/server/chunks/chunks/{engine.js-CrdWRSwf.js → engine.js-1gYqtdBP.js} +17 -2
- package/build/server/chunks/chunks/{internal.js-DrVZK6tf.js → internal.js-CiymEM9G.js} +2 -2
- package/build/server/chunks/chunks/{state.js-C_zC7v8L.js → state.js-Dve2UFKe.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/plugins/apply/{_server.ts.js-CpO--Jwf.js → _server.ts.js-BNEUWbaf.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/plugins/reload/{_server.ts.js-BACFXWMj.js → _server.ts.js-Ct28d7_t.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/plugins/snapshot/{_server.ts.js-BJg0hLlC.js → _server.ts.js-DswGIO4S.js} +2 -2
- package/build/server/chunks/entries/pages/{_error.svelte.js-BLQNkziv.js → _error.svelte.js-DUc94aLg.js} +3 -3
- package/build/server/chunks/entries/pages/{_page.svelte.js-U6RBvo4b.js → _page.svelte.js-CGKKJjvq.js} +182 -9
- package/build/server/chunks/{handler-B_uG0xBL.js → handler-DndMFIB-.js} +3 -3
- package/build/server/chunks/{index.js-CFMhxqkR.js → index.js-XCtYQ9iw.js} +2 -2
- package/build/server/chunks/{manifest.js-rflC1wxY.js → manifest.js-B6QH7eda.js} +8 -8
- package/build/server/chunks/nodes/{0.js-PpYt5eF3.js → 0.js-B0560RI0.js} +3 -3
- package/build/server/chunks/nodes/1.js-DgkiAL8m.js +9 -0
- package/build/server/chunks/nodes/{2.js-Bkg7QRk0.js → 2.js-DiZQ86Is.js} +4 -4
- package/package.json +1 -1
- package/skills/dsi-add-plugin/SKILL.md +53 -0
- package/skills/dsi-add-plugin/references/allowbuilds-template.md +55 -0
- package/skills/dsi-add-plugin/references/checklist.md +98 -0
- package/skills/dsi-add-plugin/references/verification.md +67 -0
- package/skills/dsi-rca/SKILL.md +103 -0
- package/skills/dsi-rca/references/mermaid-rules.md +46 -0
- package/skills/dsi-rca/references/rca-template.md +88 -0
- package/template/.dsi/resources/plugins-reff.md +5 -1
- package/build/client/_app/immutable/assets/0.Cz4GQ8ND.css +0 -2
- package/build/client/_app/immutable/chunks/CFUMLnMa.js +0 -1
- package/build/client/_app/immutable/chunks/CZ6XrzVa.js +0 -1
- package/build/client/_app/immutable/entry/start.B_n-sOmN.js +0 -1
- package/build/client/_app/immutable/nodes/2.BmfcXZrQ.js +0 -332
- package/build/server/chunks/nodes/1.js-BQCqfRee.js +0 -9
- /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
|
|
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};
|