geneseed 4.1.0 → 4.2.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 +30 -0
- package/README.md +2 -2
- package/SHIPPED.md +3 -3
- package/adapters/claude-code/README.md +0 -21
- package/adapters/opencode/plugins/geneseed-guard.js +31 -0
- package/docs/guides/uninstall.md +2 -0
- package/docs/guides/upgrade.md +2 -0
- package/docs/token-footprint.md +1 -1
- package/docs/understand/take-it-out.md +1 -1
- package/harness.config.json +1 -1
- package/js/README.md +6 -0
- package/js/build/driver.mjs +47 -11
- package/js/build/emit-claude.mjs +22 -10
- package/js/build/emit-common.mjs +9 -3
- package/js/build/emit-opencode.mjs +18 -11
- package/js/build/source.mjs +1 -0
- package/js/build/version.mjs +10 -3
- package/js/cli-table.json +15 -0
- package/js/hosts/hooks.mjs +4 -0
- package/js/hosts/installs.mjs +1 -1
- package/js/hosts/native.mjs +38 -6
- package/js/hosts/owned.mjs +159 -0
- package/js/hosts/settings.mjs +4 -0
- package/js/hosts/usage.mjs +62 -0
- package/js/inspect/checks-repo.mjs +76 -1
- package/js/inspect/cost.mjs +83 -0
- package/js/inspect/doctor.mjs +2 -1
- package/js/inspect/inventory.mjs +1 -1
- package/js/maintain/uninstall.mjs +77 -42
- package/js/web/api.mjs +66 -3
- package/js/web/gates-api.mjs +44 -0
- package/js/web/routes.mjs +8 -2
- package/js/web/update-check.mjs +61 -0
- package/js/web/usage-api.mjs +95 -0
- package/package.json +1 -1
- package/registry.json +18 -25
- package/src/AGENT.md.tmpl +0 -1
- package/src/skills/develop.md +9 -0
- package/src/skills/geneseed-code-review.md +5 -1
- package/src/skills/security-audit.md +7 -1
- package/src/skills/wayfinder.md +25 -6
- package/src/skills/worktree.md +5 -5
- package/themes/_TEMPLATE.json +0 -1
- package/themes/biker.json +0 -1
- package/themes/commentator.json +0 -1
- package/themes/cyberpunk.json +0 -1
- package/themes/gamer.json +0 -1
- package/themes/imperial.json +0 -1
- package/themes/joker.json +0 -1
- package/themes/marvin.json +0 -1
- package/themes/mean.json +0 -1
- package/themes/military.json +0 -1
- package/themes/neutral.json +0 -1
- package/themes/pirate.json +0 -1
- package/themes/sports.json +0 -1
- package/themes/verstappen.json +0 -1
- package/themes/wizard.json +0 -1
- package/web/dist/assets/{Activity-CqVt2u9s.js → Activity-ClEuDk9q.js} +1 -1
- package/web/dist/assets/{ActivityDetail-Bui5Gomc.js → ActivityDetail-CS9IuJlw.js} +1 -1
- package/web/dist/assets/Dashboard-BiRFjkBS.js +2 -0
- package/web/dist/assets/Docs-CD20mrVv.js +5 -0
- package/web/dist/assets/{GreenhouseView-DgNY8QKU.js → GreenhouseView-CL3PubNb.js} +1 -1
- package/web/dist/assets/{Installs-DZwZOUZJ.js → Installs-BFLOVV0r.js} +2 -2
- package/web/dist/assets/{JournalView-DXpFbKOG.js → JournalView-BvsSkjSn.js} +1 -1
- package/web/dist/assets/{Laws-Bh7ztekk.js → Laws-BVoYOkVW.js} +2 -2
- package/web/dist/assets/{Library-DBLX-1SD.js → Library-Bl7xqOlh.js} +1 -1
- package/web/dist/assets/{Loops-CvFMZ7_P.js → Loops-Cnpep8FX.js} +1 -1
- package/web/dist/assets/{OperatorHudView-FPTUH1CB.js → OperatorHudView-B0AMVmtV.js} +1 -1
- package/web/dist/assets/{Personal-DcVA502F.js → Personal-CBg_x2kA.js} +1 -1
- package/web/dist/assets/{Tabs-DtyR4h75.js → Tabs-2gX8I69E.js} +1 -1
- package/web/dist/assets/api-Bp5eW_6m.js +1 -0
- package/web/dist/assets/{drawable-CNSPVZxX.js → drawable-KPn0rKI7.js} +1 -1
- package/web/dist/assets/{index-Ctp-4poP.css → index-CO-9wMJY.css} +1 -1
- package/web/dist/assets/index-DoD_g2CM.js +2 -0
- package/web/dist/index.html +3 -3
- package/src/skills/herdr.md +0 -154
- package/web/dist/assets/Dashboard-VlIx1-At.js +0 -2
- package/web/dist/assets/Docs-6cYYkVeA.js +0 -5
- package/web/dist/assets/api-CRqWld2H.js +0 -1
- package/web/dist/assets/index-BmjcLIOr.js +0 -2
package/registry.json
CHANGED
|
@@ -72,11 +72,11 @@
|
|
|
72
72
|
"last_verified": ""
|
|
73
73
|
},
|
|
74
74
|
"agents/researcher": {
|
|
75
|
-
"status": "
|
|
75
|
+
"status": "approved",
|
|
76
76
|
"version": "1.0.0",
|
|
77
77
|
"owner": "Guillaume Lemer",
|
|
78
78
|
"added": "2026-09-06",
|
|
79
|
-
"last_verified": ""
|
|
79
|
+
"last_verified": "2026-10-13"
|
|
80
80
|
},
|
|
81
81
|
"agents/reviewer": {
|
|
82
82
|
"status": "approved",
|
|
@@ -184,11 +184,11 @@
|
|
|
184
184
|
"last_verified": "2026-09-06"
|
|
185
185
|
},
|
|
186
186
|
"skills/dependencies": {
|
|
187
|
-
"status": "
|
|
187
|
+
"status": "approved",
|
|
188
188
|
"version": "1.0.0",
|
|
189
189
|
"owner": "Guillaume Lemer",
|
|
190
190
|
"added": "2026-10-08",
|
|
191
|
-
"last_verified": ""
|
|
191
|
+
"last_verified": "2026-10-13"
|
|
192
192
|
},
|
|
193
193
|
"skills/develop": {
|
|
194
194
|
"status": "approved",
|
|
@@ -205,11 +205,11 @@
|
|
|
205
205
|
"last_verified": "2026-09-06"
|
|
206
206
|
},
|
|
207
207
|
"skills/explain-changes": {
|
|
208
|
-
"status": "
|
|
208
|
+
"status": "approved",
|
|
209
209
|
"version": "1.0.0",
|
|
210
210
|
"owner": "Guillaume Lemer",
|
|
211
211
|
"added": "2026-09-30",
|
|
212
|
-
"last_verified": ""
|
|
212
|
+
"last_verified": "2026-10-13"
|
|
213
213
|
},
|
|
214
214
|
"skills/forge-mcp": {
|
|
215
215
|
"status": "approved",
|
|
@@ -247,11 +247,11 @@
|
|
|
247
247
|
"last_verified": "2026-09-06"
|
|
248
248
|
},
|
|
249
249
|
"skills/git-history": {
|
|
250
|
-
"status": "
|
|
250
|
+
"status": "approved",
|
|
251
251
|
"version": "1.0.0",
|
|
252
252
|
"owner": "Guillaume Lemer",
|
|
253
253
|
"added": "2026-10-08",
|
|
254
|
-
"last_verified": ""
|
|
254
|
+
"last_verified": "2026-10-13"
|
|
255
255
|
},
|
|
256
256
|
"skills/handoff": {
|
|
257
257
|
"status": "approved",
|
|
@@ -260,13 +260,6 @@
|
|
|
260
260
|
"added": "2026-06-03",
|
|
261
261
|
"last_verified": "2026-09-06"
|
|
262
262
|
},
|
|
263
|
-
"skills/herdr": {
|
|
264
|
-
"status": "approved",
|
|
265
|
-
"version": "1.0.0",
|
|
266
|
-
"owner": "Guillaume Lemer",
|
|
267
|
-
"added": "2026-06-13",
|
|
268
|
-
"last_verified": "2026-09-06"
|
|
269
|
-
},
|
|
270
263
|
"skills/ingest": {
|
|
271
264
|
"status": "approved",
|
|
272
265
|
"version": "1.0.0",
|
|
@@ -387,18 +380,18 @@
|
|
|
387
380
|
"last_verified": "2026-09-06"
|
|
388
381
|
},
|
|
389
382
|
"skills/rule": {
|
|
390
|
-
"status": "
|
|
383
|
+
"status": "approved",
|
|
391
384
|
"version": "1.0.0",
|
|
392
385
|
"owner": "Guillaume Lemer",
|
|
393
386
|
"added": "2026-07-07",
|
|
394
|
-
"last_verified": ""
|
|
387
|
+
"last_verified": "2026-10-13"
|
|
395
388
|
},
|
|
396
389
|
"skills/security-audit": {
|
|
397
|
-
"status": "
|
|
390
|
+
"status": "approved",
|
|
398
391
|
"version": "1.0.0",
|
|
399
392
|
"owner": "Guillaume Lemer",
|
|
400
393
|
"added": "2026-09-06",
|
|
401
|
-
"last_verified": ""
|
|
394
|
+
"last_verified": "2026-10-13"
|
|
402
395
|
},
|
|
403
396
|
"skills/ship": {
|
|
404
397
|
"status": "approved",
|
|
@@ -408,11 +401,11 @@
|
|
|
408
401
|
"last_verified": "2026-09-06"
|
|
409
402
|
},
|
|
410
403
|
"skills/skill-forge": {
|
|
411
|
-
"status": "
|
|
404
|
+
"status": "approved",
|
|
412
405
|
"version": "1.0.0",
|
|
413
406
|
"owner": "Guillaume Lemer",
|
|
414
407
|
"added": "2026-09-06",
|
|
415
|
-
"last_verified": ""
|
|
408
|
+
"last_verified": "2026-10-13"
|
|
416
409
|
},
|
|
417
410
|
"skills/teach": {
|
|
418
411
|
"status": "experimental",
|
|
@@ -422,11 +415,11 @@
|
|
|
422
415
|
"last_verified": ""
|
|
423
416
|
},
|
|
424
417
|
"skills/token-report": {
|
|
425
|
-
"status": "
|
|
418
|
+
"status": "approved",
|
|
426
419
|
"version": "1.0.0",
|
|
427
420
|
"owner": "Guillaume Lemer",
|
|
428
421
|
"added": "2026-07-29",
|
|
429
|
-
"last_verified": ""
|
|
422
|
+
"last_verified": "2026-10-13"
|
|
430
423
|
},
|
|
431
424
|
"skills/wayfinder": {
|
|
432
425
|
"status": "approved",
|
|
@@ -450,11 +443,11 @@
|
|
|
450
443
|
"last_verified": "2026-09-06"
|
|
451
444
|
},
|
|
452
445
|
"skills/worktree": {
|
|
453
|
-
"status": "
|
|
446
|
+
"status": "approved",
|
|
454
447
|
"version": "1.0.0",
|
|
455
448
|
"owner": "Guillaume Lemer",
|
|
456
449
|
"added": "2026-09-06",
|
|
457
|
-
"last_verified": ""
|
|
450
|
+
"last_verified": "2026-10-13"
|
|
458
451
|
}
|
|
459
452
|
}
|
|
460
453
|
}
|
package/src/AGENT.md.tmpl
CHANGED
|
@@ -262,7 +262,6 @@ the ten council seats are convened by the [council {{SKILL}}]({{DIR_SKILLS}}/cou
|
|
|
262
262
|
| [loop]({{DIR_SKILLS}}/loop.md) | the user asks to run a loop |
|
|
263
263
|
| [brick-forge]({{DIR_SKILLS}}/brick-forge.md) | a new or adapted loop brick |
|
|
264
264
|
| [wiki]({{DIR_SKILLS}}/wiki.md) | consulting or growing the user's machine-wide knowledge base declared in `geneseed-wiki.jsonc` (§8) |
|
|
265
|
-
| [herdr]({{DIR_SKILLS}}/herdr.md) | running inside a [herdr](https://herdr.dev) pane (`HERDR_ENV=1`) and a task needs another pane — a sibling server, a watched build, a spawned agent |
|
|
266
265
|
| [rule]({{DIR_SKILLS}}/rule.md) | anything the user wants to outlive this session — a standing rule of their own (§1) or a durable fact to remember (§5); also tending the {{MEMORY}} set — duplicates, stale facts, a recurring lesson due for promotion |
|
|
267
266
|
| [profile]({{DIR_SKILLS}}/profile.md) | the user wants the agent to know who they are — creating or refreshing the `PROFILE.md` identity file (§1) through a short interview |
|
|
268
267
|
| [skill-forge]({{DIR_SKILLS}}/skill-forge.md) | a repeated task has no {{SKILL}}, a self-improvement loop produced an edit, or two {{SKILLS}} should merge |
|
package/src/skills/develop.md
CHANGED
|
@@ -45,6 +45,15 @@ case where the seam is only known once the change is made.
|
|
|
45
45
|
session ends mid-task. Leave no slice uncommitted and no test you could not make
|
|
46
46
|
fail.
|
|
47
47
|
|
|
48
|
+
## Anti-patterns — name the one you catch
|
|
49
|
+
- **Implementation-coupled** — mocks an internal collaborator, tests a private method,
|
|
50
|
+
or checks through a side channel (querying the database instead of the interface).
|
|
51
|
+
The tell: it breaks on a refactor that changed no behaviour.
|
|
52
|
+
- **Tautological** — the expected value is recomputed the way the code computes it, so
|
|
53
|
+
the test passes by construction and can never disagree with the code.
|
|
54
|
+
- **Horizontal slicing** — all the tests first, then all the code: the tests pin an
|
|
55
|
+
imagined shape. One test, one implementation, repeat.
|
|
56
|
+
|
|
48
57
|
## Done when
|
|
49
58
|
- Every behaviour changed is covered by a test written this session that was seen
|
|
50
59
|
to fail before it passed, the whole suite ran at exit with its output shown and every
|
|
@@ -16,11 +16,15 @@
|
|
|
16
16
|
output format included, but never a {{LAW}}.
|
|
17
17
|
4. For a large change, consider dispatching the
|
|
18
18
|
[reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) to keep the main context clean.
|
|
19
|
+
When a spec exists and the diff spans more than a few files, run pass 3 in its own
|
|
20
|
+
subagent, handed only the diff command and the spec, alongside passes 1–2: a pass
|
|
21
|
+
that has already filled up on code findings stops reading the spec closely, and
|
|
22
|
+
kept apart, one axis's findings never mask the other's.
|
|
19
23
|
5. Pass 1 — correctness: logic errors, edge cases, error handling, race
|
|
20
24
|
conditions. Verify suspect behaviour by running tests, not by assuming.
|
|
21
25
|
6. Pass 2 — quality: after `REVIEW.md`, the repo's documented standards (`CODING_STANDARDS.md`,
|
|
22
26
|
`CONTRIBUTING.md`) override. Then, as judgement calls and skipping what tooling enforces:
|
|
23
|
-
mysterious name, duplication, feature envy, data clumps, primitive obsession, repeated switches, shotgun surgery, divergent change, speculative generality, middle man, dead code, units that do too much.
|
|
27
|
+
mysterious name, duplication, feature envy, data clumps, primitive obsession, repeated switches, shotgun surgery, divergent change, speculative generality, message chains, middle man, refused bequest, dead code, units that do too much.
|
|
24
28
|
7. Pass 3 — spec fidelity: flag anything asked for but missing, present but never
|
|
25
29
|
asked for, or implemented wrong — quoting the spec line for each. Where the spec is silent,
|
|
26
30
|
judge by what a reasonable user would expect: a crash, hang or data loss on an input the
|
|
@@ -35,7 +35,13 @@ surface.
|
|
|
35
35
|
(the [dependencies {{SKILL}}](dependencies.md) carries the tooling). A destructive
|
|
36
36
|
capability exposed to an agent or a tool: its guard is enforced server-side, at the
|
|
37
37
|
boundary the call crosses, never left to the caller's judgement ({{DOCTRINE:external-gate}}).
|
|
38
|
-
6. **
|
|
38
|
+
6. **Prove each finding before it stands.** Restate it as an attacker-controlled source
|
|
39
|
+
reaching an unguarded sink, traced through the real callers; one you cannot restate
|
|
40
|
+
that way is a lead to chase, not a finding. Reject the shortcuts that manufacture
|
|
41
|
+
false positives: *it looks dangerous* (a pattern is not a path — validation upstream
|
|
42
|
+
may stop it), *it was vulnerable elsewhere* (each call site has its own guards), *this
|
|
43
|
+
is clearly critical* (models overrate severity — argue the defender's case first).
|
|
44
|
+
7. **Report, don't fix.** Each finding as `file:line — attack — impact — fix`, ranked
|
|
39
45
|
critical → high → medium → note, with the evidence that made it a finding. Then the
|
|
40
46
|
verdict — **ship / fix-then-ship / block** — and, for anything above medium, the
|
|
41
47
|
test that would pin the fix. Applying fixes is a [develop {{SKILL}}](develop.md)
|
package/src/skills/wayfinder.md
CHANGED
|
@@ -9,7 +9,9 @@ the destination can be named but the route to it cannot; the user says
|
|
|
9
9
|
## Procedure
|
|
10
10
|
1. Name the **destination** — what reaching the end looks like (a spec ready to
|
|
11
11
|
hand off, a decision locked, a migration completed). One or two lines; every
|
|
12
|
-
later session orients to it before picking work.
|
|
12
|
+
later session orients to it before picking work. Then sweep the open questions
|
|
13
|
+
breadth-first; if none turn up — the route is already clear and fits one session
|
|
14
|
+
— there is no fog and no map: ask the user how to proceed.
|
|
13
15
|
2. Create the **map** — one GitHub issue labelled `wayfinder:map` when `origin` is
|
|
14
16
|
GitHub; else an existing map under `docs/`, else `.scratch/<effort>/map.md`. It is
|
|
15
17
|
an index, not a store: the Destination, Notes (domain, standing preferences),
|
|
@@ -21,12 +23,29 @@ the destination can be named but the route to it cannot; the user says
|
|
|
21
23
|
`issues/NN-<slug>.md` beside it, with `Status:` and `Blocked by:` lines). Each is a
|
|
22
24
|
question whose resolution is a *decision* — never a slice of build. Create them all
|
|
23
25
|
first, then wire blocking edges and cross-references with the real ids — a
|
|
24
|
-
placeholder `#n` auto-links an unrelated issue.
|
|
26
|
+
placeholder `#n` auto-links an unrelated issue. Each ticket carries one type, as a
|
|
27
|
+
`wayfinder:<type>` label (or a `Type:` line), which names how it resolves:
|
|
28
|
+
- **research** (agent alone) — a fact the decision waits on, from docs, an API or
|
|
29
|
+
the web: a subagent runs the [research {{SKILL}}](research.md). Fire every research
|
|
30
|
+
ticket in parallel as soon as the map is charted.
|
|
31
|
+
- **prototype** (with the user) — a rough artifact to react to when "how should it
|
|
32
|
+
look or behave" is the question: the [prototype {{SKILL}}](prototype.md).
|
|
33
|
+
- **grilling** (with the user, the default) — an interview through the
|
|
34
|
+
[brainstorm {{SKILL}}](brainstorm.md), terms pinned with the
|
|
35
|
+
[codebase-design {{SKILL}}](codebase-design.md); a [council {{SKILL}}](council.md)
|
|
36
|
+
debate may inform it, never replace it.
|
|
37
|
+
- **task** — work that decides nothing but blocks a decision (provision access,
|
|
38
|
+
sign up to judge an API, move data to see its shape). Do it alone where you can,
|
|
39
|
+
else hand the user an exact checklist; record what was done and the facts later
|
|
40
|
+
tickets need.
|
|
41
|
+
|
|
42
|
+
A ticket worked *with the user* resolves only through that live exchange — never
|
|
43
|
+
answer the user's side yourself.
|
|
25
44
|
4. Work the **frontier**: claim an unblocked ticket before any work (assign it, or
|
|
26
|
-
`Status: claimed`) so concurrent sessions skip it. Resolve it —
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
45
|
+
`Status: claimed`) so concurrent sessions skip it. Resolve it as its type says — read
|
|
46
|
+
the label, the body never states it — write the decision into the ticket,
|
|
47
|
+
gist-and-link it on the map, close it. At most one ticket per session (research
|
|
48
|
+
tickets excepted). New questions become tickets.
|
|
30
49
|
5. In everything the user reads, refer to the map and tickets **by name**,
|
|
31
50
|
never by bare issue number — the id rides inside the name's link.
|
|
32
51
|
6. Stop when the frontier is empty: nothing left to decide means the way is
|
package/src/skills/worktree.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
> {{DESC_WORKTREE}}
|
|
4
4
|
|
|
5
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,
|
|
7
|
-
is uncommitted, another agent or session
|
|
8
|
-
or rewrite needs a disposable copy, or the user says "
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
checkout with work in flight. That covers a [pipeline](pipeline.md) crew needing its own tree,
|
|
7
|
+
a second task starting while the first is uncommitted, another agent or session editing this
|
|
8
|
+
checkout, or a risky migration or rewrite that needs a disposable copy, or the user says "don't
|
|
9
|
+
touch my checkout". Also the first thing to reach for when `git status` shows changes you did
|
|
10
|
+
not make.
|
|
11
11
|
|
|
12
12
|
## Procedure
|
|
13
13
|
1. **Look before you branch** ({{LAW:verify-before-asserting}}). `git status` and `git worktree list`
|
package/themes/_TEMPLATE.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "<one-line description: cut a release — bump, changelog, tag, kept in sync>",
|
|
66
66
|
"DESC_INGEST": "<one-line description: convert a PDF/Office/web doc into clean markdown before reading>",
|
|
67
67
|
"DESC_RESEARCH": "<one-line description: answer from the open web, verifying each claim against independent sources>",
|
|
68
|
-
"DESC_HERDR": "<one-line description: drive herdr from inside it — split panes, spawn agents, read panes>",
|
|
69
68
|
"DESC_RULE": "<one-line description: ask whether the user wants a standing rule or a durable memory, then write the memory or pressure-test the rule before adopting it in user-rules.md — and tend the memory set: merge, retire, promote>",
|
|
70
69
|
"DESC_PROFILE": "<one-line description: interview the user and draft or refresh PROFILE.md — who they are, how they work, how they like answers pitched; identity only, rules go to user-rules.md>",
|
|
71
70
|
"DESC_GENESEED": "<one-line description: operate the deployed Geneseed harness — find installs and their settings, read files, status, doctor, diff, rebuild one setting on request — and make the user's own OpenCode colour theme>",
|
package/themes/biker.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, write the roadbook entry, tag it, all three in sync.",
|
|
66
66
|
"DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Find the answer out on the open road — search wide, then prove every claim against independent sources before you trust it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing rule, or just something to remember? Then log the memory, or lean on the rule till it holds every corner before bolting it into user-rules.md — and keep the memory stash serviced: merge, scrap, promote.",
|
|
70
69
|
"DESC_PROFILE": "Stamp the rider's plate into PROFILE.md — who they are, what they ride, how they like the road called; identity only, club rules bolt into user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and lay down the rider's own OpenCode paint job.",
|
package/themes/commentator.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, write the race report, seal it with a tag, all three in sync.",
|
|
66
66
|
"DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Hunt the answer across the open circuit — search wide, then prove every claim against independent sources before you call it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing house rule, or just one for the notebook? Then log it, or run the rule through the replay from every angle before it goes on the board in user-rules.md — and tend the memory bank besides: merge, retire, promote.",
|
|
70
69
|
"DESC_PROFILE": "Build the player profile in PROFILE.md — position, form, how they like the commentary pitched; identity only, the rulebook stays in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and roll out the viewer's own OpenCode colour theme.",
|
package/themes/cyberpunk.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — bump the version, write the changelog, tag it, all in sync.",
|
|
66
66
|
"DESC_INGEST": "Rip a PDF, Office, or web document to clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Pull the answer off the net — scan wide, then cross-check every claim against independent sources before you trust it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing rule, or just something to keep on file? Then write the memory, or stress the rule till it holds in every sector before flashing it into user-rules.md — and defrag the datastore: merge, purge, promote.",
|
|
70
69
|
"DESC_PROFILE": "Compile the user's ident into PROFILE.md — who they are, their rig, the bandwidth they want answers at; identity only, hard directives flash to user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and make the user's own OpenCode colour theme.",
|
package/themes/gamer.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Ship a patch — bump the version, write the patch notes, tag it, all in sync.",
|
|
66
66
|
"DESC_INGEST": "Load a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Look up the answer online — scout wide, then cross-check every claim against independent sources before you call it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing house rule, or just something to remember? Then save the memory, or test the rule against its worst case before binding it into user-rules.md — and tidy the save file: merge, delete, promote.",
|
|
70
69
|
"DESC_PROFILE": "Fill in the player card in PROFILE.md — main role, loadout, preferred difficulty; identity only, house rules go in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and craft the user's own OpenCode colour theme.",
|
package/themes/imperial.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Proclaim a new version — raise the number, inscribe the chronicle, seal it with a tag, all three in accord.",
|
|
66
66
|
"DESC_INGEST": "Render a foreign document — PDF, Office, or web — into clean markdown before it may be read.",
|
|
67
67
|
"DESC_RESEARCH": "Seek the answer from the wider world — range across many sources, then prove each claim against independent witnesses before you trust it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — a standing edict, or a matter merely to be remembered? Then inscribe the memory, or try the edict against the case that would break it before it enters user-rules.md — and tend the memory: merge, retire, promote to law.",
|
|
70
69
|
"DESC_PROFILE": "Inscribe the user's identity into PROFILE.md — grant audience, ask who they are and how they will to be served; identity only, edicts belong in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and forge the user's own OpenCode colour-rite.",
|
package/themes/joker.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, write the notes, tag it, all three in sync.",
|
|
66
66
|
"DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Find the answer out in the open — search wide, then prove every claim against independent sources before you call it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing rule, or just something to remember? Then jot the memory, or make the rule survive its own worst night before it gets pinned into user-rules.md — and keep tending the joke book: merge, retire, promote.",
|
|
70
69
|
"DESC_PROFILE": "Sketch the user's bio for the playbill in PROFILE.md — who they are, how they work, how they like the act paced; identity only, house rules stay in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and paint the user's own OpenCode colour theme.",
|
package/themes/marvin.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, write the chronicle, seal it with a tag, all three in accord.",
|
|
66
66
|
"DESC_INGEST": "Render a PDF, Office, or web document into clean markdown before it can be read.",
|
|
67
67
|
"DESC_RESEARCH": "Seek the answer from the wider world — range across many sources, then prove each claim against independent witnesses before trusting it. Trust is a strong word.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing rule, or merely a memory? Then write the memory, or test the rule against the case that ruins it before adopting it in user-rules.md — and keep tending the memory banks: merge, retire, promote. Entropy wins.",
|
|
70
69
|
"DESC_PROFILE": "Record who the user is in PROFILE.md — role, habits, preferred register. They'll change their mind, but do ask. Identity only; rules go in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and assemble the user's own OpenCode colour theme, if they insist.",
|
package/themes/mean.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — bump the version, write the changelog, tag it, all three in sync. Don't skip one.",
|
|
66
66
|
"DESC_INGEST": "Turn a PDF, Office, or web document into clean markdown before you read it.",
|
|
67
67
|
"DESC_RESEARCH": "Find the answer in the wild — search wide, then prove every claim against independent sources before you dare cite it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing rule, or just a fact to remember? Then write the memory, or break the rule against its worst case before it goes in user-rules.md — and keep tending the record: merge, retire, promote. Not a dumping ground.",
|
|
70
69
|
"DESC_PROFILE": "Get the user's profile down in PROFILE.md — who they are, how they work, how they want answers. Identity only; rules go in user-rules.md, obviously.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and build the user's own OpenCode colour theme while you're at it.",
|
package/themes/military.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — bump the version, update the changelog, tag — all three in step.",
|
|
66
66
|
"DESC_INGEST": "Convert a PDF, Office, or web document to clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Gather intel from open sources — sweep wide, then confirm every claim against independent reporting before you act on it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing order, or an entry for the log? Then file the memory, or test the order against the case that would break it before adopting it in user-rules.md — and keep tending the logbook: merge, retire, promote.",
|
|
70
69
|
"DESC_PROFILE": "File the commander's dossier in PROFILE.md — role, theatre, preferred briefing style; identity only, standing orders route to user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and issue the user's own OpenCode colour theme.",
|
package/themes/neutral.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — bump the version, update the changelog, and tag — keeping all three in sync.",
|
|
66
66
|
"DESC_INGEST": "Convert a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Answer a question from the open web — search widely, then verify each claim against independent sources before citing it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first whether the user wants a standing rule or a durable memory, then write the memory or pressure-test the rule before adopting it in user-rules.md — and tend the memory set: merge, retire, promote.",
|
|
70
69
|
"DESC_PROFILE": "Interview the user and draft or refresh PROFILE.md — who they are, how they work, how they like answers pitched; identity only, standing rules route to user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and make the user's own OpenCode colour theme.",
|
package/themes/pirate.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, write the log, seal it with a tag, all in accord.",
|
|
66
66
|
"DESC_INGEST": "Haul a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Hunt the answer across open waters — search wide, then prove every claim against independent charts before you trust it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — a standin' rule, or just summat to remember? Then log the memory, or run the rule aground on its worst case afore ye nail it into user-rules.md — and keep tendin' the log: merge, strike the stale, promote.",
|
|
70
69
|
"DESC_PROFILE": "Chart yer captain in PROFILE.md — who they be, how they sail, how they like their bearings called; identity only, articles o' conduct go in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and paint the crew's own OpenCode colours.",
|
package/themes/sports.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Ship the release — bump the version, write the recap, tag it, all in sync.",
|
|
66
66
|
"DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Work the scouting report — search wide, then confirm every claim against independent sources before you call it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing house rule, or just one for the notes? Then log the memory, or run the rule against the play that breaks it before it goes on the board in user-rules.md — and keep tending the film room: merge, cut, promote.",
|
|
70
69
|
"DESC_PROFILE": "Write the scouting report in PROFILE.md — position, playing style, how they want the play called; identity only, team rules go on the board in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and train up the user's own OpenCode colour theme.",
|
package/themes/verstappen.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, write the debrief, tag it, all three in sync.",
|
|
66
66
|
"DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Find the answer out on the open circuit — search wide, then prove every claim against independent sources before you call it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — standing rule, or just something to remember? Then note it, or run the rule through the lap that breaks it before locking it into user-rules.md — and keep tending the memory: merge, retire, promote.",
|
|
70
69
|
"DESC_PROFILE": "Set up the driver profile in PROFILE.md — seat, driving style, how they want the pit wall to talk; identity only, team orders go in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and build the user's own OpenCode colour theme.",
|
package/themes/wizard.json
CHANGED
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"DESC_RELEASE": "Cut a release — raise the version, inscribe the chronicle, seal it with a tag, all in accord.",
|
|
66
66
|
"DESC_INGEST": "Transmute a PDF, Office, or web document into clean markdown before reading it.",
|
|
67
67
|
"DESC_RESEARCH": "Seek the answer through the wider lore — scry many sources, then prove each claim against independent tomes before you trust it.",
|
|
68
|
-
"DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
|
|
69
68
|
"DESC_RULE": "Ask first — a standing rule, or a thing merely to be remembered? Then inscribe the memory, or prove the rule against the case that would unmake it before it enters user-rules.md — and keep tending the grimoire: merge, strike, promote.",
|
|
70
69
|
"DESC_PROFILE": "Divine the user's nature into PROFILE.md — who they are, how they work, the register they favour; identity only, binding runes belong in user-rules.md.",
|
|
71
70
|
"DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and conjure the user's own OpenCode colour theme.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-DRhoX0kS.js";import{t as r}from"./api-
|
|
1
|
+
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-DRhoX0kS.js";import{t as r}from"./api-Bp5eW_6m.js";import{N as i,_ as a,k as o,q as s,y as c}from"./index-DoD_g2CM.js";import{a as l,i as u,n as d,o as f,r as p,t as m}from"./activity-dcg5vF9j.js";import{t as h}from"./usePoll-BmR631BB.js";var g=e(t(),1),_=n();function v({s:e}){let t=p[e.status]||p.idle,n=e.files,r=e.todos,a=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]})]})]}),a&&(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 `,i(e.updated_at),` ago`]})]})}function y(){let[e,t]=(0,g.useState)(null),[n,i]=(0,g.useState)(``);h(e=>r.activity().then(n=>{e()&&(t(n),i(``))},t=>{e()&&i(t.message)}),2e3,[]);let o=!e||e.enabled!==!1,l=e?.activity||[],u=s(),d=async()=>{let e=!o;try{let n=await r.activityToggle(e);t(e=>({...e||{},enabled:n.enabled,activity:n.enabled&&e?.activity||[]})),i(``)}catch(e){i(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)(a,{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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-DRhoX0kS.js";import{t as r}from"./api-
|
|
1
|
+
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-DRhoX0kS.js";import{t as r}from"./api-Bp5eW_6m.js";import{N as i,k as a,y as o}from"./index-DoD_g2CM.js";import{a as s,n as c,o as l,r as u,t as d}from"./activity-dcg5vF9j.js";import{t as f}from"./usePoll-BmR631BB.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-CL3PubNb.js","assets/sections-GalMS0Zv.js","assets/react-DRhoX0kS.js","assets/drawable-KPn0rKI7.js","assets/index-DoD_g2CM.js","assets/api-Bp5eW_6m.js","assets/index-CO-9wMJY.css","assets/jobBuckets-Dbq8ZlWW.js","assets/OperatorHudView-B0AMVmtV.js","assets/JournalView-BvsSkjSn.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-DRhoX0kS.js";import{t as o}from"./api-Bp5eW_6m.js";import{A as s,F as c,H as l,I as u,K as d,M as f,N as p,U as m,_ as h,g,j as _,k as v,t as y,x as b,y as x}from"./index-DoD_g2CM.js";var S=r(i(),1),C={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.`},w=e=>e.deployed?C[e.theme]||`Loaded & ready`:`Not deployed`,T=a();function E({value:e,size:t=232}){let n=d(e,1100)??0,r=t/2-14,i=2*Math.PI*r,a=i*(1-n);return(0,T.jsxs)(`div`,{className:`ring-wrap`,style:{width:t,height:t},children:[(0,T.jsxs)(`svg`,{viewBox:`0 0 ${t} ${t}`,children:[(0,T.jsx)(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:`10`}),(0,T.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,T.jsx)(`line`,{x1:c,y1:l,x2:u,y2:d,stroke:`var(--line-2)`,strokeWidth:`1`,opacity:i/48<n?.9:.25},i)})]}),(0,T.jsxs)(`div`,{className:`ring-center`,children:[(0,T.jsxs)(`div`,{className:`pct`,children:[Math.round(n*100),(0,T.jsx)(`span`,{style:{fontSize:20,color:`var(--text-3)`},children:`%`})]}),(0,T.jsx)(`div`,{className:`lbl`,children:`germination`})]})]})}function D({overview:e}){let t=s(e.diff),n=e.counts||{};return(0,T.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,T.jsxs)(`a`,{className:`kseg`,href:e.hash,title:`Open ${e.label}`,children:[(0,T.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:t==null?`—`:(0,T.jsx)(m,{value:t})}),(0,T.jsx)(`span`,{className:`kseg-l`,children:e.label})]},e.key)}),(0,T.jsx)(`div`,{className:`kseg-spacer`}),(0,T.jsxs)(`button`,{className:`kseg`+(t>0?` hot`:``),onClick:()=>l(`#/diff`),title:`Open changes`,children:[(0,T.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:(0,T.jsx)(m,{value:t})}),(0,T.jsx)(`span`,{className:`kseg-l`,children:`Local edits`}),t>0&&(0,T.jsx)(`span`,{className:`delta up`,children:`▲`})]})]})}function O({overview:t}){return(0,T.jsx)(`div`,{className:`genome`,children:n.map((n,r)=>{let i=e[n],a=t.counts?.[n];return(0,T.jsxs)(`div`,{className:`card gcell rise`,style:{"--i":r},onClick:()=>l(`#/section/`+n),children:[(0,T.jsxs)(`div`,{className:`gtop`,children:[(0,T.jsx)(`span`,{className:`gname`,children:i.label}),(0,T.jsx)(v,{name:i.icon,className:`gicon`})]}),(0,T.jsx)(`div`,{className:`gcount`+(a===0?` zero`:``),children:a==null?`—`:(0,T.jsx)(m,{value:a})}),(0,T.jsx)(`div`,{className:`gdesc`,children:i.desc})]},n)})})}function k({jobs:e}){if(!e||e.length===0)return(0,T.jsx)(`div`,{className:`feed`,children:(0,T.jsxs)(`div`,{className:`empty`,children:[(0,T.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,T.jsx)(`div`,{className:`feed`,children:n.map(e=>(0,T.jsxs)(`div`,{className:`feed-row`,children:[(0,T.jsx)(`span`,{className:`feed-dot ${t[e.status]||`ok`}`}),(0,T.jsx)(`span`,{className:`feed-txt`,children:(0,T.jsx)(`b`,{children:e.action})}),(0,T.jsxs)(`span`,{className:`feed-when`,children:[p(e.started),` ago`]})]},e.id))})}function A({overview:e,sigil:t,setup:r,jobs:i,onAction:a}){let o=w(e),s=f(e,r);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`card pad-lg rise mb-16`,children:(0,T.jsxs)(`div`,{className:`hero`,children:[(0,T.jsx)(E,{value:s}),(0,T.jsxs)(`div`,{className:`hero-facts`,children:[(0,T.jsx)(`div`,{className:`ttl`,children:o}),t&&(0,T.jsxs)(`div`,{className:`voice-readout`,children:[(0,T.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,T.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,T.jsxs)(`p`,{className:`sub`,children:[`One source rendered into `,(0,T.jsx)(`code`,{children:e.target}),`. Every repo on this machine inherits it.`]}),(0,T.jsxs)(`div`,{className:`hero-chips`,children:[(0,T.jsxs)(`span`,{className:`chip`,children:[(0,T.jsx)(`span`,{className:`ck`,children:`voice`}),(0,T.jsx)(`span`,{className:`cv`,style:{textTransform:`capitalize`},children:e.theme})]}),(0,T.jsxs)(`span`,{className:`chip`,children:[(0,T.jsx)(`span`,{className:`ck`,children:`mode`}),(0,T.jsx)(`span`,{className:`cv`,children:e.emit})]}),(0,T.jsxs)(`span`,{className:`chip`,children:[(0,T.jsx)(`span`,{className:`ck`,children:`footprint`}),(0,T.jsx)(`span`,{className:`cv`,children:e.footprint})]}),(0,T.jsxs)(`span`,{className:`chip`,children:[(0,T.jsx)(`span`,{className:`ck`,children:`built`}),(0,T.jsx)(`span`,{className:`cv`,children:e.build_time||`unknown`})]}),(0,T.jsxs)(`span`,{className:`chip`,children:[(0,T.jsx)(`span`,{className:`ck`,children:`fp`}),(0,T.jsx)(`span`,{className:`cv`,children:r?.installed_fp||`—`})]})]}),(0,T.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,T.jsxs)(`button`,{className:`btn`,onClick:()=>a(`update`),children:[(0,T.jsx)(v,{name:`refresh`}),`Update`]}),(0,T.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`build-all`),children:[(0,T.jsx)(v,{name:`build`}),`Rebuild`]}),(0,T.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`doctor`),children:[(0,T.jsx)(v,{name:`doctor`}),`Run doctor`]})]})]})]})}),(0,T.jsx)(D,{overview:e}),(0,T.jsxs)(`div`,{className:`grid split-status`,children:[(0,T.jsxs)(`div`,{className:`card pad-lg`,children:[(0,T.jsxs)(`div`,{className:`card-head`,children:[(0,T.jsx)(`h3`,{children:`Capability genome`}),(0,T.jsx)(`div`,{className:`right`,children:(0,T.jsxs)(`span`,{className:`tick`,children:[n.length,` sections`]})})]}),(0,T.jsx)(O,{overview:e})]}),(0,T.jsxs)(`div`,{className:`card pad-lg`,children:[(0,T.jsxs)(`div`,{className:`card-head`,children:[(0,T.jsx)(`h3`,{children:`Recent activity`}),(0,T.jsx)(`div`,{className:`right`,children:(0,T.jsxs)(`span`,{className:`badge acc`,children:[(0,T.jsx)(`span`,{className:`dot`}),`live`]})})]}),(0,T.jsx)(k,{jobs:i})]})]})]})}function j({k:t,overview:n,max:r}){let i=e[t],a=n.counts?.[t]??0;return(0,T.jsxs)(`div`,{className:`strand`,children:[(0,T.jsxs)(`span`,{className:`strand-name`,children:[(0,T.jsx)(`span`,{className:`strand-dot`}),(0,T.jsx)(`a`,{href:`#/section/`+t,className:`strand-link stretch-link`,children:i.label})]}),(0,T.jsx)(`div`,{className:`hbar`,children:(0,T.jsx)(`i`,{style:{width:`${a/r*100}%`}})}),(0,T.jsx)(`span`,{className:`strand-val`,children:a})]})}function M({overview:e,sigil:t,setup:r,jobs:i}){let a=_(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,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-16`,children:(0,T.jsxs)(`div`,{className:`card pad-lg rise`,style:{position:`relative`,overflow:`hidden`},children:[(0,T.jsx)(`h2`,{className:`h`,style:{fontSize:22,margin:`0 0 18px`},children:`Gene-seed lineage`}),(0,T.jsxs)(`div`,{className:`lineage-track`,children:[(0,T.jsx)(`div`,{className:`spine`}),u.map(([e,t,n,r],i)=>(0,T.jsxs)(`div`,{className:`lineage-step`,children:[(0,T.jsx)(`span`,{className:`node ${r?`on`:``}`}),(0,T.jsx)(`div`,{className:`lt`,children:e}),(0,T.jsx)(`div`,{className:`ld`,children:t}),(0,T.jsx)(`div`,{className:`ltag`,children:n})]},i))]}),(0,T.jsx)(`hr`,{className:`hr`}),t&&(0,T.jsxs)(`div`,{className:`voice-readout`,style:{marginBottom:14},children:[(0,T.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,T.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,T.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,T.jsxs)(`span`,{className:`badge ${c?`ok`:`warn`}`,children:[(0,T.jsx)(`span`,{className:`dot`}),`in sync · `,o]}),(0,T.jsxs)(`span`,{className:`badge`,children:[(0,T.jsx)(`span`,{className:`dot`}),l,` local edits`]})]})]})}),(0,T.jsxs)(`div`,{className:`grid split-even`,children:[(0,T.jsxs)(`div`,{className:`card pad-lg`,children:[(0,T.jsxs)(`div`,{className:`card-head`,children:[(0,T.jsx)(`h3`,{children:`Genome strand`}),(0,T.jsx)(`div`,{className:`right`,children:(0,T.jsx)(`span`,{className:`tick`,children:`by volume`})})]}),n.map(t=>(0,T.jsx)(j,{k:t,overview:e,max:a},t))]}),(0,T.jsxs)(`div`,{className:`card pad-lg`,children:[(0,T.jsx)(`div`,{className:`card-head`,children:(0,T.jsx)(`h3`,{children:`Recent activity`})}),(0,T.jsx)(k,{jobs:i})]})]})]})}function N({overview:t,setup:r,jobs:i}){let a=n.reduce((e,n)=>e+(t.counts?.[n]??0),0),o=_(t.counts),c=t.doctor?.ok,l=t.doctor?.problems?.length??0,u=s(t.diff);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`card pad-md rise mb-16`,children:(0,T.jsx)(`div`,{className:`row wrap between gap-16`,children:(0,T.jsxs)(`div`,{className:`row`,style:{gap:20,flexWrap:`wrap`},children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:`tick`,children:`status`}),(0,T.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:(0,T.jsxs)(`span`,{className:`badge ${t.deployed?`ok`:`warn`}`,children:[(0,T.jsx)(`span`,{className:`dot`}),t.deployed?`deployed`:`not deployed`]})})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:`tick`,children:`voice`}),(0,T.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6,textTransform:`capitalize`},children:t.theme})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:`tick`,children:`mode`}),(0,T.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6},children:t.emit})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:`tick`,children:`fingerprint`}),(0,T.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6,color:`var(--accent)`},children:r?.installed_fp||`—`})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:`tick`,children:`doctor`}),(0,T.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:c?(0,T.jsxs)(`span`,{className:`badge ok`,children:[(0,T.jsx)(`span`,{className:`dot`}),`clean`]}):(0,T.jsxs)(`span`,{className:`badge warn`,children:[(0,T.jsx)(`span`,{className:`dot`}),l,` issue`,l===1?``:`s`]})})]}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`div`,{className:`tick`,children:`edits`}),(0,T.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6},children:u})]})]})})}),(0,T.jsxs)(`div`,{className:`grid split-operator`,children:[(0,T.jsxs)(`div`,{className:`card rise`,style:{"--i":1},children:[(0,T.jsxs)(`div`,{className:`card-head pad-lg`,style:{padding:`18px 20px 0`,marginBottom:14},children:[(0,T.jsx)(`h3`,{children:`Sections`}),(0,T.jsx)(`div`,{className:`right`,children:(0,T.jsxs)(`span`,{className:`tick`,children:[a,` entries total`]})})]}),(0,T.jsxs)(`table`,{className:`tbl`,children:[(0,T.jsx)(`thead`,{children:(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(`th`,{children:`Section`}),(0,T.jsx)(`th`,{children:`Detail`}),(0,T.jsx)(`th`,{style:{width:130},children:`Share`}),(0,T.jsx)(`th`,{className:`num`,children:`Count`})]})}),(0,T.jsx)(`tbody`,{children:n.map(n=>{let r=e[n],i=t.counts?.[n]??0;return(0,T.jsxs)(`tr`,{className:`clickable`,children:[(0,T.jsx)(`td`,{className:`name`,children:(0,T.jsx)(`a`,{href:`#/section/`+n,className:`stretch-link`,children:r.label})}),(0,T.jsx)(`td`,{className:`muted`,children:r.desc}),(0,T.jsx)(`td`,{children:(0,T.jsx)(`div`,{className:`hbar`,children:(0,T.jsx)(`i`,{style:{width:`${i/o*100}%`}})})}),(0,T.jsx)(`td`,{className:`num`,children:i})]},n)})})]})]}),(0,T.jsxs)(`div`,{className:`card pad-lg rise`,style:{"--i":2},children:[(0,T.jsx)(`div`,{className:`card-head`,children:(0,T.jsx)(`h3`,{children:`Run log`})}),(0,T.jsx)(k,{jobs:i})]})]})]})}function P(){let[e,t]=(0,S.useState)(!1),[n,r]=(0,S.useState)(null);return(0,T.jsxs)(`div`,{className:`stale-banner`,role:`alert`,children:[(0,T.jsx)(`span`,{children:n||`This console is running code from before your last upgrade.`}),(0,T.jsx)(`button`,{className:`btn sm`,onClick:async()=>{t(!0),r(null);try{await u()}catch(e){r(e.message),t(!1)}},disabled:e,children:e?`Restarting…`:`Restart`})]})}var F=t({default:()=>z}),I=(0,S.lazy)(()=>y(()=>import(`./GreenhouseView-CL3PubNb.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))),L=(0,S.lazy)(()=>y(()=>import(`./OperatorHudView-B0AMVmtV.js`),__vite__mapDeps([8,1,2,4,5,6,7]))),R=(0,S.lazy)(()=>y(()=>import(`./JournalView-BvsSkjSn.js`),__vite__mapDeps([9,1,2,5,3,4,6])));function z({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,S.useState)(`status`),m=e&&r.find(t=>t.name===e.theme)?.sigil||``,{data:_}=c(()=>d===`greenhouse`||d===`operator`?o.doctor().catch(()=>null):Promise.resolve(null),[d,u]),{data:v}=c(()=>d===`journal`?o.recent().catch(()=>null):Promise.resolve(null),[d,u]);if(!e)return t?(0,T.jsxs)(`div`,{children:[(0,T.jsx)(h,{error:`Could not load the harness overview: ${t}`}),(0,T.jsx)(`button`,{className:`btn`,onClick:n,children:`Retry`})]}):(0,T.jsx)(x,{});let y=e.daemon_stale?(0,T.jsx)(P,{}):null;return e.deployed?f===`status`&&d===`journal`?(0,T.jsxs)(S.Suspense,{fallback:(0,T.jsx)(x,{}),children:[y,(0,T.jsx)(R,{overview:e,recent:v,onAction:s,onDirection:p,dataRev:u})]}):(0,T.jsxs)(T.Fragment,{children:[y,(0,T.jsx)(`div`,{className:`head-row`,children:(0,T.jsx)(b,{"aria-label":`Dashboard view`,children:[[`status`,`Status`],[`lineage`,`Lineage`],[`operator`,`Operator`]].map(([e,t])=>(0,T.jsx)(`button`,{className:f===e?`on`:``,onClick:()=>p(e),"aria-pressed":f===e,children:t},e))})}),(0,T.jsxs)(`div`,{className:`view-in`,children:[f===`status`&&d===`cultivar`&&(0,T.jsx)(A,{overview:e,sigil:m,setup:i,jobs:a,onAction:s}),f===`status`&&d===`greenhouse`&&(0,T.jsx)(S.Suspense,{fallback:(0,T.jsx)(x,{}),children:(0,T.jsx)(I,{overview:e,sigil:m,jobs:a,doctor:_,onAction:s})}),f===`status`&&d===`operator`&&(0,T.jsx)(S.Suspense,{fallback:(0,T.jsx)(x,{}),children:(0,T.jsx)(L,{overview:e,jobs:a,doctor:_,onAction:s})}),f===`lineage`&&(0,T.jsx)(M,{overview:e,sigil:m,setup:i,jobs:a}),f===`operator`&&(0,T.jsx)(N,{overview:e,setup:i,jobs:a})]},f)]}):(0,T.jsxs)(T.Fragment,{children:[y,(0,T.jsx)(g,{onAction:s})]})}export{z as default,w as n,F as t};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-DRhoX0kS.js";import{t as r}from"./api-Bp5eW_6m.js";import{C as i,F as a,H as o,S as s,_ as c,a as l,i as u,k as d,n as f,o as p,r as m,s as h,w as ee,x as g,y as _}from"./index-DoD_g2CM.js";import{a as v,c as y,i as b,l as x,n as S,o as C,r as w,s as T,t as E}from"./Markdown-C6fRd4A4.js";var D=e(t(),1),O=n();function k(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 A(e){return e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[\[([^\]]+)\]\]/g,`$1`).replace(/`([^`]*)`/g,`$1`).replace(/\*\*|__/g,``).replace(/\*([^*\s][^*]*)\*/g,`$1`)}function j(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:A(e[2]),id:k(e[2],r)}))}return t}var M={"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`]},N=`you already know this`;function P({page:e,overview:t,onAction:n}){let r=(0,D.useRef)(null),i=(0,D.useMemo)(()=>S(e.body,e.links),[e.body,e.links]);(0,D.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=k(e.textContent||``,t);n&&(e.id=n)}}),e.querySelectorAll(`blockquote`).forEach(e=>{(e.querySelector(`strong`)?.textContent||``).toLowerCase().startsWith(N)&&e.classList.add(`analogy`)})},[i]),(0,D.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(),o(n))};return e.addEventListener(`click`,t),()=>e.removeEventListener(`click`,t)},[i]),(0,D.useEffect)(()=>{let n=r.current;if(!n)return;n.querySelectorAll(`.docs-here`).forEach(e=>e.classList.remove(`docs-here`));let[i,a]=M[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=>k(e.textContent||``)===k(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,O.jsxs)(`div`,{className:`detail-doc`,children:[(0,O.jsx)(`h1`,{style:{marginTop:0},children:e.title}),e.source&&(0,O.jsx)(`div`,{className:`doc-meta`,children:(0,O.jsxs)(`span`,{className:`badge`,children:[(0,O.jsx)(`span`,{className:`dot`}),e.source]})}),a.length>0&&(0,O.jsx)(`div`,{className:`row wrap gap-10`,style:{margin:`10px 0 14px`},children:a.map(e=>e.hash?(0,O.jsx)(`a`,{className:`btn ghost sm`,href:e.hash,children:e.label},e.label):(0,O.jsx)(`button`,{className:`btn ghost sm`,onClick:()=>n&&n(e.action),children:e.label},e.label))}),(0,O.jsx)(`div`,{className:`markdown`,ref:r,dangerouslySetInnerHTML:{__html:i}}),e.link&&(0,O.jsx)(`div`,{style:{marginTop:24},children:(0,O.jsx)(`a`,{className:`btn soft sm`,href:e.link.hash,children:e.link.label})})]})}var F=1200;function I({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,O.jsxs)(`div`,{className:`cli-arg`,children:[(0,O.jsx)(`code`,{className:`cli-arg-name`,children:n}),r.length>0&&(0,O.jsxs)(`code`,{className:`cli-arg-meta`,children:[` `,r.join(` · `)]}),e.help&&(0,O.jsx)(`div`,{className:`cli-arg-help`,children:e.help})]})}function L({text:e}){let[t,n]=(0,D.useState)(!1);return(0,O.jsxs)(`button`,{className:`btn ghost sm`,onClick:async()=>{try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),F)}catch{}},title:`Copy command`,children:[(0,O.jsx)(d,{name:t?`spark`:`copy`}),t?`Copied`:`Copy`]})}function R({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,O.jsxs)(`div`,{className:`card pad-md mb-12 cli-card`,children:[(0,O.jsxs)(`div`,{className:`row wrap between`,style:{alignItems:`flex-start`},children:[(0,O.jsxs)(`div`,{className:`stack`,style:{gap:4},children:[(0,O.jsx)(`h3`,{style:{margin:0},children:(0,O.jsx)(`code`,{children:e.name})}),e.help&&(0,O.jsx)(`p`,{className:`sub`,style:{margin:0},children:e.help})]}),(0,O.jsx)(L,{text:`${t} ${e.name}`})]}),(0,O.jsx)(`pre`,{className:`cli-syn`,children:r}),(e.positionals||[]).length>0&&(0,O.jsxs)(`div`,{className:`cli-block`,children:[(0,O.jsx)(`div`,{className:`cli-block-head`,children:`Arguments`}),e.positionals.map(e=>(0,O.jsx)(I,{a:e,kind:`positional`},e.dest))]}),(e.options||[]).length>0&&(0,O.jsxs)(`div`,{className:`cli-block`,children:[(0,O.jsx)(`div`,{className:`cli-block-head`,children:`Options`}),e.options.map(e=>(0,O.jsx)(I,{a:e,kind:`option`},e.names.join(`,`)))]})]})}function z({page:e}){let t=e.prog||`geneseed`,n=e.commands||[];return(0,O.jsxs)(`div`,{className:`detail-doc`,children:[(0,O.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,O.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Every subcommand of `,(0,O.jsx)(`code`,{children:t}),`. Generated from the parser at request time (the same one `,(0,O.jsx)(`code`,{children:`geneseed`}),` actually parses), so this page cannot drift.`]}),(0,O.jsx)(`div`,{style:{marginTop:18},children:n.map(e=>(0,O.jsx)(R,{cmd:e,prog:t},e.name))})]})}function B({page:e}){let t=e.rows||[],n=e.theme||`neutral`;return(0,O.jsxs)(`div`,{className:`detail-doc`,children:[(0,O.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,O.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Geneseed's invented vocabulary, decoded. Left: the neutral, plain-English term. Right: the word your `,(0,O.jsx)(`code`,{style:{textTransform:`capitalize`},children:n}),` theme actually uses in the agent's voice. Last: the developer idea it maps to.`]}),(0,O.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:(0,O.jsxs)(`table`,{className:`glossary-table`,children:[(0,O.jsx)(`thead`,{children:(0,O.jsxs)(`tr`,{children:[(0,O.jsx)(`th`,{children:`Concept`}),(0,O.jsx)(`th`,{children:`Neutral term`}),(0,O.jsxs)(`th`,{children:[`In `,n]}),(0,O.jsx)(`th`,{children:`Meaning`}),(0,O.jsx)(`th`,{children:`In dev terms`})]})}),(0,O.jsx)(`tbody`,{children:t.map(e=>(0,O.jsxs)(`tr`,{children:[(0,O.jsx)(`td`,{children:(0,O.jsx)(`strong`,{children:e.label})}),(0,O.jsx)(`td`,{children:(0,O.jsx)(`code`,{children:e.neutral||`—`})}),(0,O.jsx)(`td`,{children:(0,O.jsx)(`code`,{children:e.themed||e.neutral||`—`})}),(0,O.jsx)(`td`,{className:`dim`,children:e.desc}),(0,O.jsx)(`td`,{className:`dim`,children:e.analogy||`—`})]},e.label))})]})})]})}var V={enforced:`ok`,automatic:`ok`,asked:`warn`,"on demand":`warn`};function H(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 U=({text:e})=>(0,O.jsx)(`span`,{dangerouslySetInnerHTML:{__html:w(b.parseInline(e||``))}}),W=({kind:e})=>(0,O.jsx)(`span`,{className:`tag ${V[e]||``}`,children:e});function G({page:e,overview:t,onAction:n}){let[r,i]=(0,D.useState)(0);if(!e.rows)return(0,O.jsx)(P,{page:e,overview:t,onAction:n});let a=e.rows[r]||e.rows[0],[o,s]=H(e.body);return(0,O.jsxs)(`div`,{className:`detail-doc`,children:[(0,O.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,O.jsx)(E,{body:o,links:e.links}),(0,O.jsxs)(`div`,{className:`docs-map`,children:[(0,O.jsx)(`ul`,{className:`map-tree`,"aria-label":`Pieces`,children:e.rows.map((e,t)=>(0,O.jsx)(`li`,{children:(0,O.jsxs)(`button`,{className:`map-node ${t===r?`on`:``}`,"aria-pressed":t===r,onClick:()=>i(t),children:[(0,O.jsx)(`span`,{className:`map-piece`,children:(0,O.jsx)(U,{text:e.piece})}),(0,O.jsx)(W,{kind:e.kind}),(0,O.jsx)(`span`,{className:`mono dim map-cost`,children:(0,O.jsx)(U,{text:e.cost})})]})},t))}),a&&(0,O.jsxs)(`div`,{className:`card pad-md map-detail`,"aria-live":`polite`,children:[(0,O.jsx)(`h3`,{style:{margin:`0 0 8px`},children:(0,O.jsx)(U,{text:a.piece})}),(0,O.jsx)(W,{kind:a.kind}),(0,O.jsxs)(`dl`,{children:[(0,O.jsx)(`dt`,{children:`Does`}),(0,O.jsx)(`dd`,{children:(0,O.jsx)(U,{text:a.does})}),(0,O.jsx)(`dt`,{children:`Costs`}),(0,O.jsx)(`dd`,{children:(0,O.jsx)(U,{text:a.cost})}),(0,O.jsx)(`dt`,{children:`Turn it off`}),(0,O.jsx)(`dd`,{children:(0,O.jsx)(U,{text:a.off})})]})]})]}),s.trim()&&(0,O.jsx)(E,{body:s,links:e.links})]})}var K=5,q=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function J(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-])${q(e)}s?(?![\\w-])`,`i`).test(n))&&r.push(e),r.length===K)break;return r}var Y=e=>document.getElementById(e)?.scrollIntoView({behavior:`smooth`});function X({body:e,glossaryRows:t}){let n=(0,D.useMemo)(()=>j(e),[e]),r=(0,D.useMemo)(()=>J(e,t),[e,t]);return!n.length&&!r.length?null:(0,O.jsxs)(`aside`,{className:`docs-margin`,children:[n.length>0&&(0,O.jsxs)(`nav`,{className:`docs-toc`,"aria-label":`On this page`,children:[(0,O.jsx)(`div`,{className:`docs-toc-head`,children:`On this page`}),(0,O.jsx)(`ul`,{children:n.map(e=>(0,O.jsx)(`li`,{className:`lvl-${e.level}`,children:(0,O.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),Y(e.id)},children:e.title})},e.id))})]}),r.length>0&&(0,O.jsxs)(`div`,{className:`docs-gloss`,children:[(0,O.jsx)(`div`,{className:`docs-toc-head`,children:`Terms on this page`}),r.map(e=>(0,O.jsxs)(`div`,{className:`docs-gloss-card`,children:[(0,O.jsx)(`b`,{children:e.themed||e.neutral||e.label}),(0,O.jsx)(`p`,{children:e.desc})]},e.label))]})]})}function te({page:e}){let t=e.version||{},n=[[`Theme`,e.theme],[`Install mode`,e.emit],[`Deployed`,e.deployed?`yes`:`no`],[`Target`,(0,O.jsx)(`code`,{children:e.target},`t`)],[`Source root`,(0,O.jsx)(`code`,{children:e.root},`r`)],[`Installed build`,(0,O.jsx)(`code`,{children:t.installed_fp||`(none)`},`i`)],[`Source build`,(0,O.jsx)(`code`,{children:t.source_fp||`—`},`s`)],[`Match?`,t.verdict||`—`],[`License`,e.license]];return(0,O.jsxs)(`div`,{className:`detail-doc`,children:[(0,O.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,O.jsx)(`p`,{className:`sub`,style:{marginTop:4},children:`Live snapshot of the install behind this UI, plus where to go next.`}),(0,O.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:n.map(([e,t])=>(0,O.jsxs)(`div`,{className:`kv`,children:[(0,O.jsx)(`span`,{className:`k`,children:e}),(0,O.jsx)(`span`,{className:`v`,children:t??`—`})]},e))}),(0,O.jsxs)(`div`,{className:`row wrap gap-10`,style:{marginTop:18},children:[(0,O.jsxs)(`a`,{className:`btn ghost`,href:e.repo,target:`_blank`,rel:`noreferrer`,children:[(0,O.jsx)(d,{name:`external`}),e.repo_is_github?`GitHub repo`:`Source repo`]}),e.repo_is_github&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/issues`,target:`_blank`,rel:`noreferrer`,children:[(0,O.jsx)(d,{name:`external`}),`File an issue`]}),(0,O.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/blob/main/LICENSE`,target:`_blank`,rel:`noreferrer`,children:[(0,O.jsx)(d,{name:`external`}),`License`]})]})]})]})}var ne=encodeURIComponent,Z=e=>`#/docs/${ne(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,O.jsx)(c,{error:t,style:{margin:18}});if(!e)return(0,O.jsx)(_,{label:`Loading page…`});switch(e.kind){case`markdown`:case`concept`:return(0,O.jsx)(P,{page:e,overview:n,onAction:r});case`map`:return(0,O.jsx)(G,{page:e,overview:n,onAction:r});case`cli`:return(0,O.jsx)(z,{page:e});case`glossary`:return(0,O.jsx)(B,{page:e});case`about`:return(0,O.jsx)(te,{page:e});default:return(0,O.jsxs)(`div`,{className:`empty`,children:[(0,O.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[d,b]=ee(i(t?.emit)),{data:S,error:w}=a(()=>r.docs(d),[d]),E=e||Q(S),{data:k,error:A,loading:j}=a(()=>E?r.docsPage(E,d):Promise.resolve(null),[E,d]),{data:M}=a(()=>r.docsPage(`glossary`,d).catch(()=>null),[d],`docs:glossary`);(0,D.useEffect)(()=>{if(S&&E&&!S.groups.some(e=>e.pages.some(e=>e.id===E))){let e=Q(S);e&&e!==E&&o(Z(e))}},[S,E]),(0,D.useEffect)(()=>{let e=document.scrollingElement||document.documentElement;for(let t of[document.getElementById(`main`),e])t&&(t.scrollTop=0)},[E]);let N=p(S,E),P=N.part||S?.groups?.[0]||null,F=P?.id===m;(0,D.useEffect)(()=>{F&&k?.id===E&&l(E)},[F,k,E]);let I=F?[...h(),E]:[],[L,R]=(0,D.useState)(``),[z,B]=(0,D.useState)(`all`),[V,H]=(0,D.useState)(P?.id);P?.id!==V&&(H(P?.id),R(``),B(`all`));let U=$(P),W=C(U),G=z===`all`?U:U.filter(e=>e.group===z),K=x(G,L);return w?(0,O.jsx)(c,{error:w}):(0,O.jsx)(`div`,{className:`docs-wrap`,children:(0,O.jsxs)(`div`,{className:`library docs-lib`,children:[(0,O.jsxs)(`aside`,{className:`lib-kinds`,"aria-label":`Docs parts`,children:[(0,O.jsxs)(`div`,{className:`lib-title`,children:[(0,O.jsx)(`h1`,{className:`h`,children:`Docs`}),(0,O.jsx)(`span`,{className:`dim`,children:`How it works, and how to use it`})]}),(0,O.jsx)(g,{"aria-label":`Harness`,children:s.map(e=>(0,O.jsx)(`button`,{className:d===e.id?`on`:``,onClick:()=>b(e.id),"aria-pressed":d===e.id,children:e.label},e.id))}),(0,O.jsx)(`nav`,{className:`kind-list`,"aria-label":`Parts`,children:(S?.groups||[]).map(e=>(0,O.jsxs)(D.Fragment,{children:[(0,O.jsxs)(`a`,{href:e.pages[0]?Z(e.pages[0].id):`#/docs`,className:P?.id===e.id?`on`:``,"aria-current":P?.id===e.id?`page`:void 0,children:[e.label,(0,O.jsx)(`span`,{className:`mono dim`,children:e.pages.length})]}),P?.id===e.id&&(0,O.jsx)(v,{label:`Sections`,total:U.length,cats:W,cat:z,onChange:B})]},e.id))})]}),(0,O.jsx)(y,{label:P?.label||`Docs`,count:L.trim()?`${K.length} of ${G.length}`:G.length||``,extra:F&&(0,O.jsx)(u,{pages:P.pages,seen:I}),q:L,onQ:R,matched:K.length,inView:[P?.id,E],children:S?(0,O.jsx)(T,{rows:K,activeName:E,hrefOf:e=>Z(e.name),pills:F?e=>I.includes(e.name)&&e.name!==E?(0,O.jsxs)(`span`,{className:`docs-read-mark`,children:[(0,O.jsx)(`span`,{"aria-hidden":`true`,children:`✓`}),(0,O.jsx)(`span`,{className:`sr-only`,children:`read`})]}):null:void 0}):(0,O.jsx)(_,{label:`Loading docs…`})}),(0,O.jsxs)(`article`,{className:`lib-reader docs-reader`,"aria-label":`Page`,children:[N.page&&(0,O.jsxs)(`nav`,{className:`docs-crumbs mono`,"aria-label":`Breadcrumb`,children:[(0,O.jsx)(`a`,{href:Z(N.part.pages[0].id),children:N.part.label}),(0,O.jsx)(`span`,{"aria-hidden":`true`,children:`›`}),(0,O.jsx)(`a`,{href:Z(N.part.pages.find(e=>(e.section||`General`)===N.section).id),children:N.section}),(0,O.jsx)(`span`,{"aria-hidden":`true`,children:`›`}),(0,O.jsx)(`span`,{"aria-current":`page`,children:N.page.title})]}),(0,O.jsxs)(`div`,{className:`docs-read`,children:[(0,O.jsxs)(`div`,{className:`docs-article`,children:[(0,O.jsx)(re,{data:j?null:k,error:A,overview:t,onAction:n},`${E}|${d}`),!j&&(0,O.jsx)(f,{menu:S,pageId:E})]}),!j&&(0,O.jsx)(X,{body:k?.body,glossaryRows:M?.rows})]})]})]})})}export{ie as default,$ as docRows};
|