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 +7 -6
- package/assets/skills/eikon/SKILL.md +3 -2
- package/db.worker.js +1 -1
- package/index.js +47 -46
- package/package.json +1 -1
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
|
-
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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 /
|
|
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;
|
|
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,
|