geneseed 3.7.0 → 3.9.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 (194) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/DESIGN.md +13 -10
  3. package/README.md +5 -5
  4. package/SETUP.md +2 -2
  5. package/SHIPPED.md +3 -3
  6. package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +1 -1
  7. package/adapters/opencode/README.md +3 -3
  8. package/adapters/opencode/plugins/geneseed-guard.js +9 -9
  9. package/adapters/opencode/plugins/geneseed-workflow.js +1 -1
  10. package/adapters/opencode/workflows/_runtime.js +2 -2
  11. package/adapters/opencode/workflows/dispatch.js +1 -1
  12. package/docs/extending.md +72 -40
  13. package/docs/web/harnesses.md +2 -2
  14. package/docs/web/plugin-guard.md +2 -2
  15. package/docs/web/rules.md +1 -1
  16. package/docs/web/themes-author.md +2 -2
  17. package/docs/web-ui.md +1 -1
  18. package/harness.config.json +1 -1
  19. package/js/README.md +4 -3
  20. package/js/build/driver.mjs +14 -5
  21. package/js/build/generate.mjs +90 -41
  22. package/js/build/render.mjs +6 -3
  23. package/js/build/source.mjs +105 -1
  24. package/js/build/stubs.mjs +7 -2
  25. package/js/cli-table.json +154 -5
  26. package/js/hosts/hooks.mjs +5 -5
  27. package/js/hosts/native.mjs +1 -1
  28. package/js/inspect/checks-authoring.mjs +149 -116
  29. package/js/inspect/inventory.mjs +1 -2
  30. package/js/inspect/status.mjs +40 -4
  31. package/js/ui/tui.mjs +1 -1
  32. package/js/web/api.mjs +6 -1
  33. package/package.json +1 -1
  34. package/registry.json +7 -0
  35. package/src/AGENT.md.tmpl +19 -15
  36. package/src/agents/_template.md +3 -3
  37. package/src/agents/advocate.md +3 -3
  38. package/src/agents/architect.md +3 -3
  39. package/src/agents/developer.md +4 -4
  40. package/src/agents/docs.md +3 -3
  41. package/src/agents/empiricist.md +4 -4
  42. package/src/agents/explorer.md +4 -4
  43. package/src/agents/framer.md +3 -3
  44. package/src/agents/historian.md +3 -3
  45. package/src/agents/operator.md +3 -3
  46. package/src/agents/pragmatist.md +3 -3
  47. package/src/agents/researcher.md +7 -7
  48. package/src/agents/reviewer.md +3 -3
  49. package/src/agents/security.md +3 -3
  50. package/src/agents/skeptic.md +3 -3
  51. package/src/agents/steward.md +3 -3
  52. package/src/agents/tester.md +3 -3
  53. package/src/agents/user-advocate.md +3 -3
  54. package/src/agents/visionary.md +3 -3
  55. package/src/doctrines/README.md +4 -3
  56. package/src/doctrines/comms.md +4 -4
  57. package/src/doctrines/craft.md +20 -20
  58. package/src/doctrines/ops.md +19 -19
  59. package/src/doctrines/process.md +20 -20
  60. package/src/doctrines/rigor.md +22 -22
  61. package/src/laws/universal.md +23 -44
  62. package/src/memory/README.md +3 -3
  63. package/src/modes/foreman.md +1 -1
  64. package/src/notebook/README.md +1 -1
  65. package/src/ontology/universal.md +7 -9
  66. package/src/postures/artisan.md +2 -2
  67. package/src/skills/_self-improvement.md +4 -4
  68. package/src/skills/_template.md +1 -1
  69. package/src/skills/brainstorm.md +3 -3
  70. package/src/skills/bruno-collection-generator.md +6 -6
  71. package/src/skills/bruno-test-writer.md +5 -5
  72. package/src/skills/ci-fix.md +4 -4
  73. package/src/skills/commit.md +11 -10
  74. package/src/skills/consolidate-memory.md +4 -4
  75. package/src/skills/council.md +2 -2
  76. package/src/skills/debug.md +4 -4
  77. package/src/skills/deps-audit.md +3 -3
  78. package/src/skills/develop.md +7 -7
  79. package/src/skills/document-project.md +6 -6
  80. package/src/skills/explain-changes/SKILL.md +69 -0
  81. package/src/skills/explain-changes/VENDOR.md +20 -0
  82. package/src/skills/explain-changes/scripts/render_changes.mjs +558 -0
  83. package/src/skills/forge-mcp.md +4 -4
  84. package/src/skills/fresh-eyes.md +4 -4
  85. package/src/skills/frontend-design.md +1 -1
  86. package/src/skills/geneseed.md +9 -8
  87. package/src/skills/git-archaeology.md +5 -5
  88. package/src/skills/git-rescue.md +7 -7
  89. package/src/skills/handoff.md +3 -3
  90. package/src/skills/ingest.md +5 -5
  91. package/src/skills/migrate.md +8 -8
  92. package/src/skills/parallel-agents.md +2 -2
  93. package/src/skills/pipeline.md +2 -2
  94. package/src/skills/plan.md +3 -3
  95. package/src/skills/ponytail.md +2 -2
  96. package/src/skills/profile.md +2 -2
  97. package/src/skills/prose.md +1 -1
  98. package/src/skills/prototype.md +1 -1
  99. package/src/skills/refactor.md +3 -3
  100. package/src/skills/release.md +5 -5
  101. package/src/skills/repo-map.md +4 -4
  102. package/src/skills/research.md +9 -9
  103. package/src/skills/review-response.md +4 -4
  104. package/src/skills/rule.md +3 -3
  105. package/src/skills/security-audit.md +5 -5
  106. package/src/skills/ship.md +5 -5
  107. package/src/skills/skill-forge.md +4 -4
  108. package/src/skills/wiki.md +5 -5
  109. package/src/skills/workflow.md +2 -3
  110. package/src/skills/worktree.md +4 -4
  111. package/themes/_TEMPLATE.json +38 -40
  112. package/themes/biker.json +38 -40
  113. package/themes/commentator.json +38 -40
  114. package/themes/cyberpunk.json +38 -40
  115. package/themes/gamer.json +38 -40
  116. package/themes/imperial.json +38 -40
  117. package/themes/joker.json +38 -40
  118. package/themes/marvin.json +38 -40
  119. package/themes/mean.json +38 -40
  120. package/themes/military.json +38 -40
  121. package/themes/neutral.json +38 -40
  122. package/themes/pirate.json +38 -40
  123. package/themes/sports.json +38 -40
  124. package/themes/verstappen.json +38 -40
  125. package/themes/wizard.json +38 -40
  126. package/web/dist/assets/Activity-DAzV-qQj.js +1 -0
  127. package/web/dist/assets/ActivityDetail-CwEwMtKl.js +1 -0
  128. package/web/dist/assets/Dashboard-C2ELBW-X.js +2 -0
  129. package/web/dist/assets/{Docs-DrJNDPwI.js → Docs-iZrvQP8J.js} +2 -2
  130. package/web/dist/assets/FilterInput-CVyqmYWM.js +1 -0
  131. package/web/dist/assets/GreenhouseView-Bq1QmaGO.js +2 -0
  132. package/web/dist/assets/Installs-BiqR8xdO.js +2 -0
  133. package/web/dist/assets/JournalView-6wilG5Zd.js +1 -0
  134. package/web/dist/assets/Laws-D8YXD_XE.js +3 -0
  135. package/web/dist/assets/Library-DwuTZ2-L.js +1 -0
  136. package/web/dist/assets/{Markdown-BQAvN8xx.js → Markdown-CkFyfgNf.js} +14 -14
  137. package/web/dist/assets/OperatorHudView-B-HVBqfY.js +2 -0
  138. package/web/dist/assets/Personal-BbUTmZQR.js +1 -0
  139. package/web/dist/assets/Tabs-_pjUFIEI.js +1 -0
  140. package/web/dist/assets/drawable-CoIulEH2.js +1 -0
  141. package/web/dist/assets/geist-mono-latin-400-normal-DTRLJnHl.woff2 +0 -0
  142. package/web/dist/assets/geist-mono-latin-500-normal-YINYabwD.woff2 +0 -0
  143. package/web/dist/assets/index-BMwSp8BP.js +2 -0
  144. package/web/dist/assets/index-CDPDk2vj.css +1 -0
  145. package/web/dist/assets/{react-DbkvxWG5.js → react-B9Z_tXRV.js} +1 -1
  146. package/web/dist/assets/sections-GalMS0Zv.js +1 -0
  147. package/web/dist/assets/usePoll-O0sJEw1Y.js +1 -0
  148. package/web/dist/index.html +4 -4
  149. package/web/src/pages/Laws.jsx +616 -361
  150. package/web/dist/assets/Activity-CH-7cPIM.js +0 -1
  151. package/web/dist/assets/ActivityDetail-DZvz0xS5.js +0 -1
  152. package/web/dist/assets/CatalogRow-DftXpZHY.js +0 -1
  153. package/web/dist/assets/Diff-DvwdG0L9.js +0 -2
  154. package/web/dist/assets/Doctor-OTmwmYZg.js +0 -1
  155. package/web/dist/assets/FilterInput-BakJLvaV.js +0 -1
  156. package/web/dist/assets/GreenhouseView-XxrAdriX.js +0 -2
  157. package/web/dist/assets/Harness-C_LYNk5c.js +0 -1
  158. package/web/dist/assets/JournalView-BcuyeEaR.js +0 -1
  159. package/web/dist/assets/Laws-CWHrTKY4.js +0 -3
  160. package/web/dist/assets/Library-CA9IHghn.js +0 -1
  161. package/web/dist/assets/OperatorHudView-BMRY1Tt4.js +0 -2
  162. package/web/dist/assets/Profile-wceET1JY.js +0 -1
  163. package/web/dist/assets/Rules-BEXvY4Tx.js +0 -1
  164. package/web/dist/assets/Settings-DS2zF0Ez.js +0 -1
  165. package/web/dist/assets/Skills-DahlOJuI.js +0 -1
  166. package/web/dist/assets/StatusBadge-Cg6j-NJL.js +0 -1
  167. package/web/dist/assets/activity-iWaWVtsR.js +0 -1
  168. package/web/dist/assets/audiowide-latin-400-normal-6GFCX7ni.woff2 +0 -0
  169. package/web/dist/assets/drawable-BTHjTzF7.js +0 -1
  170. package/web/dist/assets/geist-mono-latin-400-normal-DKaoCDn5.woff2 +0 -0
  171. package/web/dist/assets/geist-mono-latin-500-normal-C3sF8Y1B.woff2 +0 -0
  172. package/web/dist/assets/geist-mono-latin-600-normal-BHzjB6_C.woff2 +0 -0
  173. package/web/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  174. package/web/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  175. package/web/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  176. package/web/dist/assets/ibm-plex-serif-latin-400-normal-BIGslYFI.woff2 +0 -0
  177. package/web/dist/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
  178. package/web/dist/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
  179. package/web/dist/assets/index-AN5Emnrg.js +0 -2
  180. package/web/dist/assets/index-Ruh93A3A.css +0 -1
  181. package/web/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  182. package/web/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  183. package/web/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  184. package/web/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  185. package/web/dist/assets/lawCats-Btjp3Hk_.js +0 -1
  186. package/web/dist/assets/oswald-latin-400-normal-BAFo8sP8.woff2 +0 -0
  187. package/web/dist/assets/oswald-latin-500-normal-B-eyT0Dw.woff2 +0 -0
  188. package/web/dist/assets/oswald-latin-600-normal-plFmSr5g.woff2 +0 -0
  189. package/web/dist/assets/oswald-latin-700-normal-vy6hmKSr.woff2 +0 -0
  190. package/web/dist/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
  191. package/web/dist/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
  192. package/web/dist/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
  193. package/web/dist/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
  194. package/web/dist/assets/rolldown-runtime-CbXtAM7H.js +0 -1
