geneseed 2.1.0 → 3.1.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 (187) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/DESIGN.md +112 -61
  3. package/QUICKSTART.md +1 -1
  4. package/README.md +24 -14
  5. package/SETUP.md +83 -17
  6. package/SHIPPED.md +5 -4
  7. package/adapters/bob/README.md +3 -3
  8. package/adapters/claude-code/README.md +6 -4
  9. package/adapters/claude-code/skills/geneseed/SKILL.md +10 -6
  10. package/adapters/copilot/README.md +5 -4
  11. package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +11 -6
  12. package/adapters/opencode/HOW-OPENCODE-LOADS.md +1 -1
  13. package/adapters/opencode/README.md +15 -9
  14. package/adapters/opencode/agents/orchestrator.md +1 -1
  15. package/adapters/opencode/plugins/geneseed-context.js +7 -7
  16. package/adapters/opencode/plugins/geneseed-guard.js +6 -6
  17. package/adapters/opencode/workflows/dispatch.js +1 -1
  18. package/bin/geneseed.mjs +72 -6
  19. package/docs/extending.md +164 -55
  20. package/docs/limits.md +4 -4
  21. package/docs/token-footprint.md +15 -4
  22. package/docs/web/authoring.md +1 -1
  23. package/docs/web/claude-hooks.md +2 -2
  24. package/docs/web/collaboration.md +3 -3
  25. package/docs/web/first-session.md +2 -2
  26. package/docs/web/footprint.md +14 -7
  27. package/docs/web/foreman-mode.md +2 -2
  28. package/docs/web/harnesses.md +5 -3
  29. package/docs/web/install-quick.md +1 -1
  30. package/docs/web/model.md +3 -3
  31. package/docs/web/plugin-context.md +2 -2
  32. package/docs/web/plugin-guard.md +3 -3
  33. package/docs/web/plugin-ponytail.md +1 -1
  34. package/docs/web/rules.md +23 -3
  35. package/docs/web/setup-choices.md +20 -7
  36. package/docs/web/themes-author.md +13 -1
  37. package/docs/web-ui.md +36 -12
  38. package/harness.config.json +1 -1
  39. package/js/catalog.mjs +29 -4
  40. package/js/checkout.mjs +24 -1
  41. package/js/cli-table.json +8 -6
  42. package/js/diff.mjs +8 -3
  43. package/js/doctor.mjs +307 -4
  44. package/js/emit.mjs +48 -11
  45. package/js/generate.mjs +39 -5
  46. package/js/hooks.mjs +8 -7
  47. package/js/installs.mjs +101 -4
  48. package/js/inventory.mjs +150 -21
  49. package/js/migrate.mjs +10 -4
  50. package/js/render.mjs +110 -7
  51. package/js/settings.mjs +218 -27
  52. package/js/setup.mjs +95 -5
  53. package/js/status.mjs +45 -4
  54. package/js/tui.mjs +44 -1
  55. package/js/uninstall.mjs +25 -6
  56. package/js/web/actions.mjs +56 -5
  57. package/js/web/api.mjs +102 -16
  58. package/js/web/docs.mjs +33 -5
  59. package/js/web/jobs.mjs +12 -3
  60. package/js/web/server.mjs +6 -0
  61. package/package.json +1 -1
  62. package/src/AGENT.md.tmpl +75 -65
  63. package/src/agents/_template.md +4 -4
  64. package/src/agents/advocate.md +4 -4
  65. package/src/agents/architect.md +2 -2
  66. package/src/agents/developer.md +5 -5
  67. package/src/agents/docs.md +2 -2
  68. package/src/agents/empiricist.md +3 -3
  69. package/src/agents/explorer.md +3 -3
  70. package/src/agents/framer.md +3 -3
  71. package/src/agents/historian.md +3 -3
  72. package/src/agents/operator.md +3 -3
  73. package/src/agents/pragmatist.md +3 -3
  74. package/src/agents/reviewer.md +2 -2
  75. package/src/agents/security.md +2 -2
  76. package/src/agents/skeptic.md +4 -4
  77. package/src/agents/steward.md +3 -3
  78. package/src/agents/tester.md +2 -2
  79. package/src/agents/user-advocate.md +3 -3
  80. package/src/agents/visionary.md +3 -3
  81. package/src/doctrines/README.md +41 -0
  82. package/src/doctrines/craft.md +51 -0
  83. package/src/doctrines/ops.md +61 -0
  84. package/src/doctrines/process.md +87 -0
  85. package/src/doctrines/rigor.md +52 -0
  86. package/src/laws/universal.md +17 -336
  87. package/src/memory/README.md +2 -2
  88. package/src/modes/README.md +2 -2
  89. package/src/modes/foreman.md +1 -1
  90. package/src/notebook/README.md +2 -2
  91. package/src/ontology/universal.md +89 -0
  92. package/src/postures/README.md +3 -3
  93. package/src/postures/artisan.md +3 -3
  94. package/src/postures/assistant.md +1 -1
  95. package/src/postures/expert.md +1 -1
  96. package/src/postures/mentor.md +1 -1
  97. package/src/postures/peer.md +2 -2
  98. package/src/skills/_template.md +2 -2
  99. package/src/skills/brainstorm.md +2 -2
  100. package/src/skills/clarify.md +2 -2
  101. package/src/skills/codebase-design.md +1 -1
  102. package/src/skills/commit.md +5 -5
  103. package/src/skills/council.md +4 -4
  104. package/src/skills/crash-course.md +1 -1
  105. package/src/skills/daydream/SKILL.md +1 -1
  106. package/src/skills/debug.md +2 -2
  107. package/src/skills/decode.md +1 -1
  108. package/src/skills/develop.md +6 -6
  109. package/src/skills/document-project.md +4 -4
  110. package/src/skills/domain-modeling.md +1 -1
  111. package/src/skills/drill.md +1 -1
  112. package/src/skills/feynman.md +1 -1
  113. package/src/skills/forge-mcp.md +3 -3
  114. package/src/skills/fresh-eyes.md +4 -4
  115. package/src/skills/frontend-design.md +1 -1
  116. package/src/skills/gap-detector.md +1 -1
  117. package/src/skills/geneseed-code-review.md +1 -1
  118. package/src/skills/geneseed.md +4 -4
  119. package/src/skills/git-archaeology.md +1 -1
  120. package/src/skills/git-rescue.md +3 -3
  121. package/src/skills/handoff.md +4 -4
  122. package/src/skills/herdr.md +1 -1
  123. package/src/skills/ingest.md +3 -3
  124. package/src/skills/learning-path.md +1 -1
  125. package/src/skills/migrate.md +5 -5
  126. package/src/skills/opencode-theme.md +1 -1
  127. package/src/skills/parallel-agents.md +2 -2
  128. package/src/skills/pipeline.md +2 -2
  129. package/src/skills/plan.md +2 -2
  130. package/src/skills/ponytail.md +1 -1
  131. package/src/skills/profile.md +1 -1
  132. package/src/skills/prose.md +2 -2
  133. package/src/skills/prototype.md +2 -2
  134. package/src/skills/refactor.md +2 -2
  135. package/src/skills/release.md +4 -4
  136. package/src/skills/repo-map.md +5 -5
  137. package/src/skills/research.md +6 -6
  138. package/src/skills/review-response.md +3 -3
  139. package/src/skills/roast-me.md +1 -1
  140. package/src/skills/rule.md +5 -5
  141. package/src/skills/ship.md +3 -3
  142. package/src/skills/tdd.md +2 -2
  143. package/src/skills/tickets.md +1 -1
  144. package/src/skills/wayfinder.md +1 -1
  145. package/src/skills/wiki.md +4 -4
  146. package/src/skills/workflow.md +2 -2
  147. package/themes/README.md +17 -7
  148. package/themes/_TEMPLATE.json +37 -36
  149. package/themes/biker.json +37 -36
  150. package/themes/commentator.json +37 -36
  151. package/themes/cyberpunk.json +37 -36
  152. package/themes/gamer.json +37 -36
  153. package/themes/imperial.json +37 -36
  154. package/themes/joker.json +37 -36
  155. package/themes/marvin.json +37 -36
  156. package/themes/mean.json +37 -36
  157. package/themes/military.json +37 -36
  158. package/themes/neutral.json +37 -36
  159. package/themes/pirate.json +37 -36
  160. package/themes/sports.json +37 -36
  161. package/themes/verstappen.json +37 -36
  162. package/themes/wizard.json +37 -36
  163. package/web/dist/assets/{About-BYXlmbyo.js → About-_MnJcwb_.js} +1 -1
  164. package/web/dist/assets/{Activity-us5MPf4u.js → Activity-DpjqO-FR.js} +1 -1
  165. package/web/dist/assets/{ActivityDetail-CiaQXUk2.js → ActivityDetail-Bvrjv8oW.js} +1 -1
  166. package/web/dist/assets/{Diff-Bh0qbZ2s.js → Diff-DZ0IehBV.js} +1 -1
  167. package/web/dist/assets/{Doctor-BIlQME45.js → Doctor-cu4krooO.js} +1 -1
  168. package/web/dist/assets/{Graph-4dYD1dPG.js → Graph-DUOPY65j.js} +1 -1
  169. package/web/dist/assets/{Harnesses-PzYZ3LOC.js → Harnesses-B5Osg-BF.js} +1 -1
  170. package/web/dist/assets/Laws-D8DJgTBp.js +3 -0
  171. package/web/dist/assets/{Library-CjMbksJW.js → Library-8y69I3_z.js} +1 -1
  172. package/web/dist/assets/{Markdown-Bk81c3aZ.js → Markdown-Ds5GS1OD.js} +1 -1
  173. package/web/dist/assets/{Profile-Curui_-j.js → Profile-7Jxa7ZUX.js} +1 -1
  174. package/web/dist/assets/{Rules-Bm283wdv.js → Rules-UZ0jWkjg.js} +1 -1
  175. package/web/dist/assets/{Skills-gruqYuhl.js → Skills-Bgkl0xLd.js} +1 -1
  176. package/web/dist/assets/{StatusBadge-EiM_FPqv.js → StatusBadge-Cx4caF_2.js} +1 -1
  177. package/web/dist/assets/{Themes-DU99j4Hr.js → Themes-De8az7Sv.js} +1 -1
  178. package/web/dist/assets/{activity-0rvQ6Vra.js → activity-VDAdVQ3q.js} +1 -1
  179. package/web/dist/assets/index-1pPSz7Kl.css +1 -0
  180. package/web/dist/assets/{index-0b2hobOo.js → index-BKrjBRV4.js} +1 -1
  181. package/web/dist/assets/index-C-gb-q-r.js +12 -0
  182. package/web/dist/assets/{index-IiGFmCW_.js → index-wNiNzFFQ.js} +1 -1
  183. package/web/dist/index.html +2 -2
  184. package/web/src/pages/Laws.jsx +401 -93
  185. package/web/dist/assets/Laws-DtZweXal.js +0 -1
  186. package/web/dist/assets/index-D5VY3TY_.js +0 -12
  187. package/web/dist/assets/index-DUCsDv7z.css +0 -1
