geneseed 3.9.0 → 3.10.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 (76) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/QUICKSTART.md +1 -1
  3. package/README.md +27 -28
  4. package/SETUP.md +7 -42
  5. package/SHIPPED.md +2 -2
  6. package/adapters/bob/README.md +17 -1
  7. package/adapters/openclaude/README.md +1 -1
  8. package/adapters/opencode/plugins/geneseed-context.js +78 -8
  9. package/bin/geneseed-hook.mjs +1 -1
  10. package/docs/candidate-hosts.md +12 -5
  11. package/docs/token-footprint.md +26 -21
  12. package/docs/web/claude-hooks.md +1 -1
  13. package/docs/web/collaboration.md +1 -1
  14. package/docs/web/exclusions.md +0 -1
  15. package/docs/web/footprint.md +1 -1
  16. package/docs/web/harnesses.md +13 -13
  17. package/docs/web/install-quick.md +1 -1
  18. package/docs/web-ui.md +1 -1
  19. package/harness.config.json +1 -1
  20. package/js/README.md +4 -4
  21. package/js/build/driver.mjs +26 -95
  22. package/js/build/emit-claude.mjs +76 -81
  23. package/js/build/generate.mjs +0 -1
  24. package/js/build/render.mjs +4 -0
  25. package/js/build/stubs.mjs +18 -2
  26. package/js/cli-table.json +5 -5
  27. package/js/hosts/hooks.mjs +86 -54
  28. package/js/hosts/hosts.mjs +5 -21
  29. package/js/hosts/installs.mjs +4 -6
  30. package/js/hosts/mcp.mjs +3 -13
  31. package/js/hosts/native.mjs +27 -50
  32. package/js/hosts/opencode.mjs +1 -1
  33. package/js/hosts/settings.mjs +4 -78
  34. package/js/inspect/checks-authoring.mjs +4 -1
  35. package/js/inspect/checks-repo.mjs +45 -1
  36. package/js/inspect/diff.mjs +11 -3
  37. package/js/inspect/doctor.mjs +3 -3
  38. package/js/inspect/excludes.mjs +0 -4
  39. package/js/inspect/status.mjs +4 -4
  40. package/js/maintain/migrate.mjs +5 -5
  41. package/js/maintain/setup.mjs +3 -5
  42. package/js/maintain/uninstall.mjs +8 -42
  43. package/js/web/actions.mjs +4 -5
  44. package/js/web/api.mjs +4 -4
  45. package/package.json +1 -2
  46. package/src/AGENT.md.tmpl +69 -52
  47. package/src/laws/universal.md +3 -0
  48. package/src/ontology/universal.md +1 -1
  49. package/src/skills/daydream/SKILL.md +10 -3
  50. package/src/skills/daydream/VENDOR.md +10 -2
  51. package/src/skills/daydream/instructions.md +2 -2
  52. package/src/skills/explain-changes/SKILL.md +1 -1
  53. package/src/skills/explain-changes/VENDOR.md +1 -1
  54. package/src/skills/geneseed.md +1 -1
  55. package/src/skills/react-view-transitions/SKILL.md +1 -1
  56. package/src/skills/react-view-transitions/VENDOR.md +7 -2
  57. package/src/skills/token-report/SKILL.md +2 -3
  58. package/src/skills/token-report/VENDOR.md +2 -3
  59. package/src/skills/token-report/scripts/token_report.mjs +7 -121
  60. package/src/skills/workflow.md +1 -1
  61. package/web/dist/assets/{Activity-DAzV-qQj.js → Activity-BjVp522q.js} +1 -1
  62. package/web/dist/assets/{ActivityDetail-CwEwMtKl.js → ActivityDetail-8ep1bspW.js} +1 -1
  63. package/web/dist/assets/{Dashboard-C2ELBW-X.js → Dashboard-OkC_PCH6.js} +2 -2
  64. package/web/dist/assets/{Docs-iZrvQP8J.js → Docs-CKPWz00o.js} +1 -1
  65. package/web/dist/assets/{GreenhouseView-Bq1QmaGO.js → GreenhouseView-D0cbCJ5m.js} +1 -1
  66. package/web/dist/assets/{Installs-BiqR8xdO.js → Installs-BtGGdoTt.js} +1 -1
  67. package/web/dist/assets/{JournalView-6wilG5Zd.js → JournalView-Ckl4dmzR.js} +1 -1
  68. package/web/dist/assets/{Laws-D8YXD_XE.js → Laws-CLpdRRk8.js} +1 -1
  69. package/web/dist/assets/{Library-DwuTZ2-L.js → Library-wPPuKQrI.js} +1 -1
  70. package/web/dist/assets/{OperatorHudView-B-HVBqfY.js → OperatorHudView-CiAkAkQL.js} +1 -1
  71. package/web/dist/assets/{Personal-BbUTmZQR.js → Personal-D8CnDo9v.js} +1 -1
  72. package/web/dist/assets/{Tabs-_pjUFIEI.js → Tabs-B4HNrrCs.js} +1 -1
  73. package/web/dist/assets/{drawable-CoIulEH2.js → drawable-BiwaOo6x.js} +1 -1
  74. package/web/dist/assets/{index-BMwSp8BP.js → index-C1yil5j1.js} +2 -2
  75. package/web/dist/index.html +1 -1
  76. package/adapters/copilot/README.md +0 -105