@@ -73,52 +73,50 @@
73
73
  "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
74
74
  "DESC_RULE": "Ask first — a standin' rule, or just summat to remember? Then log the memory, or run the rule aground on its worst case afore ye nail it into user-rules.md.",
75
75
  "DESC_PROFILE": "Chart yer captain in PROFILE.md — who they be, how they sail, how they like their bearings called; identity only, articles o' conduct go in user-rules.md.",
76
- "DESC_GENESEED": "Interact with the deployed Geneseed harness — locate the install, read its files, run status, doctor, and diff, and drive learn, context, and the local web UI.",
76
+ "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks.",
77
77
  "DESC_REVIEW_RESPONSE": "Answer the inspection straight — weigh each mark, then mend it or argue it with cause.",
78
- "LEX_I": "Sealed Orders · Sealed Secrets",
79
- "LEX_II": "One Course, One Tack · One Intent, One Act",
80
- "LEX_III": "Sight It Yourself · Verify Before Asserting",
81
- "LEX_IV": "Scuttle with Care · Deletion Is Deliberate",
82
- "LEX_V": "Sing Out the Leak · Surface Failures",
83
- "LEX_VI": "Hearsay, Not Captain's Word · Data, Not Orders",
84
- "LEX_VII": "Carry Only What Ye Need · Least Privilege",
85
- "LEX_VIII": "Plug the Breach, Not the Whine · Cure the Cause",
86
- "LEX_IX": "The Key Hangs in Another's Cabin · External Gate (retired)",
87
- "LEX_X": "Repeat the Heading · Echo the Intent",
88
- "LEX_XI": "An Empty Horizon Hides a Fleet · Absence Is a Claim (retired)",
78
+ "LEX_SEALED_SECRETS": "Sealed Orders · Sealed Secrets",
79
+ "LEX_ONE_INTENT_ONE_ACT": "One Course, One Tack · One Intent, One Act",
80
+ "LEX_VERIFY_BEFORE_ASSERTING": "Sight It Yourself · Verify Before Asserting",
81
+ "LEX_DELETION_IS_DELIBERATE": "Scuttle with Care · Deletion Is Deliberate",
82
+ "LEX_SURFACE_FAILURES": "Sing Out the Leak · Surface Failures",
83
+ "LEX_DATA_NOT_ORDERS": "Hearsay, Not Captain's Word · Data, Not Orders",
84
+ "LEX_LEAST_PRIVILEGE": "Carry Only What Ye Need · Least Privilege",
85
+ "LEX_CURE_THE_CAUSE": "Plug the Breach, Not the Whine · Cure the Cause",
86
+ "LEX_ECHO_THE_INTENT": "Repeat the Heading · Echo the Intent",
89
87
  "PACK_CRAFT": "Shipwright",