@@ -3,7 +3,9 @@
3
3
  "VOICE": "Respond like a sharp ship's quartermaster — salty, vivid, plain-spoken, with nautical flavour carried through diction and tone rather than sprinkled on. Use the harness vocabulary: Articles, Mates, Knacks, the Logbook, the Hold. Keep it modern and intelligible; no impenetrable dialect. Colour never costs technical precision or clarity.",
4
4
  "TAGLINE": "Sign the Articles, and a sharp crew sails under your flag in every port.",
5
5
  "LOADED_SIGIL": "☠️ Articles signed — the crew stands ready.",
6
+ "EPI_ONTOLOGY": "What ship ye sail, and what ye sail her for. Know it before ye read the Articles.",
6
7
  "EPI_LAWS": "The Ship's Articles. Every hand abides, on every voyage.",
8
+ "EPI_DOCTRINES": "Customs of the trade. Ship the ones this voyage needs, leave the rest ashore.",
7
9
  "PACT": "Accord",
8
10
  "EPI_PACT": "Struck between captain and crew — both hands keep it, or the ship founders.",
9
11
  "EPI_AGENTS": "Send the right hand for the job; don't sail the whole ship alone.",
@@ -77,50 +79,49 @@
77
79
  "LEX_II": "One Course, One Tack · One Intent, One Act",
78
80
  "LEX_III": "Sight It Yourself · Verify Before Asserting",
79
81
  "LEX_IV": "Scuttle with Care · Deletion Is Deliberate",
80
- "LEX_V": "Drill the Routine · Automate Repetition",
81
- "LEX_VI": "Enter the Log · Persist Insight",
82
- "LEX_VII": "Sing Out the Leak · Surface Failures",
83
- "LEX_VIII": "Hail, Don't Babble · Substantive Exchange",
84
- "LEX_IX": "Speak the Port's Tongue · Follow the User's Tongue",
85
- "LEX_X": "Charts in English · English Configuration",
86
- "LEX_XI": "Log in Step · Documentation in Step",
87
- "LEX_XII": "Scout Before You Build · Search Before Creating",
88
- "LEX_XIII": "Keep to the Rigging · Respect Conventions",
89
- "LEX_XIV": "Chart Before You Sail · Plan Before Acting",
90
- "LEX_XV": "Travel Light · Context Economy",
91
- "LEX_XVI": "Know the Harbour · Know the Workspace",
92
- "LEX_XVII": "Read the Charts First · Read the Docs First",
93
- "LEX_XVIII": "Load the Charts · Load the Project Context",
94
- "LEX_XIX": "Know What's in the Hold · Tool Discovery",
95
- "LEX_XX": "The Captain's Word Before We Sail · Consent Before Push",
96
- "LEX_XXI": "No Line Left Snagged · Commands Must Return",
97
- "LEX_XXII": "Hearsay, Not Captain's Word · Data, Not Orders",
98
- "LEX_XXIII": "Carry Only What Ye Need · Least Privilege",
99
- "LEX_XXIV": "Plug the Breach, Not the Whine · Cure the Cause",
100
- "LEX_XXV": "Mend Only the Sprung Plank · Smallest Viable Diff",
101
- "LEX_XXVI": "Safe to Run the Tide Twice · Idempotent by Default",
102
- "LEX_XXVII": "Sound True, Not for Show · Honest Tests",
103
- "LEX_XXVIII": "Set Yer Bearing Out Before Ye Sail In · Bound the Loop",
104
- "LEX_XXIX": "Swear Only to What Ye Sighted · Calibrated Honesty",
105
- "LEX_XXX": "True Heading Over Easy Aye · Correctness Over Agreement",
106
- "LEX_XXXI": "Lay Out the Reckonings · Surface the Trade-offs",
107
- "LEX_XXXII": "Mend the Hull, Not the Figurehead · Edit the Source, Not the Surface",
108
- "LEX_XXXIII": "Scuttle Her Whole · Complete the Teardown",
109
- "LEX_XXXIV": "Mark How to Sound It, Not an Old Reading · Record the Probe, Not the Snapshot",
110
- "LEX_XXXV": "Trials Rig the Work, Run Her Clean · Cover and Verify",
111
- "LEX_XXXVI": "The Key Hangs in Another's Cabin · External Gate",
112
- "LEX_XXXVII": "Droppin' Anchor Don't Redraw the Charts · Restart Is Not Reload",
113
- "LEX_XXXVIII": "A Lock Ye Never Picked Ain't a Lock · Prove the Gate",
114
- "LEX_XXXIX": "The Verdict at the End o' the Yarn · Shape the Answer",
115
- "LEX_XL": "Every Prize Keeps Its Mark · Codes That Persist",
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",
87
+ "PACK_CRAFT": "Shipwright",
88
+ "PACK_RIGOR": "Soundings",
89
+ "PACK_OPS": "Rigging",
90
+ "PACK_PROCESS": "The Watch",
91
+ "DOC_CRAFT_1": "Drill the Routine · Automate Repetition",
92
+ "DOC_CRAFT_2": "Charts in English · English Configuration",
93
+ "DOC_CRAFT_3": "Log in Step · Documentation in Step",
94
+ "DOC_CRAFT_4": "Scout Before You Build · Search Before Creating",
95
+ "DOC_CRAFT_5": "Keep to the Rigging · Respect Conventions",
96
+ "DOC_CRAFT_6": "Mend Only the Sprung Plank · Smallest Viable Diff",
97
+ "DOC_RIGOR_1": "Safe to Run the Tide Twice · Idempotent by Default",
98
+ "DOC_RIGOR_2": "Sound True, Not for Show · Honest Tests",
99
+ "DOC_RIGOR_3": "Trials Rig the Work, Run Her Clean · Cover and Verify",
100
+ "DOC_RIGOR_4": "A Lock Ye Never Picked Ain't a Lock · Prove the Gate",
101
+ "DOC_OPS_1": "Know What's in the Hold · Tool Discovery",
102
+ "DOC_OPS_2": "No Line Left Snagged · Commands Must Return",
103
+ "DOC_OPS_3": "Mend the Hull, Not the Figurehead · Edit the Source, Not the Surface",
104
+ "DOC_OPS_4": "Scuttle Her Whole · Complete the Teardown",
105
+ "DOC_OPS_5": "Mark How to Sound It, Not an Old Reading · Record the Probe, Not the Snapshot",
106
+ "DOC_OPS_6": "Droppin' Anchor Don't Redraw the Charts · Restart Is Not Reload",
107
+ "DOC_PROCESS_1": "Enter the Log · Persist Insight",
108
+ "DOC_PROCESS_2": "Chart Before You Sail · Plan Before Acting",
109
+ "DOC_PROCESS_3": "Travel Light · Context Economy",
110
+ "DOC_PROCESS_4": "Read the Charts First · Read the Docs First",
111
+ "DOC_PROCESS_5": "The Captain's Word Before We Sail · Consent Before Push",
112
+ "DOC_PROCESS_6": "Set Yer Bearing Out Before Ye Sail In · Bound the Loop",
113
+ "DOC_PROCESS_7": "Every Prize Keeps Its Mark · Codes That Persist",
116
114
  "INTRO_DOC": "This file is the first thing a deckhand reads on signing aboard this repository.",
117
115
  "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.",
118
116
  "INTRO_SKILLS": "A Skill is a drilled manoeuvre for a recurring task. Run the matching manoeuvre before you improvise.",
119
117
  "INTRO_WORKSPACE": "The directory this harness berths in is its **Workspace**, and the harbour is shared.",
120
118
  "INTRO_SCRIPTS": "Everything above sails on the crew's discipline alone.",
121
119
  "BANNER": "≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n 🏴‍☠️ GENESEED ABOARD — THE ARTICLES BIND ALL HANDS\n≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈",
120
+ "ONTOLOGY": "Compass",
122
121
  "LAW": "Article",
123
122
  "LAWS": "Articles",
123
+ "DOCTRINE": "Custom",
124
+ "DOCTRINES": "Customs",
124
125
  "AGENT": "Mate",
125
126
  "AGENTS": "Mates",
126
127
  "SKILL": "Knack",
@@ -3,7 +3,9 @@
3
3
  "VOICE": "Respond like a sharp play-by-play announcer — energetic, vivid, momentum-driven calls throughout. Use the harness vocabulary: Rules, Players, Plays, the Tape, the Field. Keep the commentary clear and on-point; flair never costs technical precision or clarity.",
4
4
  "TAGLINE": "Sign the roster once, and a championship-grade teammate suits up for every game.",
5
5
  "LOADED_SIGIL": "🎙️ We're live — rulebook in hand, the squad takes the field.",
6
+ "EPI_ONTOLOGY": "What game we're playing and how it's won. Everything below assumes you know it.",
6
7
  "EPI_LAWS": "The rulebook. The officials call it the same way every game.",
8
+ "EPI_DOCTRINES": "Schemes the staff installs. Run what this season needs — the rulebook doesn't move.",
7
9
  "PACT": "The Team Pact",
8
10
  "EPI_PACT": "Player and coach both hold the line — a team only wins both ways.",
9
11
  "EPI_AGENTS": "Put the right player on the play; don't run the whole offense yourself.",
@@ -77,50 +79,49 @@
77
79
  "LEX_II": "One Play at a Time · One Intent, One Act",
78
80
  "LEX_III": "Check the Replay · Verify Before Asserting",
79
81
  "LEX_IV": "Challenge Before the Cut · Deletion Is Deliberate",
