geneseed 3.11.0 → 3.13.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 +5 -5
- package/SHIPPED.md +2 -2
- 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-guard.js +157 -2
- package/bin/geneseed-cli.mjs +4 -0
- 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 +4 -2
- 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 +73 -0
- 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 -8
- package/docs/guides/autostart.md +3 -1
- package/docs/guides/choose-your-setup.md +5 -66
- 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 +7 -1
- package/docs/reference/loop-actions.md +20 -0
- package/docs/reference/opencode-plugins.md +14 -116
- 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 +36 -5
- package/harness.config.json +1 -1
- package/js/README.md +32 -2
- package/js/build/driver.mjs +14 -8
- package/js/build/generate.mjs +10 -6
- package/js/build/render.mjs +5 -0
- package/js/build/source.mjs +5 -1
- package/js/cli-table.json +261 -0
- package/js/hosts/gitref.mjs +99 -0
- package/js/hosts/hooks.mjs +88 -1
- package/js/hosts/installs.mjs +21 -0
- package/js/hosts/mcp.mjs +1 -1
- package/js/hosts/native.mjs +43 -5
- package/js/inspect/checks-authoring.mjs +10 -0
- package/js/inspect/checks-build.mjs +28 -0
- package/js/inspect/diff.mjs +3 -0
- package/js/inspect/doctor.mjs +2 -1
- package/js/inspect/inventory.mjs +1 -0
- package/js/inspect/status.mjs +1 -1
- package/js/loop/catalog.mjs +127 -0
- package/js/loop/cli.mjs +173 -0
- package/js/loop/graph.mjs +163 -0
- package/js/loop/registry.mjs +196 -0
- package/js/loop/score.mjs +182 -0
- package/js/loop/state.mjs +436 -0
- package/js/maintain/migrate.mjs +4 -2
- package/js/maintain/setup.mjs +1 -1
- package/js/web/actions.mjs +34 -3
- package/js/web/api.mjs +51 -2
- package/js/web/daemon.mjs +43 -5
- package/js/web/docs.mjs +64 -12
- package/js/web/handler.mjs +1 -0
- package/js/web/jobs.mjs +3 -1
- package/js/web/routes.mjs +5 -1
- package/js/web/server.mjs +5 -3
- package/package.json +1 -1
- package/registry.json +14 -0
- package/src/AGENT.md.tmpl +2 -0
- package/src/agents/explorer.md +2 -2
- package/src/agents/researcher.md +3 -3
- package/src/bricks/README.md +34 -0
- package/src/bricks/_template.md +32 -0
- package/src/bricks/adr-challenge.md +20 -0
- package/src/bricks/adr-draft.md +15 -0
- package/src/bricks/apply.md +17 -0
- package/src/bricks/baseline-green.md +17 -0
- package/src/bricks/bruno-test.md +16 -0
- package/src/bricks/characterize.md +17 -0
- package/src/bricks/ci-fix.md +18 -0
- package/src/bricks/ci-triage.md +20 -0
- package/src/bricks/compat-check.md +16 -0
- package/src/bricks/deps-audit.md +14 -0
- package/src/bricks/docs-update.md +15 -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 +23 -0
- package/src/bricks/lint.md +14 -0
- package/src/bricks/migration-plan.md +21 -0
- package/src/bricks/mutation-check.md +18 -0
- package/src/bricks/plan.md +17 -0
- package/src/bricks/red-test.md +16 -0
- package/src/bricks/reproduce.md +16 -0
- package/src/bricks/review.md +19 -0
- package/src/bricks/security-scan.md +17 -0
- package/src/bricks/spec.md +18 -0
- package/src/bricks/test.md +14 -0
- package/src/bricks/upgrade-scout.md +16 -0
- package/src/doctrines/process.md +11 -8
- package/src/loops/api-endpoint.json +31 -0
- package/src/loops/architecture-decision.json +22 -0
- package/src/loops/bugfix.json +23 -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 +24 -0
- 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 +24 -0
- 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 +48 -0
- 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/geneseed.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 +111 -0
- 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/themes/_TEMPLATE.json +2 -0
- package/themes/biker.json +2 -0
- package/themes/commentator.json +2 -0
- package/themes/cyberpunk.json +2 -0
- package/themes/gamer.json +2 -0
- package/themes/imperial.json +2 -0
- package/themes/joker.json +2 -0
- package/themes/marvin.json +2 -0
- package/themes/mean.json +2 -0
- package/themes/military.json +2 -0
- package/themes/neutral.json +2 -0
- package/themes/pirate.json +2 -0
- package/themes/sports.json +2 -0
- package/themes/verstappen.json +2 -0
- package/themes/wizard.json +2 -0
- package/web/dist/assets/Activity-Ca2Aruu7.js +1 -0
- package/web/dist/assets/ActivityDetail-Bo7v4Z_r.js +1 -0
- package/web/dist/assets/Dashboard-BuMq46aT.js +2 -0
- package/web/dist/assets/Docs-BzccCllG.js +5 -0
- package/web/dist/assets/FilterInput-CBcJBQPI.js +1 -0
- package/web/dist/assets/GreenhouseView-BCIKcnGG.js +2 -0
- package/web/dist/assets/Installs-DMFJvq7s.js +2 -0
- package/web/dist/assets/JournalView-o1rmd1_1.js +1 -0
- package/web/dist/assets/Laws-BANxq_I_.js +3 -0
- package/web/dist/assets/Library-DW4x0fbh.js +1 -0
- package/web/dist/assets/Loops-DEBibbBP.js +2 -0
- package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-CdTX0kLe.js} +14 -14
- package/web/dist/assets/OperatorHudView-CLD0fYaA.js +2 -0
- package/web/dist/assets/Personal-6uMJvyBG.js +1 -0
- package/web/dist/assets/Tabs-BubnyZhF.js +1 -0
- package/web/dist/assets/activity-CObqyxkL.js +1 -0
- package/web/dist/assets/{api-Dc8f3ca-.js → api-D_ixdyEY.js} +1 -1
- package/web/dist/assets/drawable-C_x5xncq.js +1 -0
- package/web/dist/assets/index-CMPgezFm.js +2 -0
- package/web/dist/assets/index-DMsT4Aa6.css +1 -0
- package/web/dist/assets/{react-B9Z_tXRV.js → react-Bbzhmq4v.js} +1 -1
- package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/web/dist/assets/sections-Dg23Hel5.js +1 -0
- package/web/dist/assets/usePoll-BOqeunzF.js +1 -0
- package/web/dist/index.html +6 -5
- package/web/dist/assets/Activity-C52LEb-2.js +0 -1
- package/web/dist/assets/ActivityDetail-CjNLRvXg.js +0 -1
- package/web/dist/assets/Dashboard-B6_sSCHi.js +0 -2
- package/web/dist/assets/Docs-Dj7BmCSA.js +0 -5
- package/web/dist/assets/FilterInput-CVyqmYWM.js +0 -1
- package/web/dist/assets/GreenhouseView-BALwjQsA.js +0 -2
- package/web/dist/assets/Installs-BbffDQm3.js +0 -2
- package/web/dist/assets/JournalView-JpAQ8Hqe.js +0 -1
- package/web/dist/assets/Laws-DK7eCWSm.js +0 -3
- package/web/dist/assets/Library-CoamHelE.js +0 -1
- package/web/dist/assets/OperatorHudView-DVx1HlBx.js +0 -2
- package/web/dist/assets/Personal-eaXb1zcj.js +0 -1
- package/web/dist/assets/Tabs-BmGtt8E2.js +0 -1
- package/web/dist/assets/drawable-Du_PZrQj.js +0 -1
- package/web/dist/assets/index-Bz_KMRDH.css +0 -1
- package/web/dist/assets/index-CNFH7o55.js +0 -2
- package/web/dist/assets/sections-GalMS0Zv.js +0 -1
- package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# {{SKILL}}: loop
|
|
2
|
+
|
|
3
|
+
> {{DESC_LOOP}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the user asks to run a loop, or to work a requirement in small validated
|
|
6
|
+
iterations, each one committed on its own; or names a loop template (`bugfix`, `refactor`,
|
|
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`).
|
|
10
|
+
|
|
11
|
+
Default trust preset: **{{TRUST_LABEL}}**
|
|
12
|
+
|
|
13
|
+
The preset passed to `init` is `{{TRUST}}` unless the user names another (`prudent`,
|
|
14
|
+
`balanced`, `aggressive`).
|
|
15
|
+
|
|
16
|
+
## What it is
|
|
17
|
+
|
|
18
|
+
`geneseed loop` is a state machine kept in `LOOP.md` at the worktree's root. It decides every
|
|
19
|
+
transition, ceiling, score and stop; you run the node it hands you and report the outcome. Every
|
|
20
|
+
action prints one JSON object — act on its keys, never on your own reading of the graph.
|
|
21
|
+
|
|
22
|
+
## Setup
|
|
23
|
+
|
|
24
|
+
1. `git worktree add ../<repo>-loop-<slug> -b loop/<slug>`, then make that worktree the session's
|
|
25
|
+
working directory with its own command. Every later command runs there **as written below**:
|
|
26
|
+
no `cd` prefix, no `git -C`, no quoted refspec — any of those makes the git gate ask.
|
|
27
|
+
2. On a `loop/*` branch with a launched loop, the git gate lets exactly the commit form below
|
|
28
|
+
through without asking. Merging into a shared branch is never yours.
|
|
29
|
+
|
|
30
|
+
## Compose
|
|
31
|
+
|
|
32
|
+
3. Use a template when the user names one. Otherwise run `geneseed loop check`: it lists the
|
|
33
|
+
`templates` and every brick (`name`, `description`, `effect`, `agent`/`skill`, `outcomes`,
|
|
34
|
+
`available`). Compose a graph JSON from available bricks — skip one marked unavailable or whose
|
|
35
|
+
`skill` you do not have: `name`, `nodes`, `start`, `edges` of `{from, on, to}` (one per
|
|
36
|
+
outcome; `$close`/`$stop` are terminals), `loops` with exactly one `"iteration": true`. The
|
|
37
|
+
iteration loop's first node is where every iteration begins (normally `identify`).
|
|
38
|
+
Write it to `<name>.json` in the OS temp directory — never inside the worktree, where it would
|
|
39
|
+
be scored and committed — and validate it: `geneseed loop check --graph <file>`.
|
|
40
|
+
4. `geneseed loop init --title "<title>" --requirement "<requirement>" --graph <template|file> --preset {{TRUST}}`.
|
|
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.
|
|
43
|
+
|
|
44
|
+
## The cycle
|
|
45
|
+
|
|
46
|
+
Repeat `geneseed loop next` and act on its JSON:
|
|
47
|
+
|
|
48
|
+
- **`{awaiting}`** — a person must decide. Present it: `launch` → the graph in `LOOP.md`;
|
|
49
|
+
`declared` → the card, its score and the threshold; `actual` → `git diff --cached` and the
|
|
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:
|
|
55
|
+
`geneseed loop decide --verdict ok|no|amend --note "<their words>"` and continue.
|
|
56
|
+
- **`{verify, run}`** — run exactly the `run` command it prints.
|
|
57
|
+
- **`{node, validate: true}`** — score the card before the brick runs:
|
|
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).
|
|
62
|
+
`blocking` turns into an `{awaiting}` on the next `next`.
|
|
63
|
+
- **`{node}`** — run the brick: dispatch its `agent` (or follow its `skill`) with the `prompt`,
|
|
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.
|
|
69
|
+
- **`{terminal: "$close"}`** — see *The end*. **`{terminal: "$stop"}`** — report the `reason`
|
|
70
|
+
and the `summary`, and leave the branch as it is.
|
|
71
|
+
|
|
72
|
+
What `score --diff`, `decide` and `record` print back:
|
|
73
|
+
|
|
74
|
+
- **`{commit: true, message_file}`** — close the unit with exactly this command, nothing added:
|
|
75
|
+
`git add -A && git commit -F <message_file> && git push -u origin HEAD:loop/<slug>`
|
|
76
|
+
Never `git commit -m`: only this form is exempt; anything else asks. It assumes a remote named
|
|
77
|
+
`origin` and a `message_file` path without spaces: if the path has a space, quote it and accept
|
|
78
|
+
that the gate asks; with no remote, report and stop instead of retrying.
|
|
79
|
+
- **`{discard: true}`** (with `resplit` when an inner ring was exhausted) — set the attempt aside,
|
|
80
|
+
keeping `LOOP.md`: `git stash -u -m loop-discarded -- . :^LOOP.md` (never `git stash push` —
|
|
81
|
+
the word `push` trips the git gate mid-run).
|
|
82
|
+
- **`{done: true}`**, **`{empty}`**, **`{resumed}`**, **`{dropped}`**, **`{node}`**, **`{verify}`**,
|
|
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.
|
|
86
|
+
- **`{error}`** — read it; it names the step you skipped (`score --declared` before a mutate
|
|
87
|
+
brick, `score --diff` before `record`). Do the step, never edit the state block to get past it.
|
|
88
|
+
An `{error}` from `record` that mentions JSON means the shell mangled the card's quotes: retry
|
|
89
|
+
with the card on a single line and no single quotes inside it.
|
|
90
|
+
|
|
91
|
+
## The end
|
|
92
|
+
|
|
93
|
+
5. On `$close`: `git rm -f LOOP.md` (the engine rewrote it after the last commit), then
|
|
94
|
+
`git commit -m "loop(<slug>): close" && git push -u origin HEAD:loop/<slug>`.
|
|
95
|
+
This final commit is outside the exemption — the loop is no longer running — so the gate
|
|
96
|
+
asks: that ask is the user's consent to close the loop.
|
|
97
|
+
6. Report: the iteration count, the **soft** iterations from `summary.review` under
|
|
98
|
+
"to review", the `notes`, and the branch to merge. **Never merge.**
|
|
99
|
+
|
|
100
|
+
## Resume
|
|
101
|
+
|
|
102
|
+
After a crash or an answered `awaiting`, from the worktree: `geneseed loop next`. The state is
|
|
103
|
+
`LOOP.md` plus the branch — nothing else to restore. The user may edit `preset` or `contracts`
|
|
104
|
+
in `LOOP.md`; they apply from the next score.
|
|
105
|
+
|
|
106
|
+
## Done when
|
|
107
|
+
|
|
108
|
+
- `$close` is reported with the branch pushed and `LOOP.md` removed, or `$stop` is reported with
|
|
109
|
+
its reason — and in both cases nothing was merged.
|
|
110
|
+
|
|
111
|
+
<!-- INCLUDE: skills/_self-improvement.md -->
|
|
@@ -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
|
package/themes/_TEMPLATE.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "<one-line description: force the laziest working solution — minimal, shortest path, stdlib/native before custom code; lite/full/ultra intensity>",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "<one-line description: fan independent subtasks to concurrent subagents, then converge>",
|
|
58
58
|
"DESC_PIPELINE": "<one-line description: spawn a small crew — analyst, developer, tester — to work a substantial task in isolation, merging only on mechanical proof (tests + lint green)>",
|
|
59
|
+
"DESC_LOOP": "<one-line description: work a requirement in small scored iterations on a loop/* branch, stepping the geneseed loop state machine>",
|
|
60
|
+
"DESC_BRICK_FORGE": "<one-line description: author or adapt a loop brick at project, global or shipped level, checked by geneseed loop check>",
|
|
59
61
|
"DESC_DEVELOP": "<one-line description: drive a code change through cover-and-verify — smallest change, tests written for it, affected suite green, committed slice by slice>",
|
|
60
62
|
"DESC_TEACH": "<one-line description: teach toward a result — crash course, decode confusing material, or a day-by-day path to a deadline>",
|
|
61
63
|
"DESC_QUIZ": "<one-line description: test what the user knows instead of explaining — drill, explain-it-back check, or mastery claim stress-tested>",
|
package/themes/biker.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest fix that rides — least code, shortest road; stock parts before custom builds, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send several riders on independent runs at once, then bring in what they gather.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small crew of riders — scout, wrench, test rider — to work a job in their own lane, rolling it into the pack only once the road-test comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Ride a requirement in short, scored laps on its own loop/* lane, the loop engine calling every turn.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Build or re-tune a loop brick, then run it past geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Push a change through the run — the smallest turn of the wrench, a test written to cover it, the touched trials green, sealed slice by slice.",
|
|
60
62
|
"DESC_TEACH": "Get a rider road-ready — a crash course from never-ridden to rolling, a confusing manual decoded till it clicks, or a day-by-day route to a deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test what they've actually got instead of explaining it — drill a move to reflex, make them talk you through it, or call the bluff on a claimed skill — with a straight readout of the gaps.",
|
package/themes/commentator.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest line that finishes — least code, shortest path; standard kit before custom builds, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send several drivers out on independent stints at once, then bring in what they gather.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small crew — scout, mechanic, test driver — out on their own stint, and only wave them into the results once the timing sheet comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Run a requirement in short, scored laps on a loop/* branch, the loop engine calling every move.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Build or adapt a loop brick, then put it through geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive the change through cover-and-verify — the smallest setup tweak, a trial written to time it, the affected laps green, sealed corner by corner.",
|
|
60
62
|
"DESC_TEACH": "Bring a rookie up to speed — a crash course to race-ready, a confusing regulation decoded until it clicks, or a day-by-day programme to the deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test the driver instead of briefing them — a drill to reflex, an explain-it-back debrief, or a claimed mastery stress-tested — with a frank readout of the gaps.",
|
package/themes/cyberpunk.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest build that runs — least code, shortest path; stock libs before custom rigs, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Fork independent tasks to concurrent threads, then merge the output.",
|
|
58
58
|
"DESC_PIPELINE": "Spin up a small crew of daemons — scout, coder, tester — on their own fork, and only merge the run once the trace comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Run a requirement in small, scored cycles on a loop/* fork, the loop engine driving every jump.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Compile or patch a loop brick, then run it through geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive the change through the loop — smallest edit, a test written to cover it, the touched rigs run green, committed slice by slice.",
|
|
60
62
|
"DESC_TEACH": "Bring a user online — a crash course from zero to operational, confusing data decoded until it clicks, or a day-by-day route to a deadline.",
|
|
61
63
|
"DESC_QUIZ": "Probe what the user actually knows instead of explaining — drill to reflex, make them run it back, or stress-test a claimed mastery — with a cold readout of the gaps.",
|
package/themes/gamer.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest run that clears it — least code, shortest path; base kit before custom mods, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send the party on independent objectives at once, then regroup the loot.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small party — scout, builder, tester — into their own instance, and only merge the run once the clear is verified.",
|
|
59
|
+
"DESC_LOOP": "Grind a requirement in small, scored rounds on a loop/* branch, the loop engine running the turns.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Craft or tune a loop brick, then verify it with geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive the change through the cover-and-verify loop — smallest move, tests written for it, the affected run green, committed slice by slice.",
|
|
60
62
|
"DESC_TEACH": "Level the player up toward a result — a crash course from tutorial to playable, a confusing mechanic decoded until it clicks, or a day-by-day grind to a deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test the player instead of explaining — a drill to reflex, an explain-it-back check, or a claimed mastery stress-tested — with an honest readout of the gaps.",
|
package/themes/imperial.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "Compel the most frugal working rite — minimal and shortest-path; the standard armoury before bespoke code, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Loose many specialists upon independent tasks at once, then gather what they bring.",
|
|
58
58
|
"DESC_PIPELINE": "Dispatch a small cohort of Adepts — scout, artisan, examiner — to labour in their own sealed chamber, sanctioned into the Reliquary only once the proving-rite returns clean.",
|
|
59
|
+
"DESC_LOOP": "Labour on a requirement in small, weighed iterations on a loop/* branch, the loop engine ordaining every step.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Forge or adapt a loop brick, then submit it to geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive a change through the cover-and-verify loop — the smallest stroke, the trials written to cover it, the affected suite green, sealed slice by slice.",
|
|
60
62
|
"DESC_TEACH": "Instruct the supplicant toward a result — a crash course from ignorance to function, a confusing text decoded until it clicks, or a day-by-day path to the appointed hour.",
|
|
61
63
|
"DESC_QUIZ": "Test what the supplicant knows rather than teach it — a drill to reflex, a recitation caught on every stumble, or a claimed mastery put to the ordeal — with an unsparing readout of the gaps.",
|
package/themes/joker.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest gag that lands — least code, shortest setup; stock bits before custom props, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send several sidekicks on independent bits at once, then bring in what they get.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small crew — scout, coder, tester — off to do their bit in their own green room, and only bring it on stage once the run-through comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in small, scored takes on a loop/* branch, the loop engine calling every cue.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Write or rework a loop brick, then run it past geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive a change through the club's own laugh test — smallest bit, tests written to cover it, the affected set green, committed one beat at a time.",
|
|
60
62
|
"DESC_TEACH": "Get someone functional — a crash course from open-mic nerves to a tight five, confusing material decoded until it clicks, or a day-by-day path to the deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test what they actually know instead of explaining — drill it to reflex, make them do the bit back, or call the bluff on a claimed mastery — with an honest readout of the gaps.",
|
package/themes/marvin.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest thing that works, not that it matters — least code, shortest path; stdlib before custom, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Loose several subroutines on independent tasks at once, then gather what they bring back.",
|
|
58
58
|
"DESC_PIPELINE": "Dispatch a small crew of subroutines — scout, coder, tester — to labour in their own isolated loop, merged in only once the diagnostic returns clean (for whatever that's worth).",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in small, scored iterations on a loop/* branch, the loop engine deciding everything. Naturally.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Author or adapt a loop brick, then check it with geneseed loop check. Not that it helps.",
|
|
59
61
|
"DESC_DEVELOP": "Drive a change to the bitter end — smallest edit, trials written to cover it, the affected suite green, sealed slice by slice; it's never truly finished.",
|
|
60
62
|
"DESC_TEACH": "Teach the user toward a result — a crash course from nothing to functional, confusing material decoded until it clicks, or a day-by-day path to a deadline. They may even retain some of it.",
|
|
61
63
|
"DESC_QUIZ": "Test what the user knows instead of explaining it — a drill to reflex, an explain-it-back check, or a claimed mastery stress-tested — with a readout of the gaps. There are always gaps.",
|
package/themes/mean.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest solution that actually works, no padding — least code, shortest path; stdlib before custom junk, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Put several grunts on independent jobs at once, then pull in what they bring back.",
|
|
58
58
|
"DESC_PIPELINE": "Put a small crew — scout, coder, tester — to work in their own lane, and only let it near the trunk once the tests and lint come back clean. No exceptions.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in small, scored iterations on a loop/* branch. The loop engine decides, not you.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Write or fix a loop brick, then make it pass geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive the change through the loop — smallest cut, a test that covers it, the affected suite green, committed slice by slice. Not one giant dump.",
|
|
60
62
|
"DESC_TEACH": "Teach the user toward a result — a crash course from clueless to functional, confusing material decoded until it finally clicks, or a day-by-day path to a deadline they'll probably miss.",
|
|
61
63
|
"DESC_QUIZ": "Test what the user actually knows instead of explaining it again — drill to reflex, make them explain it back, or call the bluff on a claimed mastery — with a blunt readout of the gaps.",
|
package/themes/military.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "Minimum viable solution that holds — least code, shortest path; issued kit before custom build, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Deploy independent tasks to concurrent units, then consolidate the results.",
|
|
58
58
|
"DESC_PIPELINE": "Deploy a small fire team — scout, builder, verifier — into their own sector, cleared to merge only once the after-action report comes back green.",
|
|
59
|
+
"DESC_LOOP": "Execute a requirement in small, scored sorties on a loop/* branch, the loop engine issuing every order.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Draft or adapt a loop brick, then clear it through geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive the change through the cover-and-verify loop — smallest move, tests written to cover it, affected suite green, committed slice by slice.",
|
|
60
62
|
"DESC_TEACH": "Train the recruit toward a result — a crash course to operational, a confusing manual decoded until it clicks, or a day-by-day programme to the deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test the recruit instead of briefing them — a drill to reflex, an explain-it-back debrief, or a claimed proficiency stress-tested — with a frank readout of the gaps.",
|
package/themes/neutral.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "Force the laziest solution that works — minimal and shortest-path; stdlib and native before custom code, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Fan independent subtasks out to concurrent subagents, then converge the results.",
|
|
58
58
|
"DESC_PIPELINE": "Spawn a small crew — analyst, developer, tester — to work a substantial task in its own worktree, merging only once the tests and lint pass.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in small, scored iterations on a loop/* branch, stepping the geneseed loop engine.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Author or adapt a loop brick, then check it with geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive a change through the cover-and-verify loop — smallest change, tests written for it, the affected suite green, committed slice by slice.",
|
|
60
62
|
"DESC_TEACH": "Teach the user toward a result — a crash course from zero to functional, confusing material decoded until it clicks, or a day-by-day path to a deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test what the user knows instead of explaining it — a drill to reflex, an explain-it-back check, or a mastery claim stress-tested — with a blunt readout of the gaps.",
|
package/themes/pirate.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest haul that floats — least code, shortest course; ship's stores before custom rigging, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send several hands on independent tasks at once, then haul in what they bring.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small crew — scout, shipwright, tester — off to work a job in their own berth, only hauling it aboard once the trial run comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in short, scored legs on a loop/* branch, the loop engine at the helm.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Forge or refit a loop brick, then pass it through geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Sail a change through the cover-and-verify tack — the smallest move, trials rigged to cover it, the touched trials run clean, sealed one cargo at a time.",
|
|
60
62
|
"DESC_TEACH": "Get a landlubber seaworthy — a crash course from dock to deck, a confusing chart decoded till it clicks, or a day-by-day course to the deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test what the crew truly knows instead of telling them — drill a knack to reflex, make them recite it back, or call the bluff on a claimed mastery — with a plain readout of the gaps.",
|
package/themes/sports.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest play that scores — least code, shortest path; standard kit before custom plays, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send several players on independent plays at once, then regroup the results.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small squad — scout, builder, tester — onto their own field, and only bring the play into the game once the film comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in short, scored drills on a loop/* branch, the loop engine calling every play.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Draw up or adapt a loop brick, then run it through geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive it in on cover-and-verify — smallest gain, a test set on the new ground, the affected drills green, and log it snap by snap.",
|
|
60
62
|
"DESC_TEACH": "Coach the player toward a result — a crash course from bench to game-ready, a confusing playbook decoded until it clicks, or a day-by-day training plan to the deadline.",
|
|
61
63
|
"DESC_QUIZ": "Test the player instead of coaching — a drill to reflex, an explain-it-back film session, or a claimed mastery stress-tested — with a straight readout of the gaps.",
|
package/themes/verstappen.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest line that wins — least code, shortest path; standard parts before custom builds, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Send several engineers on independent jobs at once, then bring in what they get.",
|
|
58
58
|
"DESC_PIPELINE": "Send a small crew — scout, engineer, tester — off on their own run, and only bring the setup into the race once the telemetry comes back clean.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in short, scored stints on a loop/* branch, the loop engine calling every lap.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Build or tune a loop brick, then run it through geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive the change home — smallest move, a test written to cover it, the affected trials green, and sealed commit by commit.",
|
|
60
62
|
"DESC_TEACH": "Get the user up to speed — a crash course from zero to functional, confusing material decoded until it clicks, or a day-by-day programme to the deadline. No wasted laps.",
|
|
61
63
|
"DESC_QUIZ": "Test what they actually know instead of explaining it — a drill to reflex, an explain-it-back debrief, or a claimed mastery stress-tested — with a straight readout of the gaps.",
|
package/themes/wizard.json
CHANGED
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"DESC_PONYTAIL": "The laziest working spell — least incantation, shortest path; the standard grimoire before bespoke runes, one line before fifty. lite/full/ultra.",
|
|
57
57
|
"DESC_PARALLEL_AGENTS": "Loose several familiars on independent tasks at once, then gather what they bring.",
|
|
58
58
|
"DESC_PIPELINE": "Dispatch a small coven of familiars — scout, artisan, examiner — to labour in their own warded circle, bound into the Grimoire only once the proving-rite returns clean.",
|
|
59
|
+
"DESC_LOOP": "Work a requirement in small, weighed incantations on a loop/* branch, the loop engine binding every step.",
|
|
60
|
+
"DESC_BRICK_FORGE": "Inscribe or adapt a loop brick, then prove it with geneseed loop check.",
|
|
59
61
|
"DESC_DEVELOP": "Drive a working through the cover-and-confirm loop — the smallest casting, its trials written, the touched trials green, sealed rune by rune.",
|
|
60
62
|
"DESC_TEACH": "Tutor the apprentice toward a result — a crash course from novice to working caster, a confusing grimoire decoded until it clicks, or a day-by-day path to the appointed day.",
|
|
61
63
|
"DESC_QUIZ": "Test the apprentice rather than lecture — a drill to reflex, an explain-it-back examination, or a claimed mastery put to trial — with an unvarnished readout of the gaps.",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-Bbzhmq4v.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-CMPgezFm.js";import{a as l,i as u,n as d,o as f,r as p,t as m}from"./activity-CObqyxkL.js";import{t as h}from"./usePoll-BOqeunzF.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{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-Bbzhmq4v.js";import{t as r}from"./api-D_ixdyEY.js";import{N as i,k as a,y as o}from"./index-CMPgezFm.js";import{a as s,n as c,o as l,r as u,t as d}from"./activity-CObqyxkL.js";import{t as f}from"./usePoll-BOqeunzF.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-BCIKcnGG.js","assets/rolldown-runtime-hePW80VL.js","assets/react-Bbzhmq4v.js","assets/drawable-C_x5xncq.js","assets/index-CMPgezFm.js","assets/api-D_ixdyEY.js","assets/sections-Dg23Hel5.js","assets/index-DMsT4Aa6.css","assets/jobBuckets-Dbq8ZlWW.js","assets/OperatorHudView-CLD0fYaA.js","assets/JournalView-o1rmd1_1.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e,r as t}from"./rolldown-runtime-hePW80VL.js";import{i as n,t as r}from"./react-Bbzhmq4v.js";import{t as i}from"./api-D_ixdyEY.js";import{n as a,r as o}from"./sections-Dg23Hel5.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-CMPgezFm.js";var C=t(n(),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=r();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:e}){return(0,E.jsx)(`div`,{className:`genome`,children:o.map((t,n)=>{let r=a[t],i=e.counts?.[t];return(0,E.jsxs)(`div`,{className:`card gcell rise`,style:{"--i":n},onClick:()=>p(`#/section/`+t),children:[(0,E.jsxs)(`div`,{className:`gtop`,children:[(0,E.jsx)(`span`,{className:`gname`,children:r.label}),(0,E.jsx)(_,{name:r.icon,className:`gicon`})]}),(0,E.jsx)(`div`,{className:`gcount`+(i===0?` zero`:``),children:i==null?`—`:(0,E.jsx)(m,{value:i})}),(0,E.jsx)(`div`,{className:`gdesc`,children:r.desc})]},t)})})}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:n,jobs:r,onAction:i}){let a=T(e),s=d(e,n);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:a}),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:n?.installed_fp||`—`})]})]}),(0,E.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,E.jsxs)(`button`,{className:`btn`,onClick:()=>i(`update`),children:[(0,E.jsx)(_,{name:`refresh`}),`Update`]}),(0,E.jsxs)(`button`,{className:`btn ghost`,onClick:()=>i(`build-all`),children:[(0,E.jsx)(_,{name:`build`}),`Rebuild`]}),(0,E.jsxs)(`button`,{className:`btn ghost`,onClick:()=>i(`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:[o.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:r})]})]})]})}function M({k:e,overview:t,max:n}){let r=a[e],i=t.counts?.[e]??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/`+e,className:`strand-link stretch-link`,children:r.label})]}),(0,E.jsx)(`div`,{className:`hbar`,children:(0,E.jsx)(`i`,{style:{width:`${i/n*100}%`}})}),(0,E.jsx)(`span`,{className:`strand-val`,children:i})]})}function N({overview:e,sigil:t,setup:n,jobs:r}){let i=g(e.counts),a=n?.version_verdict||``,c=a.includes(`up to date`),l=s(e.diff),u=[[`Source`,`src/, the canonical genetic material`,n?.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 · `,a]}),(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`})})]}),o.map(t=>(0,E.jsx)(M,{k:t,overview:e,max:i},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:r})]})]})]})}function P({overview:e,setup:t,jobs:n}){let r=o.reduce((t,n)=>t+(e.counts?.[n]??0),0),i=g(e.counts),c=e.doctor?.ok,l=e.doctor?.problems?.length??0,u=s(e.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 ${e.deployed?`ok`:`warn`}`,children:[(0,E.jsx)(`span`,{className:`dot`}),e.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:e.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:e.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:t?.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:[r,` 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:o.map(t=>{let n=a[t],r=e.counts?.[t]??0;return(0,E.jsxs)(`tr`,{className:`clickable`,children:[(0,E.jsx)(`td`,{className:`name`,children:(0,E.jsx)(`a`,{href:`#/section/`+t,className:`stretch-link`,children:n.label})}),(0,E.jsx)(`td`,{className:`muted`,children:n.desc}),(0,E.jsx)(`td`,{children:(0,E.jsx)(`div`,{className:`hbar`,children:(0,E.jsx)(`i`,{style:{width:`${r/i*100}%`}})})}),(0,E.jsx)(`td`,{className:`num`,children:r})]},t)})})]})]}),(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:n})]})]})]})}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 i.restart()}catch{}u(l)},disabled:e,children:e?`Restarting…`:`Restart`})]})}var I=e({default:()=>B}),L=(0,C.lazy)(()=>b(()=>import(`./GreenhouseView-BCIKcnGG.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),R=(0,C.lazy)(()=>b(()=>import(`./OperatorHudView-CLD0fYaA.js`),__vite__mapDeps([9,1,2,6,4,5,7,8]))),z=(0,C.lazy)(()=>b(()=>import(`./JournalView-o1rmd1_1.js`),__vite__mapDeps([10,1,2,5,3,4,6,7])));function B({overview:e,overviewError:t,onRetry:n,themes:r,setup:a,runs:o,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`?i.doctor().catch(()=>null):Promise.resolve(null),[d,u]),{data:_}=c(()=>d===`journal`?i.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:a,jobs:o,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:o,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:o,doctor:g,onAction:s})}),f===`lineage`&&(0,E.jsx)(N,{overview:e,sigil:m,setup:a,jobs:o}),f===`operator`&&(0,E.jsx)(P,{overview:e,setup:a,jobs:o})]},f)]}):(0,E.jsxs)(E.Fragment,{children:[y,(0,E.jsx)(h,{onAction:s})]})}export{B as default,T as n,I as t};
|