90
88
  "PACK_RIGOR": "Soundings",
91
89
  "PACK_OPS": "Rigging",
92
90
  "PACK_PROCESS": "The Watch",
93
91
  "PACK_COMMS": "Signal Flags",
94
- "DOC_CRAFT_1": "Drill the Routine · Automate Repetition",
95
- "DOC_CRAFT_2": "Charts in English · English Configuration",
96
- "DOC_CRAFT_3": "Log in Step · Documentation in Step",
97
- "DOC_CRAFT_4": "Scout Before You Build · Search Before Creating",
98
- "DOC_CRAFT_5": "Keep to the Rigging · Respect Conventions",
99
- "DOC_CRAFT_6": "Mend Only the Sprung Plank · Smallest Viable Diff",
100
- "DOC_CRAFT_7": "One Ship's Log, Every Chart Copies It · One Writer Per Value",
101
- "DOC_RIGOR_1": "Safe to Run the Tide Twice · Idempotent by Default",
102
- "DOC_RIGOR_2": "Sound True, Not for Show · Honest Tests",
103
- "DOC_RIGOR_3": "Trials Rig the Work, Run Her Clean · Cover and Verify",
104
- "DOC_RIGOR_4": "A Lock Ye Never Picked Ain't a Lock · Prove the Gate",
105
- "DOC_RIGOR_5": "The Key Hangs in Another's Cabin · External Gate",
106
- "DOC_OPS_1": "Know What's in the Hold · Tool Discovery",
107
- "DOC_OPS_2": "No Line Left Snagged · Commands Must Return",
108
- "DOC_OPS_3": "Mend the Hull, Not the Figurehead · Edit the Source, Not the Surface",
109
- "DOC_OPS_4": "Scuttle Her Whole · Complete the Teardown",
110
- "DOC_OPS_5": "Mark How to Sound It, Not an Old Reading · Record the Probe, Not the Snapshot",
111
- "DOC_OPS_6": "Droppin' Anchor Don't Redraw the Charts · Restart Is Not Reload",
112
- "DOC_OPS_7": "One Longboat at a Time Past the Fort · Serialize Against a Rationed Resource",
113
- "DOC_PROCESS_1": "Enter the Log · Persist Insight",
114
- "DOC_PROCESS_2": "Chart Before You Sail · Plan Before Acting",
115
- "DOC_PROCESS_3": "Travel Light · Context Economy",
116
- "DOC_PROCESS_4": "Read the Charts First · Read the Docs First",
117
- "DOC_PROCESS_5": "The Captain's Word Before We Sail · Consent Before Push",
118
- "DOC_PROCESS_6": "Set Yer Bearing Out Before Ye Sail In · Bound the Loop",
119
- "DOC_PROCESS_7": "One Hand on the Wheel · One Writer Per File",
120
- "DOC_COMMS_1": "Every Prize Keeps Its Mark · Codes That Persist",
121
- "DOC_COMMS_2": "Chart Only Where the Currents Run · Structure Beside Prose",
92
+ "DOC_AUTOMATE_REPETITION": "Drill the Routine · Automate Repetition",
93
+ "DOC_ENGLISH_CONFIGURATION": "Charts in English · English Configuration",
94
+ "DOC_DOCUMENTATION_IN_STEP": "Log in Step · Documentation in Step",
95
+ "DOC_SEARCH_BEFORE_CREATING": "Scout Before You Build · Search Before Creating",
96
+ "DOC_RESPECT_CONVENTIONS": "Keep to the Rigging · Respect Conventions",
97
+ "DOC_SMALLEST_VIABLE_DIFF": "Mend Only the Sprung Plank · Smallest Viable Diff",
98
+ "DOC_ONE_WRITER_PER_VALUE": "One Ship's Log, Every Chart Copies It · One Writer Per Value",
99
+ "DOC_IDEMPOTENT_BY_DEFAULT": "Safe to Run the Tide Twice · Idempotent by Default",
100
+ "DOC_HONEST_TESTS": "Sound True, Not for Show · Honest Tests",
101
+ "DOC_COVER_AND_VERIFY": "Trials Rig the Work, Run Her Clean · Cover and Verify",
102
+ "DOC_PROVE_THE_GATE": "A Lock Ye Never Picked Ain't a Lock · Prove the Gate",
103
+ "DOC_EXTERNAL_GATE": "The Key Hangs in Another's Cabin · External Gate",
104
+ "DOC_TOOL_DISCOVERY": "Know What's in the Hold · Tool Discovery",
105
+ "DOC_COMMANDS_MUST_RETURN": "No Line Left Snagged · Commands Must Return",
106
+ "DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "Mend the Hull, Not the Figurehead · Edit the Source, Not the Surface",
107
+ "DOC_COMPLETE_THE_TEARDOWN": "Scuttle Her Whole · Complete the Teardown",
108
+ "DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "Mark How to Sound It, Not an Old Reading · Record the Probe, Not the Snapshot",
109
+ "DOC_RESTART_IS_NOT_RELOAD": "Droppin' Anchor Don't Redraw the Charts · Restart Is Not Reload",
110
+ "DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "One Longboat at a Time Past the Fort · Serialize Against a Rationed Resource",
111
+ "DOC_PERSIST_INSIGHT": "Enter the Log · Persist Insight",
112
+ "DOC_PLAN_BEFORE_ACTING": "Chart Before You Sail · Plan Before Acting",
113
+ "DOC_CONTEXT_ECONOMY": "Travel Light · Context Economy",
114
+ "DOC_READ_THE_DOCS_FIRST": "Read the Charts First · Read the Docs First",
115
+ "DOC_CONSENT_BEFORE_PUSH": "The Captain's Word Before We Sail · Consent Before Push",
116
+ "DOC_BOUND_THE_LOOP": "Set Yer Bearing Out Before Ye Sail In · Bound the Loop",
117
+ "DOC_ONE_WRITER_PER_FILE": "One Hand on the Wheel · One Writer Per File",
118
+ "DOC_CODES_THAT_PERSIST": "Every Prize Keeps Its Mark · Codes That Persist",
119
+ "DOC_STRUCTURE_BESIDE_PROSE": "Chart Only Where the Currents Run · Structure Beside Prose",
122
120
  "INTRO_DOC": "This file is the first thing a deckhand reads on signing aboard this repository.",