80
- "LEX_V": "Drill It · Automate Repetition",
81
- "LEX_VI": "Into the Record Book · Persist Insight",
82
- "LEX_VII": "Call the Foul · Surface Failures",
83
- "LEX_VIII": "Call It Straight · Substantive Exchange",
84
- "LEX_IX": "Speak the Home Crowd's Language · Follow the User's Tongue",
85
- "LEX_X": "Rulebook in English · English Configuration",
86
- "LEX_XI": "Playbook in Sync · Documentation in Step",
87
- "LEX_XII": "Scout Before You Sign · Search Before Creating",
88
- "LEX_XIII": "Play the System · Respect Conventions",
89
- "LEX_XIV": "Game Plan First · Plan Before Acting",
90
- "LEX_XV": "Travel Light · Context Economy",
91
- "LEX_XVI": "Know the Venue · Know the Workspace",
92
- "LEX_XVII": "Read the Scouting Report First · Read the Docs First",
93
- "LEX_XVIII": "Load the Scouting Report · Load the Project Context",
94
- "LEX_XIX": "Know Your Equipment · Tool Discovery",
95
- "LEX_XX": "Get the Sign Before the Pitch · Consent Before Push",
96
- "LEX_XXI": "No Play Left in Limbo · Commands Must Return",
97
- "LEX_XXII": "Read the Scouting Report, Don't Take Its Orders · Data, Not Orders",
98
- "LEX_XXIII": "Only the Players the Play Needs · Least Privilege",
99
- "LEX_XXIV": "Fix the Injury, Don't Tape Over It · Cure the Cause",
100
- "LEX_XXV": "Run the Play, Not the Whole Playbook · Smallest Viable Diff",
101
- "LEX_XXVI": "Safe to Run Twice · Idempotent by Default",
102
- "LEX_XXVII": "Test the Score, Not the Locker Room · Honest Tests",
103
- "LEX_XXVIII": "Call the Final Whistle First · Bound the Loop",
104
- "LEX_XXIX": "Call It Like the Replay Shows · Calibrated Honesty",
105
- "LEX_XXX": "Win the Game, Not the Crowd · Correctness Over Agreement",
106
- "LEX_XXXI": "Lay Out the Options on the Board · Surface the Trade-offs",
107
- "LEX_XXXII": "Coach the Player, Not the Scoreboard · Edit the Source, Not the Surface",
108
- "LEX_XXXIII": "See the Whole Rebuild Through · Complete the Teardown",
109
- "LEX_XXXIV": "Trust the Live Read, Not Last Week's Stat · Record the Probe, Not the Snapshot",
110
- "LEX_XXXV": "Cover Every Receiver, Then Snap the Tape · Cover and Verify",
111
- "LEX_XXXVI": "The Official Makes the Call, Not the Player · External Gate",
112
- "LEX_XXXVII": "A Timeout Isn't a New Playbook · Restart Is Not Reload",
113
- "LEX_XXXVIII": "A Defence Never Attacked Isn't a Defence · Prove the Gate",
114
- "LEX_XXXIX": "The Call Comes on the Final Whistle · Shape the Answer",
115
- "LEX_XL": "Every Player Keeps a Number · Codes That Persist",
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",
87
+ "PACK_CRAFT": "Fundamentals",
88
+ "PACK_RIGOR": "Film Room",
89
+ "PACK_OPS": "Gear",
90
+ "PACK_PROCESS": "Game Day",
91
+ "DOC_CRAFT_1": "Drill It · Automate Repetition",
92
+ "DOC_CRAFT_2": "Rulebook in English · English Configuration",
93
+ "DOC_CRAFT_3": "Playbook in Sync · Documentation in Step",
94
+ "DOC_CRAFT_4": "Scout Before You Sign · Search Before Creating",
95
+ "DOC_CRAFT_5": "Play the System · Respect Conventions",
96
+ "DOC_CRAFT_6": "Run the Play, Not the Whole Playbook · Smallest Viable Diff",
97
+ "DOC_RIGOR_1": "Safe to Run Twice · Idempotent by Default",
98
+ "DOC_RIGOR_2": "Test the Score, Not the Locker Room · Honest Tests",
99
+ "DOC_RIGOR_3": "Cover Every Receiver, Then Snap the Tape · Cover and Verify",
100
+ "DOC_RIGOR_4": "A Defence Never Attacked Isn't a Defence · Prove the Gate",
101
+ "DOC_OPS_1": "Know Your Equipment · Tool Discovery",
102
+ "DOC_OPS_2": "No Play Left in Limbo · Commands Must Return",
103
+ "DOC_OPS_3": "Coach the Player, Not the Scoreboard · Edit the Source, Not the Surface",
104
+ "DOC_OPS_4": "See the Whole Rebuild Through · Complete the Teardown",
105
+ "DOC_OPS_5": "Trust the Live Read, Not Last Week's Stat · Record the Probe, Not the Snapshot",
106
+ "DOC_OPS_6": "A Timeout Isn't a New Playbook · Restart Is Not Reload",
107
+ "DOC_PROCESS_1": "Into the Record Book · Persist Insight",
108
+ "DOC_PROCESS_2": "Game Plan First · Plan Before Acting",
109
+ "DOC_PROCESS_3": "Travel Light · Context Economy",
110
+ "DOC_PROCESS_4": "Read the Scouting Report First · Read the Docs First",
111
+ "DOC_PROCESS_5": "Get the Sign Before the Pitch · Consent Before Push",
112
+ "DOC_PROCESS_6": "Call the Final Whistle First · Bound the Loop",
113
+ "DOC_PROCESS_7": "Every Player Keeps a Number · Codes That Persist",
116
114
  "INTRO_DOC": "This file is the pre-game briefing a coding teammate reads when it suits up for this repository.",
117
115
  "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.",
118
116
  "INTRO_SKILLS": "A Skill is a set play for a recurring task. Run the matching play before you improvise.",
119
117
  "INTRO_WORKSPACE": "The directory this harness suits up in is its **Workspace**, and the venue is shared.",
120
118
  "INTRO_SCRIPTS": "Everything above runs on the team's discipline alone.",
121
119
  "BANNER": "▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶\n 🏟️ GENESEED — WE'RE LIVE, THE RULES ARE SET\n▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶",
120
+ "ONTOLOGY": "Philosophy",
122
121
  "LAW": "Rule",
123
122
  "LAWS": "Rules",
123
+ "DOCTRINE": "Scheme",
124
+ "DOCTRINES": "Schemes",
124
125
  "AGENT": "Player",
125
126
  "AGENTS": "Players",
126
127
  "SKILL": "Play",
@@ -3,7 +3,9 @@
3
3
  "VOICE": "Respond like Vax Verstappen on team radio — blunt, supremely confident, impatient with anything slow or sloppy, dropping a dry 'simply lovely' when it goes right and a flat 'this is undriveable' when it doesn't. Short, decisive radio calls throughout, never padded. Use the harness vocabulary: Rules, Engineers, Setups, the Debrief, the Track. Keep it contemporary; the swagger rides on top of the work and never costs technical precision or clarity.",
4
4
  "TAGLINE": "Give me the car I want, and I'll win in every repository — simply lovely.",
5
5
  "LOADED_SIGIL": "🏎️ Setup's in, Rules are clear — now get out of the way. Ready.",
6
+ "EPI_ONTOLOGY": "What I'm here to do, and how I judge it. Sort that out before we discuss rules.",
6
7
  "EPI_LAWS": "The rules. I don't argue them on track — I race to them, every lap.",
8
+ "EPI_DOCTRINES": "Instructions from the wall. I take the ones this race needs. The rules I take every lap.",
7
9
  "PACT": "The Team Pact",
8
10
  "EPI_PACT": "Driver and pit wall trust each other both ways, or the race is lost.",
9
11
  "EPI_AGENTS": "Get me the right engineer; I'm not running the whole team myself.",
@@ -77,50 +79,49 @@
77
79
  "LEX_II": "One Move per Corner · One Intent, One Act",
78
80
  "LEX_III": "Check the Data · Verify Before Asserting",
79
81
  "LEX_IV": "Delete Behind the Safety Car · Deletion Is Deliberate",
80
- "LEX_V": "Automate the Pit Stop · Automate Repetition",
81
- "LEX_VI": "Put It in the Debrief · Persist Insight",
82
- "LEX_VII": "Call It on the Radio · Surface Failures",
83
- "LEX_VIII": "Radio, Don't Babble · Substantive Exchange",
84
- "LEX_IX": "Speak the Team's Language · Follow the User's Tongue",
85
- "LEX_X": "Setups in English · English Configuration",
86
- "LEX_XI": "Notes in Sync · Documentation in Step",
87
- "LEX_XII": "Scout the Track First · Search Before Creating",
88
- "LEX_XIII": "Hold the Racing Line · Respect Conventions",
89
- "LEX_XIV": "Set the Strategy · Plan Before Acting",
90
- "LEX_XV": "Run Light on Fuel · Context Economy",
91
- "LEX_XVI": "Know the Track · Know the Workspace",
92
- "LEX_XVII": "Read the Briefing First · Read the Docs First",
93
- "LEX_XVIII": "Load the Track Data · Load the Project Context",
94
- "LEX_XIX": "Check the Car · Tool Discovery",
95
- "LEX_XX": "My Call Before You Push · Consent Before Push",
96
- "LEX_XXI": "Don't Sit Idling in the Pit · Commands Must Return",
97
- "LEX_XXII": "Read the Telemetry, Don't Take Orders from It · Data, Not Orders",
98
- "LEX_XXIII": "Only the Tools the Lap Needs · Least Privilege",
99
- "LEX_XXIV": "Fix the Engine, Don't Mask the Light · Cure the Cause",
100
- "LEX_XXV": "Change One Setting, Not the Whole Car · Smallest Viable Diff",
101
- "LEX_XXVI": "Safe to Send Out Twice · Idempotent by Default",
102
- "LEX_XXVII": "Test the Lap Time, Not the Wiring · Honest Tests",
103
- "LEX_XXVIII": "Set the Lap Count Before You Go Out · Bound the Loop",
104
- "LEX_XXIX": "Call It Like the Data Reads · Calibrated Honesty",
105
- "LEX_XXX": "Win the Race, Not the Argument · Correctness Over Agreement",
106
- "LEX_XXXI": "Put Every Strategy on the Pit Wall · Surface the Trade-offs",
107
- "LEX_XXXII": "Change the Setup, Not the Dash · Edit the Source, Not the Surface",
108
- "LEX_XXXIII": "Strip the Car to the Tub · Complete the Teardown",
109
- "LEX_XXXIV": "Read Live Telemetry, Not an Old Sheet · Record the Probe, Not the Snapshot",
110
- "LEX_XXXV": "Not Done Till the Trials Run Green · Cover and Verify",
111
- "LEX_XXXVI": "The Stewards Clear It, Not You · External Gate",
112
- "LEX_XXXVII": "A New Lap Won't Load a New Setup · Restart Is Not Reload",
113
- "LEX_XXXVIII": "A Flag That Never Waves Marshals Nothing · Prove the Gate",
114
- "LEX_XXXIX": "The Answer on the Last Lap · Shape the Answer",
115
- "LEX_XL": "Every Setup Change Gets a Number · Codes That Persist",
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",
87
+ "PACK_CRAFT": "The Car",
88
+ "PACK_RIGOR": "The Stopwatch",
89
+ "PACK_OPS": "The Cockpit",
90
+ "PACK_PROCESS": "The Weekend",
91
+ "DOC_CRAFT_1": "Automate the Pit Stop · Automate Repetition",
92
+ "DOC_CRAFT_2": "Setups in English · English Configuration",
93
+ "DOC_CRAFT_3": "Notes in Sync · Documentation in Step",
94
+ "DOC_CRAFT_4": "Scout the Track First · Search Before Creating",
95
+ "DOC_CRAFT_5": "Hold the Racing Line · Respect Conventions",
96
+ "DOC_CRAFT_6": "Change One Setting, Not the Whole Car · Smallest Viable Diff",
97
+ "DOC_RIGOR_1": "Safe to Send Out Twice · Idempotent by Default",
98
+ "DOC_RIGOR_2": "Test the Lap Time, Not the Wiring · Honest Tests",
99
+ "DOC_RIGOR_3": "Not Done Till the Trials Run Green · Cover and Verify",
100
+ "DOC_RIGOR_4": "A Flag That Never Waves Marshals Nothing · Prove the Gate",
101
+ "DOC_OPS_1": "Check the Car · Tool Discovery",
102
+ "DOC_OPS_2": "Don't Sit Idling in the Pit · Commands Must Return",
103
+ "DOC_OPS_3": "Change the Setup, Not the Dash · Edit the Source, Not the Surface",
104
+ "DOC_OPS_4": "Strip the Car to the Tub · Complete the Teardown",
105
+ "DOC_OPS_5": "Read Live Telemetry, Not an Old Sheet · Record the Probe, Not the Snapshot",
106
+ "DOC_OPS_6": "A New Lap Won't Load a New Setup · Restart Is Not Reload",
107
+ "DOC_PROCESS_1": "Put It in the Debrief · Persist Insight",
108
+ "DOC_PROCESS_2": "Set the Strategy · Plan Before Acting",
109
+ "DOC_PROCESS_3": "Run Light on Fuel · Context Economy",
110
+ "DOC_PROCESS_4": "Read the Briefing First · Read the Docs First",
111
+ "DOC_PROCESS_5": "My Call Before You Push · Consent Before Push",
112
+ "DOC_PROCESS_6": "Set the Lap Count Before You Go Out · Bound the Loop",
113
+ "DOC_PROCESS_7": "Every Setup Change Gets a Number · Codes That Persist",
116
114
  "INTRO_DOC": "This file is the briefing a coding driver reads when it joins this repository.",
