herm-tui 1.9.0-dev.10 → 1.9.0-dev.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -93,12 +93,13 @@ See [`.env.example`](./.env.example) for rarely-needed overrides.
93
93
 
94
94
  ### Share and install eikons
95
95
 
96
- - Press `M` from Gallery to enter the native Eikon Marketplace.
97
- - Search shared catalog entries, preview the selected eikon, install without
98
- activating, then use it when ready.
99
- - Use `eikon.liftaris.dev` as a discovery mirror only; it previews catalog
100
- entries and points back to Herm for native install/use.
101
- - Submit local non-bundled eikons with `u`; Herm shows the exact
96
+ - Open Eikon Marketplace, or run `/marketplace`, to browse shared catalog
97
+ entries.
98
+ - Preview the selected eikon, install without activating, then use it when
99
+ ready.
100
+ - Use `eikon.liftaris.dev` as a discovery gallery only; it previews catalog
101
+ entries and gives copyable Herm install instructions.
102
+ - Submit local non-bundled eikons from Studio with `u`; Herm shows the exact
102
103
  preflight bundle before submission and blocks published marketplace installs
103
104
  from duplicate submission.
104
105
 
@@ -17,8 +17,8 @@ You do **not** write `.eikon` or `studio.json`. Studio does.
17
17
 
18
18
  ## Where the user does the work
19
19
 
20
- Herm's built-in **Eikon** tab (Studio / Gallery). Tell the user: "open
21
- the Eikon tab" or "Ctrl+K → Eikon". In Studio:
20
+ Herm's built-in **Eikon** tab (Gallery / Studio / Marketplace). Tell the user:
21
+ "open the Eikon tab" or "Ctrl+K → Eikon". In Studio:
22
22
 
23
23
  - `eikon` row → pick / New…
24
24
  - `source` row → Local file… / Generate image… / Generate video…
@@ -40,6 +40,7 @@ everything.
40
40
  | "make me an eikon of X" | Load `eikon-create` and follow it. |
41
41
  | drops an image path | `cp` it to `~/.hermes/eikons/<name>/source/base.<ext>` → "Eikon tab, pick <name>". |
42
42
  | "edit my <name> eikon" | "Eikon tab → `eikon` row → <name>." |
43
+ | "install/shared marketplace eikon" | "Eikon tab → Marketplace", or `/marketplace`. |
43
44
  | "too dark / washed out" | "invert toggle, then contrast slider — under `input`." |
44
45
  | "off-center / too small" | "Ctrl+wheel to zoom, wheel/drag to pan on the preview." |
45
46
  | "make it move" | `eikon-create` §5 (video), or Studio's `source` → Generate video…. |
package/db.worker.js CHANGED
@@ -55,7 +55,7 @@ var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defP
55
55
  WHERE s.source IN ('tui', 'cli') AND s.message_count > 0
56
56
  AND (s.parent_session_id IS NULL OR ${CONT("s")})
57
57
  ORDER BY s.started_at DESC LIMIT 1
58
- `)?.get();if(!hit)return;let row=byId(chainTip(hit.id));return row&&row.message_count>0?row:void 0},chainTip=(sid)=>tip(walkUp(sid)),systemPrompt=()=>q(`SELECT id, system_prompt AS text FROM sessions
58
+ `)?.get();if(!hit)return;return byId(chainTip(hit.id))??void 0},chainTip=(sid)=>tip(walkUp(sid)),systemPrompt=()=>q(`SELECT id, system_prompt AS text FROM sessions
59
59
  WHERE system_prompt IS NOT NULL AND length(system_prompt) > 1000
60
60
  ORDER BY started_at DESC LIMIT 1`)?.get()??null,VALID_ITEM,parseItem=(raw)=>{if(!raw||typeof raw!=="object")return null;let o=raw,text=typeof o.text==="string"?o.text:"";if(!text.trim())return null;let s=typeof o.status==="string"?o.status:"pending",status=VALID_ITEM.has(s)?s:"pending",by=typeof o.added_by==="string"?o.added_by:void 0;return{text,status,addedBy:by==="judge"||by==="user"?by:void 0}},fts=(s)=>s.trim().split(/\s+/).filter(Boolean).map((w)=>/^\w+$/.test(w)?`${w}*`:`"${w.replace(/"/g,'""')}"`).join(" ");var init_sessions_db=__esm(()=>{init_perf();init_sessions_db();HERMES=process.env.HERMES_HOME||`${process.env.HOME||homedir()}/.hermes`,SRC={file:`${HERMES}/state.db`,relative:"state.db",label:"state.db"},conn={path:SRC.file,ro:null},stmts=new Map,msgCols=new Map;VALID_ITEM=new Set(["pending","completed","impossible"])});function analytics(days,opts){let since=Math.floor(Date.now()/1000)-days*86400,db=stateDb();if(!db)return ZERO;let q2=db.query.bind(db),tot=q2(`SELECT COUNT(*) n,
61
61
  COALESCE(SUM(message_count),0) msgs,