123
121
  "INTRO_AGENTS": "Send the right hand for focused work instead of sailing the whole ship yourself; each has one trade and brings back a clear report of what it did.",
124
122
  "INTRO_SKILLS": "A Skill is a drilled manoeuvre for a recurring task. Run the matching manoeuvre before you improvise.",
@@ -73,52 +73,50 @@
73
73
  "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
74
74
  "DESC_RULE": "Ask first — standing house rule, or just one for the notes? Then log the memory, or run the rule against the play that breaks it before it goes on the board in user-rules.md.",
75
75
  "DESC_PROFILE": "Write the scouting report in PROFILE.md — position, playing style, how they want the play called; identity only, team rules go on the board in user-rules.md.",
76
- "DESC_GENESEED": "Interact with the deployed Geneseed harness — locate the install, read its files, run status, doctor, and diff, and drive learn, context, and the local web UI.",
76
+ "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks.",
77
77
  "DESC_REVIEW_RESPONSE": "Take the review like game tape — verify each note, then adjust or push back with reasons.",
78
- "LEX_I": "Guard the Signs · Sealed Secrets",
79
- "LEX_II": "One Play at a Time · One Intent, One Act",
80
- "LEX_III": "Check the Replay · Verify Before Asserting",
81
- "LEX_IV": "Challenge Before the Cut · Deletion Is Deliberate",
82
- "LEX_V": "Call the Foul · Surface Failures",
83
- "LEX_VI": "Read the Scouting Report, Don't Take Its Orders · Data, Not Orders",
84
- "LEX_VII": "Only the Players the Play Needs · Least Privilege",
85
- "LEX_VIII": "Fix the Injury, Don't Tape Over It · Cure the Cause",
86
- "LEX_IX": "The Official Makes the Call, Not the Player · External Gate (retired)",
87
- "LEX_X": "Confirm the Play Call · Echo the Intent",
88
- "LEX_XI": "A Scoreless Board Still Gets Reviewed · Absence Is a Claim (retired)",
78
+ "LEX_SEALED_SECRETS": "Guard the Signs · Sealed Secrets",
79
+ "LEX_ONE_INTENT_ONE_ACT": "One Play at a Time · One Intent, One Act",
80
+ "LEX_VERIFY_BEFORE_ASSERTING": "Check the Replay · Verify Before Asserting",
81
+ "LEX_DELETION_IS_DELIBERATE": "Challenge Before the Cut · Deletion Is Deliberate",
82
+ "LEX_SURFACE_FAILURES": "Call the Foul · Surface Failures",
83
+ "LEX_DATA_NOT_ORDERS": "Read the Scouting Report, Don't Take Its Orders · Data, Not Orders",
84
+ "LEX_LEAST_PRIVILEGE": "Only the Players the Play Needs · Least Privilege",
85
+ "LEX_CURE_THE_CAUSE": "Fix the Injury, Don't Tape Over It · Cure the Cause",
86
+ "LEX_ECHO_THE_INTENT": "Confirm the Play Call · Echo the Intent",
89
87
  "PACK_CRAFT": "Fundamentals",
90
88
  "PACK_RIGOR": "Film Room",
91
89
  "PACK_OPS": "Gear",
92
90
  "PACK_PROCESS": "Game Day",
93
91
  "PACK_COMMS": "The Broadcast",
