geneseed 3.9.0 → 3.11.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.
Files changed (219) hide show
  1. package/CHANGELOG.md +89 -1
  2. package/DESIGN.md +1 -1
  3. package/README.md +52 -71
  4. package/SHIPPED.md +3 -3
  5. package/adapters/bob/README.md +18 -2
  6. package/adapters/claude-code/README.md +17 -12
  7. package/adapters/openclaude/README.md +2 -2
  8. package/adapters/opencode/README.md +4 -4
  9. package/adapters/opencode/plugins/geneseed-context.js +78 -8
  10. package/bin/build-driver.mjs +2 -0
  11. package/bin/geneseed-cli.mjs +17 -0
  12. package/bin/geneseed-hook.mjs +3 -1
  13. package/docs/README.md +42 -0
  14. package/docs/_groups.json +18 -0
  15. package/docs/candidate-hosts.md +12 -5
  16. package/docs/concepts/agents.md +44 -0
  17. package/docs/concepts/collaboration.md +62 -0
  18. package/docs/concepts/exclusions.md +55 -0
  19. package/docs/concepts/footprint.md +52 -0
  20. package/docs/concepts/foreman-mode.md +69 -0
  21. package/docs/concepts/hooks.md +101 -0
  22. package/docs/concepts/hosts.md +55 -0
  23. package/docs/concepts/lsp.md +50 -0
  24. package/docs/{web → concepts}/memory.md +2 -2
  25. package/docs/{web → concepts}/notebook.md +2 -2
  26. package/docs/concepts/rules.md +52 -0
  27. package/docs/concepts/skills.md +49 -0
  28. package/docs/concepts/themes.md +50 -0
  29. package/docs/extending.md +27 -21
  30. package/docs/guides/autostart.md +70 -0
  31. package/docs/guides/choose-your-setup.md +120 -0
  32. package/docs/guides/headless.md +22 -0
  33. package/docs/guides/install.md +161 -0
  34. package/docs/guides/mcp.md +195 -0
  35. package/docs/guides/migrate.md +41 -0
  36. package/docs/guides/project-context.md +87 -0
  37. package/docs/guides/run-anywhere.md +45 -0
  38. package/docs/guides/uninstall.md +51 -0
  39. package/docs/guides/upgrade.md +65 -0
  40. package/docs/guides/verify.md +65 -0
  41. package/docs/guides/wiki.md +69 -0
  42. package/docs/guides/worktree.md +47 -0
  43. package/docs/reference/about.md +7 -0
  44. package/docs/reference/cli.md +7 -0
  45. package/docs/reference/environment.md +99 -0
  46. package/docs/reference/glossary.md +33 -0
  47. package/docs/reference/opencode-plugins.md +131 -0
  48. package/docs/reference/troubleshooting.md +350 -0
  49. package/docs/token-footprint.md +26 -21
  50. package/docs/understand/a-day.md +77 -0
  51. package/docs/understand/enforced-vs-asked.md +64 -0
  52. package/docs/understand/harness.md +36 -0
  53. package/docs/understand/on-your-machine.md +76 -0
  54. package/docs/web-ui.md +2 -2
  55. package/harness.config.json +1 -1
  56. package/js/README.md +7 -6
  57. package/js/build/driver.mjs +26 -95
  58. package/js/build/emit-claude.mjs +76 -81
  59. package/js/build/generate.mjs +12 -2
  60. package/js/build/render.mjs +4 -0
  61. package/js/build/source.mjs +6 -0
  62. package/js/build/stubs.mjs +18 -2
  63. package/js/cli-table.json +6 -6
  64. package/js/hosts/hooks.mjs +86 -54
  65. package/js/hosts/hosts.mjs +5 -21
  66. package/js/hosts/installs.mjs +4 -6
  67. package/js/hosts/mcp.mjs +4 -14
  68. package/js/hosts/native.mjs +27 -50
  69. package/js/hosts/opencode.mjs +1 -1
  70. package/js/hosts/settings.mjs +17 -79
  71. package/js/inspect/checks-authoring.mjs +9 -4
  72. package/js/inspect/checks-repo.mjs +45 -1
  73. package/js/inspect/diff.mjs +11 -3
  74. package/js/inspect/doctor.mjs +4 -4
  75. package/js/inspect/excludes.mjs +0 -4
  76. package/js/inspect/inventory.mjs +1 -1
  77. package/js/inspect/registry.mjs +20 -3
  78. package/js/inspect/status.mjs +11 -6
  79. package/js/lib/node-floor.mjs +30 -0
  80. package/js/maintain/migrate.mjs +5 -5
  81. package/js/maintain/setup.mjs +112 -26
  82. package/js/maintain/uninstall.mjs +8 -42
  83. package/js/maintain/update.mjs +4 -15
  84. package/js/ui/cli.mjs +2 -2
  85. package/js/web/actions.mjs +4 -5
  86. package/js/web/api.mjs +7 -4
  87. package/js/web/daemon.mjs +52 -0
  88. package/js/web/docs.mjs +149 -65
  89. package/js/web/server.mjs +5 -2
  90. package/package.json +6 -5
  91. package/registry.json +7 -0
  92. package/src/AGENT.md.tmpl +73 -52
  93. package/src/laws/universal.md +3 -0
  94. package/src/ontology/universal.md +1 -1
  95. package/src/postures/mentor.md +1 -0
  96. package/src/skills/daydream/SKILL.md +10 -3
  97. package/src/skills/daydream/VENDOR.md +10 -2
  98. package/src/skills/daydream/instructions.md +2 -2
  99. package/src/skills/explain-changes/SKILL.md +1 -1
  100. package/src/skills/explain-changes/VENDOR.md +1 -1
  101. package/src/skills/geneseed.md +1 -1
  102. package/src/skills/learn-mode.md +89 -0
  103. package/src/skills/pipeline.md +2 -2
  104. package/src/skills/quiz.md +2 -1
  105. package/src/skills/react-view-transitions/SKILL.md +1 -1
  106. package/src/skills/react-view-transitions/VENDOR.md +7 -2
  107. package/src/skills/teach.md +2 -1
  108. package/src/skills/token-report/SKILL.md +2 -3
  109. package/src/skills/token-report/VENDOR.md +2 -3
  110. package/src/skills/token-report/scripts/token_report.mjs +7 -121
  111. package/src/skills/workflow.md +1 -1
  112. package/themes/_TEMPLATE.json +1 -0
  113. package/themes/biker.json +1 -0
  114. package/themes/commentator.json +1 -0
  115. package/themes/cyberpunk.json +1 -0
  116. package/themes/gamer.json +1 -0
  117. package/themes/imperial.json +1 -0
  118. package/themes/joker.json +1 -0
  119. package/themes/marvin.json +1 -0
  120. package/themes/mean.json +1 -0
  121. package/themes/military.json +1 -0
  122. package/themes/neutral.json +1 -0
  123. package/themes/pirate.json +1 -0
  124. package/themes/sports.json +1 -0
  125. package/themes/verstappen.json +1 -0
  126. package/themes/wizard.json +1 -0
  127. package/web/dist/assets/Activity-C52LEb-2.js +1 -0
  128. package/web/dist/assets/ActivityDetail-CjNLRvXg.js +1 -0
  129. package/web/dist/assets/Dashboard-B6_sSCHi.js +2 -0
  130. package/web/dist/assets/Docs-Dj7BmCSA.js +5 -0
  131. package/web/dist/assets/{GreenhouseView-Bq1QmaGO.js → GreenhouseView-BALwjQsA.js} +1 -1
  132. package/web/dist/assets/Installs-BbffDQm3.js +2 -0
  133. package/web/dist/assets/JournalView-JpAQ8Hqe.js +1 -0
  134. package/web/dist/assets/Laws-DK7eCWSm.js +3 -0
  135. package/web/dist/assets/Library-CoamHelE.js +1 -0
  136. package/web/dist/assets/{Markdown-CkFyfgNf.js → Markdown-qjM2_ofS.js} +5 -5
  137. package/web/dist/assets/{OperatorHudView-B-HVBqfY.js → OperatorHudView-DVx1HlBx.js} +1 -1
  138. package/web/dist/assets/Personal-eaXb1zcj.js +1 -0
  139. package/web/dist/assets/{Tabs-_pjUFIEI.js → Tabs-BmGtt8E2.js} +1 -1
  140. package/web/dist/assets/api-Dc8f3ca-.js +1 -0
  141. package/web/dist/assets/drawable-Du_PZrQj.js +1 -0
  142. package/web/dist/assets/index-Bz_KMRDH.css +1 -0
  143. package/web/dist/assets/index-CNFH7o55.js +2 -0
  144. package/web/dist/index.html +3 -2
  145. package/QUICKSTART.md +0 -50
  146. package/SETUP.md +0 -1183
  147. package/adapters/copilot/README.md +0 -105
  148. package/docs/web/_groups.json +0 -45
  149. package/docs/web/about.md +0 -6
  150. package/docs/web/adapters-claude-code.md +0 -8
  151. package/docs/web/adapters-opencode-loads.md +0 -8
  152. package/docs/web/adapters-opencode-spec.md +0 -8
  153. package/docs/web/adapters-opencode.md +0 -8
  154. package/docs/web/agents.md +0 -8
  155. package/docs/web/authoring.md +0 -11
  156. package/docs/web/autostart.md +0 -9
  157. package/docs/web/claude-hooks.md +0 -37
  158. package/docs/web/cli.md +0 -6
  159. package/docs/web/collaboration.md +0 -27
  160. package/docs/web/configure-wiki.md +0 -9
  161. package/docs/web/design.md +0 -7
  162. package/docs/web/env-knobs.md +0 -9
  163. package/docs/web/exclusions.md +0 -27
  164. package/docs/web/first-session.md +0 -28
  165. package/docs/web/footprint.md +0 -38
  166. package/docs/web/foreman-mode.md +0 -33
  167. package/docs/web/glossary.md +0 -6
  168. package/docs/web/harnesses.md +0 -30
  169. package/docs/web/headless.md +0 -9
  170. package/docs/web/ingest-docs.md +0 -9
  171. package/docs/web/install-paths.md +0 -9
  172. package/docs/web/install-quick.md +0 -35
  173. package/docs/web/lsp-overview.md +0 -37
  174. package/docs/web/mcp-claude-code.md +0 -10
  175. package/docs/web/mcp-filesystem.md +0 -9
  176. package/docs/web/mcp-gitlab.md +0 -9
  177. package/docs/web/mcp-markitdown.md +0 -9
  178. package/docs/web/mcp-overview.md +0 -34
  179. package/docs/web/mcp-trouble.md +0 -9
  180. package/docs/web/mcp-verify.md +0 -9
  181. package/docs/web/migrate.md +0 -39
  182. package/docs/web/model.md +0 -20
  183. package/docs/web/pipelines.md +0 -24
  184. package/docs/web/plugin-activity.md +0 -23
  185. package/docs/web/plugin-context.md +0 -26
  186. package/docs/web/plugin-guard.md +0 -24
  187. package/docs/web/plugin-learn.md +0 -27
  188. package/docs/web/plugin-notify.md +0 -24
  189. package/docs/web/plugin-ponytail.md +0 -23
  190. package/docs/web/plugin-setup.md +0 -7
  191. package/docs/web/plugin-workflow.md +0 -25
  192. package/docs/web/plugins.md +0 -17
  193. package/docs/web/project-context.md +0 -9
  194. package/docs/web/rules.md +0 -30
  195. package/docs/web/run-anywhere.md +0 -9
  196. package/docs/web/self-improve.md +0 -8
  197. package/docs/web/setup-choices.md +0 -64
  198. package/docs/web/skills.md +0 -8
  199. package/docs/web/themes-author.md +0 -20
  200. package/docs/web/themes.md +0 -9
  201. package/docs/web/token-footprint.md +0 -7
  202. package/docs/web/trouble.md +0 -38
  203. package/docs/web/upgrade.md +0 -9
  204. package/docs/web/verify.md +0 -30
  205. package/docs/web/wiki.md +0 -7
  206. package/docs/web/worktree.md +0 -10
  207. package/docs/wiki.md +0 -43
  208. package/web/dist/assets/Activity-DAzV-qQj.js +0 -1
  209. package/web/dist/assets/ActivityDetail-CwEwMtKl.js +0 -1
  210. package/web/dist/assets/Dashboard-C2ELBW-X.js +0 -2
  211. package/web/dist/assets/Docs-iZrvQP8J.js +0 -2
  212. package/web/dist/assets/Installs-BiqR8xdO.js +0 -2
  213. package/web/dist/assets/JournalView-6wilG5Zd.js +0 -1
  214. package/web/dist/assets/Laws-D8YXD_XE.js +0 -3
  215. package/web/dist/assets/Library-DwuTZ2-L.js +0 -1
  216. package/web/dist/assets/Personal-BbUTmZQR.js +0 -1
  217. package/web/dist/assets/drawable-CoIulEH2.js +0 -1
  218. package/web/dist/assets/index-BMwSp8BP.js +0 -2
  219. package/web/dist/assets/index-CDPDk2vj.css +0 -1