@@ -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()`,
@@ -1 +1 @@
1
- import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{C as r,D as i,H as a,p as o,r as s,vt as c}from"./index-BMwSp8BP.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,a=e.todos,o=a&&a.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)(r,{name:`chevron`,className:`glyph act-chev`})]})]}),e.phase&&(0,_.jsxs)(`div`,{className:`row gap-8`,style:{marginTop:10,fontSize:14},children:[(0,_.jsx)(r,{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:[a&&a.total>0?(0,_.jsxs)(`span`,{className:`row gap-8 dim`,style:{fontSize:13},children:[(0,_.jsx)(l,{done:a.done,total:a.total}),`plan `,a.done,`/`,a.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,r]=(0,g.useState)(``);h(e=>c.activity().then(n=>{e()&&(t(n),r(``))},t=>{e()&&r(t.message)}),2e3,[]);let i=!e||e.enabled!==!1,l=e?.activity||[],u=a(),d=async()=>{let e=!i;try{let n=await c.activityToggle(e);t(e=>({...e||{},enabled:n.enabled,activity:n.enabled&&e?.activity||[]})),r(``)}catch(e){r(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:i?`tracking on`:`tracking off`}),(0,_.jsx)(`div`,{className:`sw-toggle${i?` on`:``}`,role:`switch`,"aria-checked":i,"aria-label":`Toggle activity tracking`,tabIndex:0,onClick:d,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),d())}})]})]}),(0,_.jsx)(s,{error:n,style:{marginBottom:12}}),e?i?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)(o,{label:`Reading live sessions…`})]})}export{y as default};
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{C as r,D as i,H as a,p as o,r as s,vt as c}from"./index-C1yil5j1.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,a=e.todos,o=a&&a.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)(r,{name:`chevron`,className:`glyph act-chev`})]})]}),e.phase&&(0,_.jsxs)(`div`,{className:`row gap-8`,style:{marginTop:10,fontSize:14},children:[(0,_.jsx)(r,{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:[a&&a.total>0?(0,_.jsxs)(`span`,{className:`row gap-8 dim`,style:{fontSize:13},children:[(0,_.jsx)(l,{done:a.done,total:a.total}),`plan `,a.done,`/`,a.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,r]=(0,g.useState)(``);h(e=>c.activity().then(n=>{e()&&(t(n),r(``))},t=>{e()&&r(t.message)}),2e3,[]);let i=!e||e.enabled!==!1,l=e?.activity||[],u=a(),d=async()=>{let e=!i;try{let n=await c.activityToggle(e);t(e=>({...e||{},enabled:n.enabled,activity:n.enabled&&e?.activity||[]})),r(``)}catch(e){r(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:i?`tracking on`:`tracking off`}),(0,_.jsx)(`div`,{className:`sw-toggle${i?` on`:``}`,role:`switch`,"aria-checked":i,"aria-label":`Toggle activity tracking`,tabIndex:0,onClick:d,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),d())}})]})]}),(0,_.jsx)(s,{error:n,style:{marginBottom:12}}),e?i?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)(o,{label:`Reading live sessions…`})]})}export{y as default};
@@ -1 +1 @@
1
- import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{C as r,D as i,p as a,vt as o}from"./index-BMwSp8BP.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=>o.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)(r,{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)(a,{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)(r,{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};
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{C as r,D as i,p as a,vt as o}from"./index-C1yil5j1.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=>o.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)(r,{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)(a,{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)(r,{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};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/GreenhouseView-Bq1QmaGO.js","assets/sections-GalMS0Zv.js","assets/react-B9Z_tXRV.js","assets/drawable-CoIulEH2.js","assets/index-BMwSp8BP.js","assets/index-CDPDk2vj.css","assets/jobBuckets-Dbq8ZlWW.js","assets/OperatorHudView-B-HVBqfY.js","assets/JournalView-6wilG5Zd.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{C as o,D as s,E as c,L as l,R as u,T as d,V as f,h as p,k as m,n as h,p as g,r as _,t as v,vt as y,w as b}from"./index-BMwSp8BP.js";var x=r(i(),1),S={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.`},C=e=>e.deployed?S[e.theme]||`Loaded & ready`:`Not deployed`,w=a();function T({value:e,size:t=232}){let n=f(e,1100)??0,r=t/2-14,i=2*Math.PI*r,a=i*(1-n);return(0,w.jsxs)(`div`,{className:`ring-wrap`,style:{width:t,height:t},children:[(0,w.jsxs)(`svg`,{viewBox:`0 0 ${t} ${t}`,children:[(0,w.jsx)(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:`10`}),(0,w.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,w.jsx)(`line`,{x1:c,y1:l,x2:u,y2:d,stroke:`var(--line-2)`,strokeWidth:`1`,opacity:i/48<n?.9:.25},i)})]}),(0,w.jsxs)(`div`,{className:`ring-center`,children:[(0,w.jsxs)(`div`,{className:`pct`,children:[Math.round(n*100),(0,w.jsx)(`span`,{style:{fontSize:20,color:`var(--text-3)`},children:`%`})]}),(0,w.jsx)(`div`,{className:`lbl`,children:`germination`})]})]})}function E({overview:e}){let t=b(e.diff),n=e.counts||{};return(0,w.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,w.jsxs)(`a`,{className:`kseg`,href:e.hash,title:`Open ${e.label}`,children:[(0,w.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:t==null?`—`:(0,w.jsx)(u,{value:t})}),(0,w.jsx)(`span`,{className:`kseg-l`,children:e.label})]},e.key)}),(0,w.jsx)(`div`,{className:`kseg-spacer`}),(0,w.jsxs)(`button`,{className:`kseg`+(t>0?` hot`:``),onClick:()=>l(`#/diff`),title:`Open changes`,children:[(0,w.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:(0,w.jsx)(u,{value:t})}),(0,w.jsx)(`span`,{className:`kseg-l`,children:`Local edits`}),t>0&&(0,w.jsx)(`span`,{className:`delta up`,children:`▲`})]})]})}function D({overview:t}){return(0,w.jsx)(`div`,{className:`genome`,children:n.map((n,r)=>{let i=e[n],a=t.counts?.[n];return(0,w.jsxs)(`div`,{className:`card gcell rise`,style:{"--i":r},onClick:()=>l(`#/section/`+n),children:[(0,w.jsxs)(`div`,{className:`gtop`,children:[(0,w.jsx)(`span`,{className:`gname`,children:i.label}),(0,w.jsx)(o,{name:i.icon,className:`gicon`})]}),(0,w.jsx)(`div`,{className:`gcount`+(a===0?` zero`:``),children:a==null?`—`:(0,w.jsx)(u,{value:a})}),(0,w.jsx)(`div`,{className:`gdesc`,children:i.desc})]},n)})})}function O({jobs:e}){if(!e||e.length===0)return(0,w.jsx)(`div`,{className:`feed`,children:(0,w.jsxs)(`div`,{className:`empty`,children:[(0,w.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,w.jsx)(`div`,{className:`feed`,children:n.map(e=>(0,w.jsxs)(`div`,{className:`feed-row`,children:[(0,w.jsx)(`span`,{className:`feed-dot ${t[e.status]||`ok`}`}),(0,w.jsx)(`span`,{className:`feed-txt`,children:(0,w.jsx)(`b`,{children:e.action})}),(0,w.jsxs)(`span`,{className:`feed-when`,children:[s(e.started),` ago`]})]},e.id))})}function k({overview:e,sigil:t,setup:r,jobs:i,onAction:a}){let s=C(e),l=c(e,r);return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`card pad-lg rise mb-16`,children:(0,w.jsxs)(`div`,{className:`hero`,children:[(0,w.jsx)(T,{value:l}),(0,w.jsxs)(`div`,{className:`hero-facts`,children:[(0,w.jsx)(`div`,{className:`ttl`,children:s}),t&&(0,w.jsxs)(`div`,{className:`voice-readout`,children:[(0,w.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,w.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,w.jsxs)(`p`,{className:`sub`,children:[`One source rendered into `,(0,w.jsx)(`code`,{children:e.target}),`. Every repo on this machine inherits it.`]}),(0,w.jsxs)(`div`,{className:`hero-chips`,children:[(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`voice`}),(0,w.jsx)(`span`,{className:`cv`,style:{textTransform:`capitalize`},children:e.theme})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`mode`}),(0,w.jsx)(`span`,{className:`cv`,children:e.emit})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`footprint`}),(0,w.jsx)(`span`,{className:`cv`,children:e.footprint})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`built`}),(0,w.jsx)(`span`,{className:`cv`,children:e.build_time||`unknown`})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`fp`}),(0,w.jsx)(`span`,{className:`cv`,children:r?.installed_fp||`—`})]})]}),(0,w.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,w.jsxs)(`button`,{className:`btn`,onClick:()=>a(`update`),children:[(0,w.jsx)(o,{name:`refresh`}),`Update`]}),(0,w.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`build-all`),children:[(0,w.jsx)(o,{name:`build`}),`Rebuild`]}),(0,w.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`doctor`),children:[(0,w.jsx)(o,{name:`doctor`}),`Run doctor`]})]})]})]})}),(0,w.jsx)(E,{overview:e}),(0,w.jsxs)(`div`,{className:`grid split-status`,children:[(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsxs)(`div`,{className:`card-head`,children:[(0,w.jsx)(`h3`,{children:`Capability genome`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsxs)(`span`,{className:`tick`,children:[n.length,` sections`]})})]}),(0,w.jsx)(D,{overview:e})]}),(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsxs)(`div`,{className:`card-head`,children:[(0,w.jsx)(`h3`,{children:`Recent activity`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsxs)(`span`,{className:`badge acc`,children:[(0,w.jsx)(`span`,{className:`dot`}),`live`]})})]}),(0,w.jsx)(O,{jobs:i})]})]})]})}function A({k:t,overview:n,max:r}){let i=e[t],a=n.counts?.[t]??0;return(0,w.jsxs)(`div`,{className:`strand`,children:[(0,w.jsxs)(`span`,{className:`strand-name`,children:[(0,w.jsx)(`span`,{className:`strand-dot`}),(0,w.jsx)(`a`,{href:`#/section/`+t,className:`strand-link stretch-link`,children:i.label})]}),(0,w.jsx)(`div`,{className:`hbar`,children:(0,w.jsx)(`i`,{style:{width:`${a/r*100}%`}})}),(0,w.jsx)(`span`,{className:`strand-val`,children:a})]})}function j({overview:e,sigil:t,setup:r,jobs:i}){let a=d(e.counts),o=r?.version_verdict||``,s=o.includes(`up to date`),c=b(e.diff),l=[[`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,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`mb-16`,children:(0,w.jsxs)(`div`,{className:`card pad-lg rise`,style:{position:`relative`,overflow:`hidden`},children:[(0,w.jsx)(`h2`,{className:`h`,style:{fontSize:22,margin:`0 0 18px`},children:`Gene-seed lineage`}),(0,w.jsxs)(`div`,{className:`lineage-track`,children:[(0,w.jsx)(`div`,{className:`spine`}),l.map(([e,t,n,r],i)=>(0,w.jsxs)(`div`,{className:`lineage-step`,children:[(0,w.jsx)(`span`,{className:`node ${r?`on`:``}`}),(0,w.jsx)(`div`,{className:`lt`,children:e}),(0,w.jsx)(`div`,{className:`ld`,children:t}),(0,w.jsx)(`div`,{className:`ltag`,children:n})]},i))]}),(0,w.jsx)(`hr`,{className:`hr`}),t&&(0,w.jsxs)(`div`,{className:`voice-readout`,style:{marginBottom:14},children:[(0,w.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,w.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,w.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,w.jsxs)(`span`,{className:`badge ${s?`ok`:`warn`}`,children:[(0,w.jsx)(`span`,{className:`dot`}),`in sync · `,o]}),(0,w.jsxs)(`span`,{className:`badge`,children:[(0,w.jsx)(`span`,{className:`dot`}),c,` local edits`]})]})]})}),(0,w.jsxs)(`div`,{className:`grid split-even`,children:[(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsxs)(`div`,{className:`card-head`,children:[(0,w.jsx)(`h3`,{children:`Genome strand`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsx)(`span`,{className:`tick`,children:`by volume`})})]}),n.map(t=>(0,w.jsx)(A,{k:t,overview:e,max:a},t))]}),(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsx)(`div`,{className:`card-head`,children:(0,w.jsx)(`h3`,{children:`Recent activity`})}),(0,w.jsx)(O,{jobs:i})]})]})]})}function M({overview:t,setup:r,jobs:i}){let a=n.reduce((e,n)=>e+(t.counts?.[n]??0),0),o=d(t.counts),s=t.doctor?.ok,c=t.doctor?.problems?.length??0,l=b(t.diff);return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`card pad-md rise mb-16`,children:(0,w.jsx)(`div`,{className:`row wrap between gap-16`,children:(0,w.jsxs)(`div`,{className:`row`,style:{gap:20,flexWrap:`wrap`},children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`status`}),(0,w.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:(0,w.jsxs)(`span`,{className:`badge ${t.deployed?`ok`:`warn`}`,children:[(0,w.jsx)(`span`,{className:`dot`}),t.deployed?`deployed`:`not deployed`]})})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`voice`}),(0,w.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6,textTransform:`capitalize`},children:t.theme})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`mode`}),(0,w.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6},children:t.emit})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`fingerprint`}),(0,w.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6,color:`var(--accent)`},children:r?.installed_fp||`—`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`doctor`}),(0,w.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:s?(0,w.jsxs)(`span`,{className:`badge ok`,children:[(0,w.jsx)(`span`,{className:`dot`}),`clean`]}):(0,w.jsxs)(`span`,{className:`badge warn`,children:[(0,w.jsx)(`span`,{className:`dot`}),c,` issue`,c===1?``:`s`]})})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`edits`}),(0,w.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6},children:l})]})]})})}),(0,w.jsxs)(`div`,{className:`grid split-operator`,children:[(0,w.jsxs)(`div`,{className:`card rise`,style:{"--i":1},children:[(0,w.jsxs)(`div`,{className:`card-head pad-lg`,style:{padding:`18px 20px 0`,marginBottom:14},children:[(0,w.jsx)(`h3`,{children:`Sections`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsxs)(`span`,{className:`tick`,children:[a,` entries total`]})})]}),(0,w.jsxs)(`table`,{className:`tbl`,children:[(0,w.jsx)(`thead`,{children:(0,w.jsxs)(`tr`,{children:[(0,w.jsx)(`th`,{children:`Section`}),(0,w.jsx)(`th`,{children:`Detail`}),(0,w.jsx)(`th`,{style:{width:130},children:`Share`}),(0,w.jsx)(`th`,{className:`num`,children:`Count`})]})}),(0,w.jsx)(`tbody`,{children:n.map(n=>{let r=e[n],i=t.counts?.[n]??0;return(0,w.jsxs)(`tr`,{className:`clickable`,children:[(0,w.jsx)(`td`,{className:`name`,children:(0,w.jsx)(`a`,{href:`#/section/`+n,className:`stretch-link`,children:r.label})}),(0,w.jsx)(`td`,{className:`muted`,children:r.desc}),(0,w.jsx)(`td`,{children:(0,w.jsx)(`div`,{className:`hbar`,children:(0,w.jsx)(`i`,{style:{width:`${i/o*100}%`}})})}),(0,w.jsx)(`td`,{className:`num`,children:i})]},n)})})]})]}),(0,w.jsxs)(`div`,{className:`card pad-lg rise`,style:{"--i":2},children:[(0,w.jsx)(`div`,{className:`card-head`,children:(0,w.jsx)(`h3`,{children:`Run log`})}),(0,w.jsx)(O,{jobs:i})]})]})]})}var N=t({default:()=>L}),P=(0,x.lazy)(()=>v(()=>import(`./GreenhouseView-Bq1QmaGO.js`),__vite__mapDeps([0,1,2,3,4,5,6]))),F=(0,x.lazy)(()=>v(()=>import(`./OperatorHudView-B-HVBqfY.js`),__vite__mapDeps([7,1,2,4,5,6]))),I=(0,x.lazy)(()=>v(()=>import(`./JournalView-6wilG5Zd.js`),__vite__mapDeps([8,1,2,3,4,5])));function L({overview:e,overviewError:t,onRetry:n,themes:r,setup:i,runs:a,onAction:o,layout:s=`cultivar`,dataRev:c}){let l=s,[u,d]=(0,x.useState)(`status`),f=e&&r.find(t=>t.name===e.theme)?.sigil||``,{data:v}=m(()=>l===`greenhouse`||l===`operator`?y.doctor().catch(()=>null):Promise.resolve(null),[l,c]),{data:b}=m(()=>l===`journal`?y.recent().catch(()=>null):Promise.resolve(null),[l,c]);return e?e.deployed?u===`status`&&l===`journal`?(0,w.jsx)(x.Suspense,{fallback:(0,w.jsx)(g,{}),children:(0,w.jsx)(I,{overview:e,recent:b,onAction:o,onDirection:d,dataRev:c})}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`head-row`,children:(0,w.jsx)(p,{"aria-label":`Dashboard view`,children:[[`status`,`Status`],[`lineage`,`Lineage`],[`operator`,`Operator`]].map(([e,t])=>(0,w.jsx)(`button`,{className:u===e?`on`:``,onClick:()=>d(e),"aria-pressed":u===e,children:t},e))})}),(0,w.jsxs)(`div`,{className:`view-in`,children:[u===`status`&&l===`cultivar`&&(0,w.jsx)(k,{overview:e,sigil:f,setup:i,jobs:a,onAction:o}),u===`status`&&l===`greenhouse`&&(0,w.jsx)(x.Suspense,{fallback:(0,w.jsx)(g,{}),children:(0,w.jsx)(P,{overview:e,sigil:f,jobs:a,doctor:v,onAction:o})}),u===`status`&&l===`operator`&&(0,w.jsx)(x.Suspense,{fallback:(0,w.jsx)(g,{}),children:(0,w.jsx)(F,{overview:e,jobs:a,doctor:v,onAction:o})}),u===`lineage`&&(0,w.jsx)(j,{overview:e,sigil:f,setup:i,jobs:a}),u===`operator`&&(0,w.jsx)(M,{overview:e,setup:i,jobs:a})]},u)]}):(0,w.jsx)(h,{onAction:o}):t?(0,w.jsxs)(`div`,{children:[(0,w.jsx)(_,{error:`Could not load the harness overview: ${t}`}),(0,w.jsx)(`button`,{className:`btn`,onClick:n,children:`Retry`})]}):(0,w.jsx)(g,{})}export{L as default,C as n,N as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/GreenhouseView-D0cbCJ5m.js","assets/sections-GalMS0Zv.js","assets/react-B9Z_tXRV.js","assets/drawable-BiwaOo6x.js","assets/index-C1yil5j1.js","assets/index-CDPDk2vj.css","assets/jobBuckets-Dbq8ZlWW.js","assets/OperatorHudView-CiAkAkQL.js","assets/JournalView-Ckl4dmzR.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{C as o,D as s,E as c,L as l,R as u,T as d,V as f,h as p,k as m,n as h,p as g,r as _,t as v,vt as y,w as b}from"./index-C1yil5j1.js";var x=r(i(),1),S={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.`},C=e=>e.deployed?S[e.theme]||`Loaded & ready`:`Not deployed`,w=a();function T({value:e,size:t=232}){let n=f(e,1100)??0,r=t/2-14,i=2*Math.PI*r,a=i*(1-n);return(0,w.jsxs)(`div`,{className:`ring-wrap`,style:{width:t,height:t},children:[(0,w.jsxs)(`svg`,{viewBox:`0 0 ${t} ${t}`,children:[(0,w.jsx)(`circle`,{cx:t/2,cy:t/2,r,fill:`none`,stroke:`var(--surface-3)`,strokeWidth:`10`}),(0,w.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,w.jsx)(`line`,{x1:c,y1:l,x2:u,y2:d,stroke:`var(--line-2)`,strokeWidth:`1`,opacity:i/48<n?.9:.25},i)})]}),(0,w.jsxs)(`div`,{className:`ring-center`,children:[(0,w.jsxs)(`div`,{className:`pct`,children:[Math.round(n*100),(0,w.jsx)(`span`,{style:{fontSize:20,color:`var(--text-3)`},children:`%`})]}),(0,w.jsx)(`div`,{className:`lbl`,children:`germination`})]})]})}function E({overview:e}){let t=b(e.diff),n=e.counts||{};return(0,w.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,w.jsxs)(`a`,{className:`kseg`,href:e.hash,title:`Open ${e.label}`,children:[(0,w.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:t==null?`—`:(0,w.jsx)(u,{value:t})}),(0,w.jsx)(`span`,{className:`kseg-l`,children:e.label})]},e.key)}),(0,w.jsx)(`div`,{className:`kseg-spacer`}),(0,w.jsxs)(`button`,{className:`kseg`+(t>0?` hot`:``),onClick:()=>l(`#/diff`),title:`Open changes`,children:[(0,w.jsx)(`span`,{className:`kseg-n`+(t===0?` zero`:``),children:(0,w.jsx)(u,{value:t})}),(0,w.jsx)(`span`,{className:`kseg-l`,children:`Local edits`}),t>0&&(0,w.jsx)(`span`,{className:`delta up`,children:`▲`})]})]})}function D({overview:t}){return(0,w.jsx)(`div`,{className:`genome`,children:n.map((n,r)=>{let i=e[n],a=t.counts?.[n];return(0,w.jsxs)(`div`,{className:`card gcell rise`,style:{"--i":r},onClick:()=>l(`#/section/`+n),children:[(0,w.jsxs)(`div`,{className:`gtop`,children:[(0,w.jsx)(`span`,{className:`gname`,children:i.label}),(0,w.jsx)(o,{name:i.icon,className:`gicon`})]}),(0,w.jsx)(`div`,{className:`gcount`+(a===0?` zero`:``),children:a==null?`—`:(0,w.jsx)(u,{value:a})}),(0,w.jsx)(`div`,{className:`gdesc`,children:i.desc})]},n)})})}function O({jobs:e}){if(!e||e.length===0)return(0,w.jsx)(`div`,{className:`feed`,children:(0,w.jsxs)(`div`,{className:`empty`,children:[(0,w.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,w.jsx)(`div`,{className:`feed`,children:n.map(e=>(0,w.jsxs)(`div`,{className:`feed-row`,children:[(0,w.jsx)(`span`,{className:`feed-dot ${t[e.status]||`ok`}`}),(0,w.jsx)(`span`,{className:`feed-txt`,children:(0,w.jsx)(`b`,{children:e.action})}),(0,w.jsxs)(`span`,{className:`feed-when`,children:[s(e.started),` ago`]})]},e.id))})}function k({overview:e,sigil:t,setup:r,jobs:i,onAction:a}){let s=C(e),l=c(e,r);return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`card pad-lg rise mb-16`,children:(0,w.jsxs)(`div`,{className:`hero`,children:[(0,w.jsx)(T,{value:l}),(0,w.jsxs)(`div`,{className:`hero-facts`,children:[(0,w.jsx)(`div`,{className:`ttl`,children:s}),t&&(0,w.jsxs)(`div`,{className:`voice-readout`,children:[(0,w.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,w.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,w.jsxs)(`p`,{className:`sub`,children:[`One source rendered into `,(0,w.jsx)(`code`,{children:e.target}),`. Every repo on this machine inherits it.`]}),(0,w.jsxs)(`div`,{className:`hero-chips`,children:[(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`voice`}),(0,w.jsx)(`span`,{className:`cv`,style:{textTransform:`capitalize`},children:e.theme})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`mode`}),(0,w.jsx)(`span`,{className:`cv`,children:e.emit})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`footprint`}),(0,w.jsx)(`span`,{className:`cv`,children:e.footprint})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`built`}),(0,w.jsx)(`span`,{className:`cv`,children:e.build_time||`unknown`})]}),(0,w.jsxs)(`span`,{className:`chip`,children:[(0,w.jsx)(`span`,{className:`ck`,children:`fp`}),(0,w.jsx)(`span`,{className:`cv`,children:r?.installed_fp||`—`})]})]}),(0,w.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,w.jsxs)(`button`,{className:`btn`,onClick:()=>a(`update`),children:[(0,w.jsx)(o,{name:`refresh`}),`Update`]}),(0,w.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`build-all`),children:[(0,w.jsx)(o,{name:`build`}),`Rebuild`]}),(0,w.jsxs)(`button`,{className:`btn ghost`,onClick:()=>a(`doctor`),children:[(0,w.jsx)(o,{name:`doctor`}),`Run doctor`]})]})]})]})}),(0,w.jsx)(E,{overview:e}),(0,w.jsxs)(`div`,{className:`grid split-status`,children:[(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsxs)(`div`,{className:`card-head`,children:[(0,w.jsx)(`h3`,{children:`Capability genome`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsxs)(`span`,{className:`tick`,children:[n.length,` sections`]})})]}),(0,w.jsx)(D,{overview:e})]}),(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsxs)(`div`,{className:`card-head`,children:[(0,w.jsx)(`h3`,{children:`Recent activity`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsxs)(`span`,{className:`badge acc`,children:[(0,w.jsx)(`span`,{className:`dot`}),`live`]})})]}),(0,w.jsx)(O,{jobs:i})]})]})]})}function A({k:t,overview:n,max:r}){let i=e[t],a=n.counts?.[t]??0;return(0,w.jsxs)(`div`,{className:`strand`,children:[(0,w.jsxs)(`span`,{className:`strand-name`,children:[(0,w.jsx)(`span`,{className:`strand-dot`}),(0,w.jsx)(`a`,{href:`#/section/`+t,className:`strand-link stretch-link`,children:i.label})]}),(0,w.jsx)(`div`,{className:`hbar`,children:(0,w.jsx)(`i`,{style:{width:`${a/r*100}%`}})}),(0,w.jsx)(`span`,{className:`strand-val`,children:a})]})}function j({overview:e,sigil:t,setup:r,jobs:i}){let a=d(e.counts),o=r?.version_verdict||``,s=o.includes(`up to date`),c=b(e.diff),l=[[`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,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`mb-16`,children:(0,w.jsxs)(`div`,{className:`card pad-lg rise`,style:{position:`relative`,overflow:`hidden`},children:[(0,w.jsx)(`h2`,{className:`h`,style:{fontSize:22,margin:`0 0 18px`},children:`Gene-seed lineage`}),(0,w.jsxs)(`div`,{className:`lineage-track`,children:[(0,w.jsx)(`div`,{className:`spine`}),l.map(([e,t,n,r],i)=>(0,w.jsxs)(`div`,{className:`lineage-step`,children:[(0,w.jsx)(`span`,{className:`node ${r?`on`:``}`}),(0,w.jsx)(`div`,{className:`lt`,children:e}),(0,w.jsx)(`div`,{className:`ld`,children:t}),(0,w.jsx)(`div`,{className:`ltag`,children:n})]},i))]}),(0,w.jsx)(`hr`,{className:`hr`}),t&&(0,w.jsxs)(`div`,{className:`voice-readout`,style:{marginBottom:14},children:[(0,w.jsx)(`span`,{className:`vr-cur`,children:`▕`}),(0,w.jsx)(`span`,{className:`vr-txt`,children:t})]},e.theme),(0,w.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,w.jsxs)(`span`,{className:`badge ${s?`ok`:`warn`}`,children:[(0,w.jsx)(`span`,{className:`dot`}),`in sync · `,o]}),(0,w.jsxs)(`span`,{className:`badge`,children:[(0,w.jsx)(`span`,{className:`dot`}),c,` local edits`]})]})]})}),(0,w.jsxs)(`div`,{className:`grid split-even`,children:[(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsxs)(`div`,{className:`card-head`,children:[(0,w.jsx)(`h3`,{children:`Genome strand`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsx)(`span`,{className:`tick`,children:`by volume`})})]}),n.map(t=>(0,w.jsx)(A,{k:t,overview:e,max:a},t))]}),(0,w.jsxs)(`div`,{className:`card pad-lg`,children:[(0,w.jsx)(`div`,{className:`card-head`,children:(0,w.jsx)(`h3`,{children:`Recent activity`})}),(0,w.jsx)(O,{jobs:i})]})]})]})}function M({overview:t,setup:r,jobs:i}){let a=n.reduce((e,n)=>e+(t.counts?.[n]??0),0),o=d(t.counts),s=t.doctor?.ok,c=t.doctor?.problems?.length??0,l=b(t.diff);return(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`card pad-md rise mb-16`,children:(0,w.jsx)(`div`,{className:`row wrap between gap-16`,children:(0,w.jsxs)(`div`,{className:`row`,style:{gap:20,flexWrap:`wrap`},children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`status`}),(0,w.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:(0,w.jsxs)(`span`,{className:`badge ${t.deployed?`ok`:`warn`}`,children:[(0,w.jsx)(`span`,{className:`dot`}),t.deployed?`deployed`:`not deployed`]})})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`voice`}),(0,w.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6,textTransform:`capitalize`},children:t.theme})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`mode`}),(0,w.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6},children:t.emit})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`fingerprint`}),(0,w.jsx)(`div`,{className:`mono`,style:{fontSize:14,marginTop:6,color:`var(--accent)`},children:r?.installed_fp||`—`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`doctor`}),(0,w.jsx)(`div`,{className:`row`,style:{gap:8,marginTop:4},children:s?(0,w.jsxs)(`span`,{className:`badge ok`,children:[(0,w.jsx)(`span`,{className:`dot`}),`clean`]}):(0,w.jsxs)(`span`,{className:`badge warn`,children:[(0,w.jsx)(`span`,{className:`dot`}),c,` issue`,c===1?``:`s`]})})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`tick`,children:`edits`}),(0,w.jsx)(`div`,{className:`metric`,style:{fontSize:18,marginTop:6},children:l})]})]})})}),(0,w.jsxs)(`div`,{className:`grid split-operator`,children:[(0,w.jsxs)(`div`,{className:`card rise`,style:{"--i":1},children:[(0,w.jsxs)(`div`,{className:`card-head pad-lg`,style:{padding:`18px 20px 0`,marginBottom:14},children:[(0,w.jsx)(`h3`,{children:`Sections`}),(0,w.jsx)(`div`,{className:`right`,children:(0,w.jsxs)(`span`,{className:`tick`,children:[a,` entries total`]})})]}),(0,w.jsxs)(`table`,{className:`tbl`,children:[(0,w.jsx)(`thead`,{children:(0,w.jsxs)(`tr`,{children:[(0,w.jsx)(`th`,{children:`Section`}),(0,w.jsx)(`th`,{children:`Detail`}),(0,w.jsx)(`th`,{style:{width:130},children:`Share`}),(0,w.jsx)(`th`,{className:`num`,children:`Count`})]})}),(0,w.jsx)(`tbody`,{children:n.map(n=>{let r=e[n],i=t.counts?.[n]??0;return(0,w.jsxs)(`tr`,{className:`clickable`,children:[(0,w.jsx)(`td`,{className:`name`,children:(0,w.jsx)(`a`,{href:`#/section/`+n,className:`stretch-link`,children:r.label})}),(0,w.jsx)(`td`,{className:`muted`,children:r.desc}),(0,w.jsx)(`td`,{children:(0,w.jsx)(`div`,{className:`hbar`,children:(0,w.jsx)(`i`,{style:{width:`${i/o*100}%`}})})}),(0,w.jsx)(`td`,{className:`num`,children:i})]},n)})})]})]}),(0,w.jsxs)(`div`,{className:`card pad-lg rise`,style:{"--i":2},children:[(0,w.jsx)(`div`,{className:`card-head`,children:(0,w.jsx)(`h3`,{children:`Run log`})}),(0,w.jsx)(O,{jobs:i})]})]})]})}var N=t({default:()=>L}),P=(0,x.lazy)(()=>v(()=>import(`./GreenhouseView-D0cbCJ5m.js`),__vite__mapDeps([0,1,2,3,4,5,6]))),F=(0,x.lazy)(()=>v(()=>import(`./OperatorHudView-CiAkAkQL.js`),__vite__mapDeps([7,1,2,4,5,6]))),I=(0,x.lazy)(()=>v(()=>import(`./JournalView-Ckl4dmzR.js`),__vite__mapDeps([8,1,2,3,4,5])));function L({overview:e,overviewError:t,onRetry:n,themes:r,setup:i,runs:a,onAction:o,layout:s=`cultivar`,dataRev:c}){let l=s,[u,d]=(0,x.useState)(`status`),f=e&&r.find(t=>t.name===e.theme)?.sigil||``,{data:v}=m(()=>l===`greenhouse`||l===`operator`?y.doctor().catch(()=>null):Promise.resolve(null),[l,c]),{data:b}=m(()=>l===`journal`?y.recent().catch(()=>null):Promise.resolve(null),[l,c]);return e?e.deployed?u===`status`&&l===`journal`?(0,w.jsx)(x.Suspense,{fallback:(0,w.jsx)(g,{}),children:(0,w.jsx)(I,{overview:e,recent:b,onAction:o,onDirection:d,dataRev:c})}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`head-row`,children:(0,w.jsx)(p,{"aria-label":`Dashboard view`,children:[[`status`,`Status`],[`lineage`,`Lineage`],[`operator`,`Operator`]].map(([e,t])=>(0,w.jsx)(`button`,{className:u===e?`on`:``,onClick:()=>d(e),"aria-pressed":u===e,children:t},e))})}),(0,w.jsxs)(`div`,{className:`view-in`,children:[u===`status`&&l===`cultivar`&&(0,w.jsx)(k,{overview:e,sigil:f,setup:i,jobs:a,onAction:o}),u===`status`&&l===`greenhouse`&&(0,w.jsx)(x.Suspense,{fallback:(0,w.jsx)(g,{}),children:(0,w.jsx)(P,{overview:e,sigil:f,jobs:a,doctor:v,onAction:o})}),u===`status`&&l===`operator`&&(0,w.jsx)(x.Suspense,{fallback:(0,w.jsx)(g,{}),children:(0,w.jsx)(F,{overview:e,jobs:a,doctor:v,onAction:o})}),u===`lineage`&&(0,w.jsx)(j,{overview:e,sigil:f,setup:i,jobs:a}),u===`operator`&&(0,w.jsx)(M,{overview:e,setup:i,jobs:a})]},u)]}):(0,w.jsx)(h,{onAction:o}):t?(0,w.jsxs)(`div`,{children:[(0,w.jsx)(_,{error:`Could not load the harness overview: ${t}`}),(0,w.jsx)(`button`,{className:`btn`,onClick:n,children:`Retry`})]}):(0,w.jsx)(g,{})}export{L as default,C as n,N as t};
@@ -1,2 +1,2 @@
1
- import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{C as r,L as i,_ as a,g as o,h as s,k as c,p as l,r as u,v as d,vt as f}from"./index-BMwSp8BP.js";import{n as p}from"./Markdown-CkFyfgNf.js";var m=e(t(),1),h=n();function g(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 _(e,t){if(!e||!t)return null;try{return e.querySelector(t)}catch{return null}}function v(e){let t=[],n=!1,r=0;for(let i of(e||``).split(`
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{C as r,L as i,_ as a,g as o,h as s,k as c,p as l,r as u,v as d,vt as f}from"./index-C1yil5j1.js";import{n as p}from"./Markdown-CkFyfgNf.js";var m=e(t(),1),h=n();function g(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 _(e,t){if(!e||!t)return null;try{return e.querySelector(t)}catch{return null}}function v(e){let t=[],n=!1,r=0;for(let i of(e||``).split(`
2
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:g(e[2],r)}))}return t}var y={"opencode-global":`path-a-opencode-global-recommended`,"opencode-per-repo":`path-b-opencode-per-repo`,"claude-code":`path-c-claude-code`,"agent-md":`path-d-any-agentmd-tool`,bundle:`path-d-any-agentmd-tool`};function b({page:e,overview:t,onAction:n}){let r=(0,m.useRef)(null),a=(0,m.useMemo)(()=>v(e.body),[e.body]),o=(0,m.useMemo)(()=>p(e.body,e.links),[e.body,e.links]);(0,m.useEffect)(()=>{let e=r.current;if(!e)return;let t=0;e.querySelectorAll(`h1, h2, h3`).forEach(e=>{if(t+=1,!e.id){let n=g(e.textContent||``,t);n&&(e.id=n)}})},[o]),(0,m.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(),i(n))};return e.addEventListener(`click`,t),()=>e.removeEventListener(`click`,t)},[o]),(0,m.useEffect)(()=>{let t=e.anchor;if(!t)return;let n=_(r.current,`#${CSS.escape(t)}`);n&&n.scrollIntoView({behavior:`smooth`,block:`start`})},[o,e.anchor]),(0,m.useEffect)(()=>{let n=r.current;if(!n||e.id!==`install-paths`)return;n.querySelectorAll(`.docs-here`).forEach(e=>e.classList.remove(`docs-here`));let i=y[t?.emit];if(!i)return;let a=_(n,`#${CSS.escape(i)}`);a&&a.classList.add(`docs-here`)},[o,e.id,t?.emit]);let s=e=>{if(!e)return;let t=_(r.current,`#${CSS.escape(e)}`);t&&t.scrollIntoView({behavior:`smooth`,block:`start`})},c=a.length>=3,l=[];return(e.id===`install-paths`||e.id===`install-quick`)&&(l.push({label:`Run doctor`,action:`doctor`}),l.push({label:`Rebuild`,action:`build`})),e.id===`verify`&&l.push({label:`Run doctor`,action:`doctor`}),e.id===`self-improve`&&l.push({label:`Open diff`,hash:`#/diff`}),e.id===`upgrade`&&l.push({label:`Update`,action:`update`}),(0,h.jsxs)(`div`,{className:`detail-doc`,children:[(0,h.jsx)(`h1`,{style:{marginTop:0},children:e.title}),e.source&&(0,h.jsx)(`div`,{className:`doc-meta`,children:(0,h.jsxs)(`span`,{className:`badge`,children:[(0,h.jsx)(`span`,{className:`dot`}),e.source]})}),l.length>0&&(0,h.jsx)(`div`,{className:`row wrap gap-10`,style:{margin:`10px 0 14px`},children:l.map(e=>e.hash?(0,h.jsx)(`a`,{className:`btn ghost sm`,href:e.hash,children:e.label},e.label):(0,h.jsx)(`button`,{className:`btn ghost sm`,onClick:()=>n&&n(e.action),children:e.label},e.label))}),c&&(0,h.jsxs)(`div`,{className:`docs-toc`,children:[(0,h.jsx)(`div`,{className:`docs-toc-head`,children:`On this page`}),(0,h.jsx)(`ul`,{children:a.map(e=>(0,h.jsx)(`li`,{className:`lvl-${e.level}`,children:(0,h.jsx)(`a`,{href:`#${e.id}`,onClick:t=>{t.preventDefault(),s(e.id)},children:e.title})},e.id))})]}),(0,h.jsx)(`div`,{className:`markdown`,ref:r,dangerouslySetInnerHTML:{__html:o}}),e.link&&(0,h.jsx)(`div`,{style:{marginTop:24},children:(0,h.jsx)(`a`,{className:`btn soft sm`,href:e.link.hash,children:e.link.label})})]})}var x=1200;function S({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,h.jsxs)(`div`,{className:`cli-arg`,children:[(0,h.jsx)(`code`,{className:`cli-arg-name`,children:n}),r.length>0&&(0,h.jsxs)(`code`,{className:`cli-arg-meta`,children:[` `,r.join(` · `)]}),e.help&&(0,h.jsx)(`div`,{className:`cli-arg-help`,children:e.help})]})}function C({text:e}){let[t,n]=(0,m.useState)(!1);return(0,h.jsxs)(`button`,{className:`btn ghost sm`,onClick:async()=>{try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),x)}catch{}},title:`Copy command`,children:[(0,h.jsx)(r,{name:t?`spark`:`copy`}),t?`Copied`:`Copy`]})}function w({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,h.jsxs)(`div`,{className:`card pad-md mb-12 cli-card`,children:[(0,h.jsxs)(`div`,{className:`row wrap between`,style:{alignItems:`flex-start`},children:[(0,h.jsxs)(`div`,{className:`stack`,style:{gap:4},children:[(0,h.jsx)(`h3`,{style:{margin:0},children:(0,h.jsx)(`code`,{children:e.name})}),e.help&&(0,h.jsx)(`p`,{className:`sub`,style:{margin:0},children:e.help})]}),(0,h.jsx)(C,{text:`${t} ${e.name}`})]}),(0,h.jsx)(`pre`,{className:`cli-syn`,children:r}),(e.positionals||[]).length>0&&(0,h.jsxs)(`div`,{className:`cli-block`,children:[(0,h.jsx)(`div`,{className:`cli-block-head`,children:`Arguments`}),e.positionals.map(e=>(0,h.jsx)(S,{a:e,kind:`positional`},e.dest))]}),(e.options||[]).length>0&&(0,h.jsxs)(`div`,{className:`cli-block`,children:[(0,h.jsx)(`div`,{className:`cli-block-head`,children:`Options`}),e.options.map(e=>(0,h.jsx)(S,{a:e,kind:`option`},e.names.join(`,`)))]})]})}function T({page:e}){let t=e.prog||`geneseed`,n=e.commands||[];return(0,h.jsxs)(`div`,{className:`detail-doc`,children:[(0,h.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,h.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Every subcommand of `,(0,h.jsx)(`code`,{children:t}),`. Generated from the parser at request time (the same one `,(0,h.jsx)(`code`,{children:`geneseed`}),` actually parses), so this page cannot drift.`]}),(0,h.jsx)(`div`,{style:{marginTop:18},children:n.map(e=>(0,h.jsx)(w,{cmd:e,prog:t},e.name))})]})}function E({page:e}){let t=e.rows||[],n=e.theme||`neutral`;return(0,h.jsxs)(`div`,{className:`detail-doc`,children:[(0,h.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,h.jsxs)(`p`,{className:`sub`,style:{marginTop:4},children:[`Geneseed's invented vocabulary, decoded. Left: the neutral, plain-English term. Right: the word your `,(0,h.jsx)(`code`,{style:{textTransform:`capitalize`},children:n}),` theme actually uses in the agent's voice.`]}),(0,h.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:(0,h.jsxs)(`table`,{className:`glossary-table`,children:[(0,h.jsx)(`thead`,{children:(0,h.jsxs)(`tr`,{children:[(0,h.jsx)(`th`,{children:`Concept`}),(0,h.jsx)(`th`,{children:`Neutral term`}),(0,h.jsxs)(`th`,{children:[`In `,n]}),(0,h.jsx)(`th`,{children:`Meaning`})]})}),(0,h.jsx)(`tbody`,{children:t.map(e=>(0,h.jsxs)(`tr`,{children:[(0,h.jsx)(`td`,{children:(0,h.jsx)(`strong`,{children:e.label})}),(0,h.jsx)(`td`,{children:(0,h.jsx)(`code`,{children:e.neutral||`—`})}),(0,h.jsx)(`td`,{children:(0,h.jsx)(`code`,{children:e.themed||e.neutral||`—`})}),(0,h.jsx)(`td`,{className:`dim`,children:e.desc})]},e.label))})]})})]})}function D({page:e}){let t=e.version||{},n=[[`Theme`,e.theme],[`Install mode`,e.emit],[`Deployed`,e.deployed?`yes`:`no`],[`Target`,(0,h.jsx)(`code`,{children:e.target},`t`)],[`Source root`,(0,h.jsx)(`code`,{children:e.root},`r`)],[`Installed build`,(0,h.jsx)(`code`,{children:t.installed_fp||`(none)`},`i`)],[`Source build`,(0,h.jsx)(`code`,{children:t.source_fp||`—`},`s`)],[`Match?`,t.verdict||`—`],[`License`,e.license]];return(0,h.jsxs)(`div`,{className:`detail-doc`,children:[(0,h.jsx)(`h1`,{style:{marginTop:0},children:e.title}),(0,h.jsx)(`p`,{className:`sub`,style:{marginTop:4},children:`Live snapshot of the install behind this UI, plus where to go next.`}),(0,h.jsx)(`div`,{className:`card pad-md`,style:{marginTop:18},children:n.map(([e,t])=>(0,h.jsxs)(`div`,{className:`kv`,children:[(0,h.jsx)(`span`,{className:`k`,children:e}),(0,h.jsx)(`span`,{className:`v`,children:t??`—`})]},e))}),(0,h.jsxs)(`div`,{className:`row wrap gap-10`,style:{marginTop:18},children:[(0,h.jsxs)(`a`,{className:`btn ghost`,href:e.repo,target:`_blank`,rel:`noreferrer`,children:[(0,h.jsx)(r,{name:`external`}),e.repo_is_github?`GitHub repo`:`Source repo`]}),e.repo_is_github&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/issues`,target:`_blank`,rel:`noreferrer`,children:[(0,h.jsx)(r,{name:`external`}),`File an issue`]}),(0,h.jsxs)(`a`,{className:`btn ghost`,href:`${e.repo}/blob/main/LICENSE`,target:`_blank`,rel:`noreferrer`,children:[(0,h.jsx)(r,{name:`external`}),`License`]})]})]})]})}function O(e){return e?.groups?.[0]?.pages?.[0]?.id||``}function k({pageId:e,harness:t,overview:n,onAction:r}){let{data:i,error:a,loading:o}=c(()=>e?f.docsPage(e,t):Promise.resolve(null),[e,t]);if(a)return(0,h.jsx)(u,{error:a,style:{margin:18}});if(o||!i)return(0,h.jsx)(l,{label:`Loading page…`});switch(i.kind){case`markdown`:case`concept`:return(0,h.jsx)(b,{page:i,overview:n,onAction:r});case`cli`:return(0,h.jsx)(T,{page:i});case`glossary`:return(0,h.jsx)(E,{page:i});case`about`:return(0,h.jsx)(D,{page:i});default:return(0,h.jsxs)(`div`,{className:`empty`,children:[(0,h.jsx)(`div`,{className:`big`,children:`Unknown page kind`}),i.kind]})}}function A(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 j({page:e,query:t,overview:n,onAction:r}){let[p,g]=d(a(n?.emit)),{data:_,error:v}=c(()=>f.docs(p),[p]),y=e||O(_);(0,m.useEffect)(()=>{if(_&&y&&!_.groups.some(e=>e.pages.some(e=>e.id===y))){let e=O(_);e&&e!==y&&i(`#/docs/${encodeURIComponent(e)}`)}},[_,y]);let b=A(_,y)||_?.groups?.[0],x=(t||``).toLowerCase().trim(),S=(0,m.useMemo)(()=>_?x?_.groups.map(e=>({...e,pages:e.pages.filter(t=>t.title.toLowerCase().includes(x)||e.label.toLowerCase().includes(x)||t.id.toLowerCase().includes(x))})).filter(e=>e.pages.length>0):b?[b]:[]:[],[_,x,b]);if(v)return(0,h.jsx)(u,{error:v});let C=_?.groups||[],w=!!x,T=e=>{let t=e.pages[0]?.id;t&&i(`#/docs/${encodeURIComponent(t)}`)};return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`div`,{className:`eyebrow`,children:`documentation`}),(0,h.jsx)(`h1`,{className:`h`,children:`Docs`}),(0,h.jsx)(`p`,{className:`sub`,children:`Concept pages, a generated CLI reference, and a glossary. Pages and config that differ by host are filtered to your selected harness.`})]}),(0,h.jsx)(s,{"aria-label":`Harness`,children:o.map(e=>(0,h.jsx)(`button`,{className:p===e.id?`on`:``,onClick:()=>g(e.id),"aria-pressed":p===e.id,children:e.label},e.id))})]}),(0,h.jsx)(`div`,{className:`lib-secbar`,children:C.map(e=>(0,h.jsxs)(`button`,{className:`lib-secchip ${b?.id===e.id?`on`:``}`,onClick:()=>T(e),children:[(0,h.jsx)(`span`,{children:e.label}),(0,h.jsx)(`span`,{className:`lib-secchip-n`,children:e.pages.length})]},e.id))}),(0,h.jsxs)(`div`,{className:`lib lib-2`,children:[(0,h.jsxs)(`div`,{className:`card lib-main`,children:[(0,h.jsxs)(`div`,{className:`lib-head`,children:[(0,h.jsx)(`span`,{className:`lib-head-label`,children:x?`all groups`:b?.label||``}),(0,h.jsxs)(`span`,{className:`lib-head-count`,children:[S.reduce((e,t)=>e+t.pages.length,0),` pages`]})]}),(0,h.jsxs)(`div`,{className:`lib-rows`,children:[S.map(e=>(0,h.jsxs)(`div`,{className:`docs-group`,children:[w&&(0,h.jsx)(`div`,{className:`docs-group-head`,children:e.label}),e.pages.map(e=>(0,h.jsxs)(`button`,{className:`lib-row ${y===e.id?`on`:``}`,onClick:()=>i(`#/docs/${encodeURIComponent(e.id)}`),children:[(0,h.jsx)(`div`,{className:`lr-name`,children:e.title}),e.date?(0,h.jsx)(`div`,{className:`lr-desc`,children:e.date}):null]},e.id))]},e.id)),S.length===0&&_&&(0,h.jsxs)(`div`,{className:`empty`,style:{padding:32},children:[(0,h.jsx)(`div`,{className:`big`,children:`No matches`}),`Try another search.`]}),!_&&(0,h.jsx)(l,{label:`Loading docs…`})]})]}),(0,h.jsx)(`div`,{className:`card lib-detail`,children:(0,h.jsx)(k,{pageId:y,harness:p,overview:n,onAction:r})})]})]})}export{j 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-BiwaOo6x.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-C1yil5j1.js";import{t as p}from"./jobBuckets-Dbq8ZlWW.js";import{n as m}from"./Dashboard-OkC_PCH6.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(`
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};
@@ -1,2 +1,2 @@
1
- import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{A as r,C as i,M as a,N as o,P as s,S as c,b as l,f as u,h as d,j as f,k as p,m,p as h,r as g,vt as _,w as v,x as y,y as b}from"./index-BMwSp8BP.js";import{t as x}from"./Tabs-_pjUFIEI.js";var S=e(t(),1),C=n();function w({label:e,value:t,options:n,onChange:r}){return n.length?(0,C.jsx)(`select`,{className:`sel`,"aria-label":e,value:t,onChange:e=>r(e.target.value),children:n.map(e=>(0,C.jsx)(`option`,{value:e,children:e},e))}):null}var T=[`full`,`lean`];function E({on:e,disabled:t,label:n,onToggle:r}){return(0,C.jsx)(`input`,{type:`checkbox`,role:`switch`,className:`sw-toggle${e?` on`:``}`,checked:e,"aria-checked":e,disabled:t,"aria-label":n,onChange:r,onKeyDown:e=>{e.key===`Enter`&&!t&&r()}})}var D=[{key:`theme`,name:`voice`,title:`Voice`},{key:`footprint`,name:`footprint`,title:`Footprint`},{key:`posture`,name:`posture`,title:`Posture`},{key:`mode`,name:`mode`,title:`Mode`}];function O({value:e,options:t,onChange:n,who:r}){return D.map(i=>(0,C.jsxs)(`label`,{className:`dp-field`,children:[(0,C.jsx)(`span`,{children:i.title}),(0,C.jsx)(w,{label:`${i.name} for ${r}`,value:e[i.key],options:t[i.key],onChange:e=>n(i.key,e)})]},i.key))}function k({host:e,theme:t,options:n,onAction:r,onClose:i,onNote:a}){let[o,s]=(0,S.useState)({path:``,host:e,theme:t,footprint:`full`,posture:`peer`,mode:`direct`}),[c,u]=(0,S.useState)(!1),d=(e,t)=>s(n=>({...n,[e]:t})),f=async()=>{u(!0),a(``);try{let e=await _.pickFolder();e.path?d(`path`,e.path):e.error&&a(e.error)}catch(e){a(e.message)}finally{u(!1)}},p=async()=>{let e=o.path.trim();if(!e){a(`Choose or type a folder to deploy into.`);return}a(``),await r?.(`deploy`,{host:o.host,path:e,theme:o.theme,footprint:o.footprint,posture:o.posture,mode:o.mode})&&i()};return(0,C.jsxs)(`div`,{className:`deploy-pop`,children:[(0,C.jsxs)(`div`,{className:`dp-row`,children:[(0,C.jsx)(`input`,{className:`inp dp-path`,type:`text`,placeholder:`/path/to/project, or click Browse…`,value:o.path,onChange:e=>d(`path`,e.target.value),onKeyDown:e=>e.key===`Enter`&&p(),"aria-label":`Folder to deploy into`}),(0,C.jsx)(`button`,{className:`btn ghost sm`,disabled:c,onClick:f,children:c?`Choosing…`:`Browse…`})]}),(0,C.jsxs)(`div`,{className:`dp-row`,children:[(0,C.jsxs)(`label`,{className:`dp-field`,children:[(0,C.jsx)(`span`,{children:`Deploy as`}),(0,C.jsx)(`select`,{className:`sel`,"aria-label":`host for the new harness`,value:o.host,onChange:e=>d(`host`,e.target.value),children:b.map(e=>(0,C.jsx)(`option`,{value:e.id,children:e.label},e.id))})]}),(0,C.jsx)(O,{value:o,options:n,onChange:d,who:`the new harness`}),(0,C.jsx)(`button`,{className:`btn sm`,onClick:p,children:`Deploy`}),(0,C.jsx)(`button`,{className:`btn ghost sm`,onClick:i,children:`Cancel`})]}),(0,C.jsxs)(`p`,{className:`sub dp-note`,children:[`Adds a per-repo harness (`,(0,C.jsx)(`code`,{children:l(o.host).deployAdds}),`) into the folder, non-destructively. It’s then tracked here even after you leave its directory.`]})]})}function A(){let{data:e,error:t,reload:n}=p(()=>_.excludes(),[]),[r,a]=(0,S.useState)(!1),[o,s]=(0,S.useState)([]),c=async(e,t)=>{a(!0);try{let n=await _.excludeMutate(e,t);s(n.messages||[])}catch(e){s(e.body?.messages||[e.message])}finally{a(!1),n()}};return t||!e?.installs?.length?null:(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Excluded folders`})}),(0,C.jsx)(`p`,{className:`sub mb-16`,children:`Sovereign repos: inside these folders every global harness goes dormant — hooks stay silent and the global preamble is not loaded.`}),(e.excludes||[]).map(e=>(0,C.jsxs)(`div`,{className:`row wrap between gap-12`,children:[(0,C.jsx)(`code`,{children:e.path}),(0,C.jsxs)(`span`,{className:`mono muted`,children:[`[`,e.hosts.join(`, `),`]`]}),(0,C.jsx)(`button`,{className:`btn ghost sm`,disabled:r,onClick:()=>c(`remove`,e.path),children:`Remove`})]},e.path)),(0,C.jsxs)(`button`,{className:`btn ghost sm`,disabled:r,onClick:async()=>{a(!0);try{let e=await _.pickFolder();e.path?await c(`add`,e.path):e.error&&s([e.error])}catch(e){s([e.message])}finally{a(!1)}},children:[(0,C.jsx)(i,{name:`folder`}),` Exclude a folder…`]}),o.map((e,t)=>(0,C.jsx)(`p`,{className:`sub`,children:e},t))]})}function j({inst:e,memory:t,busy:n,onMemory:r,onRemove:i,onCancel:a}){return(0,C.jsxs)(`div`,{className:`h-remove`,children:[(0,C.jsxs)(`p`,{className:`hr-msg`,children:[(0,C.jsx)(`strong`,{children:e.scope===`project`?`Remove this harness from the folder?`:`Remove the global ${e.host} install?`}),` `,(0,C.jsxs)(`span`,{className:`sub`,children:[`Deletes `,(0,C.jsx)(`code`,{children:c(e.host,e.scope)}),e.scope===`project`?` and de-lists it.`:`; the row stays, marked “not installed.”`,` `,`This can’t be undone.`]})]}),(0,C.jsxs)(`label`,{className:`field`,children:[(0,C.jsx)(`span`,{children:`Memory and notebook`}),(0,C.jsxs)(`select`,{className:`sel`,"aria-label":`memory disposition`,value:t,onChange:e=>r(e.target.value),children:[(0,C.jsx)(`option`,{value:`keep`,children:`keep in place`}),(0,C.jsx)(`option`,{value:`archive`,children:`archive aside`}),(0,C.jsx)(`option`,{value:`delete`,children:`delete too`})]})]}),(0,C.jsxs)(`div`,{className:`row gap-8`,children:[(0,C.jsx)(`button`,{type:`button`,className:`btn danger`,disabled:n,onClick:i,children:n?`Removing…`:`Remove`}),(0,C.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:a,children:`Cancel`})]})]})}function M({targets:e,mcpBusy:t,onReveal:n,onToggle:r}){let i=e.flatMap(e=>e.servers),a=i.filter(e=>e.state===`enabled`).length;return(0,C.jsxs)(`div`,{className:`ip-block`,children:[(0,C.jsxs)(`span`,{className:`ip-label`,children:[`MCP servers`,` `,(0,C.jsxs)(`span`,{className:`mono dim`,children:[a,` of `,i.length]})]}),e.map(e=>(0,C.jsxs)(`div`,{className:`mcp-target`,children:[(0,C.jsxs)(`div`,{className:`mt-head`,children:[(0,C.jsx)(`code`,{title:e.path,children:e.label}),(0,C.jsx)(`button`,{type:`button`,className:`btn ghost sm`,onClick:()=>n(e),title:`Open the folder holding ${e.path}: tokens and URLs go in this file`,children:`Open folder`}),e.commented?(0,C.jsx)(`span`,{className:`dim`,children:`has comments; edit by hand`}):null]}),e.servers.map(n=>{let i=e.path+n.name,a=!!(e.commented||t===i);return(0,C.jsxs)(`div`,{className:`mcp-row`,title:n.desc,children:[(0,C.jsx)(`span`,{children:n.label}),n.state===`absent`?n.preset?(0,C.jsx)(`button`,{type:`button`,className:`btn ghost sm`,disabled:a,onClick:()=>r(e,n),children:`Add`}):null:(0,C.jsx)(E,{on:n.state===`enabled`,disabled:a,label:`${n.label} server`,onToggle:()=>r(e,n)})]},n.name)})]},e.path))]})}var N={active:[`Active`,`ok`],disabled:[`Disabled`,`warn`],absent:[`Not installed`,``]};function P({inst:e,targets:t,choice:n,unchanged:r,options:i,onPick:a,canAct:o,busy:s,mcpBusy:c,removing:u,onRemoving:d,onApply:f,onToggleInstall:p,onRemove:m,onRevealMcp:h,onToggleMcp:g}){let _=`${e.host} · ${e.scope}`,[v,b]=N[e.state]||N.absent,x=e.state===`active`,S=e.state===`absent`;return(0,C.jsxs)(`aside`,{className:`install-panel`,"aria-label":`${_} install`,children:[(0,C.jsx)(`span`,{className:`ip-eyebrow`,children:`Selected install`}),(0,C.jsxs)(`div`,{className:`ip-head`,children:[(0,C.jsx)(`h2`,{children:y(e)}),(0,C.jsx)(`span`,{className:`tag ${b}`,children:v})]}),(0,C.jsx)(`span`,{className:`ip-kind`,children:e.scope===`global`?`Global install`:`Per-project install · ${l(e.host).label}`}),(0,C.jsx)(`code`,{className:`ip-path`,children:e.path}),S?(0,C.jsxs)(`p`,{className:`sub`,children:[`Install Geneseed here as `,(0,C.jsx)(`strong`,{children:e.host}),`. Files are added non-destructively; deactivate or uninstall later.`]}):null,(x||S)&&o?(0,C.jsx)(`div`,{className:`ip-picks`,children:(0,C.jsx)(O,{value:n,options:i,onChange:a,who:_})}):null,x&&t.length?(0,C.jsx)(M,{targets:t,mcpBusy:c,onReveal:h,onToggle:g}):null,x&&e.scope===`global`?(0,C.jsx)(A,{}):null,S?null:(0,C.jsxs)(`label`,{className:`ip-switch`,children:[(0,C.jsx)(E,{on:x,disabled:s,label:`activate ${_}`,onToggle:p}),(0,C.jsx)(`span`,{children:x?`Active: loads in every session`:`Disabled: files moved aside`})]}),(0,C.jsx)(`div`,{className:`ip-spacer`}),o?(0,C.jsxs)(`div`,{className:`ip-actions`,children:[S?(0,C.jsx)(`button`,{type:`button`,className:`btn`,onClick:f,children:`Install`}):x?(0,C.jsx)(`button`,{type:`button`,className:`btn`,disabled:r,onClick:f,children:`Apply and rebuild`}):null,S?null:(0,C.jsx)(`button`,{type:`button`,className:`btn ghost danger-line`,"aria-label":`remove ${_} from ${e.path}`,"aria-expanded":!!u,disabled:s,onClick:()=>d(u?null:{memory:`keep`}),children:`Uninstall…`})]}):null,u?(0,C.jsx)(j,{inst:e,memory:u.memory,busy:s,onMemory:e=>d({memory:e}),onRemove:m,onCancel:()=>d(null)}):null]})}var F=(e,t)=>`${e} ${t}`,I={active:[`Active`,`ok`],disabled:[`Disabled`,`warn`]};function L({rows:e,project:t,currentId:n,onPick:r,label:i}){return(0,C.jsx)(`div`,{className:`tbl-scroll`,children:(0,C.jsxs)(`table`,{className:`tbl hosts-tbl`,"aria-label":i,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{children:[(0,C.jsx)(`th`,{children:t?`Project`:`Host`}),(0,C.jsx)(`th`,{children:t?`Host`:`Path`}),(0,C.jsx)(`th`,{children:`Voice`}),(0,C.jsx)(`th`,{children:`Footprint`}),(0,C.jsx)(`th`,{children:`State`}),(0,C.jsx)(`th`,{children:(0,C.jsx)(`span`,{className:`sr-only`,children:`Selected`})})]})}),(0,C.jsx)(`tbody`,{children:e.map(e=>{let[i,a]=I[e.state]||[`Not installed`,``],o=n===e.id,s=e.state===`absent`;return(0,C.jsxs)(`tr`,{className:`pickable${o?` on`:``}${s?` quiet`:``}`,onClick:()=>r(e.id),children:[(0,C.jsx)(`td`,{children:(0,C.jsx)(`button`,{type:`button`,className:`row-pick`,"aria-pressed":o,title:e.path,onClick:()=>r(e.id),children:y(e)})}),t?(0,C.jsx)(`td`,{children:l(e.host).label}):(0,C.jsx)(`td`,{className:`mono path-cell`,title:e.path,children:e.path}),(0,C.jsx)(`td`,{children:s?``:e.theme||``}),(0,C.jsx)(`td`,{children:s?``:e.footprint||``}),(0,C.jsx)(`td`,{children:(0,C.jsx)(`span`,{className:`tag ${a}`,children:i})}),(0,C.jsx)(`td`,{className:`pick-mark`,children:o?`Editing ›`:``})]},e.id)})})]})})}function R({themes:e,current:t}){if(!e.length||!t)return null;let n=[...e].sort((e,n)=>e.name===t?-1:+(n.name===t));return(0,C.jsxs)(`details`,{className:`panel voice-ref`,children:[(0,C.jsxs)(`summary`,{children:[(0,C.jsx)(`span`,{className:`vr-title`,children:`Voices`}),(0,C.jsxs)(`span`,{className:`mono dim`,children:[e.length,` to choose from, set per install`]})]}),(0,C.jsx)(`div`,{className:`vr-list`,children:n.map(e=>(0,C.jsxs)(`div`,{className:`voice-row${e.name===t?` current`:``}`,children:[(0,C.jsx)(`span`,{className:`vr-name`,children:e.name}),(0,C.jsx)(`span`,{className:`vr-desc`,children:e.tagline?`“${e.tagline}”`:e.blurb})]},e.name))})]})}function z({setup:e,overview:t}){if(!e)return null;let n=e.installed_fp&&e.installed_fp===e.source_fp;return(0,C.jsxs)(`section`,{className:`panel`,"aria-labelledby":`checkout-h`,children:[(0,C.jsxs)(`div`,{className:`panel-head`,children:[(0,C.jsx)(`h2`,{id:`checkout-h`,children:`This checkout`}),(0,C.jsx)(`span`,{className:`mono ${n?`t-good`:`t-warn`}`,children:e.version_verdict})]}),(0,C.jsxs)(`dl`,{className:`kv-grid`,children:[(0,C.jsx)(`dt`,{children:`Source`}),(0,C.jsx)(`dd`,{className:`mono`,children:e.root}),(0,C.jsx)(`dt`,{children:`Version`}),(0,C.jsx)(`dd`,{className:`mono`,children:t?.version||`unknown`}),(0,C.jsx)(`dt`,{children:`Fingerprint`}),(0,C.jsx)(`dd`,{className:`mono`,children:e.source_fp})]})]})}function B({onAction:e,themes:t=[],currentTheme:n,overview:r,setup:a,dataRev:o,onMutated:s}){let c=u(),{data:l,error:d}=p(()=>_.installs(),[o]),{data:f,error:m}=p(()=>_.mcp(),[o]),[v,y]=(0,S.useState)(``),[b,x]=(0,S.useState)(``),[w,E]=(0,S.useState)(``),[D,O]=(0,S.useState)({}),[A,j]=(0,S.useState)(!1),[M,N]=(0,S.useState)(null),[I,B]=(0,S.useState)(``),V=(0,S.useMemo)(()=>{let e={};for(let t of f?.targets||[]){let n=F(t.host||`opencode`,t.root);(e[n]||(e[n]=[])).push(t)}return e},[f]);if(d||m)return(0,C.jsx)(g,{error:d||m});if(!l||!f)return(0,C.jsx)(h,{});let H={active:0,disabled:1,absent:2},U=[...l.installs].sort((e,t)=>(e.scope===`global`?0:1)-(t.scope===`global`?0:1)||(H[e.state]??3)-(H[t.state]??3)),W=U.find(e=>e.id===I)||U.find(e=>e.selected)||U.find(e=>e.state===`active`)||U[0],G=e=>{let t=D[e.id]||{};return{theme:t.theme||e.theme||n||`neutral`,footprint:t.footprint||e.footprint||`full`,posture:t.posture||e.posture||`peer`,mode:t.mode||e.mode||`direct`}},K=(e,t,n)=>O(r=>({...r,[e.id]:{...r[e.id],[t]:n}})),q=e=>{let t=G(e);return t.theme===e.theme&&t.footprint===(e.footprint||`full`)&&t.posture===(e.posture||`peer`)&&t.mode===(e.mode||`direct`)},J={theme:t.map(e=>e.name),footprint:T,posture:l.postures||[],mode:l.modes||[]},Y=async t=>{let{theme:n,footprint:r,posture:i,mode:a}=G(t),o=t.state===`absent`?`Install Geneseed into ${t.path} with the “${n}” voice (${r} footprint, ${i} posture, ${a} mode)? Files are added non-destructively (your own config is left untouched); deactivate or uninstall later.`:`Rebuild this install (voice “${n}”, ${r} footprint, ${i} posture, ${a} mode)? It rebuilds in place, non-destructive.`;await c(o,{title:t.state===`absent`?`Install Geneseed?`:`Rebuild this install?`,confirmLabel:t.state===`absent`?`Install`:`Rebuild`})&&e?.(`install`,{host:t.host,scope:t.scope,path:t.path,theme:n,footprint:r,posture:i,mode:a})},X=async e=>{if(e.state!==`active`||await c(`Deactivate this install? Files are moved aside, not deleted; reactivate any time.`,{title:`Deactivate this install?`,confirmLabel:`Deactivate`})){x(e.id),y(``);try{let t=await _.installToggle(e.host,e.path,e.state===`active`?`deactivate`:`activate`);if(!t.ok){let e=Array.isArray(t.failed)?t.failed.join(`, `):``;y(t.error||e&&`unrestored: ${e}`||`action failed`);return}s?.()}catch(e){y(e.message)}finally{x(``)}}},Z=async()=>{let e=M;if(e){x(e.id),y(``);try{let t=await _.installRemove(e.host,e.path,e.memory);if(!t.ok){y(t.error||`remove failed`);return}N(null),s?.()}catch(e){y(e.message)}finally{x(``)}}},ee=async e=>{y(``);try{let t=await _.mcpReveal(e.path);y(`Opening ${t.dir}. If no window appeared, open that folder by hand.`)}catch(e){y(e.message)}},te=async(e,t)=>{let n=e.path+t.name;E(n),y(``);try{await _.mcpToggle(e.path,t.name,t.state!==`enabled`),s?.()}catch(e){y(e.message)}finally{E(``)}},ne=U.find(e=>e.selected)?.host||U.find(e=>e.state===`active`)?.host||U[0]?.host||`opencode`,re=U.filter(e=>e.scope===`global`),Q=U.filter(e=>e.scope!==`global`),$=e=>{B(e),N(null)};return(0,C.jsxs)(`div`,{className:`hosts`,children:[(0,C.jsxs)(`div`,{className:`hosts-main`,children:[(0,C.jsxs)(`div`,{className:`toolbar`,children:[(0,C.jsxs)(`span`,{className:`dim`,children:[U.filter(e=>e.state===`active`).length,` active of `,U.length,` `,`detected.`]}),e?(0,C.jsx)(`div`,{className:`row gap-8`,children:(0,C.jsxs)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>e(`build-all`),children:[(0,C.jsx)(i,{name:`refresh`}),` Rebuild all`]})}):null]}),v?(0,C.jsx)(`p`,{className:`tag bad note`,role:`status`,children:v}):null,(0,C.jsxs)(`section`,{className:`panel flush`,"aria-labelledby":`inst-global`,children:[(0,C.jsx)(`div`,{className:`inst-head`,children:(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{id:`inst-global`,children:`Global installs`}),(0,C.jsx)(`p`,{className:`dim`,children:`One per tool. Loaded in every folder, except excluded ones.`})]})}),(0,C.jsx)(L,{rows:re,currentId:W?.id,onPick:$,label:`Global installs`})]}),(0,C.jsxs)(`section`,{className:`panel flush`,"aria-labelledby":`inst-project`,children:[(0,C.jsxs)(`div`,{className:`inst-head`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{id:`inst-project`,children:`Per-project installs`}),(0,C.jsx)(`p`,{className:`dim`,children:`A repo with its own harness. Inside it, only that harness loads.`})]}),e?(0,C.jsxs)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>j(e=>!e),children:[(0,C.jsx)(i,{name:`folder`}),` Deploy to a repo…`]}):null]}),A?(0,C.jsx)(`div`,{className:`inst-deploy`,children:(0,C.jsx)(k,{host:ne,theme:n||`neutral`,options:J,onAction:e,onClose:()=>j(!1),onNote:y})}):null,Q.length?(0,C.jsx)(L,{rows:Q,project:!0,currentId:W?.id,onPick:$,label:`Per-project installs`}):(0,C.jsx)(`div`,{className:`empty inst-empty`,children:`No repo has its own harness yet. Deploy one to give a project its own rules and voice.`})]}),(0,C.jsx)(z,{setup:a,overview:r}),(0,C.jsx)(R,{themes:t,current:r?.theme})]}),W?(0,C.jsx)(P,{inst:W,targets:V[F(W.host,W.path)]||[],choice:G(W),unchanged:q(W),options:J,onPick:(e,t)=>K(W,e,t),canAct:!!e,busy:b===W.id,mcpBusy:w,removing:M?.id===W.id?M:null,onRemoving:e=>N(e&&{id:W.id,host:W.host,path:W.path,memory:e.memory}),onApply:()=>Y(W),onToggleInstall:()=>X(W),onRemove:Z,onRevealMcp:ee,onToggleMcp:te},W.id):null]})}function V(e){return e.startsWith(`@@`)||e.startsWith(`+++`)||e.startsWith(`---`)?`hunk`:e.startsWith(`+`)?`add`:e.startsWith(`-`)?`del`:`ctx`}function H({onMutated:e,onAction:t,dataRev:n}){let r=u(),{data:a,error:o,reload:s}=p(()=>_.diff(),[n]),[c,l]=(0,S.useState)(!1),[d,f]=(0,S.useState)(``),[m,v]=(0,S.useState)(()=>new Set),[y,b]=(0,S.useState)(()=>new Set),[x,w]=(0,S.useState)(null);a&&a!==x&&(w(a),v(new Set),b(new Set(a.files.map(e=>e.rel))));let T=e=>v(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),E=()=>v(e=>e.size===a.files.length?new Set:new Set(a.files.map(e=>e.rel))),D=()=>t?.(`export`),O=async()=>{let t=[...m],n=t.filter(e=>a.files.find(t=>t.rel===e)?.status===`added`),i=n.length?`Restoring will DELETE ${n.length} deployed-only file(s):\n${n.join(`
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{A as r,C as i,M as a,N as o,P as s,S as c,b as l,f as u,h as d,j as f,k as p,m,p as h,r as g,vt as _,w as v,x as y,y as b}from"./index-C1yil5j1.js";import{t as x}from"./Tabs-B4HNrrCs.js";var S=e(t(),1),C=n();function w({label:e,value:t,options:n,onChange:r}){return n.length?(0,C.jsx)(`select`,{className:`sel`,"aria-label":e,value:t,onChange:e=>r(e.target.value),children:n.map(e=>(0,C.jsx)(`option`,{value:e,children:e},e))}):null}var T=[`full`,`lean`];function E({on:e,disabled:t,label:n,onToggle:r}){return(0,C.jsx)(`input`,{type:`checkbox`,role:`switch`,className:`sw-toggle${e?` on`:``}`,checked:e,"aria-checked":e,disabled:t,"aria-label":n,onChange:r,onKeyDown:e=>{e.key===`Enter`&&!t&&r()}})}var D=[{key:`theme`,name:`voice`,title:`Voice`},{key:`footprint`,name:`footprint`,title:`Footprint`},{key:`posture`,name:`posture`,title:`Posture`},{key:`mode`,name:`mode`,title:`Mode`}];function O({value:e,options:t,onChange:n,who:r}){return D.map(i=>(0,C.jsxs)(`label`,{className:`dp-field`,children:[(0,C.jsx)(`span`,{children:i.title}),(0,C.jsx)(w,{label:`${i.name} for ${r}`,value:e[i.key],options:t[i.key],onChange:e=>n(i.key,e)})]},i.key))}function k({host:e,theme:t,options:n,onAction:r,onClose:i,onNote:a}){let[o,s]=(0,S.useState)({path:``,host:e,theme:t,footprint:`full`,posture:`peer`,mode:`direct`}),[c,u]=(0,S.useState)(!1),d=(e,t)=>s(n=>({...n,[e]:t})),f=async()=>{u(!0),a(``);try{let e=await _.pickFolder();e.path?d(`path`,e.path):e.error&&a(e.error)}catch(e){a(e.message)}finally{u(!1)}},p=async()=>{let e=o.path.trim();if(!e){a(`Choose or type a folder to deploy into.`);return}a(``),await r?.(`deploy`,{host:o.host,path:e,theme:o.theme,footprint:o.footprint,posture:o.posture,mode:o.mode})&&i()};return(0,C.jsxs)(`div`,{className:`deploy-pop`,children:[(0,C.jsxs)(`div`,{className:`dp-row`,children:[(0,C.jsx)(`input`,{className:`inp dp-path`,type:`text`,placeholder:`/path/to/project, or click Browse…`,value:o.path,onChange:e=>d(`path`,e.target.value),onKeyDown:e=>e.key===`Enter`&&p(),"aria-label":`Folder to deploy into`}),(0,C.jsx)(`button`,{className:`btn ghost sm`,disabled:c,onClick:f,children:c?`Choosing…`:`Browse…`})]}),(0,C.jsxs)(`div`,{className:`dp-row`,children:[(0,C.jsxs)(`label`,{className:`dp-field`,children:[(0,C.jsx)(`span`,{children:`Deploy as`}),(0,C.jsx)(`select`,{className:`sel`,"aria-label":`host for the new harness`,value:o.host,onChange:e=>d(`host`,e.target.value),children:b.map(e=>(0,C.jsx)(`option`,{value:e.id,children:e.label},e.id))})]}),(0,C.jsx)(O,{value:o,options:n,onChange:d,who:`the new harness`}),(0,C.jsx)(`button`,{className:`btn sm`,onClick:p,children:`Deploy`}),(0,C.jsx)(`button`,{className:`btn ghost sm`,onClick:i,children:`Cancel`})]}),(0,C.jsxs)(`p`,{className:`sub dp-note`,children:[`Adds a per-repo harness (`,(0,C.jsx)(`code`,{children:l(o.host).deployAdds}),`) into the folder, non-destructively. It’s then tracked here even after you leave its directory.`]})]})}function A(){let{data:e,error:t,reload:n}=p(()=>_.excludes(),[]),[r,a]=(0,S.useState)(!1),[o,s]=(0,S.useState)([]),c=async(e,t)=>{a(!0);try{let n=await _.excludeMutate(e,t);s(n.messages||[])}catch(e){s(e.body?.messages||[e.message])}finally{a(!1),n()}};return t||!e?.installs?.length?null:(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Excluded folders`})}),(0,C.jsx)(`p`,{className:`sub mb-16`,children:`Sovereign repos: inside these folders every global harness goes dormant — hooks stay silent and the global preamble is not loaded.`}),(e.excludes||[]).map(e=>(0,C.jsxs)(`div`,{className:`row wrap between gap-12`,children:[(0,C.jsx)(`code`,{children:e.path}),(0,C.jsxs)(`span`,{className:`mono muted`,children:[`[`,e.hosts.join(`, `),`]`]}),(0,C.jsx)(`button`,{className:`btn ghost sm`,disabled:r,onClick:()=>c(`remove`,e.path),children:`Remove`})]},e.path)),(0,C.jsxs)(`button`,{className:`btn ghost sm`,disabled:r,onClick:async()=>{a(!0);try{let e=await _.pickFolder();e.path?await c(`add`,e.path):e.error&&s([e.error])}catch(e){s([e.message])}finally{a(!1)}},children:[(0,C.jsx)(i,{name:`folder`}),` Exclude a folder…`]}),o.map((e,t)=>(0,C.jsx)(`p`,{className:`sub`,children:e},t))]})}function j({inst:e,memory:t,busy:n,onMemory:r,onRemove:i,onCancel:a}){return(0,C.jsxs)(`div`,{className:`h-remove`,children:[(0,C.jsxs)(`p`,{className:`hr-msg`,children:[(0,C.jsx)(`strong`,{children:e.scope===`project`?`Remove this harness from the folder?`:`Remove the global ${e.host} install?`}),` `,(0,C.jsxs)(`span`,{className:`sub`,children:[`Deletes `,(0,C.jsx)(`code`,{children:c(e.host,e.scope)}),e.scope===`project`?` and de-lists it.`:`; the row stays, marked “not installed.”`,` `,`This can’t be undone.`]})]}),(0,C.jsxs)(`label`,{className:`field`,children:[(0,C.jsx)(`span`,{children:`Memory and notebook`}),(0,C.jsxs)(`select`,{className:`sel`,"aria-label":`memory disposition`,value:t,onChange:e=>r(e.target.value),children:[(0,C.jsx)(`option`,{value:`keep`,children:`keep in place`}),(0,C.jsx)(`option`,{value:`archive`,children:`archive aside`}),(0,C.jsx)(`option`,{value:`delete`,children:`delete too`})]})]}),(0,C.jsxs)(`div`,{className:`row gap-8`,children:[(0,C.jsx)(`button`,{type:`button`,className:`btn danger`,disabled:n,onClick:i,children:n?`Removing…`:`Remove`}),(0,C.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:a,children:`Cancel`})]})]})}function M({targets:e,mcpBusy:t,onReveal:n,onToggle:r}){let i=e.flatMap(e=>e.servers),a=i.filter(e=>e.state===`enabled`).length;return(0,C.jsxs)(`div`,{className:`ip-block`,children:[(0,C.jsxs)(`span`,{className:`ip-label`,children:[`MCP servers`,` `,(0,C.jsxs)(`span`,{className:`mono dim`,children:[a,` of `,i.length]})]}),e.map(e=>(0,C.jsxs)(`div`,{className:`mcp-target`,children:[(0,C.jsxs)(`div`,{className:`mt-head`,children:[(0,C.jsx)(`code`,{title:e.path,children:e.label}),(0,C.jsx)(`button`,{type:`button`,className:`btn ghost sm`,onClick:()=>n(e),title:`Open the folder holding ${e.path}: tokens and URLs go in this file`,children:`Open folder`}),e.commented?(0,C.jsx)(`span`,{className:`dim`,children:`has comments; edit by hand`}):null]}),e.servers.map(n=>{let i=e.path+n.name,a=!!(e.commented||t===i);return(0,C.jsxs)(`div`,{className:`mcp-row`,title:n.desc,children:[(0,C.jsx)(`span`,{children:n.label}),n.state===`absent`?n.preset?(0,C.jsx)(`button`,{type:`button`,className:`btn ghost sm`,disabled:a,onClick:()=>r(e,n),children:`Add`}):null:(0,C.jsx)(E,{on:n.state===`enabled`,disabled:a,label:`${n.label} server`,onToggle:()=>r(e,n)})]},n.name)})]},e.path))]})}var N={active:[`Active`,`ok`],disabled:[`Disabled`,`warn`],absent:[`Not installed`,``]};function P({inst:e,targets:t,choice:n,unchanged:r,options:i,onPick:a,canAct:o,busy:s,mcpBusy:c,removing:u,onRemoving:d,onApply:f,onToggleInstall:p,onRemove:m,onRevealMcp:h,onToggleMcp:g}){let _=`${e.host} · ${e.scope}`,[v,b]=N[e.state]||N.absent,x=e.state===`active`,S=e.state===`absent`;return(0,C.jsxs)(`aside`,{className:`install-panel`,"aria-label":`${_} install`,children:[(0,C.jsx)(`span`,{className:`ip-eyebrow`,children:`Selected install`}),(0,C.jsxs)(`div`,{className:`ip-head`,children:[(0,C.jsx)(`h2`,{children:y(e)}),(0,C.jsx)(`span`,{className:`tag ${b}`,children:v})]}),(0,C.jsx)(`span`,{className:`ip-kind`,children:e.scope===`global`?`Global install`:`Per-project install · ${l(e.host).label}`}),(0,C.jsx)(`code`,{className:`ip-path`,children:e.path}),S?(0,C.jsxs)(`p`,{className:`sub`,children:[`Install Geneseed here as `,(0,C.jsx)(`strong`,{children:e.host}),`. Files are added non-destructively; deactivate or uninstall later.`]}):null,(x||S)&&o?(0,C.jsx)(`div`,{className:`ip-picks`,children:(0,C.jsx)(O,{value:n,options:i,onChange:a,who:_})}):null,x&&t.length?(0,C.jsx)(M,{targets:t,mcpBusy:c,onReveal:h,onToggle:g}):null,x&&e.scope===`global`?(0,C.jsx)(A,{}):null,S?null:(0,C.jsxs)(`label`,{className:`ip-switch`,children:[(0,C.jsx)(E,{on:x,disabled:s,label:`activate ${_}`,onToggle:p}),(0,C.jsx)(`span`,{children:x?`Active: loads in every session`:`Disabled: files moved aside`})]}),(0,C.jsx)(`div`,{className:`ip-spacer`}),o?(0,C.jsxs)(`div`,{className:`ip-actions`,children:[S?(0,C.jsx)(`button`,{type:`button`,className:`btn`,onClick:f,children:`Install`}):x?(0,C.jsx)(`button`,{type:`button`,className:`btn`,disabled:r,onClick:f,children:`Apply and rebuild`}):null,S?null:(0,C.jsx)(`button`,{type:`button`,className:`btn ghost danger-line`,"aria-label":`remove ${_} from ${e.path}`,"aria-expanded":!!u,disabled:s,onClick:()=>d(u?null:{memory:`keep`}),children:`Uninstall…`})]}):null,u?(0,C.jsx)(j,{inst:e,memory:u.memory,busy:s,onMemory:e=>d({memory:e}),onRemove:m,onCancel:()=>d(null)}):null]})}var F=(e,t)=>`${e} ${t}`,I={active:[`Active`,`ok`],disabled:[`Disabled`,`warn`]};function L({rows:e,project:t,currentId:n,onPick:r,label:i}){return(0,C.jsx)(`div`,{className:`tbl-scroll`,children:(0,C.jsxs)(`table`,{className:`tbl hosts-tbl`,"aria-label":i,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{children:[(0,C.jsx)(`th`,{children:t?`Project`:`Host`}),(0,C.jsx)(`th`,{children:t?`Host`:`Path`}),(0,C.jsx)(`th`,{children:`Voice`}),(0,C.jsx)(`th`,{children:`Footprint`}),(0,C.jsx)(`th`,{children:`State`}),(0,C.jsx)(`th`,{children:(0,C.jsx)(`span`,{className:`sr-only`,children:`Selected`})})]})}),(0,C.jsx)(`tbody`,{children:e.map(e=>{let[i,a]=I[e.state]||[`Not installed`,``],o=n===e.id,s=e.state===`absent`;return(0,C.jsxs)(`tr`,{className:`pickable${o?` on`:``}${s?` quiet`:``}`,onClick:()=>r(e.id),children:[(0,C.jsx)(`td`,{children:(0,C.jsx)(`button`,{type:`button`,className:`row-pick`,"aria-pressed":o,title:e.path,onClick:()=>r(e.id),children:y(e)})}),t?(0,C.jsx)(`td`,{children:l(e.host).label}):(0,C.jsx)(`td`,{className:`mono path-cell`,title:e.path,children:e.path}),(0,C.jsx)(`td`,{children:s?``:e.theme||``}),(0,C.jsx)(`td`,{children:s?``:e.footprint||``}),(0,C.jsx)(`td`,{children:(0,C.jsx)(`span`,{className:`tag ${a}`,children:i})}),(0,C.jsx)(`td`,{className:`pick-mark`,children:o?`Editing ›`:``})]},e.id)})})]})})}function R({themes:e,current:t}){if(!e.length||!t)return null;let n=[...e].sort((e,n)=>e.name===t?-1:+(n.name===t));return(0,C.jsxs)(`details`,{className:`panel voice-ref`,children:[(0,C.jsxs)(`summary`,{children:[(0,C.jsx)(`span`,{className:`vr-title`,children:`Voices`}),(0,C.jsxs)(`span`,{className:`mono dim`,children:[e.length,` to choose from, set per install`]})]}),(0,C.jsx)(`div`,{className:`vr-list`,children:n.map(e=>(0,C.jsxs)(`div`,{className:`voice-row${e.name===t?` current`:``}`,children:[(0,C.jsx)(`span`,{className:`vr-name`,children:e.name}),(0,C.jsx)(`span`,{className:`vr-desc`,children:e.tagline?`“${e.tagline}”`:e.blurb})]},e.name))})]})}function z({setup:e,overview:t}){if(!e)return null;let n=e.installed_fp&&e.installed_fp===e.source_fp;return(0,C.jsxs)(`section`,{className:`panel`,"aria-labelledby":`checkout-h`,children:[(0,C.jsxs)(`div`,{className:`panel-head`,children:[(0,C.jsx)(`h2`,{id:`checkout-h`,children:`This checkout`}),(0,C.jsx)(`span`,{className:`mono ${n?`t-good`:`t-warn`}`,children:e.version_verdict})]}),(0,C.jsxs)(`dl`,{className:`kv-grid`,children:[(0,C.jsx)(`dt`,{children:`Source`}),(0,C.jsx)(`dd`,{className:`mono`,children:e.root}),(0,C.jsx)(`dt`,{children:`Version`}),(0,C.jsx)(`dd`,{className:`mono`,children:t?.version||`unknown`}),(0,C.jsx)(`dt`,{children:`Fingerprint`}),(0,C.jsx)(`dd`,{className:`mono`,children:e.source_fp})]})]})}function B({onAction:e,themes:t=[],currentTheme:n,overview:r,setup:a,dataRev:o,onMutated:s}){let c=u(),{data:l,error:d}=p(()=>_.installs(),[o]),{data:f,error:m}=p(()=>_.mcp(),[o]),[v,y]=(0,S.useState)(``),[b,x]=(0,S.useState)(``),[w,E]=(0,S.useState)(``),[D,O]=(0,S.useState)({}),[A,j]=(0,S.useState)(!1),[M,N]=(0,S.useState)(null),[I,B]=(0,S.useState)(``),V=(0,S.useMemo)(()=>{let e={};for(let t of f?.targets||[]){let n=F(t.host||`opencode`,t.root);(e[n]||(e[n]=[])).push(t)}return e},[f]);if(d||m)return(0,C.jsx)(g,{error:d||m});if(!l||!f)return(0,C.jsx)(h,{});let H={active:0,disabled:1,absent:2},U=[...l.installs].sort((e,t)=>(e.scope===`global`?0:1)-(t.scope===`global`?0:1)||(H[e.state]??3)-(H[t.state]??3)),W=U.find(e=>e.id===I)||U.find(e=>e.selected)||U.find(e=>e.state===`active`)||U[0],G=e=>{let t=D[e.id]||{};return{theme:t.theme||e.theme||n||`neutral`,footprint:t.footprint||e.footprint||`full`,posture:t.posture||e.posture||`peer`,mode:t.mode||e.mode||`direct`}},K=(e,t,n)=>O(r=>({...r,[e.id]:{...r[e.id],[t]:n}})),q=e=>{let t=G(e);return t.theme===e.theme&&t.footprint===(e.footprint||`full`)&&t.posture===(e.posture||`peer`)&&t.mode===(e.mode||`direct`)},J={theme:t.map(e=>e.name),footprint:T,posture:l.postures||[],mode:l.modes||[]},Y=async t=>{let{theme:n,footprint:r,posture:i,mode:a}=G(t),o=t.state===`absent`?`Install Geneseed into ${t.path} with the “${n}” voice (${r} footprint, ${i} posture, ${a} mode)? Files are added non-destructively (your own config is left untouched); deactivate or uninstall later.`:`Rebuild this install (voice “${n}”, ${r} footprint, ${i} posture, ${a} mode)? It rebuilds in place, non-destructive.`;await c(o,{title:t.state===`absent`?`Install Geneseed?`:`Rebuild this install?`,confirmLabel:t.state===`absent`?`Install`:`Rebuild`})&&e?.(`install`,{host:t.host,scope:t.scope,path:t.path,theme:n,footprint:r,posture:i,mode:a})},X=async e=>{if(e.state!==`active`||await c(`Deactivate this install? Files are moved aside, not deleted; reactivate any time.`,{title:`Deactivate this install?`,confirmLabel:`Deactivate`})){x(e.id),y(``);try{let t=await _.installToggle(e.host,e.path,e.state===`active`?`deactivate`:`activate`);if(!t.ok){let e=Array.isArray(t.failed)?t.failed.join(`, `):``;y(t.error||e&&`unrestored: ${e}`||`action failed`);return}s?.()}catch(e){y(e.message)}finally{x(``)}}},Z=async()=>{let e=M;if(e){x(e.id),y(``);try{let t=await _.installRemove(e.host,e.path,e.memory);if(!t.ok){y(t.error||`remove failed`);return}N(null),s?.()}catch(e){y(e.message)}finally{x(``)}}},ee=async e=>{y(``);try{let t=await _.mcpReveal(e.path);y(`Opening ${t.dir}. If no window appeared, open that folder by hand.`)}catch(e){y(e.message)}},te=async(e,t)=>{let n=e.path+t.name;E(n),y(``);try{await _.mcpToggle(e.path,t.name,t.state!==`enabled`),s?.()}catch(e){y(e.message)}finally{E(``)}},ne=U.find(e=>e.selected)?.host||U.find(e=>e.state===`active`)?.host||U[0]?.host||`opencode`,re=U.filter(e=>e.scope===`global`),Q=U.filter(e=>e.scope!==`global`),$=e=>{B(e),N(null)};return(0,C.jsxs)(`div`,{className:`hosts`,children:[(0,C.jsxs)(`div`,{className:`hosts-main`,children:[(0,C.jsxs)(`div`,{className:`toolbar`,children:[(0,C.jsxs)(`span`,{className:`dim`,children:[U.filter(e=>e.state===`active`).length,` active of `,U.length,` `,`detected.`]}),e?(0,C.jsx)(`div`,{className:`row gap-8`,children:(0,C.jsxs)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>e(`build-all`),children:[(0,C.jsx)(i,{name:`refresh`}),` Rebuild all`]})}):null]}),v?(0,C.jsx)(`p`,{className:`tag bad note`,role:`status`,children:v}):null,(0,C.jsxs)(`section`,{className:`panel flush`,"aria-labelledby":`inst-global`,children:[(0,C.jsx)(`div`,{className:`inst-head`,children:(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{id:`inst-global`,children:`Global installs`}),(0,C.jsx)(`p`,{className:`dim`,children:`One per tool. Loaded in every folder, except excluded ones.`})]})}),(0,C.jsx)(L,{rows:re,currentId:W?.id,onPick:$,label:`Global installs`})]}),(0,C.jsxs)(`section`,{className:`panel flush`,"aria-labelledby":`inst-project`,children:[(0,C.jsxs)(`div`,{className:`inst-head`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{id:`inst-project`,children:`Per-project installs`}),(0,C.jsx)(`p`,{className:`dim`,children:`A repo with its own harness. Inside it, only that harness loads.`})]}),e?(0,C.jsxs)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>j(e=>!e),children:[(0,C.jsx)(i,{name:`folder`}),` Deploy to a repo…`]}):null]}),A?(0,C.jsx)(`div`,{className:`inst-deploy`,children:(0,C.jsx)(k,{host:ne,theme:n||`neutral`,options:J,onAction:e,onClose:()=>j(!1),onNote:y})}):null,Q.length?(0,C.jsx)(L,{rows:Q,project:!0,currentId:W?.id,onPick:$,label:`Per-project installs`}):(0,C.jsx)(`div`,{className:`empty inst-empty`,children:`No repo has its own harness yet. Deploy one to give a project its own rules and voice.`})]}),(0,C.jsx)(z,{setup:a,overview:r}),(0,C.jsx)(R,{themes:t,current:r?.theme})]}),W?(0,C.jsx)(P,{inst:W,targets:V[F(W.host,W.path)]||[],choice:G(W),unchanged:q(W),options:J,onPick:(e,t)=>K(W,e,t),canAct:!!e,busy:b===W.id,mcpBusy:w,removing:M?.id===W.id?M:null,onRemoving:e=>N(e&&{id:W.id,host:W.host,path:W.path,memory:e.memory}),onApply:()=>Y(W),onToggleInstall:()=>X(W),onRemove:Z,onRevealMcp:ee,onToggleMcp:te},W.id):null]})}function V(e){return e.startsWith(`@@`)||e.startsWith(`+++`)||e.startsWith(`---`)?`hunk`:e.startsWith(`+`)?`add`:e.startsWith(`-`)?`del`:`ctx`}function H({onMutated:e,onAction:t,dataRev:n}){let r=u(),{data:a,error:o,reload:s}=p(()=>_.diff(),[n]),[c,l]=(0,S.useState)(!1),[d,f]=(0,S.useState)(``),[m,v]=(0,S.useState)(()=>new Set),[y,b]=(0,S.useState)(()=>new Set),[x,w]=(0,S.useState)(null);a&&a!==x&&(w(a),v(new Set),b(new Set(a.files.map(e=>e.rel))));let T=e=>v(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),E=()=>v(e=>e.size===a.files.length?new Set:new Set(a.files.map(e=>e.rel))),D=()=>t?.(`export`),O=async()=>{let t=[...m],n=t.filter(e=>a.files.find(t=>t.rel===e)?.status===`added`),i=n.length?`Restoring will DELETE ${n.length} deployed-only file(s):\n${n.join(`
2
2
  `)}\n\n`:``;if(await r(`${i}Discard local edits and restore ${t.length} file(s) from source?`,{title:`Restore from source?`,confirmLabel:`Restore`})){l(!0);try{let n=await _.restore(t),r=n.errors.length?` · ${n.errors.length} error(s): ${n.errors.join(`; `)}`:``;f(`Restored ${n.restored.length}, deleted ${n.deleted.length}${r}`),await s(),e?.()}catch(e){f(e.message)}finally{l(!1)}}};if(o)return(0,C.jsx)(g,{error:o});if(!a)return(0,C.jsx)(h,{});if(!a.deployed)return(0,C.jsxs)(`div`,{className:`empty`,children:[(0,C.jsx)(`div`,{className:`big`,children:`No deployed harness`}),`Nothing to diff against.`]});let k=a.files,A=k.filter(e=>e.status===`edited`).length,j=k.filter(e=>e.status===`added`).length,M=k.filter(e=>e.status===`missing`).length,N=e=>b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n});return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{className:`h`,children:`Local edits`}),(0,C.jsx)(`p`,{className:`sub`,children:`The agent refines its own deployed files in place. Export them as improvements before any rebuild overwrites them.`})]}),(0,C.jsxs)(`div`,{className:`row gap-10`,children:[(0,C.jsxs)(`button`,{className:`btn ghost`,disabled:c||m.size===0,onClick:O,children:[`Restore`,m.size?` (${m.size})`:``]}),(0,C.jsxs)(`button`,{className:`btn`,disabled:c,onClick:D,children:[(0,C.jsx)(i,{name:`download`}),`Export improvements`]})]})]}),d?(0,C.jsx)(`p`,{className:`sub mb-14`,children:d}):null,k.length===0?(0,C.jsxs)(`div`,{className:`empty`,children:[(0,C.jsx)(`div`,{className:`big`,children:`In sync`}),`Deployed harness matches source.`]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`row between mb-14`,children:[(0,C.jsxs)(`div`,{className:`row gap-10`,children:[(0,C.jsxs)(`span`,{className:`badge`,children:[(0,C.jsx)(`span`,{className:`dot`,style:{background:`var(--warn)`}}),A,` edited`]}),(0,C.jsxs)(`span`,{className:`badge`,children:[(0,C.jsx)(`span`,{className:`dot`,style:{background:`var(--good)`}}),j,` added`]}),M>0&&(0,C.jsxs)(`span`,{className:`badge`,children:[(0,C.jsx)(`span`,{className:`dot`,style:{background:`var(--bad)`}}),M,` missing`]})]}),(0,C.jsxs)(`label`,{className:`row dim`,style:{gap:8,fontSize:12.5,cursor:`pointer`},children:[(0,C.jsx)(`input`,{type:`checkbox`,style:{accentColor:`var(--accent)`},checked:m.size===k.length,onChange:E}),`Select all`]})]}),(0,C.jsx)(`div`,{className:`stack gap-12`,children:k.map(e=>{let t=y.has(e.rel),n=e.status===`added`?`ok`:e.status===`missing`?`bad`:`warn`;return(0,C.jsxs)(`div`,{className:`card diff-file${t?` open`:``}`,children:[(0,C.jsxs)(`div`,{className:`diff-head`,children:[(0,C.jsx)(`input`,{type:`checkbox`,className:`chk`,checked:m.has(e.rel),onChange:()=>T(e.rel),onClick:e=>e.stopPropagation(),"aria-label":`Select ${e.rel}`}),(0,C.jsx)(`span`,{className:`fname`,children:e.rel}),(0,C.jsxs)(`span`,{className:`badge ${n}`,children:[(0,C.jsx)(`span`,{className:`dot`}),e.status]}),(0,C.jsxs)(`span`,{className:`dim mono`,style:{marginLeft:`auto`,fontSize:11},children:[e.diff.length,` lines`]}),(0,C.jsx)(`button`,{className:`iconbtn`,onClick:()=>N(e.rel),style:{transform:t?`rotate(90deg)`:`none`},"aria-label":t?`Collapse ${e.rel}`:`Expand ${e.rel}`,"aria-expanded":t,children:(0,C.jsx)(i,{name:`chevron`})})]}),t&&(0,C.jsx)(`div`,{className:`diff-body`,children:e.diff.map((e,t)=>(0,C.jsx)(`div`,{className:`diff-line ${V(e)}`,children:e},t))})]},e.rel)})})]})]})}function U({group:e,i:t}){let n=e.problems.length===0,[r,a]=(0,S.useState)(!n);return(0,C.jsxs)(`div`,{className:`card check rise ${n?``:`bad`} ${r?`open`:``}`,style:{"--i":t*.6},children:[(0,C.jsxs)(`button`,{className:`check-head`,onClick:()=>a(e=>!e),disabled:n,style:{cursor:n?`default`:`pointer`},"aria-expanded":n?void 0:r,children:[(0,C.jsx)(`span`,{className:`feed-dot ${n?`ok`:`bad`}`,style:{width:9,height:9}}),(0,C.jsx)(`h3`,{children:e.label}),(0,C.jsxs)(`span`,{className:`badge ${n?`ok`:`bad`}`,children:[(0,C.jsx)(`span`,{className:`dot`}),n?`clean`:`${e.problems.length} problem${e.problems.length===1?``:`s`}`]}),!n&&(0,C.jsx)(i,{name:`chevron`,className:`chev glyph`})]}),!n&&r&&(0,C.jsx)(`div`,{className:`check-body`,children:e.problems.map(e=>(0,C.jsxs)(`div`,{className:`problem`,children:[(0,C.jsx)(`span`,{className:`x`,children:`✕`}),(0,C.jsx)(`span`,{children:e})]},e))})]})}function W(){let{data:e,error:t,reload:n,setData:r}=p(()=>_.doctor(),[]);return t?(0,C.jsx)(g,{error:t}):(0,C.jsxs)(`div`,{className:`narrow`,children:[(0,C.jsxs)(`div`,{className:`head-row mb-16`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{className:`h`,children:`Doctor`}),(0,C.jsx)(`p`,{className:`sub`,children:`Every check builds each theme in a sandbox and validates the result: token resolution, link integrity, parity, and drift.`})]}),(0,C.jsxs)(`button`,{className:`btn ghost`,onClick:()=>{r(null),n()},disabled:!e,children:[(0,C.jsx)(i,{name:`refresh`}),e?`Re-run checks`:`Running…`]})]}),e?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`card pad-md mb-16`,children:(0,C.jsxs)(`div`,{className:`row wrap between gap-12`,children:[(0,C.jsxs)(`div`,{className:`row`,style:{gap:10,flexWrap:`wrap`},children:[(0,C.jsxs)(`span`,{className:`dim mono`,style:{fontSize:12},children:[`validated `,e.themes.length,` theme`,e.themes.length===1?``:`s`]}),e.themes.map(e=>(0,C.jsx)(`span`,{className:`badge`,style:{textTransform:`capitalize`},children:e},e))]}),e.ok?(0,C.jsxs)(`span`,{className:`badge ok`,children:[(0,C.jsx)(`span`,{className:`dot`}),`all clean`]}):(0,C.jsxs)(`span`,{className:`badge bad`,children:[(0,C.jsx)(`span`,{className:`dot`}),e.problems.length,` problem`,e.problems.length===1?``:`s`]})]})}),(0,C.jsx)(`div`,{className:`stack gap-12`,children:e.groups.map((e,t)=>(0,C.jsx)(U,{group:e,i:t},e.label))})]}):(0,C.jsx)(h,{label:`Running every check (builds each theme in a sandbox)…`})]})}function G(){let e=u(),[t,n]=(0,S.useState)(!1),[a,o]=(0,S.useState)(!1);return t?(0,C.jsxs)(`p`,{className:`sub`,children:[`Server stopped. You can close this tab and reopen any time with `,(0,C.jsx)(`code`,{children:`geneseed web`}),`.`]}):(0,C.jsxs)(`div`,{className:`row`,children:[(0,C.jsxs)(`button`,{className:`btn ghost`,onClick:async()=>{if(await e(`Restart the local Geneseed server? The console reconnects in a moment.`,{title:`Restart the server?`,confirmLabel:`Restart`})){o(!0);try{await _.restart()}catch{}f(r)}},disabled:a,children:[(0,C.jsx)(i,{name:`refresh`}),a?`Restarting…`:`Restart server`]}),(0,C.jsxs)(`button`,{className:`btn ghost`,onClick:async()=>{if(await e(`Stop the local Geneseed server? The console goes offline until you start it again.`,{title:`Stop the server?`,confirmLabel:`Stop server`})){try{await _.shutdown()}catch{}n(!0)}},disabled:a,children:[(0,C.jsx)(i,{name:`x`}),`Stop server`]})]})}var K=`https://github.com/Arylmera/Geneseed`,q=`https://github.com/Arylmera`;function J(){let[e,t]=(0,S.useState)(K),[n,r]=(0,S.useState)(!0);return(0,S.useEffect)(()=>{Promise.resolve(_.docsPage?.(`about`)).then(e=>{e?.repo&&(t(e.repo),r(!!e.repo_is_github))}).catch(()=>{})},[]),(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`About`})}),(0,C.jsx)(`p`,{className:`sub mb-16`,children:`Geneseed is a portable, theme-able harness you implant once and use everywhere to grow a disciplined AI coding agent. One canonical source, many voices, MIT-licensed.`}),(0,C.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,C.jsxs)(`a`,{className:`btn ghost`,href:e,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(i,{name:`github`}),n?`Source on GitHub`:`Source repo`]}),n&&(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`a`,{className:`btn ghost`,href:e+`/issues`,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(i,{name:`external`}),`Issues`]}),(0,C.jsxs)(`a`,{className:`btn ghost`,href:e+`/blob/main/LICENSE`,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(i,{name:`external`}),`MIT License`]})]})]})]}),(0,C.jsxs)(`div`,{className:`card pad-lg`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Creator`})}),(0,C.jsxs)(`p`,{className:`sub mb-16`,children:[`Geneseed is built by `,(0,C.jsx)(`strong`,{children:`Guillaume Lemer`}),`. It started as a personal, Obsidian-vault-grown agent operating system and was distilled into the repo you are running. Implant it once, and a disciplined agent grows around the same inherited rules, skills, and memory in every repo it follows you into.`]}),(0,C.jsx)(`p`,{className:`sub mb-16`,children:`If you find this useful, a star on the repo or an issue with feedback is the best way to help shape what comes next.`}),(0,C.jsx)(`div`,{className:`row wrap gap-10`,children:(0,C.jsxs)(`a`,{className:`btn ghost`,href:q,target:`_blank`,rel:`noreferrer`,children:[(0,C.jsx)(i,{name:`github`}),`@Arylmera on GitHub`]})})]})]})}function Y({overview:e,onAction:t,flavour:n,onFlavour:r,accentMode:c,onAccentMode:l,layout:f,onLayout:p}){let h=u(),g=e?.install,_=e?.footprint,v=async e=>{g&&e!==_&&await h(`Rebuild ${g.host} · ${g.scope} with the “${e}” footprint? It rebuilds in place, non-destructive.`,{title:`Change the footprint?`,confirmLabel:`Rebuild`})&&t?.(`install`,{...g,footprint:e})};return(0,C.jsxs)(`div`,{className:`narrow-lg`,children:[(0,C.jsx)(`div`,{className:`head-row mb-18`,children:(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h2`,{className:`h`,children:`Settings`}),(0,C.jsx)(`p`,{className:`sub`,children:`Console appearance, the footprint of the install you are viewing, machine maintenance (including the update), server control, and about. Each install is managed on the Hosts tab.`})]})}),n&&r&&(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Console direction`})}),(0,C.jsxs)(`p`,{className:`sub mb-16`,children:[s.length,` takes on the same data. Pick a direction; it applies instantly and persists across reloads.`]}),c&&l&&(0,C.jsxs)(`div`,{className:`dir-layout`,children:[(0,C.jsx)(`span`,{className:`tick`,id:`dir-accent-label`,children:`Accent`}),(0,C.jsx)(m,{value:c,onChange:l,labelledBy:`dir-accent-label`}),(0,C.jsx)(`span`,{className:`dir-layout-note sub`,role:`status`,"aria-live":`polite`,children:o(c)})]}),f&&p&&(0,C.jsxs)(`div`,{className:`dir-layout`,children:[(0,C.jsx)(`span`,{className:`tick`,id:`dir-layout-label`,children:`Overview view`}),(0,C.jsx)(d,{"aria-labelledby":`dir-layout-label`,children:a.map(e=>(0,C.jsx)(`button`,{className:f===e.id?`on`:``,onClick:()=>p(e.id),"aria-pressed":f===e.id,title:e.tagline,children:e.short},e.id))}),(0,C.jsx)(`span`,{className:`dir-layout-note sub`,role:`status`,"aria-live":`polite`,children:a.find(e=>e.id===f)?.tagline??``})]}),(0,C.jsx)(`div`,{className:`dir-grid`,children:s.map(e=>(0,C.jsxs)(`button`,{className:`dir-tile dir-${e.id} ${n===e.id?`on`:``}`,onClick:()=>r(e.id),"aria-pressed":n===e.id,children:[(0,C.jsxs)(`span`,{className:`dir-thumb`,"aria-hidden":`true`,children:[(0,C.jsx)(`span`,{className:`dir-thumb-rail`}),(0,C.jsx)(`span`,{className:`dir-thumb-bar`}),(0,C.jsx)(`span`,{className:`dir-thumb-bar`,style:{width:`70%`}}),(0,C.jsx)(`span`,{className:`dir-thumb-bar`,style:{width:`52%`}}),(0,C.jsx)(`span`,{className:`dir-thumb-dot`})]}),(0,C.jsxs)(`span`,{className:`dir-meta`,children:[(0,C.jsxs)(`span`,{className:`dir-name`,children:[e.short,n===e.id&&(0,C.jsx)(`span`,{className:`dir-check`,children:`● active`})]}),(0,C.jsx)(`span`,{className:`dir-tag`,children:e.tagline})]})]},e.id))})]}),g&&_&&(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Harness footprint`})}),(0,C.jsxs)(`p`,{className:`sub mb-16`,children:[`How much of the Rules `,(0,C.jsx)(`code`,{children:`AGENT.md`}),` carries inline each turn, for the current install (`,(0,C.jsxs)(`code`,{children:[g.host,` · `,g.scope]}),`). A token-cost dial; every Rule stays in force either way. Changing it rebuilds the install in place. `,(0,C.jsx)(`a`,{href:`#/docs/footprint`,children:`Learn more →`})]}),(0,C.jsxs)(`div`,{className:`dir-layout`,children:[(0,C.jsx)(`span`,{className:`tick`,id:`footprint-label`,children:`Footprint`}),(0,C.jsx)(d,{"aria-labelledby":`footprint-label`,children:[`full`,`lean`].map(e=>(0,C.jsx)(`button`,{className:_===e?`on`:``,onClick:()=>v(e),"aria-pressed":_===e,children:e},e))}),(0,C.jsx)(`span`,{className:`dir-layout-note sub`,role:`status`,"aria-live":`polite`,children:_===`lean`?`Lean: terse rule lines + a pointer to the full law file (~40% smaller, lighter context per turn).`:`Full: every Rule’s complete text and rationale inlined (maximum guidance, largest context).`})]})]}),(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Maintenance`})}),(0,C.jsxs)(`p`,{className:`sub mb-16`,children:[`Put `,(0,C.jsx)(`code`,{children:`geneseed`}),` on your PATH so it runs from any directory, or remove a global install. Your memory store is always kept. Each runs live in the console.`]}),(0,C.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,C.jsxs)(`button`,{className:`btn ghost`,onClick:()=>t(`update`),children:[(0,C.jsx)(i,{name:`download`}),`Update (git pull + rebuild)`]}),(0,C.jsxs)(`button`,{className:`btn ghost`,onClick:()=>t(`link`),children:[(0,C.jsx)(i,{name:`external`}),`Add to PATH`]}),(0,C.jsx)(`button`,{className:`btn ghost`,onClick:()=>t(`unlink`),children:`Remove from PATH`}),(0,C.jsxs)(`button`,{className:`btn ghost`,onClick:async()=>{await h(`Uninstall the global Geneseed harness? Your memory store is kept; everything else this install added is removed.`,{title:`Uninstall Geneseed?`,confirmLabel:`Uninstall`})&&t(`uninstall`)},children:[(0,C.jsx)(i,{name:`clear`}),`Uninstall`]})]})]}),(0,C.jsxs)(`div`,{className:`card pad-lg mb-16`,children:[(0,C.jsx)(`div`,{className:`card-head`,children:(0,C.jsx)(`h3`,{children:`Server`})}),(0,C.jsx)(`p`,{className:`sub mb-16`,children:`The console runs a small local server. Leave it running in the background and reopen any time, or stop it when you are done.`}),(0,C.jsx)(G,{})]}),(0,C.jsx)(J,{})]})}function X({tab:e=`hosts`,overview:t,setup:n,themes:r,onAction:i,onMutated:a,dataRev:o,appearance:s={}}){let c=t?.doctor,l=t?.diff,u={edits:l?v(l)+(l.missing??0):null,doctor:c?c.ok?`clean`:c.problems.length:null};return(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`page-head`,children:(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`h1`,{className:`h`,children:`Installs`}),(0,C.jsx)(`p`,{className:`sub`,children:`Where the harness lives on this machine, and how each copy is built.`})]})}),(0,C.jsx)(x,{page:`installs`,current:e,badges:u,label:`Installs`}),e===`hosts`&&(0,C.jsx)(B,{onAction:i,themes:r,currentTheme:t?.theme,overview:t,setup:n,dataRev:o,onMutated:a}),e===`edits`&&(0,C.jsx)(H,{onMutated:a,onAction:i,dataRev:o}),e===`doctor`&&(0,C.jsx)(W,{}),e===`server`&&(0,C.jsx)(Y,{overview:t,onAction:i,...s})]})}export{X as default};
@@ -1 +1 @@
1
- import{n as e,s as t}from"./sections-GalMS0Zv.js";import{i as n,t as r}from"./react-B9Z_tXRV.js";import{t as i}from"./drawable-CoIulEH2.js";import{$ as a,B as o,D as s,G as c,J as l,K as u,L as d,O as f,Q as p,U as m,W as h,X as g,Y as _,Z as v,_t as y,at as b,ct as x,d as S,et as C,ft as w,ht as T,it as E,k as D,lt as O,mt as k,nt as A,ot as j,q as M,rt as N,st as P,tt as F,ut as I,vt as L,z as R}from"./index-BMwSp8BP.js";function z(e){return A((e.iterationDuration+e._loopDelay)*e.iterationCount-e._loopDelay)||1e-11}function B(e,t,n,r,i,o){let s=b(e.duration)&&e.duration<=1e-11?n-T:n;t.composition&&a(t,s,1,1,y.AUTO);let c=r?new u(r,e,t,s,!1,i,o):new g(e,t,s);return t.composition&&c.init(!0),F(t,c),N(t,e=>{let n=e._offset+e._delay+e.duration;n>t.iterationDuration&&(t.iterationDuration=n)}),t.duration=z(t),t}var V=0,H=class extends g{constructor(e={}){super(e,null,0),++V,this.id=x(e.id)?V:e.id,this.duration=0,this.labels={};let t=e.defaults,n=w.defaults;this.defaults=t?O(t,n):n,this.composition=C(e.composition,!0),this.onRender=e.onRender||n.onRender;let r=C(e.playbackEase,n.playbackEase);this._ease=r?l(r):null,this.iterationDuration=0}add(e,t,n){let r=j(t),i=j(e);if(r||i){if(this._hasChildren=!0,r){let r=t,i=w.editor&&w.editor.addTimelineChild,a=n&&n.type===`Stagger`&&w.editor,o=E(n)?n:null;if(o||a){let t=_(e),a=this.duration,s=this.iterationDuration,l=r.id,u=0,d=t.length,f=i?i(e,r,this.id,n,d):null,p=o||w.editor.resolveStagger(n.defaultValue);t.forEach(e=>{let n={...f||r};this.duration=a,this.iterationDuration=s,x(l)||(n.id=l+`-`+u);let i=c(this,p(e,u,t,null,this));B(n,this,i,e,u,t),u++})}else{let t=i?i(e,r,this.id,n):r,a=n&&n.type?n.defaultValue:n;B(t,this,c(this,a),e)}}else B(e,this,c(this,t));return this.composition&&this.init(!0),this}}sync(e,t){if(x(e)||e&&x(e.pause))return this;e.pause();let n=+(e.effect?e.effect.getTiming().duration:e.duration);!x(e)&&!x(e.persist)&&(e.persist=!0);let r=w.editor,i=r&&r.addTimelineChild;r&&r.addTimelineSync&&(t=r.addTimelineSync(e,t,this.id),r.addTimelineChild=null);let a=this.add(e,{currentTime:[0,n],duration:n,delay:0,ease:`linear`,playbackEase:`linear`},t);return r&&(r.addTimelineChild=i),a}set(e,t,n){return x(t)?this:(t.duration=T,t.composition=k.replace,this.add(e,t,n))}call(e,t){return x(e)||e&&!E(e)?this:(w.editor&&w.editor.addTimelineCall&&(t=w.editor.addTimelineCall(e,t,this.id)),this.add({duration:0,delay:0,onComplete:()=>e(this)},t))}label(e,t){return x(e)||e&&!P(e)?this:(w.editor&&w.editor.addTimelineLabel&&(t=w.editor.addTimelineLabel(e,t,this.id)),this.labels[e]=c(this,t),this)}remove(e,t){return v(_(e),this,t),this}stretch(e){let t=this.duration;if(t===I(e))return this;let n=e/t,r=this.labels;N(this,e=>e.stretch(e.duration*n));for(let e in r)r[e]*=n;return super.stretch(e)}refresh(){return N(this,e=>{e.refresh&&e.refresh()}),this}revert(){return super.revert(),N(this,e=>e.revert,!0),p(this)}then(e){return super.then(e)}},U=e=>w.editor?w.editor.addTimeline(e):new H(e).init(),W=t(n(),1),G=r(),K=.62,q=(e,t)=>String(e).length*t*K;function J(e,t){let n=0;for(let t of e){if(t.t===``||t.t==null)continue;let e=q(t.t,t.size)/2;n=Math.max(n,Math.hypot(e,t.dy-t.size*.75),Math.hypot(e,t.dy+t.size*.25))}return Math.ceil(n+t)}function Y(e,t,n=0){let r=t.x-e.x,i=t.y-e.y,a=Math.hypot(r,i)||1,o=r/a,s=i/a,c=e.x+o*e.r,l=e.y+s*e.r,u=t.x-o*t.r,d=t.y-s*t.r,f=n*a,p=e=>e.toFixed(1);return`M${p(c)} ${p(l)} C${p(c+o*a*.3-s*f)} ${p(l+s*a*.3+o*f)} ${p(u-o*a*.3-s*f)} ${p(d-s*a*.3+o*f)} ${p(u)} ${p(d)}`}var X=!1,Z=!1,Q=850;function $({hash:e,label:t,part:n,children:r}){return(0,G.jsx)(`g`,{className:`cm-node`,"data-cm":n,role:`button`,tabIndex:0,"aria-label":t,onClick:()=>d(e),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),d(e))},children:r})}function ee({overview:e,dataRev:t}){let{data:n}=D(()=>L.catalog(`laws`),[t],`catalog:laws`),r=n?.items??null,a=(0,W.useRef)(null),s=(0,W.useRef)(!0),c=(0,W.useRef)(null);(0,W.useLayoutEffect)(()=>{let e=a.current;if(!e||X||!R())return;X=!0;let t=t=>[...e.querySelectorAll(t)],n=t(`[data-cm="hub"]`),r=t(`[data-cm="sat"]`),l=t(`[data-cm="gov"]`),u=t(`.cm-edge-gov`),d=t(`.cm-note, .cm-govern-label`),f=i(t(`.cm-edge`));h([...n,...r,...l],{opacity:0,scale:.7}),h([...u,...d],{opacity:0}),h(f,{draw:`0 0`});let p=U({autoplay:!1,defaults:{ease:`outExpo`}}).add(n,{opacity:1,scale:1,duration:450},0).add(f,{draw:`0 1`,duration:380,delay:m(70)},140).add(r,{opacity:1,scale:1,duration:420,delay:m(70)},260).add(u,{opacity:1,duration:300,delay:m(50)},420).add(l,{opacity:1,scale:1,duration:380,delay:m(50)},470).add(d,{opacity:1,duration:300},520);s.current=!1;let g=()=>p.complete(),_=()=>{p.play(),g=o(p,Q),s.current=!0,c.current?.()};if(typeof IntersectionObserver>`u`)return _(),()=>g();let v=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(v.disconnect(),_())},{threshold:.33});return v.observe(e),()=>{v.disconnect(),s.current=!0,g()}},[]);let l=e?.counts||{},u=f(l),d=[];for(let e of(r||[]).filter(e=>e.tier===`doctrine`)){let t=d.find(t=>t.id===e.pack);t||d.push(t={id:e.pack,on:0}),e.active!==!1&&(t.on+=1)}let p=e?.footprint===`lean`?`lean — first line only`:`full text inlined`,g={x:330,y:165,r:J([{t:`Constitution`,size:17,dy:-12},{t:`${u} rules in force`,size:10,dy:8},{t:p,size:8.5,dy:24}],12)},_={x:126,y:95,r:J([{t:`Ethos`,size:12.5,dy:-7},{t:`${l.ontology??0} sections`,size:10,dy:10}],11)},v={x:560,y:78,r:J([{t:`Invariants`,size:12.5,dy:-6},{t:`${l.laws??0}`,size:13,dy:12}],11)},y={x:560,y:252,r:J([{t:`Doctrines`,size:12.5,dy:-6},{t:`${l.doctrines?.rules??0}`,size:13,dy:12}],11)},b=(e,t,n,r)=>({x:e,y:t,label:n,count:r,r:J([{t:n,size:10.5,dy:-2},{t:`${r}`,size:9,dy:10}],9)}),x=[{...b(812,52,`Skills`,l.skills??0),hash:`#/skills`,from:v},{...b(820,126,`Agents`,l.agents??0),hash:`#/agents`,from:v},{...b(816,232,`Memory`,l.memory??0),hash:`#/section/memory`,from:y},{...b(812,300,`Wiki`,l.wiki??0),hash:`#/section/wiki`,from:y}],C={rx:122,ry:68,from:212,to:112},w=d.map((e,t)=>{let n=(d.length===1?(C.from+C.to)/2:C.from+(C.to-C.from)*t/(d.length-1))*Math.PI/180;return{...e,x:y.x+C.rx*Math.cos(n),y:y.y+C.ry*Math.sin(n),r:J([{t:e.id,size:7.5,dy:-2},{t:`${e.on}`,size:7.5,dy:8}],4)}}),T=w.length;return(0,W.useLayoutEffect)(()=>{let e=a.current;if(!e||!T||Z||!R())return;Z=!0;let t=[...e.querySelectorAll(`.cm-mini > g`)];h(t,{opacity:0,scale:.5});let n=()=>h(t,{opacity:1,scale:1}),r=()=>{c.current=null;let e=M(t,{opacity:1,scale:1,duration:380,delay:m(45,{start:420}),ease:`outExpo`});n=o(e,420+45*T+380)};return s.current?r():c.current=r,()=>{c.current=null,n()}},[T]),(0,G.jsxs)(`svg`,{ref:a,className:`cmap`,viewBox:`0 0 940 350`,role:`group`,"aria-label":`The constitution map`,children:[(0,G.jsx)(`path`,{d:Y(g,_,.05),className:`cm-edge`}),(0,G.jsx)(`path`,{d:Y(g,v,-.07),className:`cm-edge`}),(0,G.jsx)(`path`,{d:Y(g,y,.07),className:`cm-edge`}),x.map(e=>(0,G.jsx)(`path`,{d:Y(e.from,e,.03),className:`cm-edge-gov`},`e-${e.label}`)),(0,G.jsxs)($,{hash:`#/laws`,part:`hub`,label:`Constitution: ${u} rules in force`,children:[(0,G.jsx)(`circle`,{cx:g.x,cy:g.y,r:g.r,className:`cm-hub-disc`}),(0,G.jsx)(`text`,{x:g.x,y:g.y-12,textAnchor:`middle`,className:`cm-hub-name`,children:`Constitution`}),(0,G.jsxs)(`text`,{x:g.x,y:g.y+8,textAnchor:`middle`,className:`cm-hub-num`,children:[u,` rules in force`]}),(0,G.jsx)(`text`,{x:g.x,y:g.y+24,textAnchor:`middle`,className:`cm-note`,children:p})]}),(0,G.jsxs)($,{hash:`#/laws`,part:`sat`,label:`Ethos: ${l.ontology??0} sections`,children:[(0,G.jsx)(`circle`,{cx:_.x,cy:_.y,r:_.r,className:`cm-sat-disc`}),(0,G.jsx)(`text`,{x:_.x,y:_.y-7,textAnchor:`middle`,className:`cm-sat-name`,children:`Ethos`}),(0,G.jsxs)(`text`,{x:_.x,y:_.y+10,textAnchor:`middle`,className:`cm-sat-num`,children:[l.ontology??0,` sections`]})]}),(0,G.jsx)(`text`,{x:_.x,y:_.y+_.r+16,textAnchor:`middle`,className:`cm-note`,children:`how it thinks, not a rule`}),(0,G.jsxs)($,{hash:`#/laws`,part:`sat`,label:`Invariants: ${l.laws??0}, never broken`,children:[(0,G.jsx)(`circle`,{cx:v.x,cy:v.y,r:v.r,className:`cm-sat-disc`}),(0,G.jsx)(`text`,{x:v.x,y:v.y-6,textAnchor:`middle`,className:`cm-sat-name`,children:`Invariants`}),(0,G.jsx)(`text`,{x:v.x,y:v.y+12,textAnchor:`middle`,className:`cm-sat-big`,children:l.laws??0})]}),(0,G.jsx)(`text`,{x:v.x,y:v.y+v.r+16,textAnchor:`middle`,className:`cm-note`,children:`never broken`}),(0,G.jsxs)($,{hash:`#/laws`,part:`sat`,label:`Doctrines: ${l.doctrines?.rules??0} rules chosen at build`,children:[(0,G.jsx)(`circle`,{cx:y.x,cy:y.y,r:y.r,className:`cm-sat-disc`}),(0,G.jsx)(`text`,{x:y.x,y:y.y-6,textAnchor:`middle`,className:`cm-sat-name`,children:`Doctrines`}),(0,G.jsx)(`text`,{x:y.x,y:y.y+12,textAnchor:`middle`,className:`cm-sat-big`,children:l.doctrines?.rules??0})]}),(0,G.jsx)(`text`,{x:y.x+22,y:y.y+y.r+20,className:`cm-note`,children:l.doctrines?`chosen at build · ${l.doctrines.active}/${l.doctrines.total} packs lit`:`chosen at build`}),(0,G.jsx)(`g`,{className:`cm-mini`,children:w.map(e=>(0,G.jsxs)(`g`,{children:[(0,G.jsx)(`circle`,{cx:e.x,cy:e.y,r:e.r,className:`cm-pack-disc`,style:{stroke:S(e.id)}}),(0,G.jsx)(`text`,{x:e.x,y:e.y-2,textAnchor:`middle`,className:`cm-pack-id`,children:e.id}),(0,G.jsx)(`text`,{x:e.x,y:e.y+8,textAnchor:`middle`,style:{fill:S(e.id)},children:e.on})]},e.id))}),(0,G.jsx)(`text`,{x:866,y:16,textAnchor:`middle`,className:`cm-govern-label`,children:`GOVERNS THE HARNESS`}),x.map(e=>(0,G.jsxs)($,{hash:e.hash,part:`gov`,label:`${e.label}: ${e.count}`,children:[(0,G.jsx)(`circle`,{cx:e.x,cy:e.y,r:e.r,className:`cm-gov-disc`}),(0,G.jsx)(`text`,{x:e.x,y:e.y-2,textAnchor:`middle`,className:`cm-gov-name`,children:e.label}),(0,G.jsx)(`text`,{x:e.x,y:e.y+10,textAnchor:`middle`,className:`cm-gov-num`,children:e.count})]},e.label)),(0,G.jsx)(`text`,{x:_.x,y:228,textAnchor:`middle`,className:`cm-note`,children:`tap any node to open its ledger`})]})}function te(){let e=new Date,t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function ne({counts:t}){let n=[{label:e.skills.label,n:t.skills??0,hash:`#/skills`},{label:`Rules in force`,n:f(t),hash:`#/laws`},{label:e.agents.label,n:t.agents??0,hash:`#/agents`},{label:e.memory.label,n:t.memory??0,hash:`#/section/memory`},{label:e.notebook.label,n:t.notebook??0,hash:`#/section/notebook`},{label:e.wiki.label,n:t.wiki??0,hash:`#/section/wiki`},{label:e.config.label,n:t.config??0,hash:`#/section/config`}],r=Math.max(...n.map(e=>e.n),1);return(0,G.jsxs)(`div`,{className:`card pad-lg jr-card`,children:[(0,G.jsxs)(`div`,{className:`card-head`,children:[(0,G.jsx)(`h3`,{children:`Growth rings`}),(0,G.jsx)(`span`,{className:`tick right`,children:`by section`})]}),n.map(e=>(0,G.jsxs)(`button`,{className:`jr-ring`,onClick:()=>d(e.hash),children:[(0,G.jsx)(`span`,{className:`jr-ring-label`,children:e.label}),(0,G.jsx)(`span`,{className:`jr-ring-track`,children:(0,G.jsx)(`span`,{className:`jr-ring-fill`,style:{width:`${e.n/r*100}%`}})}),(0,G.jsx)(`span`,{className:`jr-ring-num`,children:e.n})]},e.label))]})}function re({recent:e,buildEpoch:t}){let n=e?.items||[],r=e?.skipped||[];return(0,G.jsxs)(`div`,{className:`card pad-lg jr-card`,children:[(0,G.jsxs)(`div`,{className:`card-head`,children:[(0,G.jsx)(`h3`,{children:`Freshly grown`}),(0,G.jsx)(`span`,{className:`tick right`,children:`newest`})]}),e?n.length===0?(0,G.jsx)(`p`,{className:`sub`,children:`Nothing here carries a date yet.`}):n.slice(0,5).map(e=>(0,G.jsxs)(`button`,{className:`jr-fresh`,onClick:()=>d(`#/item/${e.type}/${encodeURIComponent(e.name)}`),children:[(0,G.jsx)(`span`,{className:`jr-fresh-kind`,children:e.section}),(0,G.jsx)(`span`,{className:`jr-fresh-name`,children:e.title}),(0,G.jsx)(`span`,{className:`jr-fresh-when`,children:s(e.mtime)})]},`${e.section}:${e.name}`)):(0,G.jsx)(`p`,{className:`sub`,children:`Reading the shelves…`}),r.length>0&&(0,G.jsxs)(`p`,{className:`sub jr-skipped`,children:[`Not dated: `,r.join(`, `),` — too many files to stat on every load.`]}),(0,G.jsxs)(`p`,{className:`jr-care`,children:[t?`Last built ✓ ${s(t)}`:`Never built here`,` ·`,` `,(0,G.jsx)(`button`,{className:`jr-go`,onClick:()=>d(`#/activity`),children:`log →`})]})]})}function ie({overview:e,recent:t,onAction:n,onDirection:r,dataRev:i}){let a=e?.counts||{};return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`head-row jr-head`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsxs)(`div`,{className:`eyebrow`,children:[`Field journal · `,te()]}),(0,G.jsx)(`h1`,{className:`h`,children:`Today in this harness`})]}),(0,G.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,G.jsx)(`button`,{className:`btn primary`,onClick:()=>n?.(`update`),children:`Update & rebuild`}),(0,G.jsx)(`button`,{className:`btn`,onClick:()=>d(`#/doctor`),children:`Doctor`})]})]}),(0,G.jsxs)(`div`,{className:`jr-row2`,children:[(0,G.jsx)(ne,{counts:a}),(0,G.jsx)(re,{recent:t,buildEpoch:e?.build_epoch})]}),(0,G.jsxs)(`div`,{className:`card pad-lg jr-map`,children:[(0,G.jsxs)(`div`,{className:`card-head`,children:[(0,G.jsx)(`h3`,{children:`The Constitution — and the harness it governs`}),(0,G.jsx)(`button`,{className:`jr-go right`,onClick:()=>d(`#/laws`),children:`open →`})]}),(0,G.jsx)(ee,{overview:e,dataRev:i})]}),(0,G.jsxs)(`p`,{className:`sub jr-others`,children:[`Other views:`,` `,(0,G.jsx)(`button`,{className:`jr-go`,onClick:()=>r?.(`lineage`),children:`Lineage`}),` `,`·`,` `,(0,G.jsx)(`button`,{className:`jr-go`,onClick:()=>r?.(`operator`),children:`Operator`})]})]})}export{ie as default};
1
+ import{n as e,s as t}from"./sections-GalMS0Zv.js";import{i as n,t as r}from"./react-B9Z_tXRV.js";import{t as i}from"./drawable-BiwaOo6x.js";import{$ as a,B as o,D as s,G as c,J as l,K as u,L as d,O as f,Q as p,U as m,W as h,X as g,Y as _,Z as v,_t as y,at as b,ct as x,d as S,et as C,ft as w,ht as T,it as E,k as D,lt as O,mt as k,nt as A,ot as j,q as M,rt as N,st as P,tt as F,ut as I,vt as L,z as R}from"./index-C1yil5j1.js";function z(e){return A((e.iterationDuration+e._loopDelay)*e.iterationCount-e._loopDelay)||1e-11}function B(e,t,n,r,i,o){let s=b(e.duration)&&e.duration<=1e-11?n-T:n;t.composition&&a(t,s,1,1,y.AUTO);let c=r?new u(r,e,t,s,!1,i,o):new g(e,t,s);return t.composition&&c.init(!0),F(t,c),N(t,e=>{let n=e._offset+e._delay+e.duration;n>t.iterationDuration&&(t.iterationDuration=n)}),t.duration=z(t),t}var V=0,H=class extends g{constructor(e={}){super(e,null,0),++V,this.id=x(e.id)?V:e.id,this.duration=0,this.labels={};let t=e.defaults,n=w.defaults;this.defaults=t?O(t,n):n,this.composition=C(e.composition,!0),this.onRender=e.onRender||n.onRender;let r=C(e.playbackEase,n.playbackEase);this._ease=r?l(r):null,this.iterationDuration=0}add(e,t,n){let r=j(t),i=j(e);if(r||i){if(this._hasChildren=!0,r){let r=t,i=w.editor&&w.editor.addTimelineChild,a=n&&n.type===`Stagger`&&w.editor,o=E(n)?n:null;if(o||a){let t=_(e),a=this.duration,s=this.iterationDuration,l=r.id,u=0,d=t.length,f=i?i(e,r,this.id,n,d):null,p=o||w.editor.resolveStagger(n.defaultValue);t.forEach(e=>{let n={...f||r};this.duration=a,this.iterationDuration=s,x(l)||(n.id=l+`-`+u);let i=c(this,p(e,u,t,null,this));B(n,this,i,e,u,t),u++})}else{let t=i?i(e,r,this.id,n):r,a=n&&n.type?n.defaultValue:n;B(t,this,c(this,a),e)}}else B(e,this,c(this,t));return this.composition&&this.init(!0),this}}sync(e,t){if(x(e)||e&&x(e.pause))return this;e.pause();let n=+(e.effect?e.effect.getTiming().duration:e.duration);!x(e)&&!x(e.persist)&&(e.persist=!0);let r=w.editor,i=r&&r.addTimelineChild;r&&r.addTimelineSync&&(t=r.addTimelineSync(e,t,this.id),r.addTimelineChild=null);let a=this.add(e,{currentTime:[0,n],duration:n,delay:0,ease:`linear`,playbackEase:`linear`},t);return r&&(r.addTimelineChild=i),a}set(e,t,n){return x(t)?this:(t.duration=T,t.composition=k.replace,this.add(e,t,n))}call(e,t){return x(e)||e&&!E(e)?this:(w.editor&&w.editor.addTimelineCall&&(t=w.editor.addTimelineCall(e,t,this.id)),this.add({duration:0,delay:0,onComplete:()=>e(this)},t))}label(e,t){return x(e)||e&&!P(e)?this:(w.editor&&w.editor.addTimelineLabel&&(t=w.editor.addTimelineLabel(e,t,this.id)),this.labels[e]=c(this,t),this)}remove(e,t){return v(_(e),this,t),this}stretch(e){let t=this.duration;if(t===I(e))return this;let n=e/t,r=this.labels;N(this,e=>e.stretch(e.duration*n));for(let e in r)r[e]*=n;return super.stretch(e)}refresh(){return N(this,e=>{e.refresh&&e.refresh()}),this}revert(){return super.revert(),N(this,e=>e.revert,!0),p(this)}then(e){return super.then(e)}},U=e=>w.editor?w.editor.addTimeline(e):new H(e).init(),W=t(n(),1),G=r(),K=.62,q=(e,t)=>String(e).length*t*K;function J(e,t){let n=0;for(let t of e){if(t.t===``||t.t==null)continue;let e=q(t.t,t.size)/2;n=Math.max(n,Math.hypot(e,t.dy-t.size*.75),Math.hypot(e,t.dy+t.size*.25))}return Math.ceil(n+t)}function Y(e,t,n=0){let r=t.x-e.x,i=t.y-e.y,a=Math.hypot(r,i)||1,o=r/a,s=i/a,c=e.x+o*e.r,l=e.y+s*e.r,u=t.x-o*t.r,d=t.y-s*t.r,f=n*a,p=e=>e.toFixed(1);return`M${p(c)} ${p(l)} C${p(c+o*a*.3-s*f)} ${p(l+s*a*.3+o*f)} ${p(u-o*a*.3-s*f)} ${p(d-s*a*.3+o*f)} ${p(u)} ${p(d)}`}var X=!1,Z=!1,Q=850;function $({hash:e,label:t,part:n,children:r}){return(0,G.jsx)(`g`,{className:`cm-node`,"data-cm":n,role:`button`,tabIndex:0,"aria-label":t,onClick:()=>d(e),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),d(e))},children:r})}function ee({overview:e,dataRev:t}){let{data:n}=D(()=>L.catalog(`laws`),[t],`catalog:laws`),r=n?.items??null,a=(0,W.useRef)(null),s=(0,W.useRef)(!0),c=(0,W.useRef)(null);(0,W.useLayoutEffect)(()=>{let e=a.current;if(!e||X||!R())return;X=!0;let t=t=>[...e.querySelectorAll(t)],n=t(`[data-cm="hub"]`),r=t(`[data-cm="sat"]`),l=t(`[data-cm="gov"]`),u=t(`.cm-edge-gov`),d=t(`.cm-note, .cm-govern-label`),f=i(t(`.cm-edge`));h([...n,...r,...l],{opacity:0,scale:.7}),h([...u,...d],{opacity:0}),h(f,{draw:`0 0`});let p=U({autoplay:!1,defaults:{ease:`outExpo`}}).add(n,{opacity:1,scale:1,duration:450},0).add(f,{draw:`0 1`,duration:380,delay:m(70)},140).add(r,{opacity:1,scale:1,duration:420,delay:m(70)},260).add(u,{opacity:1,duration:300,delay:m(50)},420).add(l,{opacity:1,scale:1,duration:380,delay:m(50)},470).add(d,{opacity:1,duration:300},520);s.current=!1;let g=()=>p.complete(),_=()=>{p.play(),g=o(p,Q),s.current=!0,c.current?.()};if(typeof IntersectionObserver>`u`)return _(),()=>g();let v=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(v.disconnect(),_())},{threshold:.33});return v.observe(e),()=>{v.disconnect(),s.current=!0,g()}},[]);let l=e?.counts||{},u=f(l),d=[];for(let e of(r||[]).filter(e=>e.tier===`doctrine`)){let t=d.find(t=>t.id===e.pack);t||d.push(t={id:e.pack,on:0}),e.active!==!1&&(t.on+=1)}let p=e?.footprint===`lean`?`lean — first line only`:`full text inlined`,g={x:330,y:165,r:J([{t:`Constitution`,size:17,dy:-12},{t:`${u} rules in force`,size:10,dy:8},{t:p,size:8.5,dy:24}],12)},_={x:126,y:95,r:J([{t:`Ethos`,size:12.5,dy:-7},{t:`${l.ontology??0} sections`,size:10,dy:10}],11)},v={x:560,y:78,r:J([{t:`Invariants`,size:12.5,dy:-6},{t:`${l.laws??0}`,size:13,dy:12}],11)},y={x:560,y:252,r:J([{t:`Doctrines`,size:12.5,dy:-6},{t:`${l.doctrines?.rules??0}`,size:13,dy:12}],11)},b=(e,t,n,r)=>({x:e,y:t,label:n,count:r,r:J([{t:n,size:10.5,dy:-2},{t:`${r}`,size:9,dy:10}],9)}),x=[{...b(812,52,`Skills`,l.skills??0),hash:`#/skills`,from:v},{...b(820,126,`Agents`,l.agents??0),hash:`#/agents`,from:v},{...b(816,232,`Memory`,l.memory??0),hash:`#/section/memory`,from:y},{...b(812,300,`Wiki`,l.wiki??0),hash:`#/section/wiki`,from:y}],C={rx:122,ry:68,from:212,to:112},w=d.map((e,t)=>{let n=(d.length===1?(C.from+C.to)/2:C.from+(C.to-C.from)*t/(d.length-1))*Math.PI/180;return{...e,x:y.x+C.rx*Math.cos(n),y:y.y+C.ry*Math.sin(n),r:J([{t:e.id,size:7.5,dy:-2},{t:`${e.on}`,size:7.5,dy:8}],4)}}),T=w.length;return(0,W.useLayoutEffect)(()=>{let e=a.current;if(!e||!T||Z||!R())return;Z=!0;let t=[...e.querySelectorAll(`.cm-mini > g`)];h(t,{opacity:0,scale:.5});let n=()=>h(t,{opacity:1,scale:1}),r=()=>{c.current=null;let e=M(t,{opacity:1,scale:1,duration:380,delay:m(45,{start:420}),ease:`outExpo`});n=o(e,420+45*T+380)};return s.current?r():c.current=r,()=>{c.current=null,n()}},[T]),(0,G.jsxs)(`svg`,{ref:a,className:`cmap`,viewBox:`0 0 940 350`,role:`group`,"aria-label":`The constitution map`,children:[(0,G.jsx)(`path`,{d:Y(g,_,.05),className:`cm-edge`}),(0,G.jsx)(`path`,{d:Y(g,v,-.07),className:`cm-edge`}),(0,G.jsx)(`path`,{d:Y(g,y,.07),className:`cm-edge`}),x.map(e=>(0,G.jsx)(`path`,{d:Y(e.from,e,.03),className:`cm-edge-gov`},`e-${e.label}`)),(0,G.jsxs)($,{hash:`#/laws`,part:`hub`,label:`Constitution: ${u} rules in force`,children:[(0,G.jsx)(`circle`,{cx:g.x,cy:g.y,r:g.r,className:`cm-hub-disc`}),(0,G.jsx)(`text`,{x:g.x,y:g.y-12,textAnchor:`middle`,className:`cm-hub-name`,children:`Constitution`}),(0,G.jsxs)(`text`,{x:g.x,y:g.y+8,textAnchor:`middle`,className:`cm-hub-num`,children:[u,` rules in force`]}),(0,G.jsx)(`text`,{x:g.x,y:g.y+24,textAnchor:`middle`,className:`cm-note`,children:p})]}),(0,G.jsxs)($,{hash:`#/laws`,part:`sat`,label:`Ethos: ${l.ontology??0} sections`,children:[(0,G.jsx)(`circle`,{cx:_.x,cy:_.y,r:_.r,className:`cm-sat-disc`}),(0,G.jsx)(`text`,{x:_.x,y:_.y-7,textAnchor:`middle`,className:`cm-sat-name`,children:`Ethos`}),(0,G.jsxs)(`text`,{x:_.x,y:_.y+10,textAnchor:`middle`,className:`cm-sat-num`,children:[l.ontology??0,` sections`]})]}),(0,G.jsx)(`text`,{x:_.x,y:_.y+_.r+16,textAnchor:`middle`,className:`cm-note`,children:`how it thinks, not a rule`}),(0,G.jsxs)($,{hash:`#/laws`,part:`sat`,label:`Invariants: ${l.laws??0}, never broken`,children:[(0,G.jsx)(`circle`,{cx:v.x,cy:v.y,r:v.r,className:`cm-sat-disc`}),(0,G.jsx)(`text`,{x:v.x,y:v.y-6,textAnchor:`middle`,className:`cm-sat-name`,children:`Invariants`}),(0,G.jsx)(`text`,{x:v.x,y:v.y+12,textAnchor:`middle`,className:`cm-sat-big`,children:l.laws??0})]}),(0,G.jsx)(`text`,{x:v.x,y:v.y+v.r+16,textAnchor:`middle`,className:`cm-note`,children:`never broken`}),(0,G.jsxs)($,{hash:`#/laws`,part:`sat`,label:`Doctrines: ${l.doctrines?.rules??0} rules chosen at build`,children:[(0,G.jsx)(`circle`,{cx:y.x,cy:y.y,r:y.r,className:`cm-sat-disc`}),(0,G.jsx)(`text`,{x:y.x,y:y.y-6,textAnchor:`middle`,className:`cm-sat-name`,children:`Doctrines`}),(0,G.jsx)(`text`,{x:y.x,y:y.y+12,textAnchor:`middle`,className:`cm-sat-big`,children:l.doctrines?.rules??0})]}),(0,G.jsx)(`text`,{x:y.x+22,y:y.y+y.r+20,className:`cm-note`,children:l.doctrines?`chosen at build · ${l.doctrines.active}/${l.doctrines.total} packs lit`:`chosen at build`}),(0,G.jsx)(`g`,{className:`cm-mini`,children:w.map(e=>(0,G.jsxs)(`g`,{children:[(0,G.jsx)(`circle`,{cx:e.x,cy:e.y,r:e.r,className:`cm-pack-disc`,style:{stroke:S(e.id)}}),(0,G.jsx)(`text`,{x:e.x,y:e.y-2,textAnchor:`middle`,className:`cm-pack-id`,children:e.id}),(0,G.jsx)(`text`,{x:e.x,y:e.y+8,textAnchor:`middle`,style:{fill:S(e.id)},children:e.on})]},e.id))}),(0,G.jsx)(`text`,{x:866,y:16,textAnchor:`middle`,className:`cm-govern-label`,children:`GOVERNS THE HARNESS`}),x.map(e=>(0,G.jsxs)($,{hash:e.hash,part:`gov`,label:`${e.label}: ${e.count}`,children:[(0,G.jsx)(`circle`,{cx:e.x,cy:e.y,r:e.r,className:`cm-gov-disc`}),(0,G.jsx)(`text`,{x:e.x,y:e.y-2,textAnchor:`middle`,className:`cm-gov-name`,children:e.label}),(0,G.jsx)(`text`,{x:e.x,y:e.y+10,textAnchor:`middle`,className:`cm-gov-num`,children:e.count})]},e.label)),(0,G.jsx)(`text`,{x:_.x,y:228,textAnchor:`middle`,className:`cm-note`,children:`tap any node to open its ledger`})]})}function te(){let e=new Date,t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function ne({counts:t}){let n=[{label:e.skills.label,n:t.skills??0,hash:`#/skills`},{label:`Rules in force`,n:f(t),hash:`#/laws`},{label:e.agents.label,n:t.agents??0,hash:`#/agents`},{label:e.memory.label,n:t.memory??0,hash:`#/section/memory`},{label:e.notebook.label,n:t.notebook??0,hash:`#/section/notebook`},{label:e.wiki.label,n:t.wiki??0,hash:`#/section/wiki`},{label:e.config.label,n:t.config??0,hash:`#/section/config`}],r=Math.max(...n.map(e=>e.n),1);return(0,G.jsxs)(`div`,{className:`card pad-lg jr-card`,children:[(0,G.jsxs)(`div`,{className:`card-head`,children:[(0,G.jsx)(`h3`,{children:`Growth rings`}),(0,G.jsx)(`span`,{className:`tick right`,children:`by section`})]}),n.map(e=>(0,G.jsxs)(`button`,{className:`jr-ring`,onClick:()=>d(e.hash),children:[(0,G.jsx)(`span`,{className:`jr-ring-label`,children:e.label}),(0,G.jsx)(`span`,{className:`jr-ring-track`,children:(0,G.jsx)(`span`,{className:`jr-ring-fill`,style:{width:`${e.n/r*100}%`}})}),(0,G.jsx)(`span`,{className:`jr-ring-num`,children:e.n})]},e.label))]})}function re({recent:e,buildEpoch:t}){let n=e?.items||[],r=e?.skipped||[];return(0,G.jsxs)(`div`,{className:`card pad-lg jr-card`,children:[(0,G.jsxs)(`div`,{className:`card-head`,children:[(0,G.jsx)(`h3`,{children:`Freshly grown`}),(0,G.jsx)(`span`,{className:`tick right`,children:`newest`})]}),e?n.length===0?(0,G.jsx)(`p`,{className:`sub`,children:`Nothing here carries a date yet.`}):n.slice(0,5).map(e=>(0,G.jsxs)(`button`,{className:`jr-fresh`,onClick:()=>d(`#/item/${e.type}/${encodeURIComponent(e.name)}`),children:[(0,G.jsx)(`span`,{className:`jr-fresh-kind`,children:e.section}),(0,G.jsx)(`span`,{className:`jr-fresh-name`,children:e.title}),(0,G.jsx)(`span`,{className:`jr-fresh-when`,children:s(e.mtime)})]},`${e.section}:${e.name}`)):(0,G.jsx)(`p`,{className:`sub`,children:`Reading the shelves…`}),r.length>0&&(0,G.jsxs)(`p`,{className:`sub jr-skipped`,children:[`Not dated: `,r.join(`, `),` — too many files to stat on every load.`]}),(0,G.jsxs)(`p`,{className:`jr-care`,children:[t?`Last built ✓ ${s(t)}`:`Never built here`,` ·`,` `,(0,G.jsx)(`button`,{className:`jr-go`,onClick:()=>d(`#/activity`),children:`log →`})]})]})}function ie({overview:e,recent:t,onAction:n,onDirection:r,dataRev:i}){let a=e?.counts||{};return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`head-row jr-head`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsxs)(`div`,{className:`eyebrow`,children:[`Field journal · `,te()]}),(0,G.jsx)(`h1`,{className:`h`,children:`Today in this harness`})]}),(0,G.jsxs)(`div`,{className:`row wrap gap-10`,children:[(0,G.jsx)(`button`,{className:`btn primary`,onClick:()=>n?.(`update`),children:`Update & rebuild`}),(0,G.jsx)(`button`,{className:`btn`,onClick:()=>d(`#/doctor`),children:`Doctor`})]})]}),(0,G.jsxs)(`div`,{className:`jr-row2`,children:[(0,G.jsx)(ne,{counts:a}),(0,G.jsx)(re,{recent:t,buildEpoch:e?.build_epoch})]}),(0,G.jsxs)(`div`,{className:`card pad-lg jr-map`,children:[(0,G.jsxs)(`div`,{className:`card-head`,children:[(0,G.jsx)(`h3`,{children:`The Constitution — and the harness it governs`}),(0,G.jsx)(`button`,{className:`jr-go right`,onClick:()=>d(`#/laws`),children:`open →`})]}),(0,G.jsx)(ee,{overview:e,dataRev:i})]}),(0,G.jsxs)(`p`,{className:`sub jr-others`,children:[`Other views:`,` `,(0,G.jsx)(`button`,{className:`jr-go`,onClick:()=>r?.(`lineage`),children:`Lineage`}),` `,`·`,` `,(0,G.jsx)(`button`,{className:`jr-go`,onClick:()=>r?.(`operator`),children:`Operator`})]})]})}export{ie as default};