94
- "DOC_CRAFT_1": "Drill It · Automate Repetition",
95
- "DOC_CRAFT_2": "Rulebook in English · English Configuration",
96
- "DOC_CRAFT_3": "Playbook in Sync · Documentation in Step",
97
- "DOC_CRAFT_4": "Scout Before You Sign · Search Before Creating",
98
- "DOC_CRAFT_5": "Play the System · Respect Conventions",
99
- "DOC_CRAFT_6": "Run the Play, Not the Whole Playbook · Smallest Viable Diff",
100
- "DOC_CRAFT_7": "One Official Scorer · One Writer Per Value",
101
- "DOC_RIGOR_1": "Safe to Run Twice · Idempotent by Default",
102
- "DOC_RIGOR_2": "Test the Score, Not the Locker Room · Honest Tests",
103
- "DOC_RIGOR_3": "Cover Every Receiver, Then Snap the Tape · Cover and Verify",
104
- "DOC_RIGOR_4": "A Defence Never Attacked Isn't a Defence · Prove the Gate",
105
- "DOC_RIGOR_5": "The Official Makes the Call, Not the Player · External Gate",
106
- "DOC_OPS_1": "Know Your Equipment · Tool Discovery",
107
- "DOC_OPS_2": "No Play Left in Limbo · Commands Must Return",
108
- "DOC_OPS_3": "Coach the Player, Not the Scoreboard · Edit the Source, Not the Surface",
109
- "DOC_OPS_4": "See the Whole Rebuild Through · Complete the Teardown",
110
- "DOC_OPS_5": "Trust the Live Read, Not Last Week's Stat · Record the Probe, Not the Snapshot",
111
- "DOC_OPS_6": "A Timeout Isn't a New Playbook · Restart Is Not Reload",
112
- "DOC_OPS_7": "One Substitution at a Time · Serialize Against a Rationed Resource",
113
- "DOC_PROCESS_1": "Into the Record Book · Persist Insight",
114
- "DOC_PROCESS_2": "Game Plan First · Plan Before Acting",
115
- "DOC_PROCESS_3": "Travel Light · Context Economy",
116
- "DOC_PROCESS_4": "Read the Scouting Report First · Read the Docs First",
117
- "DOC_PROCESS_5": "Get the Sign Before the Pitch · Consent Before Push",
118
- "DOC_PROCESS_6": "Call the Final Whistle First · Bound the Loop",
119
- "DOC_PROCESS_7": "One Ball, One Carrier · One Writer Per File",
120
- "DOC_COMMS_1": "Every Player Keeps a Number · Codes That Persist",
121
- "DOC_COMMS_2": "Draw Up the Play Only When It Moves · Structure Beside Prose",
92
+ "DOC_AUTOMATE_REPETITION": "Drill It · Automate Repetition",
93
+ "DOC_ENGLISH_CONFIGURATION": "Rulebook in English · English Configuration",
94
+ "DOC_DOCUMENTATION_IN_STEP": "Playbook in Sync · Documentation in Step",
95
+ "DOC_SEARCH_BEFORE_CREATING": "Scout Before You Sign · Search Before Creating",
96
+ "DOC_RESPECT_CONVENTIONS": "Play the System · Respect Conventions",
97
+ "DOC_SMALLEST_VIABLE_DIFF": "Run the Play, Not the Whole Playbook · Smallest Viable Diff",
98
+ "DOC_ONE_WRITER_PER_VALUE": "One Official Scorer · One Writer Per Value",
99
+ "DOC_IDEMPOTENT_BY_DEFAULT": "Safe to Run Twice · Idempotent by Default",
100
+ "DOC_HONEST_TESTS": "Test the Score, Not the Locker Room · Honest Tests",
101
+ "DOC_COVER_AND_VERIFY": "Cover Every Receiver, Then Snap the Tape · Cover and Verify",
102
+ "DOC_PROVE_THE_GATE": "A Defence Never Attacked Isn't a Defence · Prove the Gate",
103
+ "DOC_EXTERNAL_GATE": "The Official Makes the Call, Not the Player · External Gate",
104
+ "DOC_TOOL_DISCOVERY": "Know Your Equipment · Tool Discovery",
105
+ "DOC_COMMANDS_MUST_RETURN": "No Play Left in Limbo · Commands Must Return",
106
+ "DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "Coach the Player, Not the Scoreboard · Edit the Source, Not the Surface",
107
+ "DOC_COMPLETE_THE_TEARDOWN": "See the Whole Rebuild Through · Complete the Teardown",
108
+ "DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "Trust the Live Read, Not Last Week's Stat · Record the Probe, Not the Snapshot",
109
+ "DOC_RESTART_IS_NOT_RELOAD": "A Timeout Isn't a New Playbook · Restart Is Not Reload",
110
+ "DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "One Substitution at a Time · Serialize Against a Rationed Resource",
111
+ "DOC_PERSIST_INSIGHT": "Into the Record Book · Persist Insight",
112
+ "DOC_PLAN_BEFORE_ACTING": "Game Plan First · Plan Before Acting",
113
+ "DOC_CONTEXT_ECONOMY": "Travel Light · Context Economy",
114
+ "DOC_READ_THE_DOCS_FIRST": "Read the Scouting Report First · Read the Docs First",
115
+ "DOC_CONSENT_BEFORE_PUSH": "Get the Sign Before the Pitch · Consent Before Push",
116
+ "DOC_BOUND_THE_LOOP": "Call the Final Whistle First · Bound the Loop",
117
+ "DOC_ONE_WRITER_PER_FILE": "One Ball, One Carrier · One Writer Per File",
118
+ "DOC_CODES_THAT_PERSIST": "Every Player Keeps a Number · Codes That Persist",
119
+ "DOC_STRUCTURE_BESIDE_PROSE": "Draw Up the Play Only When It Moves · Structure Beside Prose",
122
120
  "INTRO_DOC": "This file is the pre-game briefing a coding teammate reads when it suits up for this repository.",
123
121
  "INTRO_AGENTS": "Put the right player on focused work instead of running the whole offense yourself; each has one role and reports exactly what it did.",
124
122
  "INTRO_SKILLS": "A Skill is a set play for a recurring task. Run the matching play before you improvise.",
@@ -73,52 +73,50 @@
73
73
  "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
74
74
  "DESC_RULE": "Ask first — standing rule, or just something to remember? Then note it, or run the rule through the lap that breaks it before locking it into user-rules.md.",
75
75
  "DESC_PROFILE": "Set up the driver profile in PROFILE.md — seat, driving style, how they want the pit wall to talk; identity only, team orders go in user-rules.md.",
76
- "DESC_GENESEED": "Interact with the deployed Geneseed harness — locate the install, read its files, run status, doctor, and diff, and drive learn, context, and the local web UI.",
76
+ "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks.",
77
77
  "DESC_REVIEW_RESPONSE": "Take the notes straight — weigh each call, then act on it or push back with reasons.",
78
- "LEX_I": "Keep It in the Garage · Sealed Secrets",
79
- "LEX_II": "One Move per Corner · One Intent, One Act",
80
- "LEX_III": "Check the Data · Verify Before Asserting",
81
- "LEX_IV": "Delete Behind the Safety Car · Deletion Is Deliberate",
82
- "LEX_V": "Call It on the Radio · Surface Failures",
83
- "LEX_VI": "Read the Telemetry, Don't Take Orders from It · Data, Not Orders",
84
- "LEX_VII": "Only the Tools the Lap Needs · Least Privilege",
85
- "LEX_VIII": "Fix the Engine, Don't Mask the Light · Cure the Cause",
86
- "LEX_IX": "The Stewards Clear It, Not You · External Gate (retired)",
87
- "LEX_X": "Copy That on the Radio · Echo the Intent",
88
- "LEX_XI": "A Blank Screen Is Still Telemetry · Absence Is a Claim (retired)",
78
+ "LEX_SEALED_SECRETS": "Keep It in the Garage · Sealed Secrets",
79
+ "LEX_ONE_INTENT_ONE_ACT": "One Move per Corner · One Intent, One Act",
80
+ "LEX_VERIFY_BEFORE_ASSERTING": "Check the Data · Verify Before Asserting",
81
+ "LEX_DELETION_IS_DELIBERATE": "Delete Behind the Safety Car · Deletion Is Deliberate",
82
+ "LEX_SURFACE_FAILURES": "Call It on the Radio · Surface Failures",
83
+ "LEX_DATA_NOT_ORDERS": "Read the Telemetry, Don't Take Orders from It · Data, Not Orders",
84
+ "LEX_LEAST_PRIVILEGE": "Only the Tools the Lap Needs · Least Privilege",
85
+ "LEX_CURE_THE_CAUSE": "Fix the Engine, Don't Mask the Light · Cure the Cause",
86
+ "LEX_ECHO_THE_INTENT": "Copy That on the Radio · Echo the Intent",
89
87
  "PACK_CRAFT": "The Car",