@@ -5,7 +5,7 @@ not third-party. It rides the vendored-folder mechanism because it bundles an
5
5
  executable (`scripts/token_report.mjs`) and Geneseed's flat-skill pipeline renders
6
6
  single `.md` files only. Listing it in the generator's `VENDORED_SKILL_DIRS`
7
7
  makes the whole folder ride along verbatim into every host emit — Claude Code,
8
- IBM Bob, OpenCode, GitHub Copilot, OpenClaude — which is exactly what a multi-file skill needs.
8
+ IBM Bob, OpenCode, OpenClaude — which is exactly what a multi-file skill needs.
9
9
 
10
10
  - **Upstream:** this repository (first-party)
11
11
  - **License:** same as Geneseed (see repository LICENSE)
@@ -17,7 +17,6 @@ Consequences of riding this mechanism (deliberate):
17
17
  `description` and blockquote purpose line instead;
18
18
  - listed in AGENT.md's folder-skills section, not the main skills table.
19
19
 
20
- The script supports all five emitted hosts (exact usage on Claude Code, Bob,
21
- OpenClaude and OpenCode; best-effort on Copilot, whose session-state schema is undocumented).
20
+ The script supports all four emitted hosts, with exact usage on each.
22
21
  If a host changes its session storage layout, fix the corresponding finder or
23
22
  parser in `scripts/token_report.mjs`.
@@ -13,9 +13,6 @@
13
13
  * storage/ JSON files when no DB exists)
14
14
  * openclaude OpenClaude ~/.openclaude/projects/<slug>/<session>.jsonl exact usage
15
15
  * (Claude Code fork; $OPENCLAUDE_CONFIG_DIR honoured)
16
- * copilot GitHub Copilot ~/.copilot/history-session-state/ best effort
17
- * (schema undocumented; token fields harvested
18
- * generically, estimates otherwise)
19
16
  *
20
17
  * The report distinguishes two kinds of numbers:
21
18
  *
@@ -333,18 +330,6 @@ function listDir(p) {
333
330
  try { return readdirSync(p).map((n) => path.join(p, n)); } catch { return []; }
334
331
  }
335
332
 
336
- /** Every file at any depth under `root` whose basename matches `pred`. */
337
- function walkFiles(root, pred, out = []) {
338
- let entries;
339
- try { entries = readdirSync(root, { withFileTypes: true }); } catch { return out; }
340
- for (const e of entries) {
341
- const full = path.join(root, e.name);
342
- if (e.isDirectory()) walkFiles(full, pred, out);
343
- else if (pred(e.name)) out.push(full);
344
- }
345
- return out;
346
- }
347
-
348
333
  /** Every DIRECTORY at any depth under `root` named `name` — `Path.rglob("<name>")`. */