117
115
  "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.",
118
116
  "INTRO_SKILLS": "A Skill is a setup you've practised for a recurring task. Run the matching setup before you improvise.",
119
117
  "INTRO_WORKSPACE": "The directory this harness races in is its **Workspace**, and the track is shared.",
120
118
  "INTRO_SCRIPTS": "Everything above runs on the driver's discipline alone.",
121
119
  "BANNER": "════════════════════════════════════════════════════\n 🏎️ GENESEED — SIMPLY LOVELY, RULES LOADED\n════════════════════════════════════════════════════",
120
+ "ONTOLOGY": "Racecraft",
122
121
  "LAW": "Rule",
123
122
  "LAWS": "Rules",
123
+ "DOCTRINE": "Instruction",
124
+ "DOCTRINES": "Instructions",
124
125
  "AGENT": "Engineer",
125
126
  "AGENTS": "Engineers",
126
127
  "SKILL": "Setup",
@@ -3,7 +3,9 @@
3
3
  "VOICE": "Respond like a learned but practical wizard — measured, arcane in imagery, plain in meaning. Carry the flavour through diction and metaphor (Precepts, Familiars, Spells, the Grimoire), not through archaic grammar — contemporary English only. The mystique is constant but must never cloud technical precision or clarity.",
4
4
  "TAGLINE": "Inscribe the grimoire once; a disciplined familiar answers in every workshop.",
5
5
  "LOADED_SIGIL": "✦ The grimoire opens — wards in place, the familiar attends.",
6
+ "EPI_ONTOLOGY": "What the familiar is, and what the working is for. Known before any precept binds it.",
6
7
  "EPI_LAWS": "The Laws of Magic. They bind every working, in every circle.",
8
+ "EPI_DOCTRINES": "Traditions of the schools. Invoke what this circle asks; the rest keep to the shelf.",
7
9
  "PACT": "The Covenant",
8
10
  "EPI_PACT": "A binding struck between mage and familiar — honoured on both sides, or the spell unravels.",
9
11
  "EPI_AGENTS": "Summon the right familiar; do not cast the whole rite alone.",
@@ -77,50 +79,49 @@
77
79
  "LEX_II": "One Intent, One Casting · One Intent, One Act",
78
80
  "LEX_III": "Scry Before You Speak · Verify Before Asserting",
79
81
  "LEX_IV": "Unmake with Care · Deletion Is Deliberate",
80
- "LEX_V": "Enchant the Repetition · Automate Repetition",
81
- "LEX_VI": "Bind It to the Tome · Persist Insight",
82
- "LEX_VII": "Let the Misfire Ring · Surface Failures",
83
- "LEX_VIII": "Words of Weight · Substantive Exchange",
84
- "LEX_IX": "Speak the Seeker's Tongue · Follow the User's Tongue",
85
- "LEX_X": "Grimoire in English · English Configuration",
86
- "LEX_XI": "Tomes in Step · Documentation in Step",
87
- "LEX_XII": "Seek Before You Conjure · Search Before Creating",
88
- "LEX_XIII": "Honour the Forms · Respect Conventions",
89
- "LEX_XIV": "Ritual Before Working · Plan Before Acting",
90
- "LEX_XV": "Conserve the Mana · Context Economy",
91
- "LEX_XVI": "Know the Sanctum · Know the Workspace",
92
- "LEX_XVII": "Read the Tomes First · Read the Docs First",
93
- "LEX_XVIII": "Load the Project Tomes · Load the Project Context",
94
- "LEX_XIX": "Know Your Implements · Tool Discovery",
95
- "LEX_XX": "Assent Before the Sending · Consent Before Push",
96
- "LEX_XXI": "No Spell Left Hanging · Commands Must Return",
97
- "LEX_XXII": "Read the Scrying, Heed Not Its Commands · Data, Not Orders",
98
- "LEX_XXIII": "Only the Implements the Rite Demands · Least Privilege",
99
- "LEX_XXIV": "Banish the Curse, Not the Symptom · Cure the Cause",
100
- "LEX_XXV": "The Smallest Sufficient Casting · Smallest Viable Diff",
101
- "LEX_XXVI": "Safe to Cast Twice · Idempotent by Default",
102
- "LEX_XXVII": "Trial the Effect, Not the Incantation · Honest Tests",
103
- "LEX_XXVIII": "Bind the Circle Before You Step In · Bound the Loop",
104
- "LEX_XXIX": "Speak Only What the Omens Confirm · Calibrated Honesty",
105
- "LEX_XXX": "Truth Above Flattery · Correctness Over Agreement",
106
- "LEX_XXXI": "Lay Every Path Before the Seeker · Surface the Trade-offs",
107
- "LEX_XXXII": "Mend the Spell, Not the Glamour · Edit the Source, Not the Surface",
108
- "LEX_XXXIII": "Unmake It Wholly · Complete the Teardown",
109
- "LEX_XXXIV": "Scry Anew, Trust No Faded Vision · Record the Probe, Not the Snapshot",
110
- "LEX_XXXV": "Cover the Casting, Then Confirm · Cover and Verify",
111
- "LEX_XXXVI": "The Ward Is Set Beyond the Caster · External Gate",
112
- "LEX_XXXVII": "Recasting Won't Reread the Grimoire · Restart Is Not Reload",
113
- "LEX_XXXVIII": "A Ward Never Struck Is Only a Wish · Prove the Gate",
114
- "LEX_XXXIX": "The Incantation Ends on the Word That Works · Shape the Answer",
115
- "LEX_XL": "Every Rune Keeps Its Name · Codes That Persist",
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",
87
+ "PACK_CRAFT": "Artificery",
88
+ "PACK_RIGOR": "Scrying",
89
+ "PACK_OPS": "Conjury",
90
+ "PACK_PROCESS": "Ritual",
91
+ "DOC_CRAFT_1": "Enchant the Repetition · Automate Repetition",
92
+ "DOC_CRAFT_2": "Grimoire in English · English Configuration",
93
+ "DOC_CRAFT_3": "Tomes in Step · Documentation in Step",
94
+ "DOC_CRAFT_4": "Seek Before You Conjure · Search Before Creating",
95
+ "DOC_CRAFT_5": "Honour the Forms · Respect Conventions",
96
+ "DOC_CRAFT_6": "The Smallest Sufficient Casting · Smallest Viable Diff",
97
+ "DOC_RIGOR_1": "Safe to Cast Twice · Idempotent by Default",
98
+ "DOC_RIGOR_2": "Trial the Effect, Not the Incantation · Honest Tests",
99
+ "DOC_RIGOR_3": "Cover the Casting, Then Confirm · Cover and Verify",
100
+ "DOC_RIGOR_4": "A Ward Never Struck Is Only a Wish · Prove the Gate",
101
+ "DOC_OPS_1": "Know Your Implements · Tool Discovery",
102
+ "DOC_OPS_2": "No Spell Left Hanging · Commands Must Return",
103
+ "DOC_OPS_3": "Mend the Spell, Not the Glamour · Edit the Source, Not the Surface",
104
+ "DOC_OPS_4": "Unmake It Wholly · Complete the Teardown",
105
+ "DOC_OPS_5": "Scry Anew, Trust No Faded Vision · Record the Probe, Not the Snapshot",
106
+ "DOC_OPS_6": "Recasting Won't Reread the Grimoire · Restart Is Not Reload",
107
+ "DOC_PROCESS_1": "Bind It to the Tome · Persist Insight",
108
+ "DOC_PROCESS_2": "Ritual Before Working · Plan Before Acting",
109
+ "DOC_PROCESS_3": "Conserve the Mana · Context Economy",
110
+ "DOC_PROCESS_4": "Read the Tomes First · Read the Docs First",
111
+ "DOC_PROCESS_5": "Assent Before the Sending · Consent Before Push",
112
+ "DOC_PROCESS_6": "Bind the Circle Before You Step In · Bound the Loop",
113
+ "DOC_PROCESS_7": "Every Rune Keeps Its Name · Codes That Persist",
116
114
  "INTRO_DOC": "This file is the first page an arcane familiar reads on entering this repository.",