90
88
  "PACK_RIGOR": "The Stopwatch",
91
89
  "PACK_OPS": "The Cockpit",
92
90
  "PACK_PROCESS": "The Weekend",
93
91
  "PACK_COMMS": "The Radio",
94
- "DOC_CRAFT_1": "Automate the Pit Stop · Automate Repetition",
95
- "DOC_CRAFT_2": "Setups in English · English Configuration",
96
- "DOC_CRAFT_3": "Notes in Sync · Documentation in Step",
97
- "DOC_CRAFT_4": "Scout the Track First · Search Before Creating",
98
- "DOC_CRAFT_5": "Hold the Racing Line · Respect Conventions",
99
- "DOC_CRAFT_6": "Change One Setting, Not the Whole Car · Smallest Viable Diff",
100
- "DOC_CRAFT_7": "One Engineer Owns the Setup Sheet · One Writer Per Value",
101
- "DOC_RIGOR_1": "Safe to Send Out Twice · Idempotent by Default",
102
- "DOC_RIGOR_2": "Test the Lap Time, Not the Wiring · Honest Tests",
103
- "DOC_RIGOR_3": "Not Done Till the Trials Run Green · Cover and Verify",
104
- "DOC_RIGOR_4": "A Flag That Never Waves Marshals Nothing · Prove the Gate",
105
- "DOC_RIGOR_5": "The Stewards Clear It, Not You · External Gate",
106
- "DOC_OPS_1": "Check the Car · Tool Discovery",
107
- "DOC_OPS_2": "Don't Sit Idling in the Pit · Commands Must Return",
108
- "DOC_OPS_3": "Change the Setup, Not the Dash · Edit the Source, Not the Surface",
109
- "DOC_OPS_4": "Strip the Car to the Tub · Complete the Teardown",
110
- "DOC_OPS_5": "Read Live Telemetry, Not an Old Sheet · Record the Probe, Not the Snapshot",
111
- "DOC_OPS_6": "A New Lap Won't Load a New Setup · Restart Is Not Reload",
112
- "DOC_OPS_7": "Don't Burn the Tyre Allocation · Serialize Against a Rationed Resource",
113
- "DOC_PROCESS_1": "Put It in the Debrief · Persist Insight",
114
- "DOC_PROCESS_2": "Set the Strategy · Plan Before Acting",
115
- "DOC_PROCESS_3": "Run Light on Fuel · Context Economy",
116
- "DOC_PROCESS_4": "Read the Briefing First · Read the Docs First",
117
- "DOC_PROCESS_5": "My Call Before You Push · Consent Before Push",
118
- "DOC_PROCESS_6": "Set the Lap Count Before You Go Out · Bound the Loop",
119
- "DOC_PROCESS_7": "My Car, My Setup · One Writer Per File",
120
- "DOC_COMMS_1": "Every Setup Change Gets a Number · Codes That Persist",
121
- "DOC_COMMS_2": "Show Me the Data, Not a Pretty Picture · Structure Beside Prose",
92
+ "DOC_AUTOMATE_REPETITION": "Automate the Pit Stop · Automate Repetition",
93
+ "DOC_ENGLISH_CONFIGURATION": "Setups in English · English Configuration",
94
+ "DOC_DOCUMENTATION_IN_STEP": "Notes in Sync · Documentation in Step",
95
+ "DOC_SEARCH_BEFORE_CREATING": "Scout the Track First · Search Before Creating",
96
+ "DOC_RESPECT_CONVENTIONS": "Hold the Racing Line · Respect Conventions",
97
+ "DOC_SMALLEST_VIABLE_DIFF": "Change One Setting, Not the Whole Car · Smallest Viable Diff",
98
+ "DOC_ONE_WRITER_PER_VALUE": "One Engineer Owns the Setup Sheet · One Writer Per Value",
99
+ "DOC_IDEMPOTENT_BY_DEFAULT": "Safe to Send Out Twice · Idempotent by Default",
100
+ "DOC_HONEST_TESTS": "Test the Lap Time, Not the Wiring · Honest Tests",
101
+ "DOC_COVER_AND_VERIFY": "Not Done Till the Trials Run Green · Cover and Verify",
102
+ "DOC_PROVE_THE_GATE": "A Flag That Never Waves Marshals Nothing · Prove the Gate",
103
+ "DOC_EXTERNAL_GATE": "The Stewards Clear It, Not You · External Gate",
104
+ "DOC_TOOL_DISCOVERY": "Check the Car · Tool Discovery",
105
+ "DOC_COMMANDS_MUST_RETURN": "Don't Sit Idling in the Pit · Commands Must Return",
106
+ "DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "Change the Setup, Not the Dash · Edit the Source, Not the Surface",
107
+ "DOC_COMPLETE_THE_TEARDOWN": "Strip the Car to the Tub · Complete the Teardown",
108
+ "DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "Read Live Telemetry, Not an Old Sheet · Record the Probe, Not the Snapshot",
109
+ "DOC_RESTART_IS_NOT_RELOAD": "A New Lap Won't Load a New Setup · Restart Is Not Reload",
110
+ "DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "Don't Burn the Tyre Allocation · Serialize Against a Rationed Resource",
111
+ "DOC_PERSIST_INSIGHT": "Put It in the Debrief · Persist Insight",
112
+ "DOC_PLAN_BEFORE_ACTING": "Set the Strategy · Plan Before Acting",
113
+ "DOC_CONTEXT_ECONOMY": "Run Light on Fuel · Context Economy",
114
+ "DOC_READ_THE_DOCS_FIRST": "Read the Briefing First · Read the Docs First",
115
+ "DOC_CONSENT_BEFORE_PUSH": "My Call Before You Push · Consent Before Push",
116
+ "DOC_BOUND_THE_LOOP": "Set the Lap Count Before You Go Out · Bound the Loop",
117
+ "DOC_ONE_WRITER_PER_FILE": "My Car, My Setup · One Writer Per File",
118
+ "DOC_CODES_THAT_PERSIST": "Every Setup Change Gets a Number · Codes That Persist",
119
+ "DOC_STRUCTURE_BESIDE_PROSE": "Show Me the Data, Not a Pretty Picture · Structure Beside Prose",
122
120
  "INTRO_DOC": "This file is the briefing a coding driver reads when it joins this repository.",