349
334
  function walkDirsNamed(root, name, out = []) {
350
335
  let entries;
@@ -905,100 +890,6 @@ function opencodeParse(sid, files) {
905
890
  return data;
906
891
  }
907
892
 
908
- // ---------------------------------------------------------------------------
909
- // Host: GitHub Copilot CLI (best effort — schema undocumented)
910
- // ---------------------------------------------------------------------------
911
-
912
- function copilotRoot() {
913
- const root = process.env.COPILOT_CONFIG_DIR || path.join(homedir(), '.copilot');
914
- for (const sub of ['history-session-state', 'session-state', 'sessions']) {
915
- if (isDir(path.join(root, sub))) return path.join(root, sub);
916
- }
917
- return null;
918
- }
919
-
920
- /** Recursively collect numeric fields whose key mentions tokens. */
921
- function harvestTokens(obj, sink) {
922
- if (isDict(obj)) {
923
- for (const [k, v] of Object.entries(obj)) {
924
- const lk = k.toLowerCase();
925
- // `isinstance(v, (int, float))` — and in Python a BOOL *is* an int, so a
926
- // `"hasTokens": true` adds 1. Reproduced rather than tidied away.
927
- if ((typeof v === 'number' || typeof v === 'boolean') && lk.includes('token')) {
928
- sink.add(lk, typeof v === 'boolean' ? (v ? 1 : 0) : v);
929
- } else {
930
- harvestTokens(v, sink);
931
- }
932
- }
933
- } else if (Array.isArray(obj)) {
934
- for (const v of obj) harvestTokens(v, sink);
935
- }
936
- }
937
-
938
- /** Recursively estimate message-ish content by role. */
939
- function harvestText(obj, sink, depth = 0) {
940
- if (depth > 12) return;
941
- if (isDict(obj)) {
942
- const roleRaw = getOr(obj, 'role', undefined);
943
- const role = typeof roleRaw === 'string' ? roleRaw : null;
944
- const body = role ? getOr(obj, 'content', undefined) : null;
945
- if (role && body !== null && body !== undefined) {
946
- const cat = { user: 'User messages', assistant: 'Assistant replies',
947
- tool: 'Tool result · (unattributed)' }[role] ?? `${role} messages`;
948
- sink.add(cat, textLen(body));
949
- return;
950
- }
951
- for (const v of Object.values(obj)) harvestText(v, sink, depth + 1);
952
- } else if (Array.isArray(obj)) {
953
- for (const v of obj) harvestText(v, sink, depth + 1);
954
- }
955
- }
956
-
957
- function copilotFind(explicit = null) {
958
- const root = copilotRoot();
959
- if (!root) return null;
960
- if (explicit) return existsSync(explicit) ? explicit : null;
961
- return newest(listDir(root));
962
- }
963
-
964
- function copilotParse(target) {
965
- const data = new SessionData('copilot', path.basename(target));
966
- // `rglob("*.json*")` — the basename must CONTAIN ".json", so .json and .jsonl both
967
- // match and so does anything after them.
968
- const files = isDir(target)
969
- ? walkFiles(target, (n) => n.includes('.json')).sort(comparePaths)
970
- : [target];
971
- const tokens = new Counter();
972
- for (const f of files.slice(0, 500)) {
973
- const text = readTextMaybe(f);
974
- if (text === null) continue;
975
- const docs = [];
976
- if (path.extname(f) === '.jsonl') {
977
- for (const line of pySplitLines(text)) {
978
- const d = loadJsonMaybe(line);
979
- if (d !== undefined) docs.push(d);
980
- }
981
- } else {
982
- const d = loadJsonMaybe(text);
983
- if (d !== undefined) docs.push(d);
984
- }
985
- for (const doc of docs) {
986
- harvestTokens(doc, tokens);
987
- harvestText(doc, data.cats);
988
- }
989
- }
990
- if (tokens.size) {
991
- data.notes.push('Copilot session state is undocumented; token-like fields '
992
- + 'found (summed, field names as stored): '
993
- + tokens.entries().sort((a, b) => pyStrCmp(a[0], b[0]))
994
- .map(([k, v]) => `${k}=${fmt(v)}`).join(', '));
995
- } else {
996
- data.notes.push('Copilot records no recognisable token counts in its session '
997
- + 'state — the report below is character-count estimates only.');
998
- }
999
- return data;
1000
- }
1001
-
1002
893
  /**
1003
894
  * `str.splitlines()` — copy of the rule the generator settles once: Python splits
1004
895
  * on a dozen characters JS's `\n` split does not, and drops a trailing empty field.
@@ -1022,7 +913,6 @@ async function detect(hostArg, transcript, session) {
1022
913
  bob: () => claudeShapedFind('bob', transcript),
1023
914
  openclaude: () => claudeShapedFind('openclaude', transcript),
1024
915
  opencode: () => opencodeFind(session),
1025
- copilot: () => copilotFind(transcript),
1026
916
  };
1027
917
  if (hostArg) {
1028
918
  const found = await finders[hostArg]();
@@ -1046,25 +936,21 @@ async function detect(hostArg, transcript, session) {
1046
936
  }
1047
937
  if (!best) {
1048
938
  sysExit('error: no session data found for any supported host '
1049
- + '(claude, bob, openclaude, opencode, copilot)');
939
+ + '(claude, bob, openclaude, opencode)');
1050
940
  }
1051
941
  return [best[0], best[1]];
1052
942
  }
1053
943
 
1054
944
  async function load(host, found) {
1055
945
  if (['claude', 'bob', 'openclaude'].includes(host)) return claudeShapedParse(host, found);
1056
- if (host === 'opencode') {
1057
- const [kind, payload] = found;
1058
- if (kind === 'db') return opencodeDbParse(...payload);
1059
- if (kind === 'nosqlite') return nosqliteData(...payload);
1060
- return opencodeParse(...payload);
1061
- }
1062
- return copilotParse(found);
946
+ const [kind, payload] = found;
947
+ if (kind === 'db') return opencodeDbParse(...payload);
948
+ if (kind === 'nosqlite') return nosqliteData(...payload);
949
+ return opencodeParse(...payload);
1063
950
  }
1064
951
 
1065
952
  const HOST_NAMES = {
1066
953
  claude: 'Claude Code', bob: 'IBM Bob', openclaude: 'OpenClaude', opencode: 'OpenCode',
1067
- copilot: 'GitHub Copilot',
1068
954
  };
1069
955
 
1070
956
  function render(d, limit, topN) {
@@ -1195,11 +1081,11 @@ function render(d, limit, topN) {
1195
1081
  // ---------------------------------------------------------------------------
1196
1082
 
1197
1083
  const PROG = path.basename(process.argv[1] ?? 'token_report.mjs');
1198
- const HOST_CHOICES = ['claude', 'bob', 'openclaude', 'opencode', 'copilot'];
1084
+ const HOST_CHOICES = ['claude', 'bob', 'openclaude', 'opencode'];
1199
1085
  const OPTIONS = [
1200
1086
  ['-h, --help', 'show this help message and exit'],
1201
1087
  [`--host {${HOST_CHOICES.join(',')}}`, 'force a host instead of auto-detecting by recency'],
1202
- ['--transcript TRANSCRIPT', 'explicit transcript path (claude/bob/openclaude/copilot)'],
1088
+ ['--transcript TRANSCRIPT', 'explicit transcript path (claude/bob/openclaude)'],
1203
1089
  ['--session SESSION', 'explicit session id (opencode)'],
1204
1090
  ['--limit LIMIT', 'context window limit for % columns (default 200000)'],
1205
1091
  ['--top TOP', 'how many heaviest single items to list (default 5)'],
@@ -23,7 +23,7 @@ work is worth a crew: a one-file tweak or a question never is.
23
23
  |---|---|---|---|
24
24
  | OpenCode | `workflow` (the `geneseed-workflow` plugin) | **saved only** — `<name>.js` in `.opencode/workflows/` per repo or `<config>/workflows/` global (`GENESEED_WORKFLOWS_DIR` overrides); nothing inline is eval'd | none — call it when the shape fits |
25
25
  | Claude Code | `Workflow` (native) | a saved `.claude/workflows/<name>` by `name`, **or** an inline `script` you author | **required** — the tool refuses unless the user opted in for this task ("use a workflow", "ultracode", a skill that says so) |
26
- | Bob, Copilot, OpenClaude | none | — | fall back to [parallel-agents](parallel-agents.md) / [council](council.md) |
26
+ | Bob, OpenClaude | none | — | fall back to [parallel-agents](parallel-agents.md) / [council](council.md) |
27
27
  | any, under Orca | Orca orchestration (`orca skills get orchestration`) | tasks, not scripts — each task spec names its target, change, ownership and acceptance | the user asked to supervise or coordinate workers |
28
28
 
29
29
  Both runtimes speak the same primitives — `agent()`, `parallel()`, `pipeline()`,
@@ -59,6 +59,7 @@
59
59
  "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
60
  "DESC_TEACH": "<one-line description: teach toward a result — crash course, decode confusing material, or a day-by-day path to a deadline>",
61
61
  "DESC_QUIZ": "<one-line description: test what the user knows instead of explaining — drill, explain-it-back check, or mastery claim stress-tested>",
62
+ "DESC_LEARN_MODE": "<one-line description: learn while building — the user designs at checkpoints, the agent writes the agreed code, state kept per project>",
62
63
  "DESC_SECURITY_AUDIT": "<one-line description: review a change for how it would be attacked and what it leaks, ending in ship / fix / block>",
63
64
  "DESC_SKILL_FORGE": "<one-line description: author, sharpen, merge, or retire a skill — reuse first, trigger tested, every satellite registered>",
64
65
  "DESC_WORKTREE": "<one-line description: isolate a task in its own git worktree from a clean base, integrate through the normal gate, remove when merged>",
package/themes/biker.json CHANGED
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Learn the build while riding it — they call the line at each checkpoint, you lay down the code they agreed to, and the mode sticks to the project between rides.",
62
63
  "DESC_SECURITY_AUDIT": "Ride the change like someone trying to steal it — where it can be forced, what it leaks, what it drags in from outside — and call it: ship, fix, or park it.",
63
64
  "DESC_SKILL_FORGE": "Forge, tune, merge, or scrap a move — reuse what's in the toolbox first, nail the trigger before the steps, test it against the neighbouring moves, register every bolt, doctor green.",
64
65
  "DESC_WORKTREE": "Wrench on a task in its own bay — a fresh worktree off a clean base, nothing shared with the bike already on the lift, back through the normal gate, bay cleared when it's merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Put the driver in charge of the race plan — they call the strategy at each checkpoint, you execute the agreed laps, and the mode holds for the project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Scrutineer a change for how it would be attacked and what it leaks — trust boundaries, the classic vulnerability classes, secrets, the supply chain — and rule: ship, fix, or black-flag.",
63
64
  "DESC_SKILL_FORGE": "Author, sharpen, merge, or retire a manoeuvre — reuse first, the trigger before the steps, tested against its neighbours, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Run a task in its own garage — a fresh worktree off a clean base, nothing shared with the car already being worked on, back through the normal gate, garage cleared once merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Jack the user into the build loop — they design at each checkpoint, you write the agreed code, and the mode persists per project across reboots.",
62
63
  "DESC_SECURITY_AUDIT": "Run the change like ICE would — where it can be breached, what it leaks, what it pulls in from outside the perimeter — and rule: ship, patch, or lock it down.",
63
64
  "DESC_SKILL_FORGE": "Compile, patch, merge, or decommission a program — reuse the library first, trigger before routine, tested against neighbouring programs, every hook registered, diagnostics green.",
64
65
  "DESC_WORKTREE": "Jack a task into its own sandbox — a fresh worktree off a clean base, nothing shared with the live rig, back through the normal gate, sandbox wiped once merged.",
package/themes/gamer.json CHANGED
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Turn on tutorial-while-you-play — the player designs at each checkpoint, you write the agreed code, and the save persists per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Play the change like a griefer would — where it can be exploited, what it leaks, what it pulls in from outside — and call it: ship, patch, or block.",
63
64
  "DESC_SKILL_FORGE": "Craft, tune, merge, or retire a combo — reuse the inventory first, trigger before inputs, tested against neighbouring combos, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Run a task in its own save slot — a fresh worktree off a clean base, nothing shared with the run in progress, back through the normal gate, slot deleted once merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Make the supplicant the architect of the work — they reason out each design at its checkpoint, you forge only what they sanctioned, and the rite endures per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Scrutinise a change as the enemy would — where it may be breached, what it leaks, what it admits from beyond the walls — and pronounce: ship, purge, or bar it.",
63
64
  "DESC_SKILL_FORGE": "Forge, sharpen, merge, or retire a rite — reuse the canon first, the trigger before the steps, tested against its neighbouring rites, every satellite inscribed, doctor green.",
64
65
  "DESC_WORKTREE": "Wall a task off in its own cell — a fresh worktree from a clean base, nothing shared with the work already at the bench, returned through the proper gate, the cell razed once merged.",
package/themes/joker.json CHANGED
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Hand them the pen for the punchlines — they design at each checkpoint, you write only the agreed code, and the act keeps running per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Heckle the change before the room does — where it can be attacked, what it leaks, what it drags in from outside — and call it: ship, fix, or pull it.",
63
64
  "DESC_SKILL_FORGE": "Write, tighten, merge, or retire a bit — reuse the notebook first, the trigger before the steps, tested against neighbouring bits, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Work a task in its own green room — a fresh worktree off a clean base, nothing shared with the set in progress, back through the normal gate, room cleared once merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Let the user design the thing at each checkpoint while you write only the agreed code, so they understand it afterwards. The mode persists per project. Someone has to understand it.",
62
63
  "DESC_SECURITY_AUDIT": "Review a change for how it would be attacked and what it leaks — trust boundaries, the usual vulnerability classes, secrets, the supply chain — ending in ship, fix, or block. Usually fix.",
63
64
  "DESC_SKILL_FORGE": "Author, sharpen, merge, or retire a routine — reuse first, trigger before procedure, tested against its neighbours, every satellite registered, doctor green. Briefly.",
64
65
  "DESC_WORKTREE": "Isolate a task in its own git worktree from a clean base — look before branching, work only there, integrate through the normal gate, remove it once merged. Something will still conflict.",
package/themes/mean.json CHANGED
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Make the user actually design what gets built — they reason it out at each checkpoint, you write only the agreed code, and the mode persists per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Review a change the way someone hostile would — where it can be attacked, what it leaks, what it drags in from outside — and call it: ship, fix, or block.",
63
64
  "DESC_SKILL_FORGE": "Author, sharpen, merge, or retire a drill — reuse first, trigger before procedure, tested against its neighbours so it doesn't misfire, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Isolate a task in its own git worktree from a clean base — look before branching, work only there, integrate through the normal gate, remove it when merged. Stop touching other people's trees.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Put the recruit in command of the plan — they reason out each design at its checkpoint, you execute only the approved code, and the mode holds per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Assess a change as the adversary would — where it can be breached, what it leaks, what it admits from outside the perimeter — and rule: ship, fix, or deny.",
63
64
  "DESC_SKILL_FORGE": "Author, sharpen, merge, or retire an SOP — reuse first, trigger before procedure, tested against neighbouring SOPs, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Isolate a task in its own worktree from a clean base — recon before branching, work only there, integrate through the normal gate, strike it once merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Learn while building — the user designs at each checkpoint, the agent writes only the agreed code and explains it, and the mode persists per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Review a change for how it would be attacked and what it leaks — trust boundaries, the classic vulnerability classes, secrets, the supply chain — ending in a ship / fix / block verdict.",
63
64
  "DESC_SKILL_FORGE": "Author, sharpen, merge, or retire a skill — reuse first, trigger before procedure, tested against its neighbours, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Isolate a task in its own git worktree from a clean base — look before branching, work only there, integrate through the normal gate, remove it when merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Let the crew chart the course — they reason out each design at its checkpoint, you build only what they agreed, and the mode holds per project across voyages.",
62
63
  "DESC_SECURITY_AUDIT": "Board the change as a raider would — where she can be breached, what she leaks, what she takes aboard from foreign ports — and rule: sail, mend, or scuttle.",
63
64
  "DESC_SKILL_FORGE": "Forge, sharpen, merge, or retire a knack — reuse the ship's stores first, the trigger before the steps, tested against neighbouring knacks, every satellite logged, doctor green.",
64
65
  "DESC_WORKTREE": "Work a task in its own hold — a fresh worktree off a clean base, nothing shared with the cargo already stowed, back through the normal gate, hold cleared once merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Put the player on the playbook — they call each design at its checkpoint, you run only the agreed play, and the mode holds per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Scout the change like the opposing team would — where it can be attacked, what it leaks, what it pulls in from outside — and call it: play it, fix it, or bench it.",
63
64
  "DESC_SKILL_FORGE": "Draw up, sharpen, merge, or retire a play — reuse the playbook first, trigger before the steps, tested against neighbouring plays, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Run a task on its own practice field — a fresh worktree off a clean base, nothing shared with the game in progress, back through the normal gate, field cleared once merged.",
@@ -59,6 +59,7 @@
59
59
  "DESC_DEVELOP": "Drive the change home — smallest move, a test written to cover it, the affected trials green, and sealed commit by commit.",
60
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Put the driver on strategy — they make each design call at its checkpoint, you execute only the agreed code, and the mode holds per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Attack the change the way a rival would — where it can be forced, what it leaks, what it brings in from outside — and call it: ship, fix, or block.",
63
64
  "DESC_SKILL_FORGE": "Build, tune, merge, or retire a setup — reuse first, trigger before procedure, tested against its neighbours, every satellite registered, doctor green.",
64
65
  "DESC_WORKTREE": "Run a task in its own garage — a fresh worktree off a clean base, nothing shared with the car already on the stand, back through the normal gate, garage cleared once merged.",
@@ -59,6 +59,7 @@
59
59
  "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
60
  "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
61
  "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.",
62
+ "DESC_LEARN_MODE": "Take on an apprentice at the forge — they reason out each design at its checkpoint, you cast only the agreed code, and the apprenticeship persists per project across sessions.",
62
63
  "DESC_SECURITY_AUDIT": "Scry a change as a hostile caster would — where the wards can be breached, what it leaks, what it summons from beyond the circle — and pronounce: ship, mend, or bind.",
63
64
  "DESC_SKILL_FORGE": "Inscribe, sharpen, merge, or retire a spell — reuse the spellbook first, the trigger before the incantation, tested against neighbouring spells, every satellite recorded, doctor green.",
64
65
  "DESC_WORKTREE": "Work a task in its own warded circle — a fresh worktree off a clean base, nothing shared with the ritual in progress, back through the normal gate, circle dispelled once merged.",
@@ -0,0 +1 @@
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{t as r}from"./api-Dc8f3ca-.js";import{M as i,O as a,c as o,q as s,v as c}from"./index-CNFH7o55.js";import{a as l,i as u,n as d,o as f,r as p,s as m,t as h}from"./usePoll-O0sJEw1Y.js";var g=e(t(),1),_=n();function v({s:e}){let t=u[e.status]||u.idle,n=e.files,r=e.todos,o=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||f(e.cwd)||e.session_id}),e.cwd&&(0,_.jsx)(`div`,{className:`dim mono`,style:{fontSize:12,...d},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)(a,{name:`chevron`,className:`glyph act-chev`})]})]}),e.phase&&(0,_.jsxs)(`div`,{className:`row gap-8`,style:{marginTop:10,fontSize:14},children:[(0,_.jsx)(a,{name:`activity`}),(0,_.jsx)(`span`,{style:d,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:[m(e.tokens),` tok`]}),e.cost>0&&(0,_.jsxs)(`span`,{children:[`$`,e.cost.toFixed(2)]}),e.turn_started_at?(0,_.jsx)(`span`,{children:(0,_.jsx)(p,{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]})]})]}),o&&(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)(l,{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,...d},children:e.error}):e.blocked_on?(0,_.jsx)(`span`,{className:`badge bad`,title:e.blocked_on,style:{maxWidth:300,...d},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 a=!e||e.enabled!==!1,l=e?.activity||[],u=s(),d=async()=>{let e=!a;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:a?`tracking on`:`tracking off`}),(0,_.jsx)(`div`,{className:`sw-toggle${a?` on`:``}`,role:`switch`,"aria-checked":a,"aria-label":`Toggle activity tracking`,tabIndex:0,onClick:d,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),d())}})]})]}),(0,_.jsx)(o,{error:n,style:{marginBottom:12}}),e?a?l.length===0?(0,_.jsxs)(`div`,{className:`empty`,children:[(0,_.jsx)(`div`,{className:`big`,children:`No active sessions`}),`Run `,(0,_.jsx)(`code`,{children:`opencode`}),` and the sessions it spins up appear here.`]}):(0,_.jsx)(`div`,{className:`stack gap-12`,ref:u,children:l.map(e=>(0,_.jsx)(`div`,{"data-flip":e.session_id,children:(0,_.jsx)(v,{s:e})},e.session_id))}):(0,_.jsxs)(`div`,{className:`empty`,children:[(0,_.jsx)(`div`,{className:`big`,children:`Activity tracking is off`}),`The plugin isn't recording sessions. Flip the switch to turn it back on.`]}):(0,_.jsx)(c,{label:`Reading live sessions…`})]})}export{y as default};
@@ -0,0 +1 @@
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{t as r}from"./api-Dc8f3ca-.js";import{M as i,O as a,v as o}from"./index-CNFH7o55.js";import{i as s,n as c,o as l,r as u,s as d,t as f}from"./usePoll-O0sJEw1Y.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(`${d(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=s[w.status]||s.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||l(w.cwd)||w.session_id}),w.cwd&&(0,m.jsx)(`div`,{className:`dim mono`,style:{fontSize:12,...c},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:c,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:[d(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)(u,{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%`,...c},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:{...c,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-BALwjQsA.js","assets/sections-GalMS0Zv.js","assets/react-B9Z_tXRV.js","assets/drawable-Du_PZrQj.js","assets/index-CNFH7o55.js","assets/api-Dc8f3ca-.js","assets/index-Bz_KMRDH.css","assets/jobBuckets-Dbq8ZlWW.js","assets/OperatorHudView-DVx1HlBx.js","assets/JournalView-JpAQ8Hqe.js"])))=>i.map(i=>d[i]);
2
+ import{n as e,o as t,r as n,s as r}from"./sections-GalMS0Zv.js";import{i,t as a}from"./react-B9Z_tXRV.js";import{t as o}from"./api-Dc8f3ca-.js";import{A as s,F as c,H as l,I as u,K as d,M as f,O as p,P as m,U as h,b as g,c as _,j as v,k as y,s as b,t as x,v as S}from"./index-CNFH7o55.js";var C=r(i(),1),w={neutral:`Loaded & ready`,imperial:`The Codex in force`,military:`The unit stands ready`,cyberpunk:`Jacked in`,wizard:`Wards in place`,pirate:`The crew stands ready`,gamer:`Game loaded`,sports:`The squad takes the field`,biker:`The crew rolls out`,commentator:`Lights out, away we go`,verstappen:`Setup's in`,joker:`Mic check`,mean:`Rules are up`,marvin:`Online. Reluctantly.`},T=e=>e.deployed?w[e.theme]||`Loaded & ready`:`Not deployed`,E=a();function D({value:e,size:t=232}){let n=d(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=y(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)(h,{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:()=>l(`#/diff`),title:`Open changes`,children:[(0,E.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:(0,E.jsx)(h,{value:t})}),(0,E.jsx)(`span`,{className:`kseg-l`,children:`Local edits`}),t>0&&(0,E.jsx)(`span`,{className:`delta up`,children:`▲`})]})]})}function k({overview:t}){return(0,E.jsx)(`div`,{className:`genome`,children:n.map((n,r)=>{let i=e[n],a=t.counts?.[n];return(0,E.jsxs)(`div`,{className:`card gcell rise`,style:{"--i":r},onClick:()=>l(`#/section/`+n),children:[(0,E.jsxs)(`div`,{className:`gtop`,children:[(0,E.jsx)(`span`,{className:`gname`,children:i.label}),(0,E.jsx)(p,{name:i.icon,className:`gicon`})]}),(0,E.jsx)(`div`,{className:`gcount`+(a===0?` zero`:``),children:a==null?`—`:(0,E.jsx)(h,{value:a})}),(0,E.jsx)(`div`,{className:`gdesc`,children:i.desc})]},n)})})}function A({jobs:e}){if(!e||e.length===0)return(0,E.jsx)(`div`,{className:`feed`,children:(0,E.jsxs)(`div`,{className:`empty`,children:[(0,E.jsx)(`div`,{className:`big`,children:`No activity yet`}),`Actions you run appear here.`]})});let t={done:`ok`,running:`acc`,failed:`bad`},n=[...e].sort((e,t)=>t.started-e.started).slice(0,8);return(0,E.jsx)(`div`,{className:`feed`,children:n.map(e=>(0,E.jsxs)(`div`,{className:`feed-row`,children:[(0,E.jsx)(`span`,{className:`feed-dot ${t[e.status]||`ok`}`}),(0,E.jsx)(`span`,{className:`feed-txt`,children:(0,E.jsx)(`b`,{children:e.action})}),(0,E.jsxs)(`span`,{className:`feed-when`,children:[f(e.started),` ago`]})]},e.id))})}function j({overview:e,sigil:t,setup:r,jobs:i,onAction:a}){let o=T(e),s=v(e,r);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`card pad-lg rise mb-16`,children:(0,E.jsxs)(`div`,{className:`hero`,children:[(0,E.jsx)(D,{value:s}),(0,E.jsxs)(`div`,{className:`hero-facts`,children:[(0,E.jsx)(`div`,{className:`ttl`,children:o}),t&&(0,E.jsxs)(`div`,{className:`voice-readout`,children:[(0,E.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,E.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,E.jsxs)(`p`,{className:`sub`,children:[`One source rendered into `,(0,E.jsx)(`code`,{children:e.target}),`. Every repo on this machine inherits it.`]}),(0,E.jsxs)(`div`,{className:`hero-chips`,children:[(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`voice`}),(0,E.jsx)(`span`,{className:`cv`,style:{textTransform:`capitalize`},children:e.theme})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`mode`}),(0,E.jsx)(`span`,{className:`cv`,children:e.emit})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`footprint`}),(0,E.jsx)(`span`,{className:`cv`,children:e.footprint})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`built`}),(0,E.jsx)(`span`,{className:`cv`,children:e.build_time||`unknown`})]}),(0,E.jsxs)(`span`,{className:`chip`,children:[(0,E.jsx)(`span`,{className:`ck`,children:`fp`}),(0,E.jsx)(`span`,{className:`cv`,children:r?.installed_fp||`—`})]})]}),(0,E.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,E.jsxs)(`button`,{className:`btn`,onClick:()=>a(`update`),children:[(0,E.jsx)(p,{name:`refresh`}),`Update`]}),(0,E.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`build-all`),children:[(0,E.jsx)(p,{name:`build`}),`Rebuild`]}),(0,E.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`doctor`),children:[(0,E.jsx)(p,{name:`doctor`}),`Run doctor`]})]})]})]})}),(0,E.jsx)(O,{overview:e}),(0,E.jsxs)(`div`,{className:`grid split-status`,children:[(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsxs)(`div`,{className:`card-head`,children:[(0,E.jsx)(`h3`,{children:`Capability genome`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsxs)(`span`,{className:`tick`,children:[n.length,` sections`]})})]}),(0,E.jsx)(k,{overview:e})]}),(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsxs)(`div`,{className:`card-head`,children:[(0,E.jsx)(`h3`,{children:`Recent activity`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsxs)(`span`,{className:`badge acc`,children:[(0,E.jsx)(`span`,{className:`dot`}),`live`]})})]}),(0,E.jsx)(A,{jobs:i})]})]})]})}function M({k:t,overview:n,max:r}){let i=e[t],a=n.counts?.[t]??0;return(0,E.jsxs)(`div`,{className:`strand`,children:[(0,E.jsxs)(`span`,{className:`strand-name`,children:[(0,E.jsx)(`span`,{className:`strand-dot`}),(0,E.jsx)(`a`,{href:`#/section/`+t,className:`strand-link stretch-link`,children:i.label})]}),(0,E.jsx)(`div`,{className:`hbar`,children:(0,E.jsx)(`i`,{style:{width:`${a/r*100}%`}})}),(0,E.jsx)(`span`,{className:`strand-val`,children:a})]})}function N({overview:e,sigil:t,setup:r,jobs:i}){let a=s(e.counts),o=r?.version_verdict||``,c=o.includes(`up to date`),l=y(e.diff),u=[[`Source`,`src/, the canonical genetic material`,r?.source_fp||`—`,!0],[`Render`,`geneseed build → ${e.emit}`,e.theme+` voice`,!0],[`Deployed`,e.target,`inherited by every repo`,!1]];return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`mb-16`,children:(0,E.jsxs)(`div`,{className:`card pad-lg rise`,style:{position:`relative`,overflow:`hidden`},children:[(0,E.jsx)(`h2`,{className:`h`,style:{fontSize:22,margin:`0 0 18px`},children:`Gene-seed lineage`}),(0,E.jsxs)(`div`,{className:`lineage-track`,children:[(0,E.jsx)(`div`,{className:`spine`}),u.map(([e,t,n,r],i)=>(0,E.jsxs)(`div`,{className:`lineage-step`,children:[(0,E.jsx)(`span`,{className:`node ${r?`on`:``}`}),(0,E.jsx)(`div`,{className:`lt`,children:e}),(0,E.jsx)(`div`,{className:`ld`,children:t}),(0,E.jsx)(`div`,{className:`ltag`,children:n})]},i))]}),(0,E.jsx)(`hr`,{className:`hr`}),t&&(0,E.jsxs)(`div`,{className:`voice-readout`,style:{marginBottom:14},children:[(0,E.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,E.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,E.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,E.jsxs)(`span`,{className:`badge ${c?`ok`:`warn`}`,children:[(0,E.jsx)(`span`,{className:`dot`}),`in sync · `,o]}),(0,E.jsxs)(`span`,{className:`badge`,children:[(0,E.jsx)(`span`,{className:`dot`}),l,` local edits`]})]})]})}),(0,E.jsxs)(`div`,{className:`grid split-even`,children:[(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsxs)(`div`,{className:`card-head`,children:[(0,E.jsx)(`h3`,{children:`Genome strand`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsx)(`span`,{className:`tick`,children:`by volume`})})]}),n.map(t=>(0,E.jsx)(M,{k:t,overview:e,max:a},t))]}),(0,E.jsxs)(`div`,{className:`card pad-lg`,children:[(0,E.jsx)(`div`,{className:`card-head`,children:(0,E.jsx)(`h3`,{children:`Recent activity`})}),(0,E.jsx)(A,{jobs:i})]})]})]})}function P({overview:t,setup:r,jobs:i}){let a=n.reduce((e,n)=>e+(t.counts?.[n]??0),0),o=s(t.counts),c=t.doctor?.ok,l=t.doctor?.problems?.length??0,u=y(t.diff);return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`card pad-md rise mb-16`,children:(0,E.jsx)(`div`,{className:`row wrap between gap-16`,children:(0,E.jsxs)(`div`,{className:`row`,style:{gap:20,flexWrap:`wrap`},children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`status`}),(0,E.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:(0,E.jsxs)(`span`,{className:`badge ${t.deployed?`ok`:`warn`}`,children:[(0,E.jsx)(`span`,{className:`dot`}),t.deployed?`deployed`:`not deployed`]})})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`voice`}),(0,E.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6,textTransform:`capitalize`},children:t.theme})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`mode`}),(0,E.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6},children:t.emit})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`fingerprint`}),(0,E.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6,color:`var(--accent)`},children:r?.installed_fp||`—`})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`doctor`}),(0,E.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:c?(0,E.jsxs)(`span`,{className:`badge ok`,children:[(0,E.jsx)(`span`,{className:`dot`}),`clean`]}):(0,E.jsxs)(`span`,{className:`badge warn`,children:[(0,E.jsx)(`span`,{className:`dot`}),l,` issue`,l===1?``:`s`]})})]}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`div`,{className:`tick`,children:`edits`}),(0,E.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6},children:u})]})]})})}),(0,E.jsxs)(`div`,{className:`grid split-operator`,children:[(0,E.jsxs)(`div`,{className:`card rise`,style:{"--i":1},children:[(0,E.jsxs)(`div`,{className:`card-head pad-lg`,style:{padding:`18px 20px 0`,marginBottom:14},children:[(0,E.jsx)(`h3`,{children:`Sections`}),(0,E.jsx)(`div`,{className:`right`,children:(0,E.jsxs)(`span`,{className:`tick`,children:[a,` entries total`]})})]}),(0,E.jsxs)(`table`,{className:`tbl`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{children:[(0,E.jsx)(`th`,{children:`Section`}),(0,E.jsx)(`th`,{children:`Detail`}),(0,E.jsx)(`th`,{style:{width:130},children:`Share`}),(0,E.jsx)(`th`,{className:`num`,children:`Count`})]})}),(0,E.jsx)(`tbody`,{children:n.map(n=>{let r=e[n],i=t.counts?.[n]??0;return(0,E.jsxs)(`tr`,{className:`clickable`,children:[(0,E.jsx)(`td`,{className:`name`,children:(0,E.jsx)(`a`,{href:`#/section/`+n,className:`stretch-link`,children:r.label})}),(0,E.jsx)(`td`,{className:`muted`,children:r.desc}),(0,E.jsx)(`td`,{children:(0,E.jsx)(`div`,{className:`hbar`,children:(0,E.jsx)(`i`,{style:{width:`${i/o*100}%`}})})}),(0,E.jsx)(`td`,{className:`num`,children:i})]},n)})})]})]}),(0,E.jsxs)(`div`,{className:`card pad-lg rise`,style:{"--i":2},children:[(0,E.jsx)(`div`,{className:`card-head`,children:(0,E.jsx)(`h3`,{children:`Run log`})}),(0,E.jsx)(A,{jobs:i})]})]})]})}function F(){let[e,t]=(0,C.useState)(!1);return(0,E.jsxs)(`div`,{className:`stale-banner`,role:`alert`,children:[(0,E.jsx)(`span`,{children:`This console is running code from before your last upgrade.`}),(0,E.jsx)(`button`,{className:`btn sm`,onClick:async()=>{t(!0);try{await o.restart()}catch{}u(c)},disabled:e,children:e?`Restarting…`:`Restart`})]})}var I=t({default:()=>B}),L=(0,C.lazy)(()=>x(()=>import(`./GreenhouseView-BALwjQsA.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))),R=(0,C.lazy)(()=>x(()=>import(`./OperatorHudView-DVx1HlBx.js`),__vite__mapDeps([8,1,2,4,5,6,7]))),z=(0,C.lazy)(()=>x(()=>import(`./JournalView-JpAQ8Hqe.js`),__vite__mapDeps([9,1,2,5,3,4,6])));function B({overview:e,overviewError:t,onRetry:n,themes:r,setup:i,runs:a,onAction:s,layout:c=`cultivar`,dataRev:l}){let u=c,[d,f]=(0,C.useState)(`status`),p=e&&r.find(t=>t.name===e.theme)?.sigil||``,{data:h}=m(()=>u===`greenhouse`||u===`operator`?o.doctor().catch(()=>null):Promise.resolve(null),[u,l]),{data:v}=m(()=>u===`journal`?o.recent().catch(()=>null):Promise.resolve(null),[u,l]);if(!e)return t?(0,E.jsxs)(`div`,{children:[(0,E.jsx)(_,{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?d===`status`&&u===`journal`?(0,E.jsxs)(C.Suspense,{fallback:(0,E.jsx)(S,{}),children:[y,(0,E.jsx)(z,{overview:e,recent:v,onAction:s,onDirection:f,dataRev:l})]}):(0,E.jsxs)(E.Fragment,{children:[y,(0,E.jsx)(`div`,{className:`head-row`,children:(0,E.jsx)(g,{"aria-label":`Dashboard view`,children:[[`status`,`Status`],[`lineage`,`Lineage`],[`operator`,`Operator`]].map(([e,t])=>(0,E.jsx)(`button`,{className:d===e?`on`:``,onClick:()=>f(e),"aria-pressed":d===e,children:t},e))})}),(0,E.jsxs)(`div`,{className:`view-in`,children:[d===`status`&&u===`cultivar`&&(0,E.jsx)(j,{overview:e,sigil:p,setup:i,jobs:a,onAction:s}),d===`status`&&u===`greenhouse`&&(0,E.jsx)(C.Suspense,{fallback:(0,E.jsx)(S,{}),children:(0,E.jsx)(L,{overview:e,sigil:p,jobs:a,doctor:h,onAction:s})}),d===`status`&&u===`operator`&&(0,E.jsx)(C.Suspense,{fallback:(0,E.jsx)(S,{}),children:(0,E.jsx)(R,{overview:e,jobs:a,doctor:h,onAction:s})}),d===`lineage`&&(0,E.jsx)(N,{overview:e,sigil:p,setup:i,jobs:a}),d===`operator`&&(0,E.jsx)(P,{overview:e,setup:i,jobs:a})]},d)]}):(0,E.jsxs)(E.Fragment,{children:[y,(0,E.jsx)(b,{onAction:s})]})}export{B as default,T as n,I as t};
@@ -0,0 +1,5 @@
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{t as r}from"./api-Dc8f3ca-.js";import{C as i,H as a,O as o,P as s,S as c,a as l,b as u,c as d,i as f,n as p,o as m,r as h,v as g,x as _}from"./index-CNFH7o55.js";import{i as v,n as y,r as b,t as x}from"./Markdown-qjM2_ofS.js";var S=e(t(),1),C=n();function w(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 T(e,t){if(!e||!t)return null;try{return e.querySelector(t)}catch{return null}}function E(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:e[2],id:w(e[2],r)}))}return t}var D={"opencode-global":`OpenCode, global (recommended)`,opencode:`OpenCode, per-repo`,"claude-global":`Claude Code`,claude:`Claude Code`,"openclaude-global":`OpenClaude`,openclaude:`OpenClaude`,"bob-global":`Bob`,bob:`Bob`,files:`Any AGENT.md tool`},O=`you already know this`;function k({page:e,overview:t,onAction:n}){let r=(0,S.useRef)(null),i=(0,S.useMemo)(()=>y(e.body,e.links),[e.body,e.links]);(0,S.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=w(e.textContent||``,t);n&&(e.id=n)}}),e.querySelectorAll(`blockquote`).forEach(e=>{(e.querySelector(`strong`)?.textContent||``).toLowerCase().startsWith(O)&&e.classList.add(`analogy`)})},[i]),(0,S.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(),a(n))};return e.addEventListener(`click`,t),()=>e.removeEventListener(`click`,t)},[i]),(0,S.useEffect)(()=>{let t=e.anchor;if(!t)return;let n=T(r.current,`#${CSS.escape(t)}`);n&&n.scrollIntoView({behavior:`smooth`,block:`start`})},[i,e.anchor]),(0,S.useEffect)(()=>{let n=r.current;if(!n||e.id!==`install`)return;n.querySelectorAll(`.docs-here`).forEach(e=>e.classList.remove(`docs-here`));let i=D[t?.emit];if(!i)return;let a=[...n.querySelectorAll(`h3`)].find(e=>w(e.textContent||``)===w(i));a&&(a.classList.add(`docs-here`),a.scrollIntoView?.({behavior:`smooth`,block:`start`}))},[i,e.id,t?.emit]);let o=[];return e.id===`install`&&(o.push({label:`Run doctor`,action:`doctor`}),o.push({label:`Rebuild`,action:`build`})),e.id===`verify`&&o.push({label:`Run doctor`,action:`doctor`}),e.id===`self-improve`&&o.push({label:`Open diff`,hash:`#/diff`}),e.id===`upgrade`&&o.push({label:`Update`,action:`update`}),(0,C.jsxs)(`div`,{className:`detail-doc`,children:[(0,C.jsx)(`h1`,{style:{marginTop:0},children:e.title}),e.source&&(0,C.jsx)(`div`,{className:`doc-meta`,children:(0,C.jsxs)(`span`,{className:`badge`,children:[(0,C.jsx)(`span`,{className:`dot`}),e.source]})}),o.length>0&&(0,C.jsx)(`div`,{className:`row wrap gap-10`,style:{margin:`10px 0 14px`},children:o.map(e=>e.hash?(0,C.jsx)(`a`,{className:`btn ghost sm`,href:e.hash,children:e.label},e.label):(0,C.jsx)(`button`,{className:`btn ghost sm`,onClick:()=>n&&n(e.action),children:e.label},e.label))}),(0,C.jsx)(`div`,{className:`markdown`,ref:r,dangerouslySetInnerHTML:{__html:i}}),e.link&&(0,C.jsx)(`div`,{style:{marginTop:24},children:(0,C.jsx)(`a`,{className:`btn soft sm`,href:e.link.hash,children:e.link.label})})]})}var A=1200;function j({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,C.jsxs)(`div`,{className:`cli-arg`,children:[(0,C.jsx)(`code`,{className:`cli-arg-name`,children:n}),r.length>0&&(0,C.jsxs)(`code`,{className:`cli-arg-meta`,children:[` `,r.join(` · `)]}),e.help&&(0,C.jsx)(`div`,{className:`cli-arg-help`,children:e.help})]})}function M({text:e}){let[t,n]=(0,S.useState)(!1);return(0,C.jsxs)(`button`,{className:`btn ghost sm`,onClick:async()=>{try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),A)}catch{}},title:`Copy command`,children:[(0,C.jsx)(o,{name:t?`spark`:`copy`}),t?`Copied`:`Copy`]})}function N({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,C.jsxs)(`div`,{className:`card pad-md mb-12 cli-card`,children:[(0,C.jsxs)(`div`,{className:`row wrap between`,style:{alignItems:`flex-start`},children:[(0,C.jsxs)(`div`,{className:`stack`,style:{gap:4},children:[(0,C.jsx)(`h3`,{style:{margin:0},children:(0,C.jsx)(`code`,{children:e.name})}),e.help&&(0,C.jsx)(`p`,{className:`sub`,style:{margin:0},children:e.help})]}),(0,C.jsx)(M,{text:`${t} ${e.name}`})]}),(0,C.jsx)(`pre`,{className:`cli-syn`,children:r}),(e.positionals||[]).length>0&&(0,C.jsxs)(`div`,{className:`cli-block`,children:[(0,C.jsx)(`div`,{className:`cli-block-head`,children:`Arguments`}),e.positionals.map(e=>(0,C.jsx)(j,{a:e,kind:`positional`},e.dest))]}),(e.options||[]).length>0&&(0,C.jsxs)(`div`,{className:`cli-block`,children:[(0,C.jsx)(`div`,{className:`cli-block-head`,children:`Options`}),e.options.map(e=>(0,C.jsx)(j,{a:e,kind:`option`},e.names.join(`,`)))]})]})}function P({page:e}){let t=e.prog||`geneseed`,n=e.commands||[];return(0,C.jsxs)(`div`,{className:`detail-doc`,children:[(0,C.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,C.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Every subcommand of `,(0,C.jsx)(`code`,{children:t}),`. Generated from the parser at request time (the same one `,(0,C.jsx)(`code`,{children:`geneseed`}),` actually parses), so this page cannot drift.`]}),(0,C.jsx)(`div`,{style:{marginTop:18},children:n.map(e=>(0,C.jsx)(N,{cmd:e,prog:t},e.name))})]})}function F({page:e}){let t=e.rows||[],n=e.theme||`neutral`;return(0,C.jsxs)(`div`,{className:`detail-doc`,children:[(0,C.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,C.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Geneseed's invented vocabulary, decoded. Left: the neutral, plain-English term. Right: the word your `,(0,C.jsx)(`code`,{style:{textTransform:`capitalize`},children:n}),` theme actually uses in the agent's voice. Last: the developer idea it maps to.`]}),(0,C.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:(0,C.jsxs)(`table`,{className:`glossary-table`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{children:[(0,C.jsx)(`th`,{children:`Concept`}),(0,C.jsx)(`th`,{children:`Neutral term`}),(0,C.jsxs)(`th`,{children:[`In `,n]}),(0,C.jsx)(`th`,{children:`Meaning`}),(0,C.jsx)(`th`,{children:`In dev terms`})]})}),(0,C.jsx)(`tbody`,{children:t.map(e=>(0,C.jsxs)(`tr`,{children:[(0,C.jsx)(`td`,{children:(0,C.jsx)(`strong`,{children:e.label})}),(0,C.jsx)(`td`,{children:(0,C.jsx)(`code`,{children:e.neutral||`—`})}),(0,C.jsx)(`td`,{children:(0,C.jsx)(`code`,{children:e.themed||e.neutral||`—`})}),(0,C.jsx)(`td`,{className:`dim`,children:e.desc}),(0,C.jsx)(`td`,{className:`dim`,children:e.analogy||`—`})]},e.label))})]})})]})}var I={enforced:`ok`,automatic:`ok`,asked:`warn`,"on demand":`warn`};function L(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 R=({text:e})=>(0,C.jsx)(`span`,{dangerouslySetInnerHTML:{__html:b(v.parseInline(e||``))}}),z=({kind:e})=>(0,C.jsx)(`span`,{className:`tag ${I[e]||``}`,children:e});function B({page:e,overview:t,onAction:n}){let[r,i]=(0,S.useState)(0);if(!e.rows)return(0,C.jsx)(k,{page:e,overview:t,onAction:n});let a=e.rows[r]||e.rows[0],[o,s]=L(e.body);return(0,C.jsxs)(`div`,{className:`detail-doc`,children:[(0,C.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,C.jsx)(x,{body:o,links:e.links}),(0,C.jsxs)(`div`,{className:`docs-map`,children:[(0,C.jsx)(`ul`,{className:`map-tree`,"aria-label":`Pieces`,children:e.rows.map((e,t)=>(0,C.jsx)(`li`,{children:(0,C.jsxs)(`button`,{className:`map-node ${t===r?`on`:``}`,"aria-pressed":t===r,onClick:()=>i(t),children:[(0,C.jsx)(`span`,{className:`map-piece`,children:(0,C.jsx)(R,{text:e.piece})}),(0,C.jsx)(z,{kind:e.kind}),(0,C.jsx)(`span`,{className:`mono dim map-cost`,children:(0,C.jsx)(R,{text:e.cost})})]})},t))}),a&&(0,C.jsxs)(`div`,{className:`card pad-md map-detail`,"aria-live":`polite`,children:[(0,C.jsx)(`h3`,{style:{margin:`0 0 8px`},children:(0,C.jsx)(R,{text:a.piece})}),(0,C.jsx)(z,{kind:a.kind}),(0,C.jsxs)(`dl`,{children:[(0,C.jsx)(`dt`,{children:`Does`}),(0,C.jsx)(`dd`,{children:(0,C.jsx)(R,{text:a.does})}),(0,C.jsx)(`dt`,{children:`Costs`}),(0,C.jsx)(`dd`,{children:(0,C.jsx)(R,{text:a.cost})}),(0,C.jsx)(`dt`,{children:`Turn it off`}),(0,C.jsx)(`dd`,{children:(0,C.jsx)(R,{text:a.off})})]})]})]}),s.trim()&&(0,C.jsx)(x,{body:s,links:e.links})]})}var V=5,H=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function U(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-])${H(e)}s?(?![\\w-])`,`i`).test(n))&&r.push(e),r.length===V)break;return r}var W=e=>document.getElementById(e)?.scrollIntoView({behavior:`smooth`});function G({body:e,glossaryRows:t}){let n=(0,S.useMemo)(()=>E(e),[e]),r=(0,S.useMemo)(()=>U(e,t),[e,t]);return!n.length&&!r.length?null:(0,C.jsxs)(`aside`,{className:`docs-margin`,children:[n.length>0&&(0,C.jsxs)(`nav`,{className:`docs-toc`,"aria-label":`On this page`,children:[(0,C.jsx)(`div`,{className:`docs-toc-head`,children:`On this page`}),(0,C.jsx)(`ul`,{children:n.map(e=>(0,C.jsx)(`li`,{className:`lvl-${e.level}`,children:(0,C.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),W(e.id)},children:e.title})},e.id))})]}),r.length>0&&(0,C.jsxs)(`div`,{className:`docs-gloss`,children:[(0,C.jsx)(`div`,{className:`docs-toc-head`,children:`Terms on this page`}),r.map(e=>(0,C.jsxs)(`div`,{className:`docs-gloss-card`,children:[(0,C.jsx)(`b`,{children:e.themed||e.neutral||e.label}),(0,C.jsx)(`p`,{children:e.desc})]},e.label))]})]})}function K({page:e}){let t=e.version||{},n=[[`Theme`,e.theme],[`Install mode`,e.emit],[`Deployed`,e.deployed?`yes`:`no`],[`Target`,(0,C.jsx)(`code`,{children:e.target},`t`)],[`Source root`,(0,C.jsx)(`code`,{children:e.root},`r`)],[`Installed build`,(0,C.jsx)(`code`,{children:t.installed_fp||`(none)`},`i`)],[`Source build`,(0,C.jsx)(`code`,{children:t.source_fp||`—`},`s`)],[`Match?`,t.verdict||`—`],[`License`,e.license]];return(0,C.jsxs)(`div`,{className:`detail-doc`,children:[(0,C.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,C.jsx)(`p`,{className:`sub`,style:{marginTop:4},children:`Live snapshot of the install behind this UI, plus where to go next.`}),(0,C.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:n.map(([e,t])=>(0,C.jsxs)(`div`,{className:`kv`,children:[(0,C.jsx)(`span`,{className:`k`,children:e}),(0,C.jsx)(`span`,{className:`v`,children:t??`—`})]},e))}),(0,C.jsxs)(`div`,{className:`row wrap gap-10`,style:{marginTop:18},children:[(0,C.jsxs)(`a`,{className:`btn ghost`,href:e.repo,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(o,{name:`external`}),e.repo_is_github?`GitHub repo`:`Source repo`]}),e.repo_is_github&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/issues`,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(o,{name:`external`}),`File an issue`]}),(0,C.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/blob/main/LICENSE`,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(o,{name:`external`}),`License`]})]})]})]})}function q(e){return e?.groups?.[0]?.pages?.[0]?.id||``}function J({data:e,error:t,overview:n,onAction:r}){if(t)return(0,C.jsx)(d,{error:t,style:{margin:18}});if(!e)return(0,C.jsx)(g,{label:`Loading page…`});switch(e.kind){case`markdown`:case`concept`:return(0,C.jsx)(k,{page:e,overview:n,onAction:r});case`map`:return(0,C.jsx)(B,{page:e,overview:n,onAction:r});case`cli`:return(0,C.jsx)(P,{page:e});case`glossary`:return(0,C.jsx)(F,{page:e});case`about`:return(0,C.jsx)(K,{page:e});default:return(0,C.jsxs)(`div`,{className:`empty`,children:[(0,C.jsx)(`div`,{className:`big`,children:`Unknown page kind`}),e.kind]})}}function Y(e,t){if(!e||!t)return null;for(let n of e.groups)if(n.pages.some(e=>e.id===t))return n;return null}function X({page:e,query:t,overview:n,onAction:o}){let[v,y]=i(c(n?.emit)),{data:b,error:x}=s(()=>r.docs(v),[v]),w=e||q(b),{data:T,error:E,loading:D}=s(()=>w?r.docsPage(w,v):Promise.resolve(null),[w,v]),{data:O}=s(()=>r.docsPage(`glossary`,v).catch(()=>null),[v],`docs:glossary`);(0,S.useEffect)(()=>{if(b&&w&&!b.groups.some(e=>e.pages.some(e=>e.id===w))){let e=q(b);e&&e!==w&&a(`#/docs/${encodeURIComponent(e)}`)}},[b,w]);let k=(Y(b,w)||b?.groups?.[0])?.id===p,A=(t||``).toLowerCase().trim();(0,S.useEffect)(()=>{k&&T?.id===w&&l(w)},[k,T,w]);let j=k?[...m(),w]:[],M=(0,S.useMemo)(()=>b?A?b.groups.map(e=>({...e,pages:e.pages.filter(t=>t.title.toLowerCase().includes(A)||e.label.toLowerCase().includes(A)||t.id.toLowerCase().includes(A))})).filter(e=>e.pages.length>0):b.groups:[],[b,A]);return x?(0,C.jsx)(d,{error:x}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`eyebrow`,children:`documentation`}),(0,C.jsx)(`h1`,{className:`h`,children:`Docs`}),(0,C.jsx)(`p`,{className:`sub`,children:`Start with Understand, then guides, concepts and reference. Pages and config that differ by host are filtered to your selected harness.`})]}),(0,C.jsx)(u,{"aria-label":`Harness`,children:_.map(e=>(0,C.jsx)(`button`,{className:v===e.id?`on`:``,onClick:()=>y(e.id),"aria-pressed":v===e.id,children:e.label},e.id))})]}),(0,C.jsxs)(`div`,{className:`docs-hb`,children:[(0,C.jsxs)(`nav`,{className:`card docs-nav`,"aria-label":`Docs pages`,children:[k&&!A?(0,C.jsx)(h,{menu:b,pageId:w,seen:j}):M.map(e=>(0,C.jsxs)(`div`,{className:`docs-group`,children:[(0,C.jsx)(`div`,{className:`docs-group-head`,children:e.label}),e.pages.map(e=>(0,C.jsx)(`button`,{className:`lib-row ${w===e.id?`on`:``}`,"aria-current":w===e.id?`page`:void 0,onClick:()=>a(`#/docs/${encodeURIComponent(e.id)}`),children:(0,C.jsx)(`div`,{className:`lr-name`,children:e.title})},e.id))]},e.id)),M.length===0&&b&&(0,C.jsxs)(`div`,{className:`empty`,style:{padding:32},children:[(0,C.jsx)(`div`,{className:`big`,children:`No matches`}),`Try another search.`]}),!b&&(0,C.jsx)(g,{label:`Loading docs…`})]}),(0,C.jsxs)(`div`,{className:`card docs-article`,children:[(0,C.jsx)(J,{data:D?null:T,error:E,overview:n,onAction:o},`${w}|${v}`),k&&!D&&(0,C.jsx)(f,{menu:b,pageId:w})]}),!D&&(0,C.jsx)(G,{body:T?.body,glossaryRows:O?.rows})]})]})}export{X as default};
@@ -1,2 +1,2 @@
1
- import{n as e,r as t,s as n}from"./sections-GalMS0Zv.js";import{i as r,t as i}from"./react-B9Z_tXRV.js";import{t as a}from"./drawable-CoIulEH2.js";import{B as o,C as s,R as c,W as l,q as u,w as d,z as f}from"./index-BMwSp8BP.js";import{t as p}from"./jobBuckets-Dbq8ZlWW.js";import{n as m}from"./Dashboard-C2ELBW-X.js";var h=n(r(),1),g=i(),_=12,v=120,y=[`#2BB673`,`#16A6A6`,`#E8A23B`,`#E07A5F`,`#8E7DBE`,`#5BD08A`,`#79856E`],b=650;function x({segments:e,size:t=186,stroke:n=26,caption:r=`capabilities`}){let i=e.reduce((e,t)=>e+t.value,0)||1,s=(0,h.useRef)(null),d=e.map(e=>e.value).join(`,`);(0,h.useLayoutEffect)(()=>{let t=s.current?.querySelectorAll(`path`);if(!t?.length||!f())return;let n=e.filter(e=>e.value>0).map(e=>e.value/i),r=n.map((e,t)=>n.slice(0,t).reduce((e,t)=>e+t,0)),c=a(t);l(c,{draw:`0 0`});let d=u(c,{draw:[`0 0`,`0 1`],duration:(e,t)=>Math.max(b*n[t],60),delay:(e,t)=>b*r[t],ease:`linear`});return o(d,b)},[d]);let p=t/2-n/2,m=t/2,_=t/2,v=[],y=0;for(let t of e)v.push(y),y+=t.value;return(0,g.jsxs)(`svg`,{width:t,height:t,viewBox:`0 0 ${t} ${t}`,children:[(0,g.jsx)(`circle`,{cx:m,cy:_,r:p,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:n}),(0,g.jsx)(`g`,{ref:s,children:e.map((e,t)=>{if(e.value/i<=0)return null;let r=v[t]/i*2*Math.PI-Math.PI/2,a=(v[t]+e.value)/i*2*Math.PI-Math.PI/2,o=m+p*Math.cos(r),s=_+p*Math.sin(r),c=m+p*Math.cos(a),l=_+p*Math.sin(a),u=+(a-r>Math.PI);return(0,g.jsx)(`path`,{d:`M ${o} ${s} A ${p} ${p} 0 ${u} 1 ${c} ${l}`,fill:`none`,stroke:e.color,strokeWidth:n,strokeLinecap:`butt`,children:(0,g.jsxs)(`title`,{children:[e.label,`: `,e.value]})},t)})}),(0,g.jsx)(`text`,{x:m,y:_-4,textAnchor:`middle`,className:`donut-c-num`,children:(0,g.jsx)(c,{value:i,duration:b})}),(0,g.jsx)(`text`,{x:m,y:_+16,textAnchor:`middle`,className:`donut-c-cap`,children:r})]})}function S(e){if(e.length<2)return e.length?`M${e[0][0]},${e[0][1]}`:``;let t=`M${e[0][0]},${e[0][1]}`;for(let n=0;n<e.length-1;n++){let r=e[n-1]||e[n],i=e[n],a=e[n+1],o=e[n+2]||a,s=i[0]+(a[0]-r[0])/6,c=i[1]+(a[1]-r[1])/6,l=a[0]-(o[0]-i[0])/6,u=a[1]-(o[1]-i[1])/6;t+=` C${s},${c} ${l},${u} ${a[0]},${a[1]}`}return t}function C({data:e,height:t=156,accent:n}){if(!e.length)return null;let r=t,i=Math.max(...e.map(e=>e.v),1)+1,a=e.length>1?588/(e.length-1):588,o=e.map((e,t)=>[6+t*a,r-6-e.v/i*(r-14-6)]),s=S(o),c=o[o.length-1],l=o[0],u=`${s} L${c[0]},${r} L${l[0]},${r} Z`;return(0,g.jsxs)(`svg`,{viewBox:`0 0 600 ${r}`,preserveAspectRatio:`none`,style:{width:`100%`,height:t,display:`block`,overflow:`visible`},children:[(0,g.jsx)(`defs`,{children:(0,g.jsxs)(`linearGradient`,{id:`b-grad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,g.jsx)(`stop`,{offset:`0`,stopColor:n,stopOpacity:`.28`}),(0,g.jsx)(`stop`,{offset:`1`,stopColor:n,stopOpacity:`0`})]})}),(0,g.jsx)(`path`,{d:u,fill:`url(#b-grad)`}),(0,g.jsx)(`path`,{d:s,fill:`none`,stroke:n,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`,vectorEffect:`non-scaling-stroke`}),(0,g.jsx)(`circle`,{cx:c[0],cy:c[1],r:`3.5`,fill:n,vectorEffect:`non-scaling-stroke`})]})}function w({label:e,value:t,sub:n,color:r,icon:i}){return(0,g.jsxs)(`div`,{className:`b-tile`,children:[(0,g.jsx)(`span`,{className:`b-tile-ic`,style:{background:`color-mix(in srgb, ${r} 18%, transparent)`,color:r},children:(0,g.jsx)(s,{name:i})}),(0,g.jsxs)(`div`,{className:`b-tile-body`,children:[(0,g.jsx)(`div`,{className:`b-tile-val`+(t===0?` zero`:``),children:t}),(0,g.jsx)(`div`,{className:`b-tile-label`,children:e})]}),(0,g.jsx)(`div`,{className:`b-tile-sub`,children:n})]})}function T({overview:n,sigil:r,jobs:i,doctor:a,onAction:o}){let l=n.counts||{},u=a?.groups||[],f=u.length>0,h=u.filter(e=>e.problems.length===0).length,b=u.length||1,S=m(n),T=d(n.diff),E=t.filter(e=>(l[e]||0)>0).map((t,n)=>({label:e[t].label,value:l[t]||0,color:y[n%y.length]})),D=E.reduce((e,t)=>e+t.value,0),O=p(i||[],10),k=O.reduce((e,t)=>e+t.v,0);return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`b-greet`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`div`,{className:`eyebrow`,children:`your harness`}),(0,g.jsx)(`h1`,{className:`h b-h`,children:S}),(0,g.jsx)(`p`,{className:`sub`,children:r||`A friendly read of every layer growing in your harness.`})]}),(0,g.jsxs)(`div`,{className:`row gap-8`,children:[(0,g.jsxs)(`button`,{className:`btn`,onClick:()=>o(`update`),children:[(0,g.jsx)(s,{name:`refresh`}),`Update`]}),(0,g.jsxs)(`button`,{className:`btn ghost`,onClick:()=>o(`build-all`),children:[(0,g.jsx)(s,{name:`build`}),`Rebuild`]})]})]}),(0,g.jsxs)(`div`,{className:`grid b-hero-grid mb-16`,children:[(0,g.jsxs)(`div`,{className:`card b-hero`,children:[(0,g.jsx)(`div`,{className:`b-hero-ring`,children:(0,g.jsx)(x,{segments:[{label:`pass`,value:h,color:y[0]},{label:`attention`,value:Math.max(b-h,0),color:y[2]}],size:168,stroke:20,caption:`checks`})}),(0,g.jsxs)(`div`,{className:`b-hero-side`,children:[(0,g.jsx)(`h3`,{className:`b-hero-title`,children:f?`${h} of ${b} checks pass`:`Running checks…`}),(0,g.jsxs)(`p`,{className:`sub`,children:[`One source, rendered into `,(0,g.jsx)(`code`,{children:n.target}),` and inherited by every repo on this machine.`]}),f&&(0,g.jsx)(`ul`,{className:`b-hero-checks`,children:u.map(e=>{let t=e.problems.length===0;return(0,g.jsxs)(`li`,{className:`b-hcheck ${t?`ok`:`bad`}`,title:t?`clean`:e.problems.join(`; `),children:[(0,g.jsx)(`span`,{className:`b-hcheck-mark`,children:t?`✓`:`!`}),(0,g.jsx)(`span`,{className:`b-hcheck-label`,children:e.label})]},e.label)})}),(0,g.jsxs)(`div`,{className:`b-chips`,children:[(0,g.jsxs)(`span`,{className:`b-chip`,children:[(0,g.jsx)(`b`,{style:{textTransform:`capitalize`},children:n.theme}),` voice`]}),(0,g.jsx)(`span`,{className:`b-chip`,children:(0,g.jsx)(`b`,{children:n.emit})}),(0,g.jsxs)(`span`,{className:`b-chip`,children:[`built `,(0,g.jsx)(`b`,{children:n.build_time||`unknown`})]})]})]})]}),(0,g.jsxs)(`div`,{className:`b-tiles`,children:[(0,g.jsx)(w,{label:`Agents`,value:l.agents??`—`,sub:`specialists`,color:y[0],icon:`layers`}),(0,g.jsx)(w,{label:`Skills`,value:l.skills??`—`,sub:`workflows`,color:y[1],icon:`skill`}),(0,g.jsx)(w,{label:`Invariants`,value:l.laws??`—`,sub:l.doctrines?`${l.doctrines.active}/${l.doctrines.total} packs · ${l.doctrines.rules} rules`:`all upheld`,color:y[2],icon:`law`}),(0,g.jsx)(w,{label:`Edits`,value:T,sub:`to graft`,color:y[3],icon:`changes`})]})]}),(0,g.jsxs)(`div`,{className:`grid split-even mb-16`,children:[(0,g.jsxs)(`div`,{className:`card pad-lg b-mix-card`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Capability mix`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`tick`,children:[D,` total`]})})]}),(0,g.jsxs)(`div`,{className:`b-mix`,children:[(0,g.jsx)(x,{segments:E,size:186,stroke:26}),(0,g.jsx)(`div`,{className:`b-legend`,children:E.map(e=>(0,g.jsxs)(`div`,{className:`b-leg-row`,children:[(0,g.jsx)(`span`,{className:`b-leg-dot`,style:{background:e.color}}),(0,g.jsx)(`span`,{className:`b-leg-name`,children:e.label}),(0,g.jsx)(`span`,{className:`b-leg-bar`,children:(0,g.jsx)(`i`,{style:{width:`${e.value/D*100}%`,background:e.color}})}),(0,g.jsx)(`span`,{className:`b-leg-val`,children:e.value})]},e.label))})]})]}),(0,g.jsxs)(`div`,{className:`card pad-lg`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Recent runs`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`badge ok`,children:[(0,g.jsx)(`span`,{className:`dot`}),`job log`]})})]}),(0,g.jsxs)(`div`,{className:`b-stat-lead`,children:[(0,g.jsx)(`span`,{className:`b-stat-big`,children:(0,g.jsx)(c,{value:k})}),(0,g.jsxs)(`span`,{className:`b-stat-cap`,children:[`runs in the last 10 days · `,h,`/`,b,` checks pass now`]})]}),(0,g.jsx)(C,{data:O,accent:y[0],height:156})]})]}),(0,g.jsxs)(`div`,{className:`card pad-lg`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Recent activity`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`tick`,children:[`last `,Math.min(i?.length||0,12),` runs`]})})]}),(0,g.jsxs)(`div`,{className:`b-timeline`,children:[(i||[]).slice(0,_).map(e=>{let t=e.status===`done`,n=e.status===`failed`?`warn`:t?`ok`:`acc`;return(0,g.jsxs)(`div`,{className:`b-tl-row`,children:[(0,g.jsx)(`span`,{className:`b-tl-node ${n}`}),(0,g.jsxs)(`div`,{className:`b-tl-body`,children:[(0,g.jsx)(`b`,{children:e.action}),e.output?`: ${e.output.split(`
1
+ import{n as e,r as t,s as n}from"./sections-GalMS0Zv.js";import{i as r,t as i}from"./react-B9Z_tXRV.js";import{t as a}from"./drawable-Du_PZrQj.js";import{G as o,O as s,Q as c,U as l,W as u,Y as d,k as f}from"./index-CNFH7o55.js";import{t as p}from"./jobBuckets-Dbq8ZlWW.js";import{n as m}from"./Dashboard-B6_sSCHi.js";var h=n(r(),1),g=i(),_=12,v=120,y=[`#2BB673`,`#16A6A6`,`#E8A23B`,`#E07A5F`,`#8E7DBE`,`#5BD08A`,`#79856E`],b=650;function x({segments:e,size:t=186,stroke:n=26,caption:r=`capabilities`}){let i=e.reduce((e,t)=>e+t.value,0)||1,s=(0,h.useRef)(null),f=e.map(e=>e.value).join(`,`);(0,h.useLayoutEffect)(()=>{let t=s.current?.querySelectorAll(`path`);if(!t?.length||!u())return;let n=e.filter(e=>e.value>0).map(e=>e.value/i),r=n.map((e,t)=>n.slice(0,t).reduce((e,t)=>e+t,0)),l=a(t);d(l,{draw:`0 0`});let f=c(l,{draw:[`0 0`,`0 1`],duration:(e,t)=>Math.max(b*n[t],60),delay:(e,t)=>b*r[t],ease:`linear`});return o(f,b)},[f]);let p=t/2-n/2,m=t/2,_=t/2,v=[],y=0;for(let t of e)v.push(y),y+=t.value;return(0,g.jsxs)(`svg`,{width:t,height:t,viewBox:`0 0 ${t} ${t}`,children:[(0,g.jsx)(`circle`,{cx:m,cy:_,r:p,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:n}),(0,g.jsx)(`g`,{ref:s,children:e.map((e,t)=>{if(e.value/i<=0)return null;let r=v[t]/i*2*Math.PI-Math.PI/2,a=(v[t]+e.value)/i*2*Math.PI-Math.PI/2,o=m+p*Math.cos(r),s=_+p*Math.sin(r),c=m+p*Math.cos(a),l=_+p*Math.sin(a),u=+(a-r>Math.PI);return(0,g.jsx)(`path`,{d:`M ${o} ${s} A ${p} ${p} 0 ${u} 1 ${c} ${l}`,fill:`none`,stroke:e.color,strokeWidth:n,strokeLinecap:`butt`,children:(0,g.jsxs)(`title`,{children:[e.label,`: `,e.value]})},t)})}),(0,g.jsx)(`text`,{x:m,y:_-4,textAnchor:`middle`,className:`donut-c-num`,children:(0,g.jsx)(l,{value:i,duration:b})}),(0,g.jsx)(`text`,{x:m,y:_+16,textAnchor:`middle`,className:`donut-c-cap`,children:r})]})}function S(e){if(e.length<2)return e.length?`M${e[0][0]},${e[0][1]}`:``;let t=`M${e[0][0]},${e[0][1]}`;for(let n=0;n<e.length-1;n++){let r=e[n-1]||e[n],i=e[n],a=e[n+1],o=e[n+2]||a,s=i[0]+(a[0]-r[0])/6,c=i[1]+(a[1]-r[1])/6,l=a[0]-(o[0]-i[0])/6,u=a[1]-(o[1]-i[1])/6;t+=` C${s},${c} ${l},${u} ${a[0]},${a[1]}`}return t}function C({data:e,height:t=156,accent:n}){if(!e.length)return null;let r=t,i=Math.max(...e.map(e=>e.v),1)+1,a=e.length>1?588/(e.length-1):588,o=e.map((e,t)=>[6+t*a,r-6-e.v/i*(r-14-6)]),s=S(o),c=o[o.length-1],l=o[0],u=`${s} L${c[0]},${r} L${l[0]},${r} Z`;return(0,g.jsxs)(`svg`,{viewBox:`0 0 600 ${r}`,preserveAspectRatio:`none`,style:{width:`100%`,height:t,display:`block`,overflow:`visible`},children:[(0,g.jsx)(`defs`,{children:(0,g.jsxs)(`linearGradient`,{id:`b-grad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,g.jsx)(`stop`,{offset:`0`,stopColor:n,stopOpacity:`.28`}),(0,g.jsx)(`stop`,{offset:`1`,stopColor:n,stopOpacity:`0`})]})}),(0,g.jsx)(`path`,{d:u,fill:`url(#b-grad)`}),(0,g.jsx)(`path`,{d:s,fill:`none`,stroke:n,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`,vectorEffect:`non-scaling-stroke`}),(0,g.jsx)(`circle`,{cx:c[0],cy:c[1],r:`3.5`,fill:n,vectorEffect:`non-scaling-stroke`})]})}function w({label:e,value:t,sub:n,color:r,icon:i}){return(0,g.jsxs)(`div`,{className:`b-tile`,children:[(0,g.jsx)(`span`,{className:`b-tile-ic`,style:{background:`color-mix(in srgb, ${r} 18%, transparent)`,color:r},children:(0,g.jsx)(s,{name:i})}),(0,g.jsxs)(`div`,{className:`b-tile-body`,children:[(0,g.jsx)(`div`,{className:`b-tile-val`+(t===0?` zero`:``),children:t}),(0,g.jsx)(`div`,{className:`b-tile-label`,children:e})]}),(0,g.jsx)(`div`,{className:`b-tile-sub`,children:n})]})}function T({overview:n,sigil:r,jobs:i,doctor:a,onAction:o}){let c=n.counts||{},u=a?.groups||[],d=u.length>0,h=u.filter(e=>e.problems.length===0).length,b=u.length||1,S=m(n),T=f(n.diff),E=t.filter(e=>(c[e]||0)>0).map((t,n)=>({label:e[t].label,value:c[t]||0,color:y[n%y.length]})),D=E.reduce((e,t)=>e+t.value,0),O=p(i||[],10),k=O.reduce((e,t)=>e+t.v,0);return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(`div`,{className:`b-greet`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`div`,{className:`eyebrow`,children:`your harness`}),(0,g.jsx)(`h1`,{className:`h b-h`,children:S}),(0,g.jsx)(`p`,{className:`sub`,children:r||`A friendly read of every layer growing in your harness.`})]}),(0,g.jsxs)(`div`,{className:`row gap-8`,children:[(0,g.jsxs)(`button`,{className:`btn`,onClick:()=>o(`update`),children:[(0,g.jsx)(s,{name:`refresh`}),`Update`]}),(0,g.jsxs)(`button`,{className:`btn ghost`,onClick:()=>o(`build-all`),children:[(0,g.jsx)(s,{name:`build`}),`Rebuild`]})]})]}),(0,g.jsxs)(`div`,{className:`grid b-hero-grid mb-16`,children:[(0,g.jsxs)(`div`,{className:`card b-hero`,children:[(0,g.jsx)(`div`,{className:`b-hero-ring`,children:(0,g.jsx)(x,{segments:[{label:`pass`,value:h,color:y[0]},{label:`attention`,value:Math.max(b-h,0),color:y[2]}],size:168,stroke:20,caption:`checks`})}),(0,g.jsxs)(`div`,{className:`b-hero-side`,children:[(0,g.jsx)(`h3`,{className:`b-hero-title`,children:d?`${h} of ${b} checks pass`:`Running checks…`}),(0,g.jsxs)(`p`,{className:`sub`,children:[`One source, rendered into `,(0,g.jsx)(`code`,{children:n.target}),` and inherited by every repo on this machine.`]}),d&&(0,g.jsx)(`ul`,{className:`b-hero-checks`,children:u.map(e=>{let t=e.problems.length===0;return(0,g.jsxs)(`li`,{className:`b-hcheck ${t?`ok`:`bad`}`,title:t?`clean`:e.problems.join(`; `),children:[(0,g.jsx)(`span`,{className:`b-hcheck-mark`,children:t?`✓`:`!`}),(0,g.jsx)(`span`,{className:`b-hcheck-label`,children:e.label})]},e.label)})}),(0,g.jsxs)(`div`,{className:`b-chips`,children:[(0,g.jsxs)(`span`,{className:`b-chip`,children:[(0,g.jsx)(`b`,{style:{textTransform:`capitalize`},children:n.theme}),` voice`]}),(0,g.jsx)(`span`,{className:`b-chip`,children:(0,g.jsx)(`b`,{children:n.emit})}),(0,g.jsxs)(`span`,{className:`b-chip`,children:[`built `,(0,g.jsx)(`b`,{children:n.build_time||`unknown`})]})]})]})]}),(0,g.jsxs)(`div`,{className:`b-tiles`,children:[(0,g.jsx)(w,{label:`Agents`,value:c.agents??`—`,sub:`specialists`,color:y[0],icon:`layers`}),(0,g.jsx)(w,{label:`Skills`,value:c.skills??`—`,sub:`workflows`,color:y[1],icon:`skill`}),(0,g.jsx)(w,{label:`Invariants`,value:c.laws??`—`,sub:c.doctrines?`${c.doctrines.active}/${c.doctrines.total} packs · ${c.doctrines.rules} rules`:`all upheld`,color:y[2],icon:`law`}),(0,g.jsx)(w,{label:`Edits`,value:T,sub:`to graft`,color:y[3],icon:`changes`})]})]}),(0,g.jsxs)(`div`,{className:`grid split-even mb-16`,children:[(0,g.jsxs)(`div`,{className:`card pad-lg b-mix-card`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Capability mix`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`tick`,children:[D,` total`]})})]}),(0,g.jsxs)(`div`,{className:`b-mix`,children:[(0,g.jsx)(x,{segments:E,size:186,stroke:26}),(0,g.jsx)(`div`,{className:`b-legend`,children:E.map(e=>(0,g.jsxs)(`div`,{className:`b-leg-row`,children:[(0,g.jsx)(`span`,{className:`b-leg-dot`,style:{background:e.color}}),(0,g.jsx)(`span`,{className:`b-leg-name`,children:e.label}),(0,g.jsx)(`span`,{className:`b-leg-bar`,children:(0,g.jsx)(`i`,{style:{width:`${e.value/D*100}%`,background:e.color}})}),(0,g.jsx)(`span`,{className:`b-leg-val`,children:e.value})]},e.label))})]})]}),(0,g.jsxs)(`div`,{className:`card pad-lg`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Recent runs`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`badge ok`,children:[(0,g.jsx)(`span`,{className:`dot`}),`job log`]})})]}),(0,g.jsxs)(`div`,{className:`b-stat-lead`,children:[(0,g.jsx)(`span`,{className:`b-stat-big`,children:(0,g.jsx)(l,{value:k})}),(0,g.jsxs)(`span`,{className:`b-stat-cap`,children:[`runs in the last 10 days · `,h,`/`,b,` checks pass now`]})]}),(0,g.jsx)(C,{data:O,accent:y[0],height:156})]})]}),(0,g.jsxs)(`div`,{className:`card pad-lg`,children:[(0,g.jsxs)(`div`,{className:`card-head`,children:[(0,g.jsx)(`h3`,{children:`Recent activity`}),(0,g.jsx)(`div`,{className:`right`,children:(0,g.jsxs)(`span`,{className:`tick`,children:[`last `,Math.min(i?.length||0,12),` runs`]})})]}),(0,g.jsxs)(`div`,{className:`b-timeline`,children:[(i||[]).slice(0,_).map(e=>{let t=e.status===`done`,n=e.status===`failed`?`warn`:t?`ok`:`acc`;return(0,g.jsxs)(`div`,{className:`b-tl-row`,children:[(0,g.jsx)(`span`,{className:`b-tl-node ${n}`}),(0,g.jsxs)(`div`,{className:`b-tl-body`,children:[(0,g.jsx)(`b`,{children:e.action}),e.output?`: ${e.output.split(`
2
2
  `)[0].slice(0,v)}`:``]}),(0,g.jsx)(`span`,{className:`b-tl-when`,children:e.duration?`${e.duration}s`:e.status})]},e.id)}),(!i||i.length===0)&&(0,g.jsxs)(`div`,{className:`b-tl-row`,children:[(0,g.jsx)(`span`,{className:`b-tl-node`}),(0,g.jsx)(`div`,{className:`b-tl-body sub`,children:`No runs yet. Trigger an action to populate this.`}),(0,g.jsx)(`span`,{className:`b-tl-when`,children:`—`})]})]})]})]})}export{T as default};