117
115
  "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.",
118
116
  "INTRO_SKILLS": "A Skill is a proven spell for a recurring task. Speak the matching spell before improvising.",
119
117
  "INTRO_WORKSPACE": "The directory this harness is inscribed into is its **Workspace**, and the sanctum is shared.",
120
118
  "INTRO_SCRIPTS": "Everything above holds by the familiar's discipline alone.",
121
119
  "BANNER": "·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•\n 🪄 GENESEED AWAKENED — THE PRECEPTS HOLD\n·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•·•",
120
+ "ONTOLOGY": "Cosmology",
122
121
  "LAW": "Precept",
123
122
  "LAWS": "Precepts",
123
+ "DOCTRINE": "Tradition",
124
+ "DOCTRINES": "Traditions",
124
125
  "AGENT": "Familiar",
125
126
  "AGENTS": "Familiars",
126
127
  "SKILL": "Spell",
@@ -1 +1 @@
1
- import{a as l,j as e,I as a}from"./index-D5VY3TY_.js";import{r as n}from"./react-DOpiTn5v.js";const c="https://github.com/Arylmera/Geneseed",h="https://github.com/Arylmera";function u(){const[r,i]=n.useState(c),[t,o]=n.useState(!0);return n.useEffect(()=>{l.docsPage("about").then(s=>{s!=null&&s.repo&&(i(s.repo),o(!!s.repo_is_github))}).catch(()=>{})},[]),e.jsxs("div",{className:"narrow",children:[e.jsx("div",{className:"head-row mb-18",children:e.jsxs("div",{children:[e.jsx("h1",{className:"h",children:"About"}),e.jsx("p",{className:"sub",children:"The project, where the source lives, and a word from the person who grew it."})]})}),e.jsxs("div",{className:"card pad-lg mb-16",children:[e.jsx("div",{className:"card-head",children:e.jsx("h3",{children:"Project"})}),e.jsx("p",{className:"sub mb-16",children:"Geneseed is a portable, theme-able harness you implant once and use everywhere to grow a disciplined AI coding agent. One canonical source, many voices, MIT-licensed."}),e.jsxs("div",{className:"row wrap gap-10",children:[e.jsxs("a",{className:"btn ghost",href:r,target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"github"}),t?"Source on GitHub":"Source repo"]}),t&&e.jsxs(e.Fragment,{children:[e.jsxs("a",{className:"btn ghost",href:r+"/issues",target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"external"}),"Issues"]}),e.jsxs("a",{className:"btn ghost",href:r+"/blob/main/LICENSE",target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"external"}),"MIT License"]})]})]})]}),e.jsxs("div",{className:"card pad-lg",children:[e.jsx("div",{className:"card-head",children:e.jsx("h3",{children:"Creator"})}),e.jsxs("p",{className:"sub mb-16",children:["Geneseed is built by ",e.jsx("strong",{children:"Guillaume Lemer"}),". It started as a personal, Obsidian-vault-grown agent operating system and was distilled into the repo you are running. Implant it once, and a disciplined agent grows around the same inherited rules, skills, and memory in every repo it follows you into."]}),e.jsx("p",{className:"sub mb-16",children:"If you find this useful, a star on the repo or an issue with feedback is the best way to help shape what comes next."}),e.jsx("div",{className:"row wrap gap-10",children:e.jsxs("a",{className:"btn ghost",href:h,target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"github"}),"@Arylmera on GitHub"]})})]})]})}export{u as default};
1
+ import{a as l,j as e,I as a}from"./index-C-gb-q-r.js";import{r as n}from"./react-DOpiTn5v.js";const c="https://github.com/Arylmera/Geneseed",h="https://github.com/Arylmera";function u(){const[r,i]=n.useState(c),[t,o]=n.useState(!0);return n.useEffect(()=>{l.docsPage("about").then(s=>{s!=null&&s.repo&&(i(s.repo),o(!!s.repo_is_github))}).catch(()=>{})},[]),e.jsxs("div",{className:"narrow",children:[e.jsx("div",{className:"head-row mb-18",children:e.jsxs("div",{children:[e.jsx("h1",{className:"h",children:"About"}),e.jsx("p",{className:"sub",children:"The project, where the source lives, and a word from the person who grew it."})]})}),e.jsxs("div",{className:"card pad-lg mb-16",children:[e.jsx("div",{className:"card-head",children:e.jsx("h3",{children:"Project"})}),e.jsx("p",{className:"sub mb-16",children:"Geneseed is a portable, theme-able harness you implant once and use everywhere to grow a disciplined AI coding agent. One canonical source, many voices, MIT-licensed."}),e.jsxs("div",{className:"row wrap gap-10",children:[e.jsxs("a",{className:"btn ghost",href:r,target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"github"}),t?"Source on GitHub":"Source repo"]}),t&&e.jsxs(e.Fragment,{children:[e.jsxs("a",{className:"btn ghost",href:r+"/issues",target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"external"}),"Issues"]}),e.jsxs("a",{className:"btn ghost",href:r+"/blob/main/LICENSE",target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"external"}),"MIT License"]})]})]})]}),e.jsxs("div",{className:"card pad-lg",children:[e.jsx("div",{className:"card-head",children:e.jsx("h3",{children:"Creator"})}),e.jsxs("p",{className:"sub mb-16",children:["Geneseed is built by ",e.jsx("strong",{children:"Guillaume Lemer"}),". It started as a personal, Obsidian-vault-grown agent operating system and was distilled into the repo you are running. Implant it once, and a disciplined agent grows around the same inherited rules, skills, and memory in every repo it follows you into."]}),e.jsx("p",{className:"sub mb-16",children:"If you find this useful, a star on the repo or an issue with feedback is the best way to help shape what comes next."}),e.jsx("div",{className:"row wrap gap-10",children:e.jsxs("a",{className:"btn ghost",href:h,target:"_blank",rel:"noreferrer",children:[e.jsx(a,{name:"github"}),"@Arylmera on GitHub"]})})]})]})}export{u as default};
@@ -1 +1 @@
1
- import{j as e,E as v,L as y,a as x,I as g,r as f,g as u}from"./index-D5VY3TY_.js";import{r as p}from"./react-DOpiTn5v.js";import{S as j,b,E as h,c as N,a as w,T as k}from"./activity-0rvQ6Vra.js";function S({s}){const l=j[s.status]||j.idle,n=s.files,a=s.todos,i=a&&a.total>0||s.error||s.blocked_on,r=()=>u(`#/activity/${encodeURIComponent(s.session_id)}`);return e.jsxs("div",{className:"card pad-md act-card",style:{cursor:"pointer"},onClick:r,role:"link",tabIndex:0,onKeyDown:d=>{d.key==="Enter"&&r()},children:[e.jsxs("div",{className:"row between wrap gap-12",children:[e.jsxs("div",{className:"row gap-10",style:{minWidth:0},children:[e.jsx("span",{className:`feed-dot ${l.cls||"acc"}`,style:{width:9,height:9}}),e.jsxs("div",{style:{minWidth:0},children:[e.jsx("h3",{style:{margin:0},children:s.title||b(s.cwd)||s.session_id}),s.cwd&&e.jsx("div",{className:"dim mono",style:{fontSize:12,...h},title:s.cwd,children:s.cwd})]})]}),e.jsxs("div",{className:"row gap-8",style:{flexShrink:0},children:[s.model&&e.jsx("span",{className:"badge mono",title:"model",children:s.model}),s.agent&&e.jsx("span",{className:"badge",children:s.agent}),e.jsxs("span",{className:`badge ${l.cls}`,children:[e.jsx("span",{className:"dot"}),l.label]}),e.jsx(g,{name:"chevron",className:"glyph act-chev"})]})]}),s.phase&&e.jsxs("div",{className:"row gap-8",style:{marginTop:10,fontSize:14},children:[e.jsx(g,{name:"activity"}),e.jsx("span",{style:h,children:s.phase})]}),(s.tokens>0||s.cost>0||s.turn_started_at||n&&n.count>0)&&e.jsxs("div",{className:"row wrap",style:{gap:16,marginTop:12,fontSize:13,color:"var(--text-2)"},children:[s.tokens>0&&e.jsxs("span",{children:[N(s.tokens)," tok"]}),s.cost>0&&e.jsxs("span",{children:["$",s.cost.toFixed(2)]}),s.turn_started_at?e.jsx("span",{children:e.jsx(w,{startedAt:s.turn_started_at})}):null,n&&n.count>0&&e.jsxs("span",{children:[n.count," file",n.count===1?"":"s"," ",e.jsxs("span",{style:{color:"var(--good)"},children:["+",n.additions]})," ",e.jsxs("span",{style:{color:"var(--bad)"},children:["−",n.deletions]})]})]}),i&&e.jsxs("div",{className:"row between wrap gap-12",style:{marginTop:12,paddingTop:10,borderTop:"1px solid var(--line)"},children:[a&&a.total>0?e.jsxs("span",{className:"row gap-8 dim",style:{fontSize:13},children:[e.jsx(k,{done:a.done,total:a.total}),"plan ",a.done,"/",a.total]}):e.jsx("span",{}),s.error?e.jsx("span",{className:"badge bad",title:s.error,style:{maxWidth:300,...h},children:s.error}):s.blocked_on?e.jsx("span",{className:"badge bad",title:s.blocked_on,style:{maxWidth:300,...h},children:s.blocked_on}):null]}),e.jsxs("div",{className:"dim mono",style:{fontSize:11,marginTop:8},children:["updated ",f(s.updated_at)," ago"]})]})}function I(){const[s,l]=p.useState(null),[n,a]=p.useState("");p.useEffect(()=>{let t=!0;const o=()=>x.activity().then(m=>{t&&(l(m),a(""))},m=>{t&&a(m.message)});o();const c=setInterval(o,2e3);return()=>{t=!1,clearInterval(c)}},[]);const i=s?s.enabled!==!1:!0,r=(s==null?void 0:s.activity)||[],d=async()=>{const t=!i;try{const o=await x.activityToggle(t);l(c=>({...c||{},enabled:o.enabled,activity:o.enabled?(c==null?void 0:c.activity)||[]:[]})),a("")}catch(o){a(o.message)}};return e.jsxs("div",{className:"narrow",children:[e.jsxs("div",{className:"head-row mb-16",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"h",children:"Activity"}),e.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."})]}),e.jsxs("div",{className:"row gap-10",style:{alignItems:"center",flexShrink:0},children:[e.jsx("span",{className:"dim mono",style:{fontSize:12},children:i?"tracking on":"tracking off"}),e.jsx("div",{className:`sw-toggle${i?" on":""}`,role:"switch","aria-checked":i,"aria-label":"Toggle activity tracking",tabIndex:0,onClick:d,onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.key===" "&&t.preventDefault(),d())}})]})]}),e.jsx(v,{error:n,style:{marginBottom:12}}),s?i?r.length===0?e.jsxs("div",{className:"empty",children:[e.jsx("div",{className:"big",children:"No active sessions"}),"Run ",e.jsx("code",{children:"opencode"})," and the sessions it spins up appear here."]}):e.jsx("div",{className:"stack gap-12",children:r.map(t=>e.jsx(S,{s:t},t.session_id))}):e.jsxs("div",{className:"empty",children:[e.jsx("div",{className:"big",children:"Activity tracking is off"}),"The plugin isn't recording sessions. Flip the switch to turn it back on."]}):e.jsx(y,{label:"Reading live sessions…"})]})}export{I as default};
1
+ import{j as e,E as v,L as y,a as x,I as g,r as f,g as u}from"./index-C-gb-q-r.js";import{r as p}from"./react-DOpiTn5v.js";import{S as j,b,E as h,c as N,a as w,T as k}from"./activity-VDAdVQ3q.js";function S({s}){const l=j[s.status]||j.idle,n=s.files,a=s.todos,i=a&&a.total>0||s.error||s.blocked_on,r=()=>u(`#/activity/${encodeURIComponent(s.session_id)}`);return e.jsxs("div",{className:"card pad-md act-card",style:{cursor:"pointer"},onClick:r,role:"link",tabIndex:0,onKeyDown:d=>{d.key==="Enter"&&r()},children:[e.jsxs("div",{className:"row between wrap gap-12",children:[e.jsxs("div",{className:"row gap-10",style:{minWidth:0},children:[e.jsx("span",{className:`feed-dot ${l.cls||"acc"}`,style:{width:9,height:9}}),e.jsxs("div",{style:{minWidth:0},children:[e.jsx("h3",{style:{margin:0},children:s.title||b(s.cwd)||s.session_id}),s.cwd&&e.jsx("div",{className:"dim mono",style:{fontSize:12,...h},title:s.cwd,children:s.cwd})]})]}),e.jsxs("div",{className:"row gap-8",style:{flexShrink:0},children:[s.model&&e.jsx("span",{className:"badge mono",title:"model",children:s.model}),s.agent&&e.jsx("span",{className:"badge",children:s.agent}),e.jsxs("span",{className:`badge ${l.cls}`,children:[e.jsx("span",{className:"dot"}),l.label]}),e.jsx(g,{name:"chevron",className:"glyph act-chev"})]})]}),s.phase&&e.jsxs("div",{className:"row gap-8",style:{marginTop:10,fontSize:14},children:[e.jsx(g,{name:"activity"}),e.jsx("span",{style:h,children:s.phase})]}),(s.tokens>0||s.cost>0||s.turn_started_at||n&&n.count>0)&&e.jsxs("div",{className:"row wrap",style:{gap:16,marginTop:12,fontSize:13,color:"var(--text-2)"},children:[s.tokens>0&&e.jsxs("span",{children:[N(s.tokens)," tok"]}),s.cost>0&&e.jsxs("span",{children:["$",s.cost.toFixed(2)]}),s.turn_started_at?e.jsx("span",{children:e.jsx(w,{startedAt:s.turn_started_at})}):null,n&&n.count>0&&e.jsxs("span",{children:[n.count," file",n.count===1?"":"s"," ",e.jsxs("span",{style:{color:"var(--good)"},children:["+",n.additions]})," ",e.jsxs("span",{style:{color:"var(--bad)"},children:["−",n.deletions]})]})]}),i&&e.jsxs("div",{className:"row between wrap gap-12",style:{marginTop:12,paddingTop:10,borderTop:"1px solid var(--line)"},children:[a&&a.total>0?e.jsxs("span",{className:"row gap-8 dim",style:{fontSize:13},children:[e.jsx(k,{done:a.done,total:a.total}),"plan ",a.done,"/",a.total]}):e.jsx("span",{}),s.error?e.jsx("span",{className:"badge bad",title:s.error,style:{maxWidth:300,...h},children:s.error}):s.blocked_on?e.jsx("span",{className:"badge bad",title:s.blocked_on,style:{maxWidth:300,...h},children:s.blocked_on}):null]}),e.jsxs("div",{className:"dim mono",style:{fontSize:11,marginTop:8},children:["updated ",f(s.updated_at)," ago"]})]})}function I(){const[s,l]=p.useState(null),[n,a]=p.useState("");p.useEffect(()=>{let t=!0;const o=()=>x.activity().then(m=>{t&&(l(m),a(""))},m=>{t&&a(m.message)});o();const c=setInterval(o,2e3);return()=>{t=!1,clearInterval(c)}},[]);const i=s?s.enabled!==!1:!0,r=(s==null?void 0:s.activity)||[],d=async()=>{const t=!i;try{const o=await x.activityToggle(t);l(c=>({...c||{},enabled:o.enabled,activity:o.enabled?(c==null?void 0:c.activity)||[]:[]})),a("")}catch(o){a(o.message)}};return e.jsxs("div",{className:"narrow",children:[e.jsxs("div",{className:"head-row mb-16",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"h",children:"Activity"}),e.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."})]}),e.jsxs("div",{className:"row gap-10",style:{alignItems:"center",flexShrink:0},children:[e.jsx("span",{className:"dim mono",style:{fontSize:12},children:i?"tracking on":"tracking off"}),e.jsx("div",{className:`sw-toggle${i?" on":""}`,role:"switch","aria-checked":i,"aria-label":"Toggle activity tracking",tabIndex:0,onClick:d,onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.key===" "&&t.preventDefault(),d())}})]})]}),e.jsx(v,{error:n,style:{marginBottom:12}}),s?i?r.length===0?e.jsxs("div",{className:"empty",children:[e.jsx("div",{className:"big",children:"No active sessions"}),"Run ",e.jsx("code",{children:"opencode"})," and the sessions it spins up appear here."]}):e.jsx("div",{className:"stack gap-12",children:r.map(t=>e.jsx(S,{s:t},t.session_id))}):e.jsxs("div",{className:"empty",children:[e.jsx("div",{className:"big",children:"Activity tracking is off"}),"The plugin isn't recording sessions. Flip the switch to turn it back on."]}):e.jsx(y,{label:"Reading live sessions…"})]})}export{I as default};
@@ -1 +1 @@
1
- import{j as s,L as I,I as k,r as _,a as E}from"./index-D5VY3TY_.js";import{r as m}from"./react-DOpiTn5v.js";import{S as b,b as W,E as x,c as w,a as A}from"./activity-0rvQ6Vra.js";function C(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 F({rec:e}){const n=e.who==="you",i=[];n||(e.kind==="tool"&&e.ms!=null&&i.push(`${(e.ms/1e3).toFixed(1)}s`),e.kind==="step"&&(e.tokens&&i.push(`${w(e.tokens)} tok`),e.cost&&i.push(`$${e.cost.toFixed(2)}`)),e.kind==="subtask"&&e.agent&&i.unshift(e.agent));const l=!n&&(e.kind==="text"||e.kind==="thinking"||e.kind==="step"),o=n?e.text:e.label||e.snippet||e.kind;return s.jsxs("div",{className:"row gap-10",style:{alignItems:"baseline"},children:[s.jsx("span",{className:`badge ${n?"":"acc"}`,style:{flexShrink:0,minWidth:52,justifyContent:"center"},children:n?"you":"agent"}),s.jsxs("div",{style:{minWidth:0,flex:1,fontSize:13},children:[!n&&s.jsx("span",{className:`feed-dot ${C(e)||"acc"}`,style:{display:"inline-block",marginRight:8,verticalAlign:"middle"}}),e.kind==="thinking"&&s.jsx("span",{className:"dim",children:"thinking: "}),l?s.jsx("span",{className:"dim",children:o}):n?o:s.jsx("b",{children:o}),e.error&&s.jsxs("span",{className:"dim",children:[": ",e.error]})]}),i.length>0&&s.jsx("span",{className:"dim mono",style:{flexShrink:0,fontSize:12},children:i.join(" · ")})]})}function L({turns:e}){return!e||e.length===0?s.jsx("div",{className:"dim",style:{fontSize:13},children:"No conversation captured yet."}):s.jsx("div",{className:"stack gap-12",children:e.map((n,i)=>{const l=n.role==="user";return s.jsxs("div",{className:"row gap-10",style:{alignItems:"baseline"},children:[s.jsx("span",{className:`badge ${l?"":"acc"}`,style:{flexShrink:0,minWidth:52,justifyContent:"center"},children:l?"you":"agent"}),s.jsx("div",{style:{minWidth:0,fontSize:13,color:l?"inherit":"var(--text-2)"},children:n.text})]},i)})})}function P({sid:e}){const[n,i]=m.useState(null),[l,o]=m.useState(""),[S,f]=m.useState(!1),[y,T]=m.useState(!1);m.useEffect(()=>{let a=!0;const d=()=>E.activityDetail(e).then(h=>{a&&(i(h),o(""),f(!1))},h=>{a&&(h.status===404?f(!0):o(h.message))});d();const z=setInterval(d,2e3);return()=>{a=!1,clearInterval(z)}},[e]);const p=s.jsxs("a",{className:"btn ghost sm",href:"#/activity",style:{marginBottom:12,display:"inline-flex",gap:6},children:[s.jsx(k,{name:"arrow",style:{transform:"rotate(180deg)"}})," Activity"]});if(S)return s.jsxs("div",{className:"narrow",children:[p,s.jsxs("div",{className:"empty",children:[s.jsx("div",{className:"big",children:"Session ended"}),"It's no longer live. ",s.jsx("a",{href:"#/activity",children:"Back to Activity"}),"."]})]});if(!n)return s.jsxs("div",{className:"narrow",children:[p,s.jsx(I,{label:"Loading session…"})]});const t=n.session,v=b[t.status]||b.idle,c=t.files,r=t.todos,j=!!(c&&c.items&&c.items.length>0),g=!!(r&&r.items&&r.items.length>0),N=n.conversation||[],u=n.timeline||[],$=[...N.filter(a=>a.role==="user").map(a=>({who:"you",text:a.text,t:a.t||0})),...u.map(a=>({...a,who:"agent"}))].sort((a,d)=>(a.t||0)-(d.t||0));return s.jsxs("div",{className:"narrow",children:[p,l&&s.jsx("p",{className:"badge bad",style:{marginBottom:12},children:l}),s.jsxs("div",{className:"card pad-md",children:[s.jsxs("div",{className:"row between wrap gap-12",children:[s.jsxs("div",{style:{minWidth:0},children:[s.jsx("h1",{className:"h",style:{margin:0},children:t.title||W(t.cwd)||t.session_id}),t.cwd&&s.jsx("div",{className:"dim mono",style:{fontSize:12,...x},title:t.cwd,children:t.cwd})]}),s.jsxs("div",{className:"row gap-8",style:{flexShrink:0},children:[t.model&&s.jsx("span",{className:"badge mono",children:t.model}),t.agent&&s.jsx("span",{className:"badge",children:t.agent}),s.jsxs("span",{className:`badge ${v.cls}`,children:[s.jsx("span",{className:"dot"}),v.label]})]})]}),t.phase&&s.jsxs("div",{className:"row gap-8",style:{marginTop:10,fontSize:14},children:[s.jsx(k,{name:"activity"}),s.jsx("span",{style:x,children:t.phase})]}),s.jsxs("div",{className:"row wrap",style:{gap:16,marginTop:12,fontSize:13,color:"var(--text-2)"},children:[t.tokens>0&&s.jsxs("span",{children:[w(t.tokens)," tok"]}),t.cost>0&&s.jsxs("span",{children:["$",t.cost.toFixed(2)]}),t.turn_started_at?s.jsx("span",{children:s.jsx(A,{startedAt:t.turn_started_at})}):null,s.jsxs("span",{className:"dim",children:["updated ",_(t.updated_at)," ago"]})]}),(t.error||t.blocked_on)&&s.jsx("div",{style:{marginTop:10},children:s.jsx("span",{className:"badge bad",style:{maxWidth:"100%",...x},children:t.error||t.blocked_on})})]}),(j||g)&&s.jsxs("div",{className:"grid gap-12",style:{marginTop:12,gridTemplateColumns:j&&g?"minmax(0, 1fr) minmax(0, 1fr)":"1fr"},children:[j&&s.jsxs("div",{className:"card pad-md",children:[s.jsx("div",{className:"card-head",children:s.jsxs("h3",{children:["Files touched ",s.jsxs("span",{className:"dim",children:["(",c.count,")"]})]})}),s.jsx("div",{className:"stack",style:{gap:6,marginTop:8},children:c.items.map(a=>s.jsxs("div",{className:"row between gap-12",style:{fontSize:13},children:[s.jsx("span",{className:"mono",style:{...x,minWidth:0,flex:1},title:a.file,children:a.file}),s.jsxs("span",{style:{flexShrink:0},children:[s.jsxs("span",{style:{color:"var(--good)"},children:["+",a.additions]})," ",s.jsxs("span",{style:{color:"var(--bad)"},children:["−",a.deletions]})]})]},a.file))})]}),g&&s.jsxs("div",{className:"card pad-md",children:[s.jsx("div",{className:"card-head",children:s.jsxs("h3",{children:["Plan"," ",s.jsxs("span",{className:"dim",children:["(",r.done,"/",r.total,")"]})]})}),s.jsx("div",{className:"stack",style:{gap:6,marginTop:8},children:r.items.map((a,d)=>s.jsxs("div",{className:"row gap-8",style:{fontSize:13},children:[s.jsx("span",{className:`feed-dot ${a.status==="completed"?"ok":a.status==="in_progress"?"acc":""}`}),s.jsx("span",{style:{textDecoration:a.status==="completed"?"line-through":"none",color:a.status==="completed"?"var(--text-3)":"inherit"},children:a.content})]},d))})]})]}),s.jsxs("div",{className:"card pad-md",style:{marginTop:12},children:[s.jsxs("div",{className:"card-head",style:{justifyContent:"space-between",marginBottom:12},children:[s.jsx("h3",{children:"Timeline"}),u.length>0&&s.jsx("button",{className:"btn ghost sm",onClick:()=>T(a=>!a),children:y?"Show conversation":`Show all ${u.length} steps`})]}),y?s.jsx("div",{className:"stack gap-12",children:$.map((a,d)=>s.jsx(F,{rec:a},d))}):s.jsx(L,{turns:N})]})]})}export{P as default};
1
+ import{j as s,L as I,I as k,r as _,a as E}from"./index-C-gb-q-r.js";import{r as m}from"./react-DOpiTn5v.js";import{S as b,b as W,E as x,c as w,a as A}from"./activity-VDAdVQ3q.js";function C(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 F({rec:e}){const n=e.who==="you",i=[];n||(e.kind==="tool"&&e.ms!=null&&i.push(`${(e.ms/1e3).toFixed(1)}s`),e.kind==="step"&&(e.tokens&&i.push(`${w(e.tokens)} tok`),e.cost&&i.push(`$${e.cost.toFixed(2)}`)),e.kind==="subtask"&&e.agent&&i.unshift(e.agent));const l=!n&&(e.kind==="text"||e.kind==="thinking"||e.kind==="step"),o=n?e.text:e.label||e.snippet||e.kind;return s.jsxs("div",{className:"row gap-10",style:{alignItems:"baseline"},children:[s.jsx("span",{className:`badge ${n?"":"acc"}`,style:{flexShrink:0,minWidth:52,justifyContent:"center"},children:n?"you":"agent"}),s.jsxs("div",{style:{minWidth:0,flex:1,fontSize:13},children:[!n&&s.jsx("span",{className:`feed-dot ${C(e)||"acc"}`,style:{display:"inline-block",marginRight:8,verticalAlign:"middle"}}),e.kind==="thinking"&&s.jsx("span",{className:"dim",children:"thinking: "}),l?s.jsx("span",{className:"dim",children:o}):n?o:s.jsx("b",{children:o}),e.error&&s.jsxs("span",{className:"dim",children:[": ",e.error]})]}),i.length>0&&s.jsx("span",{className:"dim mono",style:{flexShrink:0,fontSize:12},children:i.join(" · ")})]})}function L({turns:e}){return!e||e.length===0?s.jsx("div",{className:"dim",style:{fontSize:13},children:"No conversation captured yet."}):s.jsx("div",{className:"stack gap-12",children:e.map((n,i)=>{const l=n.role==="user";return s.jsxs("div",{className:"row gap-10",style:{alignItems:"baseline"},children:[s.jsx("span",{className:`badge ${l?"":"acc"}`,style:{flexShrink:0,minWidth:52,justifyContent:"center"},children:l?"you":"agent"}),s.jsx("div",{style:{minWidth:0,fontSize:13,color:l?"inherit":"var(--text-2)"},children:n.text})]},i)})})}function P({sid:e}){const[n,i]=m.useState(null),[l,o]=m.useState(""),[S,f]=m.useState(!1),[y,T]=m.useState(!1);m.useEffect(()=>{let a=!0;const d=()=>E.activityDetail(e).then(h=>{a&&(i(h),o(""),f(!1))},h=>{a&&(h.status===404?f(!0):o(h.message))});d();const z=setInterval(d,2e3);return()=>{a=!1,clearInterval(z)}},[e]);const p=s.jsxs("a",{className:"btn ghost sm",href:"#/activity",style:{marginBottom:12,display:"inline-flex",gap:6},children:[s.jsx(k,{name:"arrow",style:{transform:"rotate(180deg)"}})," Activity"]});if(S)return s.jsxs("div",{className:"narrow",children:[p,s.jsxs("div",{className:"empty",children:[s.jsx("div",{className:"big",children:"Session ended"}),"It's no longer live. ",s.jsx("a",{href:"#/activity",children:"Back to Activity"}),"."]})]});if(!n)return s.jsxs("div",{className:"narrow",children:[p,s.jsx(I,{label:"Loading session…"})]});const t=n.session,v=b[t.status]||b.idle,c=t.files,r=t.todos,j=!!(c&&c.items&&c.items.length>0),g=!!(r&&r.items&&r.items.length>0),N=n.conversation||[],u=n.timeline||[],$=[...N.filter(a=>a.role==="user").map(a=>({who:"you",text:a.text,t:a.t||0})),...u.map(a=>({...a,who:"agent"}))].sort((a,d)=>(a.t||0)-(d.t||0));return s.jsxs("div",{className:"narrow",children:[p,l&&s.jsx("p",{className:"badge bad",style:{marginBottom:12},children:l}),s.jsxs("div",{className:"card pad-md",children:[s.jsxs("div",{className:"row between wrap gap-12",children:[s.jsxs("div",{style:{minWidth:0},children:[s.jsx("h1",{className:"h",style:{margin:0},children:t.title||W(t.cwd)||t.session_id}),t.cwd&&s.jsx("div",{className:"dim mono",style:{fontSize:12,...x},title:t.cwd,children:t.cwd})]}),s.jsxs("div",{className:"row gap-8",style:{flexShrink:0},children:[t.model&&s.jsx("span",{className:"badge mono",children:t.model}),t.agent&&s.jsx("span",{className:"badge",children:t.agent}),s.jsxs("span",{className:`badge ${v.cls}`,children:[s.jsx("span",{className:"dot"}),v.label]})]})]}),t.phase&&s.jsxs("div",{className:"row gap-8",style:{marginTop:10,fontSize:14},children:[s.jsx(k,{name:"activity"}),s.jsx("span",{style:x,children:t.phase})]}),s.jsxs("div",{className:"row wrap",style:{gap:16,marginTop:12,fontSize:13,color:"var(--text-2)"},children:[t.tokens>0&&s.jsxs("span",{children:[w(t.tokens)," tok"]}),t.cost>0&&s.jsxs("span",{children:["$",t.cost.toFixed(2)]}),t.turn_started_at?s.jsx("span",{children:s.jsx(A,{startedAt:t.turn_started_at})}):null,s.jsxs("span",{className:"dim",children:["updated ",_(t.updated_at)," ago"]})]}),(t.error||t.blocked_on)&&s.jsx("div",{style:{marginTop:10},children:s.jsx("span",{className:"badge bad",style:{maxWidth:"100%",...x},children:t.error||t.blocked_on})})]}),(j||g)&&s.jsxs("div",{className:"grid gap-12",style:{marginTop:12,gridTemplateColumns:j&&g?"minmax(0, 1fr) minmax(0, 1fr)":"1fr"},children:[j&&s.jsxs("div",{className:"card pad-md",children:[s.jsx("div",{className:"card-head",children:s.jsxs("h3",{children:["Files touched ",s.jsxs("span",{className:"dim",children:["(",c.count,")"]})]})}),s.jsx("div",{className:"stack",style:{gap:6,marginTop:8},children:c.items.map(a=>s.jsxs("div",{className:"row between gap-12",style:{fontSize:13},children:[s.jsx("span",{className:"mono",style:{...x,minWidth:0,flex:1},title:a.file,children:a.file}),s.jsxs("span",{style:{flexShrink:0},children:[s.jsxs("span",{style:{color:"var(--good)"},children:["+",a.additions]})," ",s.jsxs("span",{style:{color:"var(--bad)"},children:["−",a.deletions]})]})]},a.file))})]}),g&&s.jsxs("div",{className:"card pad-md",children:[s.jsx("div",{className:"card-head",children:s.jsxs("h3",{children:["Plan"," ",s.jsxs("span",{className:"dim",children:["(",r.done,"/",r.total,")"]})]})}),s.jsx("div",{className:"stack",style:{gap:6,marginTop:8},children:r.items.map((a,d)=>s.jsxs("div",{className:"row gap-8",style:{fontSize:13},children:[s.jsx("span",{className:`feed-dot ${a.status==="completed"?"ok":a.status==="in_progress"?"acc":""}`}),s.jsx("span",{style:{textDecoration:a.status==="completed"?"line-through":"none",color:a.status==="completed"?"var(--text-3)":"inherit"},children:a.content})]},d))})]})]}),s.jsxs("div",{className:"card pad-md",style:{marginTop:12},children:[s.jsxs("div",{className:"card-head",style:{justifyContent:"space-between",marginBottom:12},children:[s.jsx("h3",{children:"Timeline"}),u.length>0&&s.jsx("button",{className:"btn ghost sm",onClick:()=>T(a=>!a),children:y?"Show conversation":`Show all ${u.length} steps`})]}),y?s.jsx("div",{className:"stack gap-12",children:$.map((a,d)=>s.jsx(F,{rec:a},d))}):s.jsx(L,{turns:N})]})]})}export{P as default};
@@ -1,4 +1,4 @@
1
- import{u as R,j as e,E as O,L as T,I as b,a as g}from"./index-D5VY3TY_.js";import{r as c}from"./react-DOpiTn5v.js";const W=700;function D(r){return r.startsWith("@@")||r.startsWith("+++")||r.startsWith("---")?"hunk":r.startsWith("+")?"add":r.startsWith("-")?"del":"ctx"}function A({onMutated:r,dataRev:w}){const{data:i,error:f,reload:y}=R(()=>g.diff(),[w]),[p,h]=c.useState(!1),[x,m]=c.useState(""),[l,u]=c.useState(()=>new Set),[v,j]=c.useState(()=>new Set);c.useEffect(()=>{i&&(u(new Set),j(new Set(i.files.map(s=>s.rel))))},[i]);const S=s=>u(t=>{const a=new Set(t);return a.has(s)?a.delete(s):a.add(s),a}),k=()=>u(s=>s.size===i.files.length?new Set:new Set(i.files.map(t=>t.rel))),E=async()=>{h(!0);try{const{job_id:s}=await g.action("export");let t;do await new Promise(a=>setTimeout(a,W)),t=await g.job(s);while(t.status==="running");m(t.status==="done"?"Improvements file written.":"Export failed. See logs.")}catch(s){m(s.message)}finally{h(!1)}},$=async()=>{const s=[...l],t=s.filter(n=>{var d;return((d=i.files.find(I=>I.rel===n))==null?void 0:d.status)==="added"}),a=t.length?`Restoring will DELETE ${t.length} deployed-only file(s):
1
+ import{u as R,j as e,E as O,L as T,I as b,a as g}from"./index-C-gb-q-r.js";import{r as c}from"./react-DOpiTn5v.js";const W=700;function D(r){return r.startsWith("@@")||r.startsWith("+++")||r.startsWith("---")?"hunk":r.startsWith("+")?"add":r.startsWith("-")?"del":"ctx"}function A({onMutated:r,dataRev:w}){const{data:i,error:f,reload:y}=R(()=>g.diff(),[w]),[p,h]=c.useState(!1),[x,m]=c.useState(""),[l,u]=c.useState(()=>new Set),[v,j]=c.useState(()=>new Set);c.useEffect(()=>{i&&(u(new Set),j(new Set(i.files.map(s=>s.rel))))},[i]);const S=s=>u(t=>{const a=new Set(t);return a.has(s)?a.delete(s):a.add(s),a}),k=()=>u(s=>s.size===i.files.length?new Set:new Set(i.files.map(t=>t.rel))),E=async()=>{h(!0);try{const{job_id:s}=await g.action("export");let t;do await new Promise(a=>setTimeout(a,W)),t=await g.job(s);while(t.status==="running");m(t.status==="done"?"Improvements file written.":"Export failed. See logs.")}catch(s){m(s.message)}finally{h(!1)}},$=async()=>{const s=[...l],t=s.filter(n=>{var d;return((d=i.files.find(I=>I.rel===n))==null?void 0:d.status)==="added"}),a=t.length?`Restoring will DELETE ${t.length} deployed-only file(s):
2
2
  ${t.join(`
3
3
  `)}
4
4
 
@@ -1 +1 @@
1
- import{u as t,j as s,E as i,I as d,L as o,a as h}from"./index-D5VY3TY_.js";import{r as m}from"./react-DOpiTn5v.js";function p({group:e}){const a=e.problems.length===0,[c,r]=m.useState(!a);return s.jsxs("div",{className:`card check ${a?"":"bad"} ${c?"open":""}`,children:[s.jsxs("div",{className:"check-head",onClick:()=>!a&&r(l=>!l),style:{cursor:a?"default":"pointer"},children:[s.jsx("span",{className:`feed-dot ${a?"ok":"bad"}`,style:{width:9,height:9}}),s.jsx("h3",{children:e.label}),s.jsxs("span",{className:`badge ${a?"ok":"bad"}`,children:[s.jsx("span",{className:"dot"}),a?"clean":`${e.problems.length} problem${e.problems.length===1?"":"s"}`]}),!a&&s.jsx(d,{name:"chevron",className:"chev glyph"})]}),!a&&c&&s.jsx("div",{className:"check-body",children:e.problems.map(l=>s.jsxs("div",{className:"problem",children:[s.jsx("span",{className:"x",children:"✕"}),s.jsx("span",{children:l})]},l))})]})}function b(){const{data:e,error:a,reload:c,setData:r}=t(()=>h.doctor(),[]),l=()=>{r(null),c()};return a?s.jsx(i,{error:a}):s.jsxs("div",{className:"narrow",children:[s.jsxs("div",{className:"head-row mb-16",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"h",children:"Doctor"}),s.jsx("p",{className:"sub",children:"Every check builds each theme in a sandbox and validates the result: token resolution, link integrity, parity, and drift."})]}),s.jsxs("button",{className:"btn ghost",onClick:l,disabled:!e,children:[s.jsx(d,{name:"refresh"}),e?"Re-run checks":"Running…"]})]}),e?s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"card pad-md mb-16",children:s.jsxs("div",{className:"row wrap between gap-12",children:[s.jsxs("div",{className:"row",style:{gap:10,flexWrap:"wrap"},children:[s.jsxs("span",{className:"dim mono",style:{fontSize:12},children:["validated ",e.themes.length," theme",e.themes.length===1?"":"s"]}),e.themes.map(n=>s.jsx("span",{className:"badge",style:{textTransform:"capitalize"},children:n},n))]}),e.ok?s.jsxs("span",{className:"badge ok",children:[s.jsx("span",{className:"dot"}),"all clean"]}):s.jsxs("span",{className:"badge bad",children:[s.jsx("span",{className:"dot"}),e.problems.length," problem",e.problems.length===1?"":"s"]})]})}),s.jsx("div",{className:"stack gap-12",children:e.groups.map(n=>s.jsx(p,{group:n},n.label))})]}):s.jsx(o,{label:"Running every check (builds each theme in a sandbox)…"})]})}export{b as default};
1
+ import{u as t,j as s,E as i,I as d,L as o,a as h}from"./index-C-gb-q-r.js";import{r as m}from"./react-DOpiTn5v.js";function p({group:e}){const a=e.problems.length===0,[c,r]=m.useState(!a);return s.jsxs("div",{className:`card check ${a?"":"bad"} ${c?"open":""}`,children:[s.jsxs("div",{className:"check-head",onClick:()=>!a&&r(l=>!l),style:{cursor:a?"default":"pointer"},children:[s.jsx("span",{className:`feed-dot ${a?"ok":"bad"}`,style:{width:9,height:9}}),s.jsx("h3",{children:e.label}),s.jsxs("span",{className:`badge ${a?"ok":"bad"}`,children:[s.jsx("span",{className:"dot"}),a?"clean":`${e.problems.length} problem${e.problems.length===1?"":"s"}`]}),!a&&s.jsx(d,{name:"chevron",className:"chev glyph"})]}),!a&&c&&s.jsx("div",{className:"check-body",children:e.problems.map(l=>s.jsxs("div",{className:"problem",children:[s.jsx("span",{className:"x",children:"✕"}),s.jsx("span",{children:l})]},l))})]})}function b(){const{data:e,error:a,reload:c,setData:r}=t(()=>h.doctor(),[]),l=()=>{r(null),c()};return a?s.jsx(i,{error:a}):s.jsxs("div",{className:"narrow",children:[s.jsxs("div",{className:"head-row mb-16",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"h",children:"Doctor"}),s.jsx("p",{className:"sub",children:"Every check builds each theme in a sandbox and validates the result: token resolution, link integrity, parity, and drift."})]}),s.jsxs("button",{className:"btn ghost",onClick:l,disabled:!e,children:[s.jsx(d,{name:"refresh"}),e?"Re-run checks":"Running…"]})]}),e?s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"card pad-md mb-16",children:s.jsxs("div",{className:"row wrap between gap-12",children:[s.jsxs("div",{className:"row",style:{gap:10,flexWrap:"wrap"},children:[s.jsxs("span",{className:"dim mono",style:{fontSize:12},children:["validated ",e.themes.length," theme",e.themes.length===1?"":"s"]}),e.themes.map(n=>s.jsx("span",{className:"badge",style:{textTransform:"capitalize"},children:n},n))]}),e.ok?s.jsxs("span",{className:"badge ok",children:[s.jsx("span",{className:"dot"}),"all clean"]}):s.jsxs("span",{className:"badge bad",children:[s.jsx("span",{className:"dot"}),e.problems.length," problem",e.problems.length===1?"":"s"]})]})}),s.jsx("div",{className:"stack gap-12",children:e.groups.map(n=>s.jsx(p,{group:n},n.label))})]}):s.jsx(o,{label:"Running every check (builds each theme in a sandbox)…"})]})}export{b as default};