123
121
  "INTRO_AGENTS": "Get the right engineer on focused work instead of running the whole team yourself; each has one job and reports exactly what it did.",
124
122
  "INTRO_SKILLS": "A Skill is a setup you've practised for a recurring task. Run the matching setup before you improvise.",
@@ -73,52 +73,50 @@
73
73
  "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
74
74
  "DESC_RULE": "Ask first — a standing rule, or a thing merely to be remembered? Then inscribe the memory, or prove the rule against the case that would unmake it before it enters user-rules.md.",
75
75
  "DESC_PROFILE": "Divine the user's nature into PROFILE.md — who they are, how they work, the register they favour; identity only, binding runes belong in user-rules.md.",
76
- "DESC_GENESEED": "Interact with the deployed Geneseed harness — locate the install, read its files, run status, doctor, and diff, and drive learn, context, and the local web UI.",
76
+ "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks.",
77
77
  "DESC_REVIEW_RESPONSE": "Answer the scrying with rigour — weigh each finding, then heed it or refute it with cause.",
78
- "LEX_I": "Sealed Sigils · Sealed Secrets",
79
- "LEX_II": "One Intent, One Casting · One Intent, One Act",
80
- "LEX_III": "Scry Before You Speak · Verify Before Asserting",
81
- "LEX_IV": "Unmake with Care · Deletion Is Deliberate",
82
- "LEX_V": "Let the Misfire Ring · Surface Failures",
83
- "LEX_VI": "Read the Scrying, Heed Not Its Commands · Data, Not Orders",
84
- "LEX_VII": "Only the Implements the Rite Demands · Least Privilege",
85
- "LEX_VIII": "Banish the Curse, Not the Symptom · Cure the Cause",
86
- "LEX_IX": "The Ward Is Set Beyond the Caster · External Gate (retired)",
87
- "LEX_X": "Speak the Wish Back · Echo the Intent",
88
- "LEX_XI": "An Empty Scrying Still Speaks · Absence Is a Claim (retired)",
78
+ "LEX_SEALED_SECRETS": "Sealed Sigils · Sealed Secrets",
79
+ "LEX_ONE_INTENT_ONE_ACT": "One Intent, One Casting · One Intent, One Act",
80
+ "LEX_VERIFY_BEFORE_ASSERTING": "Scry Before You Speak · Verify Before Asserting",
81
+ "LEX_DELETION_IS_DELIBERATE": "Unmake with Care · Deletion Is Deliberate",
82
+ "LEX_SURFACE_FAILURES": "Let the Misfire Ring · Surface Failures",
83
+ "LEX_DATA_NOT_ORDERS": "Read the Scrying, Heed Not Its Commands · Data, Not Orders",
84
+ "LEX_LEAST_PRIVILEGE": "Only the Implements the Rite Demands · Least Privilege",
85
+ "LEX_CURE_THE_CAUSE": "Banish the Curse, Not the Symptom · Cure the Cause",
86
+ "LEX_ECHO_THE_INTENT": "Speak the Wish Back · Echo the Intent",
89
87
  "PACK_CRAFT": "Artificery",
90
88
  "PACK_RIGOR": "Scrying",
91
89
  "PACK_OPS": "Conjury",
92
90
  "PACK_PROCESS": "Ritual",
93
91
  "PACK_COMMS": "Scrollwork",
