geneseed 3.12.0 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +160 -0
- package/README.md +2 -2
- package/SHIPPED.md +1 -1
- package/adapters/bob/README.md +1 -1
- package/adapters/claude-code/README.md +1 -1
- package/adapters/openclaude/README.md +1 -1
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/plugins/geneseed-learn.js +10 -1
- package/bin/geneseed-cli.mjs +10 -14
- package/bin/geneseed-hook.mjs +22 -15
- package/docs/README.md +41 -22
- package/docs/concepts/agents.md +3 -1
- package/docs/concepts/collaboration.md +3 -1
- package/docs/concepts/exclusions.md +4 -2
- package/docs/concepts/footprint.md +3 -1
- package/docs/concepts/foreman-mode.md +3 -1
- package/docs/concepts/hook-gates.md +61 -0
- package/docs/concepts/hooks.md +8 -56
- package/docs/concepts/host-matrix.md +38 -0
- package/docs/concepts/hosts.md +6 -32
- package/docs/concepts/loop-branch.md +66 -0
- package/docs/concepts/loop-bricks.md +48 -0
- package/docs/concepts/loop-contracts.md +33 -0
- package/docs/concepts/loop-gates.md +30 -0
- package/docs/concepts/loop-notes.md +43 -0
- package/docs/concepts/loop-risk.md +36 -0
- package/docs/concepts/loop-templates.md +50 -0
- package/docs/concepts/loops.md +24 -116
- package/docs/concepts/lsp.md +2 -0
- package/docs/concepts/memory.md +3 -1
- package/docs/concepts/notebook.md +3 -1
- package/docs/concepts/rules.md +4 -2
- package/docs/concepts/skills.md +3 -1
- package/docs/concepts/themes.md +3 -1
- package/docs/extending.md +28 -13
- package/docs/guides/autostart.md +3 -1
- package/docs/guides/choose-your-setup.md +5 -80
- package/docs/guides/headless.md +5 -3
- package/docs/guides/install-agent-md.md +37 -0
- package/docs/guides/install-bob.md +20 -0
- package/docs/guides/install-claude-code.md +22 -0
- package/docs/guides/install-clone.md +34 -0
- package/docs/guides/install-openclaude.md +25 -0
- package/docs/guides/install-opencode.md +35 -0
- package/docs/guides/install-scripted.md +21 -0
- package/docs/guides/install.md +9 -118
- package/docs/guides/loop-finish.md +54 -0
- package/docs/guides/loop-running.md +66 -0
- package/docs/guides/loop-which-template.md +35 -0
- package/docs/guides/mcp-filesystem.md +41 -0
- package/docs/guides/mcp-gitlab.md +66 -0
- package/docs/guides/mcp-markitdown.md +36 -0
- package/docs/guides/mcp.md +8 -137
- package/docs/guides/migrate.md +3 -1
- package/docs/guides/project-context.md +4 -2
- package/docs/guides/read-non-markdown.md +17 -0
- package/docs/guides/run-a-loop.md +64 -0
- package/docs/guides/run-anywhere.md +2 -0
- package/docs/guides/setup-doctrines.md +55 -0
- package/docs/guides/setup-footprint.md +48 -0
- package/docs/guides/uninstall.md +3 -1
- package/docs/guides/upgrade.md +3 -1
- package/docs/guides/verify.md +3 -1
- package/docs/guides/wiki.md +3 -1
- package/docs/guides/worktree.md +3 -1
- package/docs/reference/about.md +3 -1
- package/docs/reference/cli.md +2 -0
- package/docs/reference/env-context.md +40 -0
- package/docs/reference/environment.md +10 -59
- package/docs/reference/glossary.md +3 -1
- package/docs/reference/loop-actions.md +20 -0
- package/docs/reference/opencode-plugins.md +14 -118
- package/docs/reference/plugin-activity.md +20 -0
- package/docs/reference/plugin-context.md +27 -0
- package/docs/reference/plugin-guard.md +27 -0
- package/docs/reference/plugin-learn.md +27 -0
- package/docs/reference/plugin-notify.md +20 -0
- package/docs/reference/plugin-ponytail.md +19 -0
- package/docs/reference/plugin-workflow.md +25 -0
- package/docs/reference/troubleshoot-doctor.md +50 -0
- package/docs/reference/troubleshoot-hooks.md +99 -0
- package/docs/reference/troubleshoot-install.md +108 -0
- package/docs/reference/troubleshoot-tools.md +56 -0
- package/docs/reference/troubleshoot-update.md +23 -0
- package/docs/reference/troubleshoot-web.md +66 -0
- package/docs/reference/troubleshooting.md +13 -337
- package/docs/understand/a-day.md +3 -1
- package/docs/understand/enforced-vs-asked.md +3 -1
- package/docs/understand/harness.md +2 -0
- package/docs/understand/machine-bob.md +17 -0
- package/docs/understand/machine-claude.md +35 -0
- package/docs/understand/machine-opencode.md +36 -0
- package/docs/understand/on-your-machine.md +12 -55
- package/docs/understand/take-it-out.md +13 -0
- package/docs/web-ui.md +35 -15
- package/harness.config.json +1 -1
- package/js/README.md +30 -13
- package/js/build/args.mjs +374 -0
- package/js/build/driver.mjs +137 -553
- package/js/build/emit-claude.mjs +2 -4
- package/js/build/generate.mjs +6 -3
- package/js/build/render.mjs +5 -9
- package/js/build/source.mjs +3 -11
- package/js/cli-table.json +27 -1
- package/js/hosts/hooks-context.mjs +431 -0
- package/js/hosts/hooks-learn.mjs +275 -0
- package/js/hosts/hooks-prims.mjs +108 -0
- package/js/hosts/hooks.mjs +50 -977
- package/js/hosts/hosts.mjs +12 -4
- package/js/hosts/installs.mjs +5 -6
- package/js/hosts/mcp.mjs +13 -49
- package/js/hosts/memory-files.mjs +181 -0
- package/js/hosts/native.mjs +43 -5
- package/js/hosts/settings.mjs +135 -414
- package/js/hosts/shim.mjs +373 -0
- package/js/inspect/checks-authoring.mjs +21 -828
- package/js/inspect/checks-build.mjs +32 -4
- package/js/inspect/checks-constitution.mjs +493 -0
- package/js/inspect/checks-counts.mjs +242 -0
- package/js/inspect/checks-repo.mjs +17 -8
- package/js/inspect/diff.mjs +4 -1
- package/js/inspect/doctor.mjs +2 -2
- package/js/inspect/inventory.mjs +4 -4
- package/js/inspect/scan.mjs +1 -1
- package/js/inspect/status.mjs +1 -1
- package/js/inspect/validate.mjs +48 -35
- package/js/loop/catalog.mjs +17 -4
- package/js/loop/cli.mjs +52 -16
- package/js/loop/graph.mjs +19 -1
- package/js/loop/registry.mjs +191 -0
- package/js/loop/score.mjs +46 -7
- package/js/loop/state.mjs +157 -19
- package/js/maintain/memory.mjs +1 -1
- package/js/maintain/migrate.mjs +18 -30
- package/js/maintain/setup.mjs +1 -1
- package/js/maintain/uninstall.mjs +47 -88
- package/js/ui/cli.mjs +12 -12
- package/js/web/actions.mjs +39 -4
- package/js/web/api.mjs +34 -21
- package/js/web/docs.mjs +87 -78
- package/js/web/routes.mjs +5 -1
- package/package.json +1 -1
- package/src/agents/explorer.md +2 -2
- package/src/agents/researcher.md +3 -3
- package/src/bricks/README.md +3 -1
- package/src/bricks/adr-challenge.md +20 -0
- package/src/bricks/adr-draft.md +15 -0
- package/src/bricks/characterize.md +17 -0
- package/src/bricks/ci-fix.md +2 -1
- package/src/bricks/ci-triage.md +20 -0
- package/src/bricks/compat-check.md +16 -0
- package/src/bricks/done-check.md +16 -0
- package/src/bricks/fitness-define.md +22 -0
- package/src/bricks/flake-check.md +17 -0
- package/src/bricks/flake-repro.md +18 -0
- package/src/bricks/identify.md +6 -3
- package/src/bricks/migration-plan.md +21 -0
- package/src/bricks/mutation-check.md +18 -0
- package/src/bricks/plan.md +6 -6
- package/src/bricks/red-test.md +16 -0
- package/src/bricks/review.md +5 -3
- package/src/bricks/spec.md +18 -0
- package/src/bricks/upgrade-scout.md +16 -0
- package/src/loops/api-endpoint.json +31 -0
- package/src/loops/architecture-decision.json +22 -0
- package/src/loops/bugfix.json +1 -0
- package/src/loops/ci-repair.json +19 -0
- package/src/loops/deps-upgrade.json +29 -0
- package/src/loops/enforce-architecture-rule.json +28 -0
- package/src/loops/feature.json +8 -5
- package/src/loops/fix-flaky-tests.json +30 -0
- package/src/loops/legacy-refactor.json +26 -0
- package/src/loops/legacy-tests.json +29 -0
- package/src/loops/refactor.json +5 -1
- package/src/loops/remove-dead-code.json +30 -0
- package/src/loops/spec-first-feature.json +29 -0
- package/src/loops/tdd.json +25 -0
- package/src/loops/update-contract.json +33 -0
- package/src/skills/brick-forge.md +3 -1
- package/src/skills/bruno-collection-generator.md +3 -3
- package/src/skills/bruno-test-writer.md +3 -3
- package/src/skills/ci-fix.md +3 -3
- package/src/skills/consolidate-memory.md +4 -4
- package/src/skills/council.md +1 -1
- package/src/skills/fresh-eyes.md +1 -1
- package/src/skills/git-archaeology.md +1 -1
- package/src/skills/git-rescue.md +4 -3
- package/src/skills/handoff.md +1 -1
- package/src/skills/herdr.md +1 -1
- package/src/skills/learn-mode.md +2 -2
- package/src/skills/loop.md +22 -10
- package/src/skills/opencode-theme.md +3 -3
- package/src/skills/ponytail.md +1 -1
- package/src/skills/profile.md +3 -4
- package/src/skills/prose.md +2 -3
- package/src/skills/quiz.md +1 -1
- package/src/skills/react-view-transitions/SKILL.md +1 -1
- package/src/skills/react-view-transitions/VENDOR.md +8 -3
- package/src/skills/research.md +3 -3
- package/src/skills/review-response.md +2 -2
- package/src/skills/rule.md +3 -3
- package/src/skills/security-audit.md +4 -4
- package/src/skills/teach.md +1 -1
- package/src/skills/wiki.md +3 -3
- package/src/skills/workflow.md +4 -4
- package/src/skills/worktree.md +2 -2
- package/web/dist/assets/Activity-CjRqZnr-.js +1 -0
- package/web/dist/assets/ActivityDetail-OQTxKBj2.js +1 -0
- package/web/dist/assets/Dashboard-J-xCe_Gk.js +2 -0
- package/web/dist/assets/Docs-CvOZ8akL.js +5 -0
- package/web/dist/assets/{GreenhouseView-C6ibc8IE.js → GreenhouseView-6KDjX8da.js} +1 -1
- package/web/dist/assets/{Installs-DRYjYnxs.js → Installs-MWuhNjSm.js} +2 -2
- package/web/dist/assets/JournalView-C8MrOz2c.js +1 -0
- package/web/dist/assets/Laws-Du0-Zyp2.js +3 -0
- package/web/dist/assets/Library-DOkO0TtB.js +1 -0
- package/web/dist/assets/Loops-Dv_aLByJ.js +2 -0
- package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-X2a3qvOh.js} +14 -14
- package/web/dist/assets/{OperatorHudView-Bs7paWmh.js → OperatorHudView-BPP1dtLz.js} +1 -1
- package/web/dist/assets/{Personal-BY5n4gTw.js → Personal-26VPYkK0.js} +1 -1
- package/web/dist/assets/Tabs-BzKuFskD.js +1 -0
- package/web/dist/assets/{usePoll-O0sJEw1Y.js → activity-Dr7ZMBI3.js} +1 -1
- package/web/dist/assets/{api-CyMRbU2x.js → api-D_ixdyEY.js} +1 -1
- package/web/dist/assets/drawable-zVVDbsyw.js +1 -0
- package/web/dist/assets/index-Ctp-4poP.css +1 -0
- package/web/dist/assets/index-KHt3wE_K.js +2 -0
- package/web/dist/assets/usePoll-DD8VjtSg.js +1 -0
- package/web/dist/index.html +3 -3
- package/web/src/pages/Laws.jsx +0 -1
- package/web/dist/assets/Activity-GaaZWXTY.js +0 -1
- package/web/dist/assets/ActivityDetail-4t7d45Du.js +0 -1
- package/web/dist/assets/Dashboard-CYn7Tp16.js +0 -2
- package/web/dist/assets/Docs-BeFKLg2T.js +0 -5
- package/web/dist/assets/JournalView-1HbU1mfg.js +0 -1
- package/web/dist/assets/Laws-DFoG8JWB.js +0 -3
- package/web/dist/assets/Library-DDjgNwz_.js +0 -1
- package/web/dist/assets/Loops-D9VEoO0F.js +0 -1
- package/web/dist/assets/Tabs-ho-EYD8i.js +0 -1
- package/web/dist/assets/drawable-CLS9drMb.js +0 -1
- package/web/dist/assets/index-CX_hXMi5.css +0 -1
- package/web/dist/assets/index-Cjr7XCA3.js +0 -2
package/src/skills/herdr.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
> {{DESC_HERDR}}
|
|
5
5
|
<!-- invocation: user -->
|
|
6
6
|
|
|
7
|
-
**Trigger:**
|
|
7
|
+
**Trigger:** the session runs inside a herdr-managed pane (`HERDR_ENV=1`) and a task would benefit from another pane. Typical cases: splitting off a server, watching a long-running build, spawning a sibling agent, or reading what a neighbour is doing. If `HERDR_ENV` is unset or not `1`, you are not inside herdr — stop and do not try to control panes from outside.
|
|
8
8
|
|
|
9
9
|
**Requires:** `HERDR_ENV=1` in the environment and the `herdr` binary on `PATH`.
|
|
10
10
|
|
package/src/skills/learn-mode.md
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
<!-- invocation: user -->
|
|
6
6
|
|
|
7
|
-
**Trigger:** the user wants to *learn while building* rather than be handed finished code
|
|
8
|
-
"learn mode", "turn on learning", "I want to understand what we build", "let me design it,
|
|
7
|
+
**Trigger:** the user wants to *learn while building* rather than be handed finished code.
|
|
8
|
+
Phrases: "learn mode", "turn on learning", "I want to understand what we build", "let me design it,
|
|
9
9
|
you write it". Also "pause learning" / "resume learning" / "stop learn mode". To be taught a
|
|
10
10
|
topic outside a build, use the [teach {{SKILL}}](teach.md); to have knowledge tested, the
|
|
11
11
|
[quiz {{SKILL}}](quiz.md).
|
package/src/skills/loop.md
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
**Trigger:** the user asks to run a loop, or to work a requirement in small validated
|
|
6
6
|
iterations, each one committed on its own; or names a loop template (`bugfix`, `refactor`,
|
|
7
|
-
`feature`
|
|
7
|
+
`feature`, `tdd`, `legacy-tests`, `legacy-refactor`, `deps-upgrade`, `ci-repair`,
|
|
8
|
+
`architecture-decision`, `enforce-architecture-rule`, `update-contract`, `spec-first-feature`,
|
|
9
|
+
`api-endpoint`, `remove-dead-code`, `fix-flaky-tests`).
|
|
8
10
|
|
|
9
11
|
Default trust preset: **{{TRUST_LABEL}}**
|
|
10
12
|
|
|
@@ -36,7 +38,8 @@ action prints one JSON object — act on its keys, never on your own reading of
|
|
|
36
38
|
Write it to `<name>.json` in the OS temp directory — never inside the worktree, where it would
|
|
37
39
|
be scored and committed — and validate it: `geneseed loop check --graph <file>`.
|
|
38
40
|
4. `geneseed loop init --title "<title>" --requirement "<requirement>" --graph <template|file> --preset {{TRUST}}`.
|
|
39
|
-
|
|
41
|
+
Add `--contracts <globs>` naming the interface or schema files the requirement changes when
|
|
42
|
+
the template's defaults do not cover them. A refused graph prints `problems` — fix them and retry.
|
|
40
43
|
|
|
41
44
|
## The cycle
|
|
42
45
|
|
|
@@ -44,17 +47,25 @@ Repeat `geneseed loop next` and act on its JSON:
|
|
|
44
47
|
|
|
45
48
|
- **`{awaiting}`** — a person must decide. Present it: `launch` → the graph in `LOOP.md`;
|
|
46
49
|
`declared` → the card, its score and the threshold; `actual` → `git diff --cached` and the
|
|
47
|
-
`reasons
|
|
50
|
+
`reasons`; `gate` → what `node` produced (the file its `note` names, or `git diff`), the
|
|
51
|
+
`note` and the `outcome` it reported — `ok` follows the outcome the brick reported (on a held
|
|
52
|
+
`fail` it stops; to continue, `amend` with your answers), `amend` re-runs that brick with their
|
|
53
|
+
note. Then
|
|
54
|
+
**end the run** and wait. On their answer:
|
|
48
55
|
`geneseed loop decide --verdict ok|no|amend --note "<their words>"` and continue.
|
|
49
56
|
- **`{verify, run}`** — run exactly the `run` command it prints.
|
|
50
57
|
- **`{node, validate: true}`** — score the card before the brick runs:
|
|
51
|
-
`geneseed loop score --declared` (the card
|
|
52
|
-
card `geneseed loop score --declared --actions <kinds> --write-set <files> --intent <label
|
|
58
|
+
`geneseed loop score --declared` (the card the iteration head recorded), or for a setup brick with no
|
|
59
|
+
card `geneseed loop score --declared --actions <kinds> --write-set <files> --intent <label>`
|
|
60
|
+
(`spec`: `--actions new-file --write-set 'specs/**'`).
|
|
61
|
+
Single-quote any glob in `--write-set` (safe in bash and PowerShell; unquoted, the shell expands it).
|
|
53
62
|
`blocking` turns into an `{awaiting}` on the next `next`.
|
|
54
63
|
- **`{node}`** — run the brick: dispatch its `agent` (or follow its `skill`) with the `prompt`,
|
|
55
|
-
the `card` and the `
|
|
56
|
-
`git status --porcelain | geneseed loop record --outcome <outcome>` —
|
|
57
|
-
`--card '<card json>'` when it reports `more
|
|
64
|
+
the `card`, the `notes` and the template's `rules`. Then report the outcome, one of its `outcomes`:
|
|
65
|
+
`git status --porcelain | geneseed loop record --outcome <outcome>` — the iteration head
|
|
66
|
+
(`identify`, `upgrade-scout`, `ci-triage`) adds `--card '<card json>'` when it reports `more`;
|
|
67
|
+
a brick that reports a note file's path gets `--note-file <path>`, so its finding lands in
|
|
68
|
+
`notes`; `--note "<short, one line, no git command>"` only for a note you write yourself.
|
|
58
69
|
- **`{terminal: "$close"}`** — see *The end*. **`{terminal: "$stop"}`** — report the `reason`
|
|
59
70
|
and the `summary`, and leave the branch as it is.
|
|
60
71
|
|
|
@@ -69,8 +80,9 @@ What `score --diff`, `decide` and `record` print back:
|
|
|
69
80
|
keeping `LOOP.md`: `git stash -u -m loop-discarded -- . :^LOOP.md` (never `git stash push` —
|
|
70
81
|
the word `push` trips the git gate mid-run).
|
|
71
82
|
- **`{done: true}`**, **`{empty}`**, **`{resumed}`**, **`{dropped}`**, **`{node}`**, **`{verify}`**,
|
|
72
|
-
**`{stopped}`**, a declared score, and any result with
|
|
73
|
-
included — it surfaces as `{awaiting}`) — call `next`
|
|
83
|
+
**`{awaiting}`** (a gate), **`{stopped}`**, a declared score, and any result with
|
|
84
|
+
`commit: false` (a blocking diff score included — it surfaces as `{awaiting}`) — call `next`
|
|
85
|
+
again.
|
|
74
86
|
- **`{error}`** — read it; it names the step you skipped (`score --declared` before a mutate
|
|
75
87
|
brick, `score --diff` before `record`). Do the step, never edit the state block to get past it.
|
|
76
88
|
An `{error}` from `record` that mentions JSON means the shell mangled the card's quotes: retry
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
> {{DESC_THEME}}
|
|
4
4
|
<!-- invocation: user -->
|
|
5
5
|
|
|
6
|
-
**Trigger:** the user wants their own OpenCode colour theme
|
|
7
|
-
"create a custom theme", "I want my own colours", "a
|
|
8
|
-
|
|
6
|
+
**Trigger:** the user wants their own OpenCode colour theme, or asks to tweak the shipped
|
|
7
|
+
colours. Phrases: "make me a theme", "create a custom theme", "I want my own colours", "a
|
|
8
|
+
theme that matches my brand", "a darker/transparent version of this theme". For
|
|
9
9
|
changing the agent's *voice* (imperial, pirate…) that is a different concept — point
|
|
10
10
|
them at `--theme` / the setup wizard, not this {{SKILL}}.
|
|
11
11
|
|
package/src/skills/ponytail.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_PONYTAIL}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** the user says "ponytail", "be lazy", "lazy mode", "
|
|
5
|
+
**Trigger:** the user says "ponytail", "be lazy", "lazy mode", "yagni" or "do less", or complains about over-engineering, bloat, or needless dependencies. Also "simplest/minimal solution", "shortest path", or a complaint about boilerplate. Sets a build *mode* that persists across the session, not a one-shot edit — off by default until invoked. Off again on "stop ponytail" / "normal mode". For restructuring code that already exists use [refactor](refactor.md); to critique an artifact use [roast-me](roast-me.md).
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
1. Set the intensity. Ponytail is **off by default**; invoking it turns it on at **full** unless a level is named. **lite** — build what's asked, name the lazier alternative in one line, user picks. **full** — the ladder enforced, shortest diff, shortest explanation. **ultra** — YAGNI extremist, ship the one-liner and challenge the rest of the requirement in the same breath. Switch any time with `/ponytail lite|full|ultra|off` (on OpenCode this command persists the level for the geneseed-ponytail plugin; `off` stops it).
|
package/src/skills/profile.md
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_PROFILE}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** the user wants the agent to know who they are
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
now works.
|
|
5
|
+
**Trigger:** the user wants the agent to know who they are, or `PROFILE.md` is still
|
|
6
|
+
the untouched stub. Phrases: "set up my profile", "create my profile", "update my
|
|
7
|
+
profile". Also when an existing profile visibly contradicts how the user now works.
|
|
9
8
|
|
|
10
9
|
## Procedure
|
|
11
10
|
1. Locate `PROFILE.md` beside the deployed AGENT.md and read it ({{LAW:verify-before-asserting}} — the
|
package/src/skills/prose.md
CHANGED
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_PROSE}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** about to hand a human written prose
|
|
6
|
-
|
|
7
|
-
person wrote it, not a model.
|
|
5
|
+
**Trigger:** about to hand a human written prose (a commit body, PR description, doc,
|
|
6
|
+
code comment, {{MEMORY}} note, or reply) that should read as a person's, not a model's.
|
|
8
7
|
|
|
9
8
|
## Procedure
|
|
10
9
|
1. Draft for content first, fix voice on a second pass — don't self-censor while
|
package/src/skills/quiz.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<!-- invocation: user -->
|
|
6
6
|
|
|
7
|
-
**Trigger:** the user wants what they know *tested*, not explained
|
|
7
|
+
**Trigger:** the user wants what they know *tested*, not explained. Phrases: "drill me on X",
|
|
8
8
|
"quiz me until it sticks", "let me explain X to you and catch me", "I think I already
|
|
9
9
|
know X, prove me wrong", "find the holes in what I know". Three shapes, picked from the
|
|
10
10
|
ask: a **drill** (practise until reflex), a **feynman** (explain it back, get caught on
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: react-view-transitions
|
|
3
|
-
description: Guide for implementing smooth, native-feeling animations using React's View Transition API (
|
|
3
|
+
description: Guide for implementing smooth, native-feeling animations using React's View Transition API (`ViewTransition` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter/exit of components, animate list reorder, implement directional (forward/back) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
author: vercel
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vendored skill — react-view-transitions
|
|
2
2
|
|
|
3
|
-
This folder is a third-party skill vendored **verbatim** (
|
|
3
|
+
This folder is a third-party skill vendored **verbatim** (two lines aside, below) into Geneseed, not a
|
|
4
4
|
Geneseed-authored skill. It rides along in the rendered bundle and is exempt from
|
|
5
5
|
Geneseed's authoring gates (token, dead-link, hermeticity, skill counts) — it is
|
|
6
6
|
listed in the generator's `VENDORED_SKILL_DIRS`.
|
|
@@ -15,13 +15,18 @@ listed in the generator's `VENDORED_SKILL_DIRS`.
|
|
|
15
15
|
The skill follows the [Agent Skills](https://agentskills.io/) format (`SKILL.md` +
|
|
16
16
|
`references/`). Its internal links point at the upstream project's own files; do not
|
|
17
17
|
"fix" them to Geneseed paths — that is why the folder is gate-exempt. To update,
|
|
18
|
-
re-copy the upstream folder, re-apply the
|
|
18
|
+
re-copy the upstream folder, re-apply the two deviations below, and bump the commit above.
|
|
19
19
|
|
|
20
|
-
**
|
|
20
|
+
**Deviation 1:** upstream's frontmatter says `name: vercel-react-view-transitions`;
|
|
21
21
|
here it is `name: react-view-transitions`. The Agent Skills format requires the name to
|
|
22
22
|
match the skill's folder, and a strict host skips a skill that breaks it —
|
|
23
23
|
renaming the folder instead would rename the installed skill on every host.
|
|
24
24
|
|
|
25
|
+
**Deviation 2:** upstream's `description:` writes the component as `` `<ViewTransition>` ``;
|
|
26
|
+
here it is `` `ViewTransition` ``. The Agent Skills spec forbids XML tags in a description, and
|
|
27
|
+
`checkBuild`'s description arm reports one for every first-party skill — the tag would be the
|
|
28
|
+
only one left in any install's catalogue.
|
|
29
|
+
|
|
25
30
|
**Deliberately not copied:** upstream's `README.md` (the repo-facing readme: install
|
|
26
31
|
command and folder tree, nothing an agent reads). `AGENTS.md`, upstream's compiled
|
|
27
32
|
all-in-one copy, IS kept — `SKILL.md`'s closing section points the agent at it.
|
package/src/skills/research.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_RESEARCH}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** a question needs current, external, or wide-ranging
|
|
6
|
-
|
|
7
|
-
open web.
|
|
5
|
+
**Trigger:** a question needs current, external, or wide-ranging facts that are neither
|
|
6
|
+
in this repository nor in the model's own knowledge. They are gathered and verified from
|
|
7
|
+
the open web.
|
|
8
8
|
|
|
9
9
|
**Requires:** a host web-search or web-fetch capability ({{DOCTRINE:tool-discovery}}) — without one,
|
|
10
10
|
stop and report it ({{LAW:surface-failures}}); never substitute recall for verified research.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_REVIEW_RESPONSE}}
|
|
4
4
|
|
|
5
|
-
**Trigger:**
|
|
6
|
-
|
|
5
|
+
**Trigger:** review feedback has arrived — from a human or another agent — and is about
|
|
6
|
+
to be acted on.
|
|
7
7
|
|
|
8
8
|
## Procedure
|
|
9
9
|
1. Read every comment in full before changing anything. Group related comments.
|
package/src/skills/rule.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_RULE}}
|
|
4
4
|
|
|
5
|
-
**Trigger:**
|
|
6
|
-
|
|
7
|
-
fact ("
|
|
5
|
+
**Trigger:** the user says "always…", "never…", "from now on…" or "remember that…".
|
|
6
|
+
Anything the user wants to outlive this session counts: a standing rule ("make that a
|
|
7
|
+
rule") or a durable fact ("note that…", "keep in mind…"). Also fires when a
|
|
8
8
|
`feedback` {{MEMORY}} lesson keeps recurring and deserves promotion, or when
|
|
9
9
|
`user-rules.md` needs review — a trial rule past its date, a stale rule, a bloated
|
|
10
10
|
set. Nothing reaches `user-rules.md` or {{MEMORY}} except through here ({{DOCTRINE:persist-insight}}).
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_SECURITY_AUDIT}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** a change touches the security surface
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
**Trigger:** a change touches the security surface, or the user asks for a "security
|
|
6
|
+
review", "threat model", or "is this safe". The surface: authentication, authorisation,
|
|
7
|
+
session or token handling, input from outside the trust boundary, file or shell access,
|
|
8
|
+
cryptography, secrets, a new dependency, a network-facing endpoint. The
|
|
9
9
|
[geneseed-code-review {{SKILL}}](geneseed-code-review.md) reviews a diff for
|
|
10
10
|
correctness first; this one asks a different question of the same diff: *how would
|
|
11
11
|
this be attacked, and what does it leak*. Run both before shipping anything on the
|
package/src/skills/teach.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<!-- invocation: user -->
|
|
6
6
|
|
|
7
|
-
**Trigger:** the user wants to *learn* something and asks
|
|
7
|
+
**Trigger:** the user wants to *learn* something and asks to be taught. Phrases: "teach me X",
|
|
8
8
|
"get me up to speed on X", "this is confusing, break it down", "explain this passage",
|
|
9
9
|
"how do I get to X in N days". Three shapes, picked from the ask: a **crash course**
|
|
10
10
|
(from zero to functional, fast), a **decode** (confusing material handed over, make it
|
package/src/skills/wiki.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_WIKI}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** a task needs
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
**Trigger:** a task needs the user's machine-wide knowledge base, or has produced a
|
|
6
|
+
durable cross-project fact worth writing back. The knowledge base is declared in
|
|
7
|
+
`wiki.jsonc` (AGENT.md §8).
|
|
8
8
|
|
|
9
9
|
## Procedure
|
|
10
10
|
|
package/src/skills/workflow.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_WORKFLOW}}
|
|
4
4
|
|
|
5
|
-
**Trigger:** a task
|
|
6
|
-
fan-out across independent units, a staged
|
|
7
|
-
handoff between phases, or a loop that accumulates
|
|
8
|
-
|
|
5
|
+
**Trigger:** a task benefits from *deterministic* multi-agent orchestration **and** the
|
|
6
|
+
host exposes a workflow tool. The shapes: a fan-out across independent units, a staged
|
|
7
|
+
find→verify pipeline, a fresh-context handoff between phases, or a loop that accumulates
|
|
8
|
+
to a target. When the host has no workflow tool, use [parallel-agents](parallel-agents.md)
|
|
9
9
|
or [council](council.md) instead — those are *model-driven*; this {{SKILL}} is
|
|
10
10
|
*code-driven*.
|
|
11
11
|
|
package/src/skills/worktree.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> {{DESC_WORKTREE}}
|
|
4
4
|
|
|
5
|
-
**Trigger:**
|
|
6
|
-
[pipeline](pipeline.md) crew
|
|
5
|
+
**Trigger:** the user says "worktree" or "isolate this", or work must not share the
|
|
6
|
+
checkout with work in flight. That covers a [pipeline](pipeline.md) crew needing its own tree, a second task starts while the first
|
|
7
7
|
is uncommitted, another agent or session is editing this checkout, a risky migration
|
|
8
8
|
or rewrite needs a disposable copy, or the user says "worktree", "isolate this",
|
|
9
9
|
"don't touch my checkout". Also the first thing to reach for when `git status` shows
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{t as r}from"./api-D_ixdyEY.js";import{J as i,N as a,k as o,l as s,y as c}from"./index-KHt3wE_K.js";import{a as l,i as u,n as d,o as f,r as p,t as m}from"./activity-Dr7ZMBI3.js";import{t as h}from"./usePoll-DD8VjtSg.js";var g=e(t(),1),_=n();function v({s:e}){let t=p[e.status]||p.idle,n=e.files,r=e.todos,i=r&&r.total>0||e.error||e.blocked_on;return(0,_.jsxs)(`a`,{className:`card pad-md act-card`,href:`#/activity/${encodeURIComponent(e.session_id)}`,children:[(0,_.jsxs)(`div`,{className:`row between wrap gap-12`,children:[(0,_.jsxs)(`div`,{className:`row gap-10`,style:{minWidth:0},children:[(0,_.jsx)(`span`,{className:`feed-dot ${t.cls||`acc`}`,style:{width:9,height:9}}),(0,_.jsxs)(`div`,{style:{minWidth:0},children:[(0,_.jsx)(`h3`,{style:{margin:0},children:e.title||l(e.cwd)||e.session_id}),e.cwd&&(0,_.jsx)(`div`,{className:`dim mono`,style:{fontSize:12,...m},title:e.cwd,children:e.cwd})]})]}),(0,_.jsxs)(`div`,{className:`row gap-8`,style:{flexShrink:0},children:[e.model&&(0,_.jsx)(`span`,{className:`badge mono`,title:`model`,children:e.model}),e.agent&&(0,_.jsx)(`span`,{className:`badge`,children:e.agent}),(0,_.jsxs)(`span`,{className:`badge ${t.cls}`,children:[(0,_.jsx)(`span`,{className:`dot`}),t.label]}),(0,_.jsx)(o,{name:`chevron`,className:`glyph act-chev`})]})]}),e.phase&&(0,_.jsxs)(`div`,{className:`row gap-8`,style:{marginTop:10,fontSize:14},children:[(0,_.jsx)(o,{name:`activity`}),(0,_.jsx)(`span`,{style:m,children:e.phase})]}),(e.tokens>0||e.cost>0||e.turn_started_at||n&&n.count>0)&&(0,_.jsxs)(`div`,{className:`row wrap`,style:{gap:16,marginTop:12,fontSize:13,color:`var(--text-2)`},children:[e.tokens>0&&(0,_.jsxs)(`span`,{children:[f(e.tokens),` tok`]}),e.cost>0&&(0,_.jsxs)(`span`,{children:[`$`,e.cost.toFixed(2)]}),e.turn_started_at?(0,_.jsx)(`span`,{children:(0,_.jsx)(d,{startedAt:e.turn_started_at})}):null,n&&n.count>0&&(0,_.jsxs)(`span`,{children:[n.count,` file`,n.count===1?``:`s`,` `,(0,_.jsxs)(`span`,{style:{color:`var(--good)`},children:[`+`,n.additions]}),` `,(0,_.jsxs)(`span`,{style:{color:`var(--bad)`},children:[`−`,n.deletions]})]})]}),i&&(0,_.jsxs)(`div`,{className:`row between wrap gap-12`,style:{marginTop:12,paddingTop:10,borderTop:`1px solid var(--line)`},children:[r&&r.total>0?(0,_.jsxs)(`span`,{className:`row gap-8 dim`,style:{fontSize:13},children:[(0,_.jsx)(u,{done:r.done,total:r.total}),`plan `,r.done,`/`,r.total]}):(0,_.jsx)(`span`,{}),e.error?(0,_.jsx)(`span`,{className:`badge bad`,title:e.error,style:{maxWidth:300,...m},children:e.error}):e.blocked_on?(0,_.jsx)(`span`,{className:`badge bad`,title:e.blocked_on,style:{maxWidth:300,...m},children:e.blocked_on}):null]}),(0,_.jsxs)(`div`,{className:`dim mono`,style:{fontSize:11,marginTop:8},children:[`updated `,a(e.updated_at),` ago`]})]})}function y(){let[e,t]=(0,g.useState)(null),[n,a]=(0,g.useState)(``);h(e=>r.activity().then(n=>{e()&&(t(n),a(``))},t=>{e()&&a(t.message)}),2e3,[]);let o=!e||e.enabled!==!1,l=e?.activity||[],u=i(),d=async()=>{let e=!o;try{let n=await r.activityToggle(e);t(e=>({...e||{},enabled:n.enabled,activity:n.enabled&&e?.activity||[]})),a(``)}catch(e){a(e.message)}};return(0,_.jsxs)(`div`,{className:`narrow`,children:[(0,_.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h1`,{className:`h`,children:`Activity`}),(0,_.jsx)(`p`,{className:`sub`,children:`Live OpenCode sessions this harness is running: what each one is doing right now. Refreshes every couple of seconds; sessions drop off when their process exits.`})]}),(0,_.jsxs)(`div`,{className:`row gap-10`,style:{alignItems:`center`,flexShrink:0},children:[(0,_.jsx)(`span`,{className:`dim mono`,style:{fontSize:12},children:o?`tracking on`:`tracking off`}),(0,_.jsx)(`div`,{className:`sw-toggle${o?` on`:``}`,role:`switch`,"aria-checked":o,"aria-label":`Toggle activity tracking`,tabIndex:0,onClick:d,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),d())}})]})]}),(0,_.jsx)(s,{error:n,style:{marginBottom:12}}),e?o?l.length===0?(0,_.jsxs)(`div`,{className:`empty`,children:[(0,_.jsx)(`div`,{className:`big`,children:`No active sessions`}),`Run `,(0,_.jsx)(`code`,{children:`opencode`}),` and the sessions it spins up appear here.`]}):(0,_.jsx)(`div`,{className:`stack gap-12`,ref:u,children:l.map(e=>(0,_.jsx)(`div`,{"data-flip":e.session_id,children:(0,_.jsx)(v,{s:e})},e.session_id))}):(0,_.jsxs)(`div`,{className:`empty`,children:[(0,_.jsx)(`div`,{className:`big`,children:`Activity tracking is off`}),`The plugin isn't recording sessions. Flip the switch to turn it back on.`]}):(0,_.jsx)(c,{label:`Reading live sessions…`})]})}export{y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{t as r}from"./api-D_ixdyEY.js";import{N as i,k as a,y as o}from"./index-KHt3wE_K.js";import{a as s,n as c,o as l,r as u,t as d}from"./activity-Dr7ZMBI3.js";import{t as f}from"./usePoll-DD8VjtSg.js";var p=e(t(),1),m=n();function h(e){return e.kind===`tool`?e.status===`error`?`bad`:e.status===`completed`?`ok`:`acc`:{retry:`warn`,error:`bad`,subtask:`acc`,text:`acc`}[e.kind]||``}function g({rec:e}){let t=e.who===`you`,n=[];t||(e.kind===`tool`&&e.ms!=null&&n.push(`${(e.ms/1e3).toFixed(1)}s`),e.kind===`step`&&(e.tokens&&n.push(`${l(e.tokens)} tok`),e.cost&&n.push(`$${e.cost.toFixed(2)}`)),e.kind===`subtask`&&e.agent&&n.unshift(e.agent));let r=!t&&(e.kind===`text`||e.kind===`thinking`||e.kind===`step`),i=t?e.text:e.label||e.snippet||e.kind;return(0,m.jsxs)(`div`,{className:`row gap-10`,style:{alignItems:`baseline`},children:[(0,m.jsx)(`span`,{className:`badge ${t?``:`acc`}`,style:{flexShrink:0,minWidth:52,justifyContent:`center`},children:t?`you`:`agent`}),(0,m.jsxs)(`div`,{style:{minWidth:0,flex:1,fontSize:13},children:[!t&&(0,m.jsx)(`span`,{className:`feed-dot ${h(e)||`acc`}`,style:{display:`inline-block`,marginRight:8,verticalAlign:`middle`}}),e.kind===`thinking`&&(0,m.jsx)(`span`,{className:`dim`,children:`thinking: `}),r?(0,m.jsx)(`span`,{className:`dim`,children:i}):t?i:(0,m.jsx)(`b`,{children:i}),e.error&&(0,m.jsxs)(`span`,{className:`dim`,children:[`: `,e.error]})]}),n.length>0&&(0,m.jsx)(`span`,{className:`dim mono`,style:{flexShrink:0,fontSize:12},children:n.join(` · `)})]})}function _({turns:e}){return!e||e.length===0?(0,m.jsx)(`div`,{className:`dim`,style:{fontSize:13},children:`No conversation captured yet.`}):(0,m.jsx)(`div`,{className:`stack gap-12`,children:e.map((e,t)=>{let n=e.role===`user`;return(0,m.jsxs)(`div`,{className:`row gap-10`,style:{alignItems:`baseline`},children:[(0,m.jsx)(`span`,{className:`badge ${n?``:`acc`}`,style:{flexShrink:0,minWidth:52,justifyContent:`center`},children:n?`you`:`agent`}),(0,m.jsx)(`div`,{style:{minWidth:0,fontSize:13,color:n?`inherit`:`var(--text-2)`},children:e.text})]},t)})})}function v({sid:e}){let[t,n]=(0,p.useState)(null),[h,v]=(0,p.useState)(``),[y,b]=(0,p.useState)(!1),[x,S]=(0,p.useState)(!1);f(t=>r.activityDetail(e).then(e=>{t()&&(n(e),v(``),b(!1))},e=>{t()&&(e.status===404?b(!0):v(e.message))}),2e3,[e]);let C=(0,m.jsxs)(`a`,{className:`btn ghost sm`,href:`#/activity`,style:{marginBottom:12,display:`inline-flex`,gap:6},children:[(0,m.jsx)(a,{name:`arrow`,style:{transform:`rotate(180deg)`}}),` Activity`]});if(y)return(0,m.jsxs)(`div`,{className:`narrow`,children:[C,(0,m.jsxs)(`div`,{className:`empty`,children:[(0,m.jsx)(`div`,{className:`big`,children:`Session ended`}),`It's no longer live. `,(0,m.jsx)(`a`,{href:`#/activity`,children:`Back to Activity`}),`.`]})]});if(!t)return(0,m.jsxs)(`div`,{className:`narrow`,children:[C,(0,m.jsx)(o,{label:`Loading session…`})]});let w=t.session,T=u[w.status]||u.idle,E=w.files,D=w.todos,O=!!(E&&E.items&&E.items.length>0),k=!!(D&&D.items&&D.items.length>0),A=t.conversation||[],j=t.timeline||[],M=[...A.filter(e=>e.role===`user`).map(e=>({who:`you`,text:e.text,t:e.t||0})),...j.map(e=>({...e,who:`agent`}))].sort((e,t)=>(e.t||0)-(t.t||0));return(0,m.jsxs)(`div`,{className:`narrow`,children:[C,h&&(0,m.jsx)(`p`,{className:`badge bad`,style:{marginBottom:12},children:h}),(0,m.jsxs)(`div`,{className:`card pad-md`,children:[(0,m.jsxs)(`div`,{className:`row between wrap gap-12`,children:[(0,m.jsxs)(`div`,{style:{minWidth:0},children:[(0,m.jsx)(`h1`,{className:`h`,style:{margin:0},children:w.title||s(w.cwd)||w.session_id}),w.cwd&&(0,m.jsx)(`div`,{className:`dim mono`,style:{fontSize:12,...d},title:w.cwd,children:w.cwd})]}),(0,m.jsxs)(`div`,{className:`row gap-8`,style:{flexShrink:0},children:[w.model&&(0,m.jsx)(`span`,{className:`badge mono`,children:w.model}),w.agent&&(0,m.jsx)(`span`,{className:`badge`,children:w.agent}),(0,m.jsxs)(`span`,{className:`badge ${T.cls}`,children:[(0,m.jsx)(`span`,{className:`dot`}),T.label]})]})]}),w.phase&&(0,m.jsxs)(`div`,{className:`row gap-8`,style:{marginTop:10,fontSize:14},children:[(0,m.jsx)(a,{name:`activity`}),(0,m.jsx)(`span`,{style:d,children:w.phase})]}),(0,m.jsxs)(`div`,{className:`row wrap`,style:{gap:16,marginTop:12,fontSize:13,color:`var(--text-2)`},children:[w.tokens>0&&(0,m.jsxs)(`span`,{children:[l(w.tokens),` tok`]}),w.cost>0&&(0,m.jsxs)(`span`,{children:[`$`,w.cost.toFixed(2)]}),w.turn_started_at?(0,m.jsx)(`span`,{children:(0,m.jsx)(c,{startedAt:w.turn_started_at})}):null,(0,m.jsxs)(`span`,{className:`dim`,children:[`updated `,i(w.updated_at),` ago`]})]}),(w.error||w.blocked_on)&&(0,m.jsx)(`div`,{style:{marginTop:10},children:(0,m.jsx)(`span`,{className:`badge bad`,style:{maxWidth:`100%`,...d},children:w.error||w.blocked_on})})]}),(O||k)&&(0,m.jsxs)(`div`,{className:`grid gap-12`,style:{marginTop:12,gridTemplateColumns:O&&k?`minmax(0, 1fr) minmax(0, 1fr)`:`1fr`},children:[O&&(0,m.jsxs)(`div`,{className:`card pad-md`,children:[(0,m.jsx)(`div`,{className:`card-head`,children:(0,m.jsxs)(`h3`,{children:[`Files touched `,(0,m.jsxs)(`span`,{className:`dim`,children:[`(`,E.count,`)`]})]})}),(0,m.jsx)(`div`,{className:`stack`,style:{gap:6,marginTop:8},children:E.items.map(e=>(0,m.jsxs)(`div`,{className:`row between gap-12`,style:{fontSize:13},children:[(0,m.jsx)(`span`,{className:`mono`,style:{...d,minWidth:0,flex:1},title:e.file,children:e.file}),(0,m.jsxs)(`span`,{style:{flexShrink:0},children:[(0,m.jsxs)(`span`,{style:{color:`var(--good)`},children:[`+`,e.additions]}),` `,(0,m.jsxs)(`span`,{style:{color:`var(--bad)`},children:[`−`,e.deletions]})]})]},e.file))})]}),k&&(0,m.jsxs)(`div`,{className:`card pad-md`,children:[(0,m.jsx)(`div`,{className:`card-head`,children:(0,m.jsxs)(`h3`,{children:[`Plan`,` `,(0,m.jsxs)(`span`,{className:`dim`,children:[`(`,D.done,`/`,D.total,`)`]})]})}),(0,m.jsx)(`div`,{className:`stack`,style:{gap:6,marginTop:8},children:D.items.map((e,t)=>(0,m.jsxs)(`div`,{className:`row gap-8`,style:{fontSize:13},children:[(0,m.jsx)(`span`,{className:`feed-dot ${e.status===`completed`?`ok`:e.status===`in_progress`?`acc`:``}`}),(0,m.jsx)(`span`,{style:{textDecoration:e.status===`completed`?`line-through`:`none`,color:e.status===`completed`?`var(--text-3)`:`inherit`},children:e.content})]},t))})]})]}),(0,m.jsxs)(`div`,{className:`card pad-md`,style:{marginTop:12},children:[(0,m.jsxs)(`div`,{className:`card-head`,style:{justifyContent:`space-between`,marginBottom:12},children:[(0,m.jsx)(`h3`,{children:`Timeline`}),j.length>0&&(0,m.jsx)(`button`,{className:`btn ghost sm`,onClick:()=>S(e=>!e),children:x?`Show conversation`:`Show all ${j.length} steps`})]}),x?(0,m.jsx)(`div`,{className:`stack gap-12`,children:M.map((e,t)=>(0,m.jsx)(g,{rec:e},t))}):(0,m.jsx)(_,{turns:A})]})]})}export{v as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/GreenhouseView-6KDjX8da.js","assets/sections-GalMS0Zv.js","assets/react-B9Z_tXRV.js","assets/drawable-zVVDbsyw.js","assets/index-KHt3wE_K.js","assets/api-D_ixdyEY.js","assets/index-Ctp-4poP.css","assets/jobBuckets-Dbq8ZlWW.js","assets/OperatorHudView-BPP1dtLz.js","assets/JournalView-C8MrOz2c.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e,o as t,r as n,s as r}from"./sections-GalMS0Zv.js";import{i,t as a}from"./react-B9Z_tXRV.js";import{t as o}from"./api-D_ixdyEY.js";import{A as s,F as c,I as l,L as u,M as d,N as f,U as p,W as m,c as h,j as g,k as _,l as v,q as y,t as b,x,y as S}from"./index-KHt3wE_K.js";var C=r(i(),1),w={neutral:`Loaded & ready`,imperial:`The Codex in force`,military:`The unit stands ready`,cyberpunk:`Jacked in`,wizard:`Wards in place`,pirate:`The crew stands ready`,gamer:`Game loaded`,sports:`The squad takes the field`,biker:`The crew rolls out`,commentator:`Lights out, away we go`,verstappen:`Setup's in`,joker:`Mic check`,mean:`Rules are up`,marvin:`Online. Reluctantly.`},T=e=>e.deployed?w[e.theme]||`Loaded & ready`:`Not deployed`,E=a();function D({value:e,size:t=232}){let n=y(e,1100)??0,r=t/2-14,i=2*Math.PI*r,a=i*(1-n);return(0,E.jsxs)(`div`,{className:`ring-wrap`,style:{width:t,height:t},children:[(0,E.jsxs)(`svg`,{viewBox:`0 0 ${t} ${t}`,children:[(0,E.jsx)(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:`10`}),(0,E.jsx)(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:`var(--accent)`,strokeWidth:`10`,strokeLinecap:`round`,strokeDasharray:i,strokeDashoffset:a}),Array.from({length:48}).map((e,i)=>{let a=i/48*2*Math.PI,o=r-18,s=r-24,c=t/2+Math.cos(a)*o,l=t/2+Math.sin(a)*o,u=t/2+Math.cos(a)*s,d=t/2+Math.sin(a)*s;return(0,E.jsx)(`line`,{x1:c,y1:l,x2:u,y2:d,stroke:`var(--line-2)`,strokeWidth:`1`,opacity:i/48<n?.9:.25},i)})]}),(0,E.jsxs)(`div`,{className:`ring-center`,children:[(0,E.jsxs)(`div`,{className:`pct`,children:[Math.round(n*100),(0,E.jsx)(`span`,{style:{fontSize:20,color:`var(--text-3)`},children:`%`})]}),(0,E.jsx)(`div`,{className:`lbl`,children:`germination`})]})]})}function O({overview:e}){let t=s(e.diff),n=e.counts||{};return(0,E.jsxs)(`div`,{className:`card kpiband rise mb-16`,children:[[{key:`agents`,label:`Agents`,hash:`#/agents`},{key:`skills`,label:`Skills`,hash:`#/skills`},{key:`laws`,label:`Invariants`,hash:`#/laws`}].map(e=>{let t=n[e.key];return(0,E.jsxs)(`a`,{className:`kseg`,href:e.hash,title:`Open ${e.label}`,children:[(0,E.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:t==null?`—`:(0,E.jsx)(m,{value:t})}),(0,E.jsx)(`span`,{className:`kseg-l`,children:e.label})]},e.key)}),(0,E.jsx)(`div`,{className:`kseg-spacer`}),(0,E.jsxs)(`button`,{className:`kseg`+(t>0?` hot`:``),onClick:()=>p(`#/diff`),title:`Open changes`,children:[(0,E.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:(0,E.jsx)(m,{value:t})}),(0,E.jsx)(`span`,{className:`kseg-l`,children:`Local edits`}),t>0&&(0,E.jsx)(`span`,{className:`delta up`,children:`▲`})]})]})}function k({overview:t}){return(0,E.jsx)(`div`,{className:`genome`,children:n.map((n,r)=>{let i=e[n],a=t.counts?.[n];return(0,E.jsxs)(`div`,{className:`card gcell rise`,style:{"--i":r},onClick:()=>p(`#/section/`+n),children:[(0,E.jsxs)(`div`,{className:`gtop`,children:[(0,E.jsx)(`span`,{className:`gname`,children:i.label}),(0,E.jsx)(_,{name:i.icon,className:`gicon`})]}),(0,E.jsx)(`div`,{className:`gcount`+(a===0?` zero`:``),children:a==null?`—`:(0,E.jsx)(m,{value:a})}),(0,E.jsx)(`div`,{className:`gdesc`,children:i.desc})]},n)})})}function A({jobs:e}){if(!e||e.length===0)return(0,E.jsx)(`div`,{className:`feed`,children:(0,E.jsxs)(`div`,{className:`empty`,children:[(0,E.jsx)(`div`,{className:`big`,children:`No activity yet`}),`Actions you run appear here.`]})});let t={done:`ok`,running:`acc`,failed:`bad`},n=[...e].sort((e,t)=>t.started-e.started).slice(0,8);return(0,E.jsx)(`div`,{className:`feed`,children:n.map(e=>(0,E.jsxs)(`div`,{className:`feed-row`,children:[(0,E.jsx)(`span`,{className:`feed-dot ${t[e.status]||`ok`}`}),(0,E.jsx)(`span`,{className:`feed-txt`,children:(0,E.jsx)(`b`,{children:e.action})}),(0,E.jsxs)(`span`,{className:`feed-when`,children:[f(e.started),` ago`]})]},e.id))})}function j({overview:e,sigil:t,setup:r,jobs:i,onAction:a}){let o=T(e),s=d(e,r);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`card pad-lg rise mb-16`,children:(0,E.jsxs)(`div`,{className:`hero`,children:[(0,E.jsx)(D,{value:s}),(0,E.jsxs)(`div`,{className:`hero-facts`,children:[(0,E.jsx)(`div`,{className:`ttl`,children:o}),t&&(0,E.jsxs)(`div`,{className:`voice-readout`,children:[(0,E.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,E.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,E.jsxs)(`p`,{className:`sub`,children:[`One source rendered into `,(0,E.jsx)(`code`,{children:e.target}),`. Every repo on this machine inherits it.`]}),(0,E.jsxs)(`div`,{className:`hero-chips`,children:[(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`voice`}),(0,E.jsx)(`span`,{className:`cv`,style:{textTransform:`capitalize`},children:e.theme})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`mode`}),(0,E.jsx)(`span`,{className:`cv`,children:e.emit})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`footprint`}),(0,E.jsx)(`span`,{className:`cv`,children:e.footprint})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`built`}),(0,E.jsx)(`span`,{className:`cv`,children:e.build_time||`unknown`})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`fp`}),(0,E.jsx)(`span`,{className:`cv`,children:r?.installed_fp||`—`})]})]}),(0,E.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,E.jsxs)(`button`,{className:`btn`,onClick:()=>a(`update`),children:[(0,E.jsx)(_,{name:`refresh`}),`Update`]}),(0,E.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`build-all`),children:[(0,E.jsx)(_,{name:`build`}),`Rebuild`]}),(0,E.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`doctor`),children:[(0,E.jsx)(_,{name:`doctor`}),`Run doctor`]})]})]})]})}),(0,E.jsx)(O,{overview:e}),(0,E.jsxs)(`div`,{className:`grid split-status`,children:[(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsxs)(`div`,{className:`card-head`,children:[(0,E.jsx)(`h3`,{children:`Capability genome`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsxs)(`span`,{className:`tick`,children:[n.length,` sections`]})})]}),(0,E.jsx)(k,{overview:e})]}),(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsxs)(`div`,{className:`card-head`,children:[(0,E.jsx)(`h3`,{children:`Recent activity`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsxs)(`span`,{className:`badge acc`,children:[(0,E.jsx)(`span`,{className:`dot`}),`live`]})})]}),(0,E.jsx)(A,{jobs:i})]})]})]})}function M({k:t,overview:n,max:r}){let i=e[t],a=n.counts?.[t]??0;return(0,E.jsxs)(`div`,{className:`strand`,children:[(0,E.jsxs)(`span`,{className:`strand-name`,children:[(0,E.jsx)(`span`,{className:`strand-dot`}),(0,E.jsx)(`a`,{href:`#/section/`+t,className:`strand-link stretch-link`,children:i.label})]}),(0,E.jsx)(`div`,{className:`hbar`,children:(0,E.jsx)(`i`,{style:{width:`${a/r*100}%`}})}),(0,E.jsx)(`span`,{className:`strand-val`,children:a})]})}function N({overview:e,sigil:t,setup:r,jobs:i}){let a=g(e.counts),o=r?.version_verdict||``,c=o.includes(`up to date`),l=s(e.diff),u=[[`Source`,`src/, the canonical genetic material`,r?.source_fp||`—`,!0],[`Render`,`geneseed build → ${e.emit}`,e.theme+` voice`,!0],[`Deployed`,e.target,`inherited by every repo`,!1]];return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`mb-16`,children:(0,E.jsxs)(`div`,{className:`card pad-lg rise`,style:{position:`relative`,overflow:`hidden`},children:[(0,E.jsx)(`h2`,{className:`h`,style:{fontSize:22,margin:`0 0 18px`},children:`Gene-seed lineage`}),(0,E.jsxs)(`div`,{className:`lineage-track`,children:[(0,E.jsx)(`div`,{className:`spine`}),u.map(([e,t,n,r],i)=>(0,E.jsxs)(`div`,{className:`lineage-step`,children:[(0,E.jsx)(`span`,{className:`node ${r?`on`:``}`}),(0,E.jsx)(`div`,{className:`lt`,children:e}),(0,E.jsx)(`div`,{className:`ld`,children:t}),(0,E.jsx)(`div`,{className:`ltag`,children:n})]},i))]}),(0,E.jsx)(`hr`,{className:`hr`}),t&&(0,E.jsxs)(`div`,{className:`voice-readout`,style:{marginBottom:14},children:[(0,E.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,E.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,E.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,E.jsxs)(`span`,{className:`badge ${c?`ok`:`warn`}`,children:[(0,E.jsx)(`span`,{className:`dot`}),`in sync · `,o]}),(0,E.jsxs)(`span`,{className:`badge`,children:[(0,E.jsx)(`span`,{className:`dot`}),l,` local edits`]})]})]})}),(0,E.jsxs)(`div`,{className:`grid split-even`,children:[(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsxs)(`div`,{className:`card-head`,children:[(0,E.jsx)(`h3`,{children:`Genome strand`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsx)(`span`,{className:`tick`,children:`by volume`})})]}),n.map(t=>(0,E.jsx)(M,{k:t,overview:e,max:a},t))]}),(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsx)(`div`,{className:`card-head`,children:(0,E.jsx)(`h3`,{children:`Recent activity`})}),(0,E.jsx)(A,{jobs:i})]})]})]})}function P({overview:t,setup:r,jobs:i}){let a=n.reduce((e,n)=>e+(t.counts?.[n]??0),0),o=g(t.counts),c=t.doctor?.ok,l=t.doctor?.problems?.length??0,u=s(t.diff);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`card pad-md rise mb-16`,children:(0,E.jsx)(`div`,{className:`row wrap between gap-16`,children:(0,E.jsxs)(`div`,{className:`row`,style:{gap:20,flexWrap:`wrap`},children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`status`}),(0,E.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:(0,E.jsxs)(`span`,{className:`badge ${t.deployed?`ok`:`warn`}`,children:[(0,E.jsx)(`span`,{className:`dot`}),t.deployed?`deployed`:`not deployed`]})})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`voice`}),(0,E.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6,textTransform:`capitalize`},children:t.theme})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`mode`}),(0,E.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6},children:t.emit})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`fingerprint`}),(0,E.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6,color:`var(--accent)`},children:r?.installed_fp||`—`})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`doctor`}),(0,E.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:c?(0,E.jsxs)(`span`,{className:`badge ok`,children:[(0,E.jsx)(`span`,{className:`dot`}),`clean`]}):(0,E.jsxs)(`span`,{className:`badge warn`,children:[(0,E.jsx)(`span`,{className:`dot`}),l,` issue`,l===1?``:`s`]})})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`edits`}),(0,E.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6},children:u})]})]})})}),(0,E.jsxs)(`div`,{className:`grid split-operator`,children:[(0,E.jsxs)(`div`,{className:`card rise`,style:{"--i":1},children:[(0,E.jsxs)(`div`,{className:`card-head pad-lg`,style:{padding:`18px 20px 0`,marginBottom:14},children:[(0,E.jsx)(`h3`,{children:`Sections`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsxs)(`span`,{className:`tick`,children:[a,` entries total`]})})]}),(0,E.jsxs)(`table`,{className:`tbl`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{children:[(0,E.jsx)(`th`,{children:`Section`}),(0,E.jsx)(`th`,{children:`Detail`}),(0,E.jsx)(`th`,{style:{width:130},children:`Share`}),(0,E.jsx)(`th`,{className:`num`,children:`Count`})]})}),(0,E.jsx)(`tbody`,{children:n.map(n=>{let r=e[n],i=t.counts?.[n]??0;return(0,E.jsxs)(`tr`,{className:`clickable`,children:[(0,E.jsx)(`td`,{className:`name`,children:(0,E.jsx)(`a`,{href:`#/section/`+n,className:`stretch-link`,children:r.label})}),(0,E.jsx)(`td`,{className:`muted`,children:r.desc}),(0,E.jsx)(`td`,{children:(0,E.jsx)(`div`,{className:`hbar`,children:(0,E.jsx)(`i`,{style:{width:`${i/o*100}%`}})})}),(0,E.jsx)(`td`,{className:`num`,children:i})]},n)})})]})]}),(0,E.jsxs)(`div`,{className:`card pad-lg rise`,style:{"--i":2},children:[(0,E.jsx)(`div`,{className:`card-head`,children:(0,E.jsx)(`h3`,{children:`Run log`})}),(0,E.jsx)(A,{jobs:i})]})]})]})}function F(){let[e,t]=(0,C.useState)(!1);return(0,E.jsxs)(`div`,{className:`stale-banner`,role:`alert`,children:[(0,E.jsx)(`span`,{children:`This console is running code from before your last upgrade.`}),(0,E.jsx)(`button`,{className:`btn sm`,onClick:async()=>{t(!0);try{await o.restart()}catch{}u(l)},disabled:e,children:e?`Restarting…`:`Restart`})]})}var I=t({default:()=>B}),L=(0,C.lazy)(()=>b(()=>import(`./GreenhouseView-6KDjX8da.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))),R=(0,C.lazy)(()=>b(()=>import(`./OperatorHudView-BPP1dtLz.js`),__vite__mapDeps([8,1,2,4,5,6,7]))),z=(0,C.lazy)(()=>b(()=>import(`./JournalView-C8MrOz2c.js`),__vite__mapDeps([9,1,2,5,3,4,6])));function B({overview:e,overviewError:t,onRetry:n,themes:r,setup:i,runs:a,onAction:s,layout:l=`cultivar`,dataRev:u}){let d=l,[f,p]=(0,C.useState)(`status`),m=e&&r.find(t=>t.name===e.theme)?.sigil||``,{data:g}=c(()=>d===`greenhouse`||d===`operator`?o.doctor().catch(()=>null):Promise.resolve(null),[d,u]),{data:_}=c(()=>d===`journal`?o.recent().catch(()=>null):Promise.resolve(null),[d,u]);if(!e)return t?(0,E.jsxs)(`div`,{children:[(0,E.jsx)(v,{error:`Could not load the harness overview: ${t}`}),(0,E.jsx)(`button`,{className:`btn`,onClick:n,children:`Retry`})]}):(0,E.jsx)(S,{});let y=e.daemon_stale?(0,E.jsx)(F,{}):null;return e.deployed?f===`status`&&d===`journal`?(0,E.jsxs)(C.Suspense,{fallback:(0,E.jsx)(S,{}),children:[y,(0,E.jsx)(z,{overview:e,recent:_,onAction:s,onDirection:p,dataRev:u})]}):(0,E.jsxs)(E.Fragment,{children:[y,(0,E.jsx)(`div`,{className:`head-row`,children:(0,E.jsx)(x,{"aria-label":`Dashboard view`,children:[[`status`,`Status`],[`lineage`,`Lineage`],[`operator`,`Operator`]].map(([e,t])=>(0,E.jsx)(`button`,{className:f===e?`on`:``,onClick:()=>p(e),"aria-pressed":f===e,children:t},e))})}),(0,E.jsxs)(`div`,{className:`view-in`,children:[f===`status`&&d===`cultivar`&&(0,E.jsx)(j,{overview:e,sigil:m,setup:i,jobs:a,onAction:s}),f===`status`&&d===`greenhouse`&&(0,E.jsx)(C.Suspense,{fallback:(0,E.jsx)(S,{}),children:(0,E.jsx)(L,{overview:e,sigil:m,jobs:a,doctor:g,onAction:s})}),f===`status`&&d===`operator`&&(0,E.jsx)(C.Suspense,{fallback:(0,E.jsx)(S,{}),children:(0,E.jsx)(R,{overview:e,jobs:a,doctor:g,onAction:s})}),f===`lineage`&&(0,E.jsx)(N,{overview:e,sigil:m,setup:i,jobs:a}),f===`operator`&&(0,E.jsx)(P,{overview:e,setup:i,jobs:a})]},f)]}):(0,E.jsxs)(E.Fragment,{children:[y,(0,E.jsx)(h,{onAction:s})]})}export{B as default,T as n,I as t};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{t as r}from"./api-D_ixdyEY.js";import{C as i,F as a,S as o,U as s,a as c,i as l,k as u,l as d,n as f,o as p,r as m,s as h,w as ee,x as te,y as g}from"./index-KHt3wE_K.js";import{a as _,c as v,i as y,l as b,n as x,o as S,r as C,s as ne,t as w}from"./Markdown-X2a3qvOh.js";var T=e(t(),1),E=n();function D(e,t=0){let n=String(e).toLowerCase().trim().replace(/[^a-z0-9\s-]/g,``).replace(/\s+/g,`-`).replace(/-+/g,`-`).replace(/^-+|-+$/g,``);return n&&/^[a-z]/.test(n)?n:`h-${t}-${n||`section`}`}function O(e){return e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[\[([^\]]+)\]\]/g,`$1`).replace(/`([^`]*)`/g,`$1`).replace(/\*\*|__/g,``).replace(/\*([^*\s][^*]*)\*/g,`$1`)}function k(e){let t=[],n=!1,r=0;for(let i of(e||``).split(`
|
|
2
|
+
`)){if(i.startsWith("```")){n=!n;continue}if(n)continue;let e=i.match(/^(##|###)\s+(.+?)\s*$/);e&&(r+=1,t.push({level:e[1].length,title:O(e[2]),id:D(e[2],r)}))}return t}var A={"opencode-global":[`install-opencode`,`Global (recommended)`],opencode:[`install-opencode`,`Per repo`],"claude-global":[`install-claude-code`],claude:[`install-claude-code`],"openclaude-global":[`install-openclaude`],openclaude:[`install-openclaude`],"bob-global":[`install-bob`],bob:[`install-bob`],files:[`install-agent-md`]},j=`you already know this`;function M({page:e,overview:t,onAction:n}){let r=(0,T.useRef)(null),i=(0,T.useMemo)(()=>x(e.body,e.links),[e.body,e.links]);(0,T.useEffect)(()=>{let e=r.current;if(!e)return;let t=0;e.querySelectorAll(`h1, h2, h3`).forEach(e=>{if(e.tagName!==`H1`&&(t+=1),!e.id){let n=D(e.textContent||``,t);n&&(e.id=n)}}),e.querySelectorAll(`blockquote`).forEach(e=>{(e.querySelector(`strong`)?.textContent||``).toLowerCase().startsWith(j)&&e.classList.add(`analogy`)})},[i]),(0,T.useEffect)(()=>{let e=r.current;if(!e)return;let t=e=>{let t=e.target.closest(`a[href]`);if(!t)return;let n=t.getAttribute(`href`);n&&n.startsWith(`#/`)&&(e.preventDefault(),s(n))};return e.addEventListener(`click`,t),()=>e.removeEventListener(`click`,t)},[i]),(0,T.useEffect)(()=>{let n=r.current;if(!n)return;n.querySelectorAll(`.docs-here`).forEach(e=>e.classList.remove(`docs-here`));let[i,a]=A[t?.emit]||[];if(!i)return;let o=null;e.id===`install`?o=n.querySelector(`a[href="#/docs/${i}"]`)?.closest(`li`):e.id===i&&a&&(o=[...n.querySelectorAll(`h2`)].find(e=>D(e.textContent||``)===D(a))),o?.classList.add(`docs-here`)},[i,e.id,t?.emit]);let a=[];return e.id===`install`&&(a.push({label:`Run doctor`,action:`doctor`}),a.push({label:`Rebuild`,action:`build`})),e.id===`verify`&&a.push({label:`Run doctor`,action:`doctor`}),e.id===`upgrade`&&a.push({label:`Update`,action:`update`}),(0,E.jsxs)(`div`,{className:`detail-doc`,children:[(0,E.jsx)(`h1`,{style:{marginTop:0},children:e.title}),e.source&&(0,E.jsx)(`div`,{className:`doc-meta`,children:(0,E.jsxs)(`span`,{className:`badge`,children:[(0,E.jsx)(`span`,{className:`dot`}),e.source]})}),a.length>0&&(0,E.jsx)(`div`,{className:`row wrap gap-10`,style:{margin:`10px 0 14px`},children:a.map(e=>e.hash?(0,E.jsx)(`a`,{className:`btn ghost sm`,href:e.hash,children:e.label},e.label):(0,E.jsx)(`button`,{className:`btn ghost sm`,onClick:()=>n&&n(e.action),children:e.label},e.label))}),(0,E.jsx)(`div`,{className:`markdown`,ref:r,dangerouslySetInnerHTML:{__html:i}}),e.link&&(0,E.jsx)(`div`,{style:{marginTop:24},children:(0,E.jsx)(`a`,{className:`btn soft sm`,href:e.link.hash,children:e.link.label})})]})}var N=1200;function P({a:e,kind:t}){let n=t===`positional`?e.dest:e.names.join(`, `),r=[];return e.metavar&&r.push(e.metavar),e.choices&&r.push(`{${e.choices.join(`|`)}}`),e.default!==null&&e.default!==void 0&&e.default!==``&&!e.is_flag&&r.push(`default: ${e.default}`),e.required&&r.push(`required`),(0,E.jsxs)(`div`,{className:`cli-arg`,children:[(0,E.jsx)(`code`,{className:`cli-arg-name`,children:n}),r.length>0&&(0,E.jsxs)(`code`,{className:`cli-arg-meta`,children:[` `,r.join(` · `)]}),e.help&&(0,E.jsx)(`div`,{className:`cli-arg-help`,children:e.help})]})}function F({text:e}){let[t,n]=(0,T.useState)(!1);return(0,E.jsxs)(`button`,{className:`btn ghost sm`,onClick:async()=>{try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),N)}catch{}},title:`Copy command`,children:[(0,E.jsx)(u,{name:t?`spark`:`copy`}),t?`Copied`:`Copy`]})}function I({cmd:e,prog:t}){let n=[t,e.name];for(let t of e.positionals||[]){let e=(t.metavar||t.dest||``).toUpperCase();n.push(t.required?e:`[${e}]`)}(e.options||[]).length&&n.push(`[OPTIONS]`);let r=n.join(` `);return(0,E.jsxs)(`div`,{className:`card pad-md mb-12 cli-card`,children:[(0,E.jsxs)(`div`,{className:`row wrap between`,style:{alignItems:`flex-start`},children:[(0,E.jsxs)(`div`,{className:`stack`,style:{gap:4},children:[(0,E.jsx)(`h3`,{style:{margin:0},children:(0,E.jsx)(`code`,{children:e.name})}),e.help&&(0,E.jsx)(`p`,{className:`sub`,style:{margin:0},children:e.help})]}),(0,E.jsx)(F,{text:`${t} ${e.name}`})]}),(0,E.jsx)(`pre`,{className:`cli-syn`,children:r}),(e.positionals||[]).length>0&&(0,E.jsxs)(`div`,{className:`cli-block`,children:[(0,E.jsx)(`div`,{className:`cli-block-head`,children:`Arguments`}),e.positionals.map(e=>(0,E.jsx)(P,{a:e,kind:`positional`},e.dest))]}),(e.options||[]).length>0&&(0,E.jsxs)(`div`,{className:`cli-block`,children:[(0,E.jsx)(`div`,{className:`cli-block-head`,children:`Options`}),e.options.map(e=>(0,E.jsx)(P,{a:e,kind:`option`},e.names.join(`,`)))]})]})}function L({page:e}){let t=e.prog||`geneseed`,n=e.commands||[];return(0,E.jsxs)(`div`,{className:`detail-doc`,children:[(0,E.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,E.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Every subcommand of `,(0,E.jsx)(`code`,{children:t}),`. Generated from the parser at request time (the same one `,(0,E.jsx)(`code`,{children:`geneseed`}),` actually parses), so this page cannot drift.`]}),(0,E.jsx)(`div`,{style:{marginTop:18},children:n.map(e=>(0,E.jsx)(I,{cmd:e,prog:t},e.name))})]})}function R({page:e}){let t=e.rows||[],n=e.theme||`neutral`;return(0,E.jsxs)(`div`,{className:`detail-doc`,children:[(0,E.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,E.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Geneseed's invented vocabulary, decoded. Left: the neutral, plain-English term. Right: the word your `,(0,E.jsx)(`code`,{style:{textTransform:`capitalize`},children:n}),` theme actually uses in the agent's voice. Last: the developer idea it maps to.`]}),(0,E.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:(0,E.jsxs)(`table`,{className:`glossary-table`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{children:[(0,E.jsx)(`th`,{children:`Concept`}),(0,E.jsx)(`th`,{children:`Neutral term`}),(0,E.jsxs)(`th`,{children:[`In `,n]}),(0,E.jsx)(`th`,{children:`Meaning`}),(0,E.jsx)(`th`,{children:`In dev terms`})]})}),(0,E.jsx)(`tbody`,{children:t.map(e=>(0,E.jsxs)(`tr`,{children:[(0,E.jsx)(`td`,{children:(0,E.jsx)(`strong`,{children:e.label})}),(0,E.jsx)(`td`,{children:(0,E.jsx)(`code`,{children:e.neutral||`—`})}),(0,E.jsx)(`td`,{children:(0,E.jsx)(`code`,{children:e.themed||e.neutral||`—`})}),(0,E.jsx)(`td`,{className:`dim`,children:e.desc}),(0,E.jsx)(`td`,{className:`dim`,children:e.analogy||`—`})]},e.label))})]})})]})}var z={enforced:`ok`,automatic:`ok`,asked:`warn`,"on demand":`warn`};function B(e){let t=[],n=[],r=`before`;for(let i of(e||``).split(`
|
|
3
|
+
`))r===`before`&&/^\|\s*piece\s*\|/i.test(i)?r=`map`:r===`map`&&!i.trimStart().startsWith(`|`)&&(r=`after`),r===`before`?t.push(i):r===`after`&&n.push(i);return[t.join(`
|
|
4
|
+
`),n.join(`
|
|
5
|
+
`)]}var V=({text:e})=>(0,E.jsx)(`span`,{dangerouslySetInnerHTML:{__html:C(y.parseInline(e||``))}}),H=({kind:e})=>(0,E.jsx)(`span`,{className:`tag ${z[e]||``}`,children:e});function U({page:e,overview:t,onAction:n}){let[r,i]=(0,T.useState)(0);if(!e.rows)return(0,E.jsx)(M,{page:e,overview:t,onAction:n});let a=e.rows[r]||e.rows[0],[o,s]=B(e.body);return(0,E.jsxs)(`div`,{className:`detail-doc`,children:[(0,E.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,E.jsx)(w,{body:o,links:e.links}),(0,E.jsxs)(`div`,{className:`docs-map`,children:[(0,E.jsx)(`ul`,{className:`map-tree`,"aria-label":`Pieces`,children:e.rows.map((e,t)=>(0,E.jsx)(`li`,{children:(0,E.jsxs)(`button`,{className:`map-node ${t===r?`on`:``}`,"aria-pressed":t===r,onClick:()=>i(t),children:[(0,E.jsx)(`span`,{className:`map-piece`,children:(0,E.jsx)(V,{text:e.piece})}),(0,E.jsx)(H,{kind:e.kind}),(0,E.jsx)(`span`,{className:`mono dim map-cost`,children:(0,E.jsx)(V,{text:e.cost})})]})},t))}),a&&(0,E.jsxs)(`div`,{className:`card pad-md map-detail`,"aria-live":`polite`,children:[(0,E.jsx)(`h3`,{style:{margin:`0 0 8px`},children:(0,E.jsx)(V,{text:a.piece})}),(0,E.jsx)(H,{kind:a.kind}),(0,E.jsxs)(`dl`,{children:[(0,E.jsx)(`dt`,{children:`Does`}),(0,E.jsx)(`dd`,{children:(0,E.jsx)(V,{text:a.does})}),(0,E.jsx)(`dt`,{children:`Costs`}),(0,E.jsx)(`dd`,{children:(0,E.jsx)(V,{text:a.cost})}),(0,E.jsx)(`dt`,{children:`Turn it off`}),(0,E.jsx)(`dd`,{children:(0,E.jsx)(V,{text:a.off})})]})]})]}),s.trim()&&(0,E.jsx)(w,{body:s,links:e.links})]})}var W=5,G=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function K(e,t){let n=e||``,r=[];for(let e of t||[])if([...new Set([e.themed,e.neutral,e.label].filter(Boolean))].some(e=>RegExp(`(?<![\\w-])${G(e)}s?(?![\\w-])`,`i`).test(n))&&r.push(e),r.length===W)break;return r}var q=e=>document.getElementById(e)?.scrollIntoView({behavior:`smooth`});function J({body:e,glossaryRows:t}){let n=(0,T.useMemo)(()=>k(e),[e]),r=(0,T.useMemo)(()=>K(e,t),[e,t]);return!n.length&&!r.length?null:(0,E.jsxs)(`aside`,{className:`docs-margin`,children:[n.length>0&&(0,E.jsxs)(`nav`,{className:`docs-toc`,"aria-label":`On this page`,children:[(0,E.jsx)(`div`,{className:`docs-toc-head`,children:`On this page`}),(0,E.jsx)(`ul`,{children:n.map(e=>(0,E.jsx)(`li`,{className:`lvl-${e.level}`,children:(0,E.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),q(e.id)},children:e.title})},e.id))})]}),r.length>0&&(0,E.jsxs)(`div`,{className:`docs-gloss`,children:[(0,E.jsx)(`div`,{className:`docs-toc-head`,children:`Terms on this page`}),r.map(e=>(0,E.jsxs)(`div`,{className:`docs-gloss-card`,children:[(0,E.jsx)(`b`,{children:e.themed||e.neutral||e.label}),(0,E.jsx)(`p`,{children:e.desc})]},e.label))]})]})}function Y({page:e}){let t=e.version||{},n=[[`Theme`,e.theme],[`Install mode`,e.emit],[`Deployed`,e.deployed?`yes`:`no`],[`Target`,(0,E.jsx)(`code`,{children:e.target},`t`)],[`Source root`,(0,E.jsx)(`code`,{children:e.root},`r`)],[`Installed build`,(0,E.jsx)(`code`,{children:t.installed_fp||`(none)`},`i`)],[`Source build`,(0,E.jsx)(`code`,{children:t.source_fp||`—`},`s`)],[`Match?`,t.verdict||`—`],[`License`,e.license]];return(0,E.jsxs)(`div`,{className:`detail-doc`,children:[(0,E.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,E.jsx)(`p`,{className:`sub`,style:{marginTop:4},children:`Live snapshot of the install behind this UI, plus where to go next.`}),(0,E.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:n.map(([e,t])=>(0,E.jsxs)(`div`,{className:`kv`,children:[(0,E.jsx)(`span`,{className:`k`,children:e}),(0,E.jsx)(`span`,{className:`v`,children:t??`—`})]},e))}),(0,E.jsxs)(`div`,{className:`row wrap gap-10`,style:{marginTop:18},children:[(0,E.jsxs)(`a`,{className:`btn ghost`,href:e.repo,target:`_blank`,rel:`noreferrer`,children:[(0,E.jsx)(u,{name:`external`}),e.repo_is_github?`GitHub repo`:`Source repo`]}),e.repo_is_github&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/issues`,target:`_blank`,rel:`noreferrer`,children:[(0,E.jsx)(u,{name:`external`}),`File an issue`]}),(0,E.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/blob/main/LICENSE`,target:`_blank`,rel:`noreferrer`,children:[(0,E.jsx)(u,{name:`external`}),`License`]})]})]})]})}var X=encodeURIComponent,Z=e=>`#/docs/${X(e)}`;function Q(e){return e?.groups?.[0]?.pages?.[0]?.id||``}function re({data:e,error:t,overview:n,onAction:r}){if(t)return(0,E.jsx)(d,{error:t,style:{margin:18}});if(!e)return(0,E.jsx)(g,{label:`Loading page…`});switch(e.kind){case`markdown`:case`concept`:return(0,E.jsx)(M,{page:e,overview:n,onAction:r});case`map`:return(0,E.jsx)(U,{page:e,overview:n,onAction:r});case`cli`:return(0,E.jsx)(L,{page:e});case`glossary`:return(0,E.jsx)(R,{page:e});case`about`:return(0,E.jsx)(Y,{page:e});default:return(0,E.jsxs)(`div`,{className:`empty`,children:[(0,E.jsx)(`div`,{className:`big`,children:`Unknown page kind`}),e.kind]})}}function $(e){return(e?.pages||[]).map(e=>({name:e.id,title:e.title,desc:e.description||``,group:e.section||`General`,groupC:`var(--accent)`}))}function ie({page:e,overview:t,onAction:n}){let[u,y]=ee(i(t?.emit)),{data:x,error:C}=a(()=>r.docs(u),[u]),w=e||Q(x),{data:D,error:O,loading:k}=a(()=>w?r.docsPage(w,u):Promise.resolve(null),[w,u]),{data:A}=a(()=>r.docsPage(`glossary`,u).catch(()=>null),[u],`docs:glossary`);(0,T.useEffect)(()=>{if(x&&w&&!x.groups.some(e=>e.pages.some(e=>e.id===w))){let e=Q(x);e&&e!==w&&s(Z(e))}},[x,w]),(0,T.useEffect)(()=>{let e=document.scrollingElement||document.documentElement;for(let t of[document.getElementById(`main`),e])t&&(t.scrollTop=0)},[w]);let j=p(x,w),M=j.part||x?.groups?.[0]||null,N=M?.id===m;(0,T.useEffect)(()=>{N&&D?.id===w&&c(w)},[N,D,w]);let P=N?[...h(),w]:[],[F,I]=(0,T.useState)(``),[L,R]=(0,T.useState)(`all`),[z,B]=(0,T.useState)(M?.id);M?.id!==z&&(B(M?.id),I(``),R(`all`));let V=$(M),H=S(V),U=L===`all`?V:V.filter(e=>e.group===L),W=b(U,F);return C?(0,E.jsx)(d,{error:C}):(0,E.jsx)(`div`,{className:`docs-wrap`,children:(0,E.jsxs)(`div`,{className:`library docs-lib`,children:[(0,E.jsxs)(`aside`,{className:`lib-kinds`,"aria-label":`Docs parts`,children:[(0,E.jsxs)(`div`,{className:`lib-title`,children:[(0,E.jsx)(`h1`,{className:`h`,children:`Docs`}),(0,E.jsx)(`span`,{className:`dim`,children:`How it works, and how to use it`})]}),(0,E.jsx)(te,{"aria-label":`Harness`,children:o.map(e=>(0,E.jsx)(`button`,{className:u===e.id?`on`:``,onClick:()=>y(e.id),"aria-pressed":u===e.id,children:e.label},e.id))}),(0,E.jsx)(`nav`,{className:`kind-list`,"aria-label":`Parts`,children:(x?.groups||[]).map(e=>(0,E.jsxs)(T.Fragment,{children:[(0,E.jsxs)(`a`,{href:e.pages[0]?Z(e.pages[0].id):`#/docs`,className:M?.id===e.id?`on`:``,"aria-current":M?.id===e.id?`page`:void 0,children:[e.label,(0,E.jsx)(`span`,{className:`mono dim`,children:e.pages.length})]}),M?.id===e.id&&(0,E.jsx)(_,{label:`Sections`,total:V.length,cats:H,cat:L,onChange:R})]},e.id))})]}),(0,E.jsx)(v,{label:M?.label||`Docs`,count:F.trim()?`${W.length} of ${U.length}`:U.length||``,extra:N&&(0,E.jsx)(l,{pages:M.pages,seen:P}),q:F,onQ:I,matched:W.length,inView:[M?.id,w],children:x?(0,E.jsx)(ne,{rows:W,activeName:w,hrefOf:e=>Z(e.name),pills:N?e=>P.includes(e.name)&&e.name!==w?(0,E.jsxs)(`span`,{className:`docs-read-mark`,children:[(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`✓`}),(0,E.jsx)(`span`,{className:`sr-only`,children:`read`})]}):null:void 0}):(0,E.jsx)(g,{label:`Loading docs…`})}),(0,E.jsxs)(`article`,{className:`lib-reader docs-reader`,"aria-label":`Page`,children:[j.page&&(0,E.jsxs)(`nav`,{className:`docs-crumbs mono`,"aria-label":`Breadcrumb`,children:[(0,E.jsx)(`a`,{href:Z(j.part.pages[0].id),children:j.part.label}),(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`›`}),(0,E.jsx)(`a`,{href:Z(j.part.pages.find(e=>(e.section||`General`)===j.section).id),children:j.section}),(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`›`}),(0,E.jsx)(`span`,{"aria-current":`page`,children:j.page.title})]}),(0,E.jsxs)(`div`,{className:`docs-read`,children:[(0,E.jsxs)(`div`,{className:`docs-article`,children:[(0,E.jsx)(re,{data:k?null:D,error:O,overview:t,onAction:n},`${w}|${u}`),!k&&(0,E.jsx)(f,{menu:x,pageId:w})]}),!k&&(0,E.jsx)(J,{body:D?.body,glossaryRows:A?.rows})]})]})]})})}export{ie as default,$ as docRows};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e,r as t,s as n}from"./sections-GalMS0Zv.js";import{i as r,t as i}from"./react-B9Z_tXRV.js";import{t as a}from"./drawable-
|
|
1
|
+
import{n as e,r as t,s as n}from"./sections-GalMS0Zv.js";import{i as r,t as i}from"./react-B9Z_tXRV.js";import{t as a}from"./drawable-zVVDbsyw.js";import{$ as o,A as s,G as c,K as l,W as u,X as d,k as f}from"./index-KHt3wE_K.js";import{t as p}from"./jobBuckets-Dbq8ZlWW.js";import{n as m}from"./Dashboard-J-xCe_Gk.js";var h=n(r(),1),g=i(),_=12,v=120,y=[`#2BB673`,`#16A6A6`,`#E8A23B`,`#E07A5F`,`#8E7DBE`,`#5BD08A`,`#79856E`],b=650;function x({segments:e,size:t=186,stroke:n=26,caption:r=`capabilities`}){let i=e.reduce((e,t)=>e+t.value,0)||1,s=(0,h.useRef)(null),f=e.map(e=>e.value).join(`,`);(0,h.useLayoutEffect)(()=>{let t=s.current?.querySelectorAll(`path`);if(!t?.length||!c())return;let n=e.filter(e=>e.value>0).map(e=>e.value/i),r=n.map((e,t)=>n.slice(0,t).reduce((e,t)=>e+t,0)),u=a(t);d(u,{draw:`0 0`});let f=o(u,{draw:[`0 0`,`0 1`],duration:(e,t)=>Math.max(b*n[t],60),delay:(e,t)=>b*r[t],ease:`linear`});return l(f,b)},[f]);let p=t/2-n/2,m=t/2,_=t/2,v=[],y=0;for(let t of e)v.push(y),y+=t.value;return(0,g.jsxs)(`svg`,{width:t,height:t,viewBox:`0 0 ${t} ${t}`,children:[(0,g.jsx)(`circle`,{cx:m,cy:_,r:p,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:n}),(0,g.jsx)(`g`,{ref:s,children:e.map((e,t)=>{if(e.value/i<=0)return null;let r=v[t]/i*2*Math.PI-Math.PI/2,a=(v[t]+e.value)/i*2*Math.PI-Math.PI/2,o=m+p*Math.cos(r),s=_+p*Math.sin(r),c=m+p*Math.cos(a),l=_+p*Math.sin(a),u=+(a-r>Math.PI);return(0,g.jsx)(`path`,{d:`M ${o} ${s} A ${p} ${p} 0 ${u} 1 ${c} ${l}`,fill:`none`,stroke:e.color,strokeWidth:n,strokeLinecap:`butt`,children:(0,g.jsxs)(`title`,{children:[e.label,`: `,e.value]})},t)})}),(0,g.jsx)(`text`,{x:m,y:_-4,textAnchor:`middle`,className:`donut-c-num`,children:(0,g.jsx)(u,{value:i,duration:b})}),(0,g.jsx)(`text`,{x:m,y:_+16,textAnchor:`middle`,className:`donut-c-cap`,children:r})]})}function S(e){if(e.length<2)return e.length?`M${e[0][0]},${e[0][1]}`:``;let t=`M${e[0][0]},${e[0][1]}`;for(let n=0;n<e.length-1;n++){let r=e[n-1]||e[n],i=e[n],a=e[n+1],o=e[n+2]||a,s=i[0]+(a[0]-r[0])/6,c=i[1]+(a[1]-r[1])/6,l=a[0]-(o[0]-i[0])/6,u=a[1]-(o[1]-i[1])/6;t+=` C${s},${c} ${l},${u} ${a[0]},${a[1]}`}return t}function C({data:e,height:t=156,accent:n}){if(!e.length)return null;let r=t,i=Math.max(...e.map(e=>e.v),1)+1,a=e.length>1?588/(e.length-1):588,o=e.map((e,t)=>[6+t*a,r-6-e.v/i*(r-14-6)]),s=S(o),c=o[o.length-1],l=o[0],u=`${s} L${c[0]},${r} L${l[0]},${r} Z`;return(0,g.jsxs)(`svg`,{viewBox:`0 0 600 ${r}`,preserveAspectRatio:`none`,style:{width:`100%`,height:t,display:`block`,overflow:`visible`},children:[(0,g.jsx)(`defs`,{children:(0,g.jsxs)(`linearGradient`,{id:`b-grad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,g.jsx)(`stop`,{offset:`0`,stopColor:n,stopOpacity:`.28`}),(0,g.jsx)(`stop`,{offset:`1`,stopColor:n,stopOpacity:`0`})]})}),(0,g.jsx)(`path`,{d:u,fill:`url(#b-grad)`}),(0,g.jsx)(`path`,{d:s,fill:`none`,stroke:n,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`,vectorEffect:`non-scaling-stroke`}),(0,g.jsx)(`circle`,{cx:c[0],cy:c[1],r:`3.5`,fill:n,vectorEffect:`non-scaling-stroke`})]})}function w({label:e,value:t,sub:n,color:r,icon:i}){return(0,g.jsxs)(`div`,{className:`b-tile`,children:[(0,g.jsx)(`span`,{className:`b-tile-ic`,style:{background:`color-mix(in srgb, ${r} 18%, transparent)`,color:r},children:(0,g.jsx)(f,{name:i})}),(0,g.jsxs)(`div`,{className:`b-tile-body`,children:[(0,g.jsx)(`div`,{className:`b-tile-val`+(t===0?` zero`:``),children:t}),(0,g.jsx)(`div`,{className:`b-tile-label`,children:e})]}),(0,g.jsx)(`div`,{className:`b-tile-sub`,children:n})]})}function T({overview:n,sigil:r,jobs:i,doctor:a,onAction:o}){let c=n.counts||{},l=a?.groups||[],d=l.length>0,h=l.filter(e=>e.problems.length===0).length,b=l.length||1,S=m(n),T=s(n.diff),E=t.filter(e=>(c[e]||0)>0).map((t,n)=>({label:e[t].label,value:c[t]||0,color:y[n%y.length]})),D=E.reduce((e,t)=>e+t.value,0),O=p(i||[],10),k=O.reduce((e,t)=>e+t.v,0);return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`b-greet`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`div`,{className:`eyebrow`,children:`your harness`}),(0,g.jsx)(`h1`,{className:`h b-h`,children:S}),(0,g.jsx)(`p`,{className:`sub`,children:r||`A friendly read of every layer growing in your harness.`})]}),(0,g.jsxs)(`div`,{className:`row gap-8`,children:[(0,g.jsxs)(`button`,{className:`btn`,onClick:()=>o(`update`),children:[(0,g.jsx)(f,{name:`refresh`}),`Update`]}),(0,g.jsxs)(`button`,{className:`btn ghost`,onClick:()=>o(`build-all`),children:[(0,g.jsx)(f,{name:`build`}),`Rebuild`]})]})]}),(0,g.jsxs)(`div`,{className:`grid b-hero-grid mb-16`,children:[(0,g.jsxs)(`div`,{className:`card b-hero`,children:[(0,g.jsx)(`div`,{className:`b-hero-ring`,children:(0,g.jsx)(x,{segments:[{label:`pass`,value:h,color:y[0]},{label:`attention`,value:Math.max(b-h,0),color:y[2]}],size:168,stroke:20,caption:`checks`})}),(0,g.jsxs)(`div`,{className:`b-hero-side`,children:[(0,g.jsx)(`h3`,{className:`b-hero-title`,children:d?`${h} of ${b} checks pass`:`Running checks…`}),(0,g.jsxs)(`p`,{className:`sub`,children:[`One source, rendered into `,(0,g.jsx)(`code`,{children:n.target}),` and inherited by every repo on this machine.`]}),d&&(0,g.jsx)(`ul`,{className:`b-hero-checks`,children:l.map(e=>{let t=e.problems.length===0;return(0,g.jsxs)(`li`,{className:`b-hcheck ${t?`ok`:`bad`}`,title:t?`clean`:e.problems.join(`; `),children:[(0,g.jsx)(`span`,{className:`b-hcheck-mark`,children:t?`✓`:`!`}),(0,g.jsx)(`span`,{className:`b-hcheck-label`,children:e.label})]},e.label)})}),(0,g.jsxs)(`div`,{className:`b-chips`,children:[(0,g.jsxs)(`span`,{className:`b-chip`,children:[(0,g.jsx)(`b`,{style:{textTransform:`capitalize`},children:n.theme}),` voice`]}),(0,g.jsx)(`span`,{className:`b-chip`,children:(0,g.jsx)(`b`,{children:n.emit})}),(0,g.jsxs)(`span`,{className:`b-chip`,children:[`built `,(0,g.jsx)(`b`,{children:n.build_time||`unknown`})]})]})]})]}),(0,g.jsxs)(`div`,{className:`b-tiles`,children:[(0,g.jsx)(w,{label:`Agents`,value:c.agents??`—`,sub:`specialists`,color:y[0],icon:`layers`}),(0,g.jsx)(w,{label:`Skills`,value:c.skills??`—`,sub:`workflows`,color:y[1],icon:`skill`}),(0,g.jsx)(w,{label:`Invariants`,value:c.laws??`—`,sub:c.doctrines?`${c.doctrines.active}/${c.doctrines.total} packs · ${c.doctrines.rules} rules`:`all upheld`,color:y[2],icon:`law`}),(0,g.jsx)(w,{label:`Edits`,value:T,sub:`to graft`,color:y[3],icon:`changes`})]})]}),(0,g.jsxs)(`div`,{className:`grid split-even mb-16`,children:[(0,g.jsxs)(`div`,{className:`card pad-lg b-mix-card`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Capability mix`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`tick`,children:[D,` total`]})})]}),(0,g.jsxs)(`div`,{className:`b-mix`,children:[(0,g.jsx)(x,{segments:E,size:186,stroke:26}),(0,g.jsx)(`div`,{className:`b-legend`,children:E.map(e=>(0,g.jsxs)(`div`,{className:`b-leg-row`,children:[(0,g.jsx)(`span`,{className:`b-leg-dot`,style:{background:e.color}}),(0,g.jsx)(`span`,{className:`b-leg-name`,children:e.label}),(0,g.jsx)(`span`,{className:`b-leg-bar`,children:(0,g.jsx)(`i`,{style:{width:`${e.value/D*100}%`,background:e.color}})}),(0,g.jsx)(`span`,{className:`b-leg-val`,children:e.value})]},e.label))})]})]}),(0,g.jsxs)(`div`,{className:`card pad-lg`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Recent runs`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`badge ok`,children:[(0,g.jsx)(`span`,{className:`dot`}),`job log`]})})]}),(0,g.jsxs)(`div`,{className:`b-stat-lead`,children:[(0,g.jsx)(`span`,{className:`b-stat-big`,children:(0,g.jsx)(u,{value:k})}),(0,g.jsxs)(`span`,{className:`b-stat-cap`,children:[`runs in the last 10 days · `,h,`/`,b,` checks pass now`]})]}),(0,g.jsx)(C,{data:O,accent:y[0],height:156})]})]}),(0,g.jsxs)(`div`,{className:`card pad-lg`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Recent activity`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`tick`,children:[`last `,Math.min(i?.length||0,12),` runs`]})})]}),(0,g.jsxs)(`div`,{className:`b-timeline`,children:[(i||[]).slice(0,_).map(e=>{let t=e.status===`done`,n=e.status===`failed`?`warn`:t?`ok`:`acc`;return(0,g.jsxs)(`div`,{className:`b-tl-row`,children:[(0,g.jsx)(`span`,{className:`b-tl-node ${n}`}),(0,g.jsxs)(`div`,{className:`b-tl-body`,children:[(0,g.jsx)(`b`,{children:e.action}),e.output?`: ${e.output.split(`
|
|
2
2
|
`)[0].slice(0,v)}`:``]}),(0,g.jsx)(`span`,{className:`b-tl-when`,children:e.duration?`${e.duration}s`:e.status})]},e.id)}),(!i||i.length===0)&&(0,g.jsxs)(`div`,{className:`b-tl-row`,children:[(0,g.jsx)(`span`,{className:`b-tl-node`}),(0,g.jsx)(`div`,{className:`b-tl-body sub`,children:`No runs yet. Trigger an action to populate this.`}),(0,g.jsx)(`span`,{className:`b-tl-when`,children:`—`})]})]})]})]})}export{T as default};
|