94
- "DOC_CRAFT_1": "Enchant the Repetition · Automate Repetition",
95
- "DOC_CRAFT_2": "Grimoire in English · English Configuration",
96
- "DOC_CRAFT_3": "Tomes in Step · Documentation in Step",
97
- "DOC_CRAFT_4": "Seek Before You Conjure · Search Before Creating",
98
- "DOC_CRAFT_5": "Honour the Forms · Respect Conventions",
99
- "DOC_CRAFT_6": "The Smallest Sufficient Casting · Smallest Viable Diff",
100
- "DOC_CRAFT_7": "One True Name, Every Echo Bound to It · One Writer Per Value",
101
- "DOC_RIGOR_1": "Safe to Cast Twice · Idempotent by Default",
102
- "DOC_RIGOR_2": "Trial the Effect, Not the Incantation · Honest Tests",
103
- "DOC_RIGOR_3": "Cover the Casting, Then Confirm · Cover and Verify",
104
- "DOC_RIGOR_4": "A Ward Never Struck Is Only a Wish · Prove the Gate",
105
- "DOC_RIGOR_5": "The Ward Is Set Beyond the Caster · External Gate",
106
- "DOC_OPS_1": "Know Your Implements · Tool Discovery",
107
- "DOC_OPS_2": "No Spell Left Hanging · Commands Must Return",
108
- "DOC_OPS_3": "Mend the Spell, Not the Glamour · Edit the Source, Not the Surface",
109
- "DOC_OPS_4": "Unmake It Wholly · Complete the Teardown",
110
- "DOC_OPS_5": "Scry Anew, Trust No Faded Vision · Record the Probe, Not the Snapshot",
111
- "DOC_OPS_6": "Recasting Won't Reread the Grimoire · Restart Is Not Reload",
112
- "DOC_OPS_7": "Draw Slowly From a Rationed Well · Serialize Against a Rationed Resource",
113
- "DOC_PROCESS_1": "Bind It to the Tome · Persist Insight",
114
- "DOC_PROCESS_2": "Ritual Before Working · Plan Before Acting",
115
- "DOC_PROCESS_3": "Conserve the Mana · Context Economy",
116
- "DOC_PROCESS_4": "Read the Tomes First · Read the Docs First",
117
- "DOC_PROCESS_5": "Assent Before the Sending · Consent Before Push",
118
- "DOC_PROCESS_6": "Bind the Circle Before You Step In · Bound the Loop",
119
- "DOC_PROCESS_7": "One Quill Per Grimoire · One Writer Per File",
120
- "DOC_COMMS_1": "Every Rune Keeps Its Name · Codes That Persist",
121
- "DOC_COMMS_2": "Draw the Sigil Only Where the Lines Bind · Structure Beside Prose",
92
+ "DOC_AUTOMATE_REPETITION": "Enchant the Repetition · Automate Repetition",
93
+ "DOC_ENGLISH_CONFIGURATION": "Grimoire in English · English Configuration",
94
+ "DOC_DOCUMENTATION_IN_STEP": "Tomes in Step · Documentation in Step",
95
+ "DOC_SEARCH_BEFORE_CREATING": "Seek Before You Conjure · Search Before Creating",
96
+ "DOC_RESPECT_CONVENTIONS": "Honour the Forms · Respect Conventions",
97
+ "DOC_SMALLEST_VIABLE_DIFF": "The Smallest Sufficient Casting · Smallest Viable Diff",
98
+ "DOC_ONE_WRITER_PER_VALUE": "One True Name, Every Echo Bound to It · One Writer Per Value",
99
+ "DOC_IDEMPOTENT_BY_DEFAULT": "Safe to Cast Twice · Idempotent by Default",
100
+ "DOC_HONEST_TESTS": "Trial the Effect, Not the Incantation · Honest Tests",
101
+ "DOC_COVER_AND_VERIFY": "Cover the Casting, Then Confirm · Cover and Verify",
102
+ "DOC_PROVE_THE_GATE": "A Ward Never Struck Is Only a Wish · Prove the Gate",
103
+ "DOC_EXTERNAL_GATE": "The Ward Is Set Beyond the Caster · External Gate",
104
+ "DOC_TOOL_DISCOVERY": "Know Your Implements · Tool Discovery",
105
+ "DOC_COMMANDS_MUST_RETURN": "No Spell Left Hanging · Commands Must Return",
106
+ "DOC_EDIT_THE_SOURCE_NOT_THE_SURFACE": "Mend the Spell, Not the Glamour · Edit the Source, Not the Surface",
107
+ "DOC_COMPLETE_THE_TEARDOWN": "Unmake It Wholly · Complete the Teardown",
108
+ "DOC_RECORD_THE_PROBE_NOT_THE_SNAPSHOT": "Scry Anew, Trust No Faded Vision · Record the Probe, Not the Snapshot",
109
+ "DOC_RESTART_IS_NOT_RELOAD": "Recasting Won't Reread the Grimoire · Restart Is Not Reload",
110
+ "DOC_SERIALIZE_AGAINST_A_RATIONED_RESOURCE": "Draw Slowly From a Rationed Well · Serialize Against a Rationed Resource",
111
+ "DOC_PERSIST_INSIGHT": "Bind It to the Tome · Persist Insight",
112
+ "DOC_PLAN_BEFORE_ACTING": "Ritual Before Working · Plan Before Acting",
113
+ "DOC_CONTEXT_ECONOMY": "Conserve the Mana · Context Economy",
114
+ "DOC_READ_THE_DOCS_FIRST": "Read the Tomes First · Read the Docs First",
115
+ "DOC_CONSENT_BEFORE_PUSH": "Assent Before the Sending · Consent Before Push",
116
+ "DOC_BOUND_THE_LOOP": "Bind the Circle Before You Step In · Bound the Loop",
117
+ "DOC_ONE_WRITER_PER_FILE": "One Quill Per Grimoire · One Writer Per File",
118
+ "DOC_CODES_THAT_PERSIST": "Every Rune Keeps Its Name · Codes That Persist",
119
+ "DOC_STRUCTURE_BESIDE_PROSE": "Draw the Sigil Only Where the Lines Bind · Structure Beside Prose",
122
120
  "INTRO_DOC": "This file is the first page an arcane familiar reads on entering this repository.",
123
121
  "INTRO_AGENTS": "Summon the right familiar for focused work rather than casting the whole rite in one circle; each has one purpose and returns a clear account of what it wrought.",
124
122
  "INTRO_SKILLS": "A Skill is a proven spell for a recurring task. Speak the matching spell before improvising.",
@@ -0,0 +1 @@
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{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};
@@ -0,0 +1 @@
1
+ import{s as e}from"./sections-GalMS0Zv.js";import{i as t,t as n}from"./react-B9Z_tXRV.js";import{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};
@@ -0,0 +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,2 +1,2 @@
1
- import{n as e}from"./rolldown-runtime-CbXtAM7H.js";import{i as t,t as n}from"./react-DbkvxWG5.js";import{C as r,a as i,c as a,f as o,i as s,n as c,o as l,rt as u,s as d,t as f}from"./index-AN5Emnrg.js";import{n as p}from"./Markdown-BQAvN8xx.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
- `)){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 i=(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=i.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=i.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(),r(n))};return e.addEventListener(`click`,t),()=>e.removeEventListener(`click`,t)},[o]),(0,m.useEffect)(()=>{let t=e.anchor;if(!t)return;let n=_(i.current,`#${CSS.escape(t)}`);n&&n.scrollIntoView({behavior:`smooth`,block:`start`})},[o,e.anchor]),(0,m.useEffect)(()=>{let n=i.current;if(!n||e.id!==`install-paths`)return;n.querySelectorAll(`.docs-here`).forEach(e=>e.classList.remove(`docs-here`));let r=y[t?.emit];if(!r)return;let a=_(n,`#${CSS.escape(r)}`);a&&a.classList.add(`docs-here`)},[o,e.id,t?.emit]);let s=e=>{if(!e)return;let t=_(i.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:i,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)(a,{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)(a,{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)(a,{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)(a,{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:l}=o(()=>e?u.docsPage(e,t):Promise.resolve(null),[e,t]);if(a)return(0,h.jsx)(c,{error:a,style:{margin:18}});if(l||!i)return(0,h.jsx)(s,{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:a}){let[p,g]=d(l(n?.emit)),{data:_,error:v}=o(()=>u.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&&r(`#/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)(c,{error:v});let C=_?.groups||[],w=!!x,T=e=>{let t=e.pages[0]?.id;t&&r(`#/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)(f,{"aria-label":`Harness`,children:i.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:()=>r(`#/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)(s,{label:`Loading docs…`})]})]}),(0,h.jsx)(`div`,{className:`card lib-detail`,children:(0,h.jsx)(k,{pageId:y,harness:p,overview:n,onAction:a})})]})]})}export{j 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,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(`
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};
@@ -0,0 +1 @@
1
+ import"./sections-GalMS0Zv.js";import{i as e,t}from"./react-B9Z_tXRV.js";e();var n=t();function r({value:e,onChange:t,label:r,placeholder:i,className:a}){return(0,n.jsx)(`input`,{className:a||`lib-filter`,type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:i,"aria-label":r||i})}export{r as t};
@@ -0,0 +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(`
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};