@litfamily/lithermes 1.0.17 → 1.0.19

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 (49) hide show
  1. package/README.md +21 -67
  2. package/README_Ko-KR.md +20 -65
  3. package/assets/lithermes-plugin/auto_update.py +4 -1
  4. package/assets/lithermes-plugin/core_routing.py +7 -2
  5. package/assets/lithermes-plugin/payload-version.json +42 -38
  6. package/assets/lithermes-plugin/plugin.yaml +1 -1
  7. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +2 -2
  8. package/assets/lithermes-plugin/skills/lit-docx/references/page-composition.md +1 -3
  9. package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_docx.py +9 -9
  10. package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_design.py +9 -9
  11. package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_layout.py +6 -6
  12. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/brief.yaml +0 -1
  13. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/journal.yaml +0 -1
  14. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/manual.yaml +0 -1
  15. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/memo.yaml +0 -1
  16. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/proposal.yaml +0 -1
  17. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/report.yaml +0 -1
  18. package/assets/lithermes-plugin/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
  19. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/atlas.md +2 -2
  20. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/chalk.md +2 -3
  21. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/gazette.md +2 -2
  22. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/ledger.md +5 -5
  23. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/night.md +3 -3
  24. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/paper.md +2 -2
  25. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/signal.md +3 -3
  26. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/studio.md +2 -3
  27. package/assets/lithermes-plugin/skills/lit-pptx/scripts/deck_output.py +8 -8
  28. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-pack.js +96 -96
  29. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +1 -1
  30. package/assets/lithermes-plugin/skills/lit-pptx/scripts/qa_deck.py +7 -7
  31. package/assets/lithermes-plugin/skills/lit-pptx/scripts/validate_pptx.py +8 -3
  32. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -13
  33. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -13
  34. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -13
  35. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -15
  36. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -13
  37. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -13
  38. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -13
  39. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -13
  40. package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +2 -2
  41. package/package.json +19 -3
  42. package/readme-assets/badge-version.svg +1 -1
  43. package/src/cli.js +164 -34
  44. package/src/lib/check.js +13 -1
  45. package/src/lib/config.js +94 -36
  46. package/src/lib/hud.js +33 -2
  47. package/src/lib/install.js +39 -1
  48. package/src/lib/skins.js +29 -9
  49. package/readme-assets/ascii-readme.svg +0 -5
package/README.md CHANGED
@@ -1,25 +1,23 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitHermes robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
2
-
3
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/ascii-readme.svg" width="480" alt="LIT ASCII B mark" /></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitHermes robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
4
2
 
5
3
  <p align="center">
6
- <a href="#install"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/badge-version.svg" alt="1.0.17" /></a>
7
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/badge-license.svg" alt="MIT license" /></a>
4
+ <a href="#install"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/badge-version.svg" alt="1.0.19" /></a>
5
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/badge-license.svg" alt="MIT license" /></a>
8
6
  </p>
9
7
 
10
8
  <p align="center">
11
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/lucide-book-open.svg" width="16" alt="" /> Guide</a> &nbsp;
12
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition film</a> &nbsp;
13
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
9
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/lucide-book-open.svg" width="16" alt="" /> Guide</a> &nbsp;
10
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition film</a> &nbsp;
11
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
14
12
  </p>
15
13
 
16
14
  # LitHermes
17
15
 
18
16
  **Keep the work lit.**
19
17
 
20
- A plugin for **Hermes Agent**. Add `lit` to a request, and Hermes plans the task, does it, checks it, and leaves a note the next session can pick up.
18
+ A plugin for **Hermes Agent**. Put `lit` in front of a request, and Hermes plans the task, does it, checks what it did and leaves a note that the next session can pick up.
21
19
 
22
- **[Full guide and skills gallery on GitHub](https://github.com/wjgoarxiv/lithermes#readme)** · [한국어](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/README_Ko-KR.md)
20
+ **[README and docs on GitHub](https://github.com/wjgoarxiv/lithermes#readme)** · [한국어](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/README_Ko-KR.md)
23
21
 
24
22
  ## Install
25
23
 
@@ -29,9 +27,7 @@ You need Hermes Agent, Node.js 18 or later, and write access to your Hermes home
29
27
  npx --yes --package @litfamily/lithermes@latest -- lithermes install --yes --no-style
30
28
  ```
31
29
 
32
- The command puts the plugin into your Hermes home and updates your Hermes configuration without stopping to ask. That is why `--yes` appears twice: the first lets npx run the package, and the second approves the configuration changes. `--no-style` skips the picker for how replies are written; the Ignition skin installs either way. Nothing connects to Telegram during installation.
33
-
34
- Want to try it away from your usual setup? Point `HERMES_HOME` at a new, empty directory before installing, and start Hermes with the same value. If the Hermes installation itself lives outside that trial profile, add `--no-patch-installed-hermes` so the installer leaves it without compatibility edits.
30
+ It installs the plugin and updates your Hermes configuration without stopping to ask; `--no-style` skips the reply-style picker. To try it in a separate profile, set `HERMES_HOME` to an empty directory first. [More install options](https://github.com/wjgoarxiv/lithermes/blob/main/docs/install.md).
35
31
 
36
32
  ## Your first task
37
33
 
@@ -41,81 +37,39 @@ Restart the Hermes CLI or gateway, then type:
41
37
  lit Build a to-do list in one HTML file without external dependencies. Implement add, complete, and delete; record what you checked and what remains.
42
38
  ```
43
39
 
44
- The reply opens with a single `🔥 **LIT IGNITED · <discipline>** 🔥` line. Once you see it, LitHermes has picked up the task and the work has started. When it finishes, open the file and try each action yourself, and ask Hermes to separate what it actually checked from what is still unverified. Then run `/lit-handoff`. A new session in the same project can read that handoff and continue from it.
40
+ Once the work has started, the reply opens with a `🔥 **LIT IGNITED · <discipline>** 🔥` line. When it finishes, check the file yourself, then run `/lit-handoff` so the next session in this project can continue. [Automatic handoff](https://github.com/wjgoarxiv/lithermes/blob/main/docs/automatic-handoff.md) is off by default; `/lit-handoff auto on 60` (a whole number from 1 to 99) asks for a handoff before you run `/compact`.
45
41
 
46
- The spark is that record. Once the session closes, nothing carries on in the background; the next session picks the work up from the handoff.
47
-
48
- ## Routes you will use most
42
+ ## What you get
49
43
 
50
44
  | Type | Skill | For |
51
45
  |---|---|---|
52
- | `lit <request>` or `/lit` | `litwork` | A bounded task that ends with checked results |
46
+ | `lit <request>` or `/lit` | `litwork` | A task that ends with checked results |
53
47
  | `lit-plan` or `/lit-plan` | `lit-plan` | A plan, before anything is edited |
54
48
  | `/start-work <approved-plan>` | `start-work` | Running a plan you approved |
55
49
  | `lit review <target>` or `/review-work` | `review-work` | Reviewing a plan or a result |
56
50
  | `lit research <question>` | `litresearch` | Research with source notes |
57
- | `handoff` or `/lit-handoff` | `lit-handoff` | Carrying the work into the next session |
58
- | `/lit-humanizer` | `lit-humanizer` | Revising Korean or English prose without changing its meaning |
51
+ | `/lit-humanizer` | `lit-humanizer` | Revising Korean or English prose, meaning kept |
59
52
  | `/lit-diagram-drawer <brief>` | `lit-diagram-drawer` | A checked, editable diagram |
60
53
  | `/lit-pptx <brief>` | `lit-pptx` | A PowerPoint deck in one of eight named looks, with its Markdown source |
61
54
  | `/lit-docx <brief>` | `lit-docx` | A restrained Word document in one of six named shapes, with its Markdown source |
62
55
  | `/lit-typographic-motion <brief>` | `lit-typographic-motion` | A short film, treatment first |
63
56
 
64
- On a Telegram gateway, use `/lit_loop` and `/lit_plan`. Every skill also loads by name as `lithermes:<name>`, for example `lithermes:lit-pptx` or `lithermes:lit-docx`. The other bundled skills are `litgoal`, `lit-recap`, `deep-interview`, `lit-crucible`, `lit-init`, `lit-comprehend`, `frontend-ui-ux`, `readme-studio`, `lit-scientific-visualization`, `visual-qa`, `browser-drive`, `structural-search`, `wikify`, `debugging`, `refactor`, `lit-burnoff`, `lit-burnoff-file`, `lit-code`, `lit-commit`, `lsp-setup`, `lsp`, `rules`, `comment-checker`, `autoresearch` and `autoconference`. The GitHub page shows each one with a picture.
65
-
66
- ## Making more than code
67
-
68
- - **Reports and slides.** Ask for a report or a presentation with a bare `lit`, and it goes to `lit-docx` or `lit-pptx`. You get a DOCX, a PPTX or both, with the Markdown source beside them. Before building, the skill picks a look that suits your reader and material and tells you which, with two alternatives you can switch to: eight for decks (Ledger, Signal, Atlas, Chalk, Paper, Gazette, Studio, Night) and six for documents (Report, Brief, Manual, Proposal, Memo, Journal). Decks come out dense in Pretendard with topic titles; documents stay restrained, with near-black headings, ruled tables and Korean conventions. A journal profile you name is used as is. The first time, the Office runtime installs the pinned tools it needs into a LitHermes cache.
69
- - **Diagrams.** `lit-diagram-drawer` draws concept maps and technical diagrams. Product pages belong to `frontend-ui-ux`, and plots of measured data to `lit-scientific-visualization`.
70
- - **Films.** `lit-typographic-motion` writes a treatment first. When the film passes its final check, you get a 60 fps film with a poster, a reduced-motion still and a QA report. A render never downloads anything, so its helper packages and fonts must already be cached. `lithermes install` tries to fetch them; if that was skipped or failed, run `lithermes motion-runtime install`. `lithermes motion-runtime status` shows whether Chrome, ffmpeg, WebGL2 and the fonts are ready.
71
- - **Prose.** `lit-humanizer` revises Korean and English drafts while keeping their facts. Its detector reads what Hermes writes for people through `write_file` and `patch`. A serious (block-tier) finding can stop the write; a milder warning comes back as advice.
72
-
73
- ## What changes after install
74
-
75
-
76
- - The plugin goes into your Hermes home. After a restart, Hermes has new hooks, commands, skills and `goal_*` work tools.
77
- - Goals, plans and evidence are written to local records under `.hermes/lithermes/` in your project, where the next session can read them.
78
- - The Hermes CLI gains the Ignition skin. Choose it with `/skin lithermes-ignition` and restart, or use `/skin lithermes-tokyonight-day` on a light terminal and `/skin lithermes-tokyonight` on a dark one. A fresh interactive, color-capable install run with `--yes` selects Ignition only when `display.skin` is absent, and existing skin files are kept.
79
- - LitHermes updates itself, carefully. When you run `lithermes install`, `check` or `doctor` in a terminal, or send the first message of an interactive Hermes CLI session, it asks the npm registry for the latest stable release. If that one is newer, LitHermes backs up your plugin folder, `config.yaml`, install record and skins folder, installs it, and runs `doctor --offline`. If the install fails, takes longer than 30 seconds or does not pass that check, the backup goes back and you keep your version. Restart Hermes to load a new one.
80
- - Each update leaves `auto-update-journal.json` and `auto-update-receipt.json` in `<Hermes home>/lithermes/`. Updates are skipped with `--offline`, `--json` or `--dry-run`, in CI, or with piped output.
81
- - Separately, LitHermes looks for a newer release in the background at most once every 24 hours and saves the answer in `update-check.json`; any update notice is read from there. It suggests a command such as `npx --yes --package @litfamily/lithermes@<version> -- lithermes install --yes --no-hud`, and running it is up to you.
82
- - To install new versions yourself and still get the notice, set `LITHERMES_NO_AUTO_UPDATE=1`.
83
- - To skip the update for one command, add `--no-auto-update` to `install`, `check` or `doctor`.
84
- - To stop every version check, set `NO_UPDATE_NOTIFIER=1` or `LITHERMES_NO_UPDATE_CHECK=1`. Any value counts for these variables. The GitHub page explains the update step in full.
85
- - LitHermes decides where a request goes; Hermes Agent still runs the model.
57
+ On a Telegram gateway, use `/lit_loop` and `/lit_plan`. Every skill also loads by name as `lithermes:<name>`, for example `lithermes:lit-pptx` or `lithermes:lit-docx`. [Skills and commands](https://github.com/wjgoarxiv/lithermes/blob/main/docs/skills.md) shows all 36 with pictures.
86
58
 
87
- ## Automatic handoff
88
-
89
- This is off by default, and the percent is yours to choose. `/lit-handoff auto on 60` (any whole number from 1 to 99) makes LitHermes ask the model for a handoff on the first message after a model call passes 60% of the context window, and then tell you to run `/compact`. A plugin cannot start compaction on Hermes, so you run it, or Hermes compacts on its own threshold. After compaction the handoff comes back as a short digest. `/lit-handoff auto off` and `/lit-handoff auto status` do what they say, and `LITHERMES_AUTO_HANDOFF=1` with `LITHERMES_AUTO_HANDOFF_PERCENT` sets it from the environment. The [GitHub README](https://github.com/wjgoarxiv/lithermes#automatic-handoff) lists which steps are automatic and how to pick a percent that Hermes' own compaction leaves alone.
90
-
91
- ## Optional: Jev skill hint
92
-
93
- This is off by default. With `LITHERMES_JEV=1` and your own `TYPESAFE_API_KEY` set in the environment Hermes runs in, LitHermes asks Jev, TypeSafe's hosted decision model, which bundled skill fits a plain prompt. The answer is added to that turn's context as one line of advice. It is only a suggestion: the Hermes model still decides, and the hint cannot grant permissions or start tools.
94
-
95
- While it is on, each eligible prompt is sent to TypeSafe (typesafe.ai), truncated to 2,000 characters, with home paths, email addresses and token-shaped strings redacted. Anything without a token shape is sent as written, such as hostnames, customer names, and passwords not written as `password=...`. In gateway mode, other participants' messages in a chat are eligible too. The agent's own tools can read the exported key, so use a dedicated key with a low spend limit; TypeSafe bills your account, at about $0.04 per million input tokens. Each request stops after 1.5 seconds with no retry, and a failed request leaves the turn unchanged.
96
-
97
- The first reply of each session starts with `✦ Jev skill hint ON`. Inside a Hermes session, `hermes lithermes status` and `hermes lithermes doctor` show that session's last hint, for example `Jev skill hint: on — last hint lit-humanizer (0.43s)`, or `on — no hint yet`. Outside any session they read `on — no session`; otherwise `off` or `flag on but TYPESAFE_API_KEY missing`. To turn it off, unset `LITHERMES_JEV` or set it to any value other than `1`. The full details are in the GitHub README and the [privacy notes](https://github.com/wjgoarxiv/lithermes/blob/main/docs/privacy.md).
98
-
99
- ## Check, remove, stay safe
59
+ ## Check, update, remove
100
60
 
101
61
  ```sh
102
62
  npx --package @litfamily/lithermes -- lithermes doctor --offline
103
63
  npx --package @litfamily/lithermes -- lithermes uninstall --yes
104
64
  ```
105
65
 
106
- `doctor --offline` checks the install without going online. If the installer made compatibility edits to Hermes, add `--rollback-patches` when uninstalling to undo them. Uninstalling keeps the skin files and your `display.skin` choice; `npx --package @litfamily/lithermes -- lithermes hud off` clears the choice and keeps the files.
107
-
108
- - To see what the installer would change before it changes anything, run `lithermes install --dry-run`.
109
- - LitHermes reads pasted code, quotations and commands as plain text and does not follow them. Secrets are masked before anything is saved or passed to a model.
110
- - Hermes' own `/goal` stays yours. LitHermes leaves it alone and never updates, clears or resumes it. It works from the goals it saves through its `goal_*` tools.
111
- - Hermes sends every helper through one shared model setting, so you cannot pick a model per task or give reviewers their own. The installer's report shows what was configured; only the receipt of a real `delegate_task` run proves which model a helper used.
112
- - If Lit skills seem to be missing, ask Hermes to call its `skills_list` tool and look for LitHermes entries; the `/skills` command only reads the filesystem, and its list can differ by Hermes version. An import error in the Hermes log means the plugin failed to load. Keep the message rather than installing pip packages on a guess.
113
- - If a same-named skill elsewhere hides a LitHermes one, `lithermes doctor` prints a `skill shadow check: WARNING` line. Load the LitHermes copy as `lithermes:<name>`. The warning leaves doctor's exit status as it was.
66
+ `doctor --offline` checks the install without going online; add `--rollback-patches` when uninstalling if the installer patched Hermes. LitHermes updates itself with a backup and a rollback; set `LITHERMES_NO_AUTO_UPDATE=1` to update by hand. [Details and troubleshooting](https://github.com/wjgoarxiv/lithermes/blob/main/docs/install.md).
114
67
 
115
68
  ## Learn more
116
69
 
117
- - [Full README on GitHub](https://github.com/wjgoarxiv/lithermes#readme): the skills gallery and how it works
118
- - [Operating guide](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md): commands, models, skins and troubleshooting
119
- - [Changelog](https://github.com/wjgoarxiv/lithermes/blob/main/CHANGELOG.md) · [Contributing](https://github.com/wjgoarxiv/lithermes/blob/main/CONTRIBUTING.md) · [Security](https://github.com/wjgoarxiv/lithermes/blob/main/SECURITY.md) · [Support](https://github.com/wjgoarxiv/lithermes/blob/main/SUPPORT.md)
70
+ - [README on GitHub](https://github.com/wjgoarxiv/lithermes#readme) and [a tour with screenshots](https://github.com/wjgoarxiv/lithermes/blob/main/docs/tour.md)
71
+ - [Operating guide](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.md): commands, natural routing, models, skins and safety
72
+ - [Optional Jev skill hint](https://github.com/wjgoarxiv/lithermes/blob/main/docs/jev.md): off by default; sends eligible prompts to a third-party service when on
73
+ - [Changelog](https://github.com/wjgoarxiv/lithermes/blob/main/CHANGELOG.md) · [Privacy](https://github.com/wjgoarxiv/lithermes/blob/main/docs/privacy.md) · [Contributing](https://github.com/wjgoarxiv/lithermes/blob/main/CONTRIBUTING.md) · [Security](https://github.com/wjgoarxiv/lithermes/blob/main/SECURITY.md) · [Support](https://github.com/wjgoarxiv/lithermes/blob/main/SUPPORT.md)
120
74
 
121
- MIT License.
75
+ MIT License. Part of [LitFamily](https://github.com/wjgoarxiv/litfamily).
package/README_Ko-KR.md CHANGED
@@ -1,25 +1,23 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitHermes 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
2
-
3
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/ascii-readme.svg" width="480" alt="LIT ASCII B 마크" /></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitHermes 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
4
2
 
5
3
  <p align="center">
6
- <a href="#설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/badge-version.svg" alt="1.0.17" /></a>
7
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/badge-license.svg" alt="MIT license" /></a>
4
+ <a href="#설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/badge-version.svg" alt="1.0.19" /></a>
5
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/badge-license.svg" alt="MIT license" /></a>
8
6
  </p>
9
7
 
10
8
  <p align="center">
11
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/lucide-book-open.svg" width="16" alt="" /> 안내</a> &nbsp;
12
- <a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition 영상</a> &nbsp;
13
- <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
9
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/lucide-book-open.svg" width="16" alt="" /> 안내</a> &nbsp;
10
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/lucide-play.svg" width="16" alt="" /> Ignition 영상</a> &nbsp;
11
+ <a href="https://github.com/wjgoarxiv/lithermes/blob/main/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/readme-assets/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
14
12
  </p>
15
13
 
16
14
  # LitHermes
17
15
 
18
16
  **Keep the work lit.**
19
17
 
20
- **Hermes Agent**용 플러그인입니다. 요청에 `lit`을 붙이면 Hermes가 작업을 계획하고, 실행하고, 확인한 뒤 다음 세션이 이어받을 기록을 남깁니다.
18
+ **Hermes Agent**용 플러그인입니다. 요청 앞에 `lit`을 붙이면 Hermes가 작업을 계획하고, 해내고, 한 일을 확인한 뒤, 다음 세션이 이어받을 수 있는 기록을 남깁니다.
21
19
 
22
- **[전체 안내와 스킬 갤러리는 GitHub에서](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md)** · [English](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.17/README.md)
20
+ **[GitHub의 README와 문서](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md)** · [English](https://cdn.jsdelivr.net/npm/@litfamily/lithermes@1.0.19/README.md)
23
21
 
24
22
  ## 설치
25
23
 
@@ -29,23 +27,19 @@ Hermes Agent와 Node.js 18 이상, 그리고 Hermes 홈(기본 `~/.hermes`)에
29
27
  npx --yes --package @litfamily/lithermes@latest -- lithermes install --yes --no-style
30
28
  ```
31
29
 
32
- 이 명령은 플러그인을 Hermes 홈에 넣고 Hermes 설정을 고치는데, 중간에 묻느라 멈추지 않습니다. 그래서 `--yes`가 두 번 들어갑니다. 앞의 것은 npx가 패키지를 실행하도록 허락하고, 뒤의 것은 설정 변경을 승인합니다. `--no-style`은 답변 문체를 고르는 화면을 건너뜁니다. Ignition 스킨은 어느 쪽이든 설치됩니다. 설치하는 동안 Telegram에는 연결하지 않습니다.
33
-
34
- 평소 환경과 떼어 놓고 먼저 써 보고 싶다면, 설치 전에 `HERMES_HOME`을 비어 있는 새 디렉터리로 지정하고 Hermes를 시작할 때도 같은 값을 쓰세요. Hermes 설치본 자체가 그 시험용 프로필 밖에 있다면 `--no-patch-installed-hermes`를 붙이세요. 설치 프로그램이 그 설치본에는 호환성 수정을 하지 않습니다.
30
+ 플러그인을 설치하고 Hermes 설정을 고치는 동안 승인을 묻느라 멈추지 않습니다. `--no-style`은 답변 문체 고르기를 건너뜁니다. 따로 떼어 둔 프로필에서 써 보려면 먼저 `HERMES_HOME`을 빈 디렉터리로 지정하세요. 다른 옵션은 [설치 문서](https://github.com/wjgoarxiv/lithermes/blob/main/docs/install.ko.md)에 있습니다.
35
31
 
36
32
  ## 첫 작업
37
33
 
38
- Hermes CLI 또는 gateway를 다시 시작한 뒤 이렇게 입력해 보세요.
34
+ Hermes CLI 또는 gateway를 다시 시작한 뒤 이렇게 입력하세요.
39
35
 
40
36
  ```text
41
37
  lit 외부 의존성 없이 HTML 파일 하나로 할 일 목록을 만들어줘. 추가·완료·삭제를 구현하고 확인한 내용과 다음 행동을 남겨줘.
42
38
  ```
43
39
 
44
- 응답 첫 줄에 `🔥 **LIT IGNITED · <discipline>** 🔥`가 한 번 나옵니다. 이 줄이 보이면 LitHermes가 요청을 받아 작업을 시작한 것입니다. 작업이 끝나면 파일을 직접 열어 각 동작을 눌러 보고, 실제로 확인한 내용과 아직 확인하지 못한 내용을 나눠 달라고 Hermes에 요청하세요. 그다음 `/lit-handoff`를 실행하세요. 같은 프로젝트의 새 세션은 그 인계 기록을 읽고 이어갈 수 있습니다.
40
+ 응답 첫 줄에 `🔥 **LIT IGNITED · <discipline>** 🔥`가 나오면 작업이 시작된 것입니다. 끝나면 파일을 직접 확인하고 `/lit-handoff`를 실행하세요. 같은 프로젝트의 다음 세션이 그 기록을 읽고 이어갑니다. [자동 핸드오프](https://github.com/wjgoarxiv/lithermes/blob/main/docs/automatic-handoff.ko.md)는 기본값이 꺼짐이고, `/lit-handoff auto on 60`(1에서 99 사이의 정수)을 켜 두면 `/compact` 전에 인계 기록을 먼저 요청합니다.
45
41
 
46
- 불씨란 이렇게 남겨 둔 기록입니다. 세션을 닫으면 뒤에서 따로 돌아가는 작업은 없고, 다음 세션이 인계 기록을 읽고 이어받습니다.
47
-
48
- ## 자주 쓰는 경로
42
+ ## 할 수 있는 일
49
43
 
50
44
  | 입력 | 스킬 | 용도 |
51
45
  |---|---|---|
@@ -54,67 +48,28 @@ lit 외부 의존성 없이 HTML 파일 하나로 할 일 목록을 만들어줘
54
48
  | `/start-work <승인된 계획>` | `start-work` | 승인한 계획 실행 |
55
49
  | `lit review <대상>` 또는 `/review-work` | `review-work` | 계획이나 결과 검토 |
56
50
  | `lit research <질문>` | `litresearch` | 출처 메모가 있는 조사 |
57
- | `handoff` 또는 `/lit-handoff` | `lit-handoff` | 다음 세션으로 작업 넘기기 |
58
51
  | `/lit-humanizer` | `lit-humanizer` | 의미를 지키며 한국어·영어 문장 다듬기 |
59
52
  | `/lit-diagram-drawer <brief>` | `lit-diagram-drawer` | 검사를 거친, 편집 가능한 다이어그램 |
60
53
  | `/lit-pptx <brief>` | `lit-pptx` | 여덟 가지 디자인 방향 가운데 하나로 만든 PowerPoint 발표자료와 Markdown 원본 |
61
54
  | `/lit-docx <brief>` | `lit-docx` | 여섯 가지 문서 형식 가운데 하나로 짠 절제된 Word 문서와 Markdown 원본 |
62
55
  | `/lit-typographic-motion <brief>` | `lit-typographic-motion` | 트리트먼트부터 쓰는 짧은 영상 |
63
56
 
64
- Telegram gateway에서는 `/lit_loop`와 `/lit_plan`을 쓰세요. 모든 스킬은 `lithermes:<이름>`으로도 불러올 수 있습니다. 예를 들어 `lithermes:lit-pptx`, `lithermes:lit-docx`처럼 씁니다. 그 밖에 번들된 스킬은 `litgoal`, `lit-recap`, `deep-interview`, `lit-crucible`, `lit-init`, `lit-comprehend`, `frontend-ui-ux`, `readme-studio`, `lit-scientific-visualization`, `visual-qa`, `browser-drive`, `structural-search`, `wikify`, `debugging`, `refactor`, `lit-burnoff`, `lit-burnoff-file`, `lit-code`, `lit-commit`, `lsp-setup`, `lsp`, `rules`, `comment-checker`, `autoresearch`, `autoconference`입니다. GitHub 페이지에서 스킬마다 그림과 함께 볼 수 있습니다.
65
-
66
- ## 코드 밖의 결과물
67
-
68
- - **보고서와 발표자료.** 보고서나 발표자료를 부탁하면서 단독 `lit`을 붙이면 `lit-docx`나 `lit-pptx`가 맡습니다. DOCX나 PPTX, 또는 둘 다 나오고 Markdown 원본이 옆에 남습니다. 만들기 전에 독자와 자료에 맞는 디자인을 골라 다른 후보 둘과 함께 알려 줍니다. 발표자료는 Ledger, Signal, Atlas, Chalk, Paper, Gazette, Studio, Night 여덟 가지, 문서는 Report, Brief, Manual, Proposal, Memo, Journal 여섯 가지입니다. 발표자료는 Pretendard로 빽빽하게, 제목은 주제 이름으로 달고, 문서는 먹색 제목과 가로줄 표, 한국어 관례를 지켜 절제합니다. 학술지 프로필을 지정하면 그대로 씁니다. 처음 쓸 때는 Office 런타임이 필요한 도구를 고정된 버전으로 LitHermes 캐시에 설치합니다.
69
- - **다이어그램.** `lit-diagram-drawer`가 개념도와 기술 다이어그램을 그립니다. 제품 화면은 `frontend-ui-ux`, 측정한 데이터 그래프는 `lit-scientific-visualization`이 맡습니다.
70
- - **영상.** `lit-typographic-motion`은 트리트먼트부터 씁니다. 마지막 검사를 통과하면 포스터, 움직임 축소용 정지 이미지, 검사 보고서가 딸린 60fps 영상이 나옵니다. 렌더링 중에는 아무것도 내려받지 않으므로 보조 패키지와 폰트가 미리 캐시에 있어야 합니다. `lithermes install`이 이것을 받아 두려고 시도하고, 건너뛰었거나 실패했다면 `lithermes motion-runtime install`을 실행하면 됩니다. Chrome, ffmpeg, WebGL2, 폰트가 준비됐는지는 `lithermes motion-runtime status`로 볼 수 있습니다.
71
- - **글 다듬기.** `lit-humanizer`는 사실을 지키며 한국어와 영어 초안을 다듬습니다. 감지기는 Hermes가 `write_file`과 `patch`로 쓰는, 사람이 읽을 글을 살핍니다. 심각한 문제(차단 등급)가 보이면 쓰기를 멈출 수 있고, 가벼운 문제(주의 등급)는 조언으로 돌려줍니다.
72
-
73
- ## 설치 후 달라지는 것
74
-
75
- - 플러그인이 Hermes 홈에 들어갑니다. 다시 시작하면 Hermes에 훅, 명령, 스킬, `goal_*` 작업 도구가 생깁니다.
76
- - 목표·계획·근거는 프로젝트의 `.hermes/lithermes/` 아래 로컬 기록으로 남고, 다음 세션이 이 기록을 읽을 수 있습니다.
77
- - Hermes CLI에 Ignition 스킨이 생깁니다. `/skin lithermes-ignition`을 고르고 다시 시작하세요. 밝은 터미널에는 `/skin lithermes-tokyonight-day`, 어두운 터미널에는 `/skin lithermes-tokyonight`가 맞습니다. 색상을 지원하는 대화형 환경에서 `--yes`로 처음 설치하면 설정에 `display.skin` 항목이 아예 없을 때만 Ignition을 고르고, 기존 스킨 파일은 보존합니다.
78
- - LitHermes는 스스로, 그리고 조심스럽게 업데이트합니다. 터미널에서 `lithermes install`, `check`, `doctor`를 실행하거나 대화형 Hermes CLI 세션에서 첫 메시지를 보내면 npm 레지스트리에 최신 안정 버전을 물어봅니다. 더 새로운 버전이 있으면 플러그인 폴더, `config.yaml`, 설치 기록, 스킨 폴더를 백업한 뒤 설치하고 `doctor --offline`을 실행합니다. 설치가 실패하거나 30초를 넘기거나 이 점검을 통과하지 못하면 백업을 복원해서 쓰던 버전이 남습니다. 새 버전을 불러오려면 Hermes를 다시 시작하세요.
79
- - 업데이트할 때마다 `<Hermes 홈>/lithermes/`에 `auto-update-journal.json`과 `auto-update-receipt.json`이 남아서 무슨 일이 있었는지 볼 수 있습니다. `--offline`, `--json`, `--dry-run`을 붙였거나 CI에서 돌거나 출력을 파이프로 넘기면 업데이트를 건너뜁니다.
80
- - 이와는 따로, LitHermes는 새 버전이 나왔는지 백그라운드에서 24시간에 한 번까지만 확인해 그 결과를 `update-check.json`에 저장해 둡니다. 안내할 때는 이 파일을 읽고, 안내에는 `npx --yes --package @litfamily/lithermes@<version> -- lithermes install --yes --no-hud` 같은 명령이 나옵니다. 실행할지는 직접 정하면 됩니다.
81
- - 새 버전은 직접 설치하되 안내는 계속 받고 싶다면 `LITHERMES_NO_AUTO_UPDATE=1`을 설정하세요.
82
- - 명령 한 번만 건너뛰려면 `install`, `check`, `doctor`에 `--no-auto-update`를 붙이세요.
83
- - 버전 확인을 모두 멈추려면 `NO_UPDATE_NOTIFIER=1` 또는 `LITHERMES_NO_UPDATE_CHECK=1`을 설정하세요. 이 변수들은 어떤 값이든 똑같이 적용됩니다. 업데이트 과정의 자세한 설명은 GitHub 문서에 있습니다.
84
- - 요청을 어디로 보낼지는 LitHermes가 정하고, 모델은 여전히 Hermes Agent가 돌립니다.
57
+ Telegram gateway에서는 `/lit_loop`와 `/lit_plan`을 쓰세요. 모든 스킬은 `lithermes:<이름>`으로도 불러올 수 있습니다. 예를 들어 `lithermes:lit-pptx`, `lithermes:lit-docx`처럼 씁니다. 스킬 36개 전체는 [스킬과 명령](https://github.com/wjgoarxiv/lithermes/blob/main/docs/skills.ko.md)에서 그림과 함께 볼 수 있습니다.
85
58
 
86
- ## 자동 핸드오프
87
-
88
- 기본값은 꺼짐이고, 퍼센트는 직접 고릅니다. `/lit-handoff auto on 60`(1에서 99 사이의 정수)을 실행하면, 모델 호출 하나가 컨텍스트 창의 60%를 넘은 뒤 첫 메시지에서 LitHermes가 모델에게 핸드오프를 요청하고 `/compact`를 실행하라고 알려 줍니다. Hermes에서는 플러그인이 압축을 시작할 수 없으므로, 사용자가 직접 실행하거나 Hermes가 자체 기준으로 압축합니다. 압축 뒤에는 핸드오프가 짧은 요약으로 돌아옵니다. `/lit-handoff auto off`와 `/lit-handoff auto status`는 이름 그대로 동작하고, 환경에서는 `LITHERMES_AUTO_HANDOFF=1`과 `LITHERMES_AUTO_HANDOFF_PERCENT`로 설정합니다. 어느 단계가 자동이고 Hermes 자체 압축과 겹치지 않는 퍼센트를 어떻게 고르는지는 [GitHub README](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md#자동-핸드오프)에 있습니다.
89
-
90
- ## 선택 기능: Jev 스킬 힌트
91
-
92
- 기본값은 꺼짐입니다. Hermes가 실행되는 환경에 `LITHERMES_JEV=1`과 본인의 `TYPESAFE_API_KEY`를 설정하면, LitHermes가 TypeSafe의 호스팅 결정 모델 Jev에게 평범한 프롬프트에 맞는 번들 스킬을 묻습니다. 답은 그 턴의 컨텍스트에 조언 한 줄로 붙습니다. 어디까지나 제안이라, 스킬을 불러올지는 여전히 Hermes 모델이 정하고 힌트로 권한을 주거나 도구를 실행할 수는 없습니다.
93
-
94
- 켜 두면 조건에 맞는 프롬프트마다 2,000자로 자르고 홈 경로, 이메일 주소, 토큰 형태의 문자열을 가린 뒤 TypeSafe(typesafe.ai)로 보냅니다. 다만 호스트 이름이나 고객 이름처럼 토큰 형태가 아닌 내용과 `password=...` 형식이 아닌 비밀번호는 가려지지 않고 쓴 그대로 전송됩니다. 게이트웨이 모드라면 대화방의 다른 참여자가 보낸 메시지도 전송 대상에 들어갑니다. export한 키는 에이전트의 도구도 읽을 수 있으니 이 기능 전용 키를 쓰고 사용 한도를 낮게 잡으세요. 비용은 TypeSafe가 본인 계정에 청구하며 입력 토큰 100만 개당 약 0.04달러입니다. 요청은 1.5초가 지나면 재시도 없이 멈추고, 실패해도 턴은 그대로 진행됩니다.
95
-
96
- 켜져 있으면 세션의 첫 답변이 `✦ Jev skill hint ON`으로 시작합니다. Hermes 세션 안에서 `hermes lithermes status`와 `hermes lithermes doctor`를 실행하면 그 세션의 마지막 힌트가 `Jev skill hint: on — last hint lit-humanizer (0.43s)`나 `on — no hint yet`처럼 표시됩니다. 세션 밖에서는 `on — no session`, 그 밖에는 `off` 또는 `flag on but TYPESAFE_API_KEY missing`이 나옵니다. 끄려면 `LITHERMES_JEV`를 해제하거나 `1`이 아닌 값으로 바꾸세요. 자세한 내용은 GitHub README와 [개인정보 안내](https://github.com/wjgoarxiv/lithermes/blob/main/docs/privacy.md)에 있습니다.
97
-
98
- ## 확인, 삭제, 안전
59
+ ## 확인, 업데이트, 삭제
99
60
 
100
61
  ```sh
101
62
  npx --package @litfamily/lithermes -- lithermes doctor --offline
102
63
  npx --package @litfamily/lithermes -- lithermes uninstall --yes
103
64
  ```
104
65
 
105
- `doctor --offline`은 인터넷에 나가지 않고 설치 상태를 확인합니다. 설치 프로그램이 Hermes에 호환성 수정을 했다면 삭제할 때 `--rollback-patches`를 붙여 되돌리세요. 삭제해도 스킨 파일과 `display.skin` 선택은 남습니다. `npx --package @litfamily/lithermes -- lithermes hud off`를 실행하면 선택만 지우고 파일은 그대로 둡니다.
106
-
107
- - 설치 프로그램이 무엇을 바꿀지 미리 보고 싶다면 `lithermes install --dry-run`을 실행하세요.
108
- - 붙여 넣은 코드, 인용문, 명령은 읽을 글로 다루고, 지시로 따르지는 않습니다. 비밀값은 저장하거나 모델에 넘기기 전에 가립니다.
109
- - Hermes에 원래 있는 `/goal`은 사용자가 직접 관리합니다. LitHermes는 이 기능을 건드리지 않고, 갱신하거나 지우거나 다시 이어 주지도 않습니다. `goal_*` 도구로 저장한 자기 목표를 기준으로 삼습니다.
110
- - Hermes는 보조 작업을 모두 공통 모델 설정 하나로 보내므로, 작업마다 모델을 고르거나 리뷰 전용 모델을 둘 수 없습니다. 설치 보고서에는 설정한 값이 나오고, 실제로 쓰인 모델은 실제 `delegate_task` 실행 기록으로만 확인됩니다.
111
- - Lit 스킬이 보이지 않으면 Hermes에 `skills_list` 도구를 불러 LitHermes 항목을 찾아 달라고 하세요. `/skills` 명령은 파일시스템만 읽어서 Hermes 버전에 따라 목록이 다를 수 있습니다. Hermes 로그의 import 오류는 플러그인을 불러오지 못했다는 뜻입니다. 짐작으로 pip 패키지를 설치하기보다 오류 메시지를 보관해 두세요.
112
- - 다른 곳의 같은 이름 스킬이 LitHermes 스킬을 가리면 `lithermes doctor`가 `skill shadow check: WARNING` 줄을 출력합니다. `lithermes:<name>`으로 불러오세요. 이 경고가 doctor의 종료 상태를 바꾸지는 않습니다.
66
+ `doctor --offline`은 인터넷에 나가지 않고 설치 상태를 확인합니다. 설치 프로그램이 Hermes에 호환성 수정을 했다면 삭제할 때 `--rollback-patches`를 붙이세요. 업데이트는 백업과 되돌리기를 거쳐 스스로 하고, 직접 하려면 `LITHERMES_NO_AUTO_UPDATE=1`을 설정하세요. 자세한 내용과 문제 해결은 [설치 문서](https://github.com/wjgoarxiv/lithermes/blob/main/docs/install.ko.md)에 있습니다.
113
67
 
114
68
  ## 더 알아보기
115
69
 
116
- - [GitHub의 전체 README](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md): 스킬 갤러리와 작동 방식
117
- - [운영 안내](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md): 명령, 모델, 스킨, 문제 해결
118
- - [변경 기록](https://github.com/wjgoarxiv/lithermes/blob/main/CHANGELOG.md) · [기여](https://github.com/wjgoarxiv/lithermes/blob/main/CONTRIBUTING.md) · [보안](https://github.com/wjgoarxiv/lithermes/blob/main/SECURITY.md) · [지원](https://github.com/wjgoarxiv/lithermes/blob/main/SUPPORT.md)
70
+ - [GitHub의 README](https://github.com/wjgoarxiv/lithermes/blob/main/README_Ko-KR.md)와 [화면으로 보는 둘러보기](https://github.com/wjgoarxiv/lithermes/blob/main/docs/tour.ko.md)
71
+ - [사용 안내](https://github.com/wjgoarxiv/lithermes/blob/main/docs/guide.ko.md): 명령, 자연어 routing, 모델, 스킨, 안전 모델
72
+ - [선택 기능: Jev 스킬 힌트](https://github.com/wjgoarxiv/lithermes/blob/main/docs/jev.ko.md): 기본값은 꺼짐이고, 켜면 해당하는 프롬프트를 외부 서비스로 보냅니다
73
+ - [변경 기록](https://github.com/wjgoarxiv/lithermes/blob/main/CHANGELOG.md) · [개인정보](https://github.com/wjgoarxiv/lithermes/blob/main/docs/privacy.md) · [기여](https://github.com/wjgoarxiv/lithermes/blob/main/CONTRIBUTING.md) · [보안](https://github.com/wjgoarxiv/lithermes/blob/main/SECURITY.md) · [지원](https://github.com/wjgoarxiv/lithermes/blob/main/SUPPORT.md)
119
74
 
120
- MIT License.
75
+ MIT License. [LitFamily](https://github.com/wjgoarxiv/litfamily)의 한 제품입니다.
@@ -32,7 +32,10 @@ from typing import Any
32
32
  PACKAGE_NAME = "@litfamily/lithermes"
33
33
  REGISTRY_URL = f"https://registry.npmjs.org/{quote(PACKAGE_NAME, safe='')}/latest"
34
34
  REQUEST_TIMEOUT_SECONDS = 3.0
35
- INSTALL_TIMEOUT_SECONDS = 30.0
35
+ # The bridge's own npx fetch plus the Node transaction (a 30-second install
36
+ # child, doctor and rollback) must finish inside this limit, so it stays well
37
+ # above the inner bound instead of killing the bridge mid-transaction.
38
+ INSTALL_TIMEOUT_SECONDS = 90.0
36
39
  MAX_RESPONSE_BYTES = 64 * 1024
37
40
  AUTO_UPDATE_GUARD_ENV = "LITHERMES_AUTO_UPDATE_RUNNING"
38
41
  INSTALLER_DISTRIBUTION = "npm"
@@ -627,9 +627,14 @@ def _normalized_exact_phrase(text: str) -> str:
627
627
  return re.sub(r"\s+", " ", text.strip()).lower()
628
628
 
629
629
 
630
+ def _first_sentence(text: str) -> str:
631
+ # A stop ends a sentence only before whitespace or the end, so notes.md, v1.2 and example.com stay whole.
632
+ return re.split(r"\n|[.!?](?=\s|$)", text, maxsplit=1)[0]
633
+
634
+
630
635
  def _bare_lit_mode(objective: str) -> str:
631
636
  prose = re.sub(r"(?m)^\s*#{1,6}\s+.*$", "", objective).strip()
632
- first = re.split(r"[\n.!?]", prose, maxsplit=1)[0]
637
+ first = _first_sentence(prose)
633
638
  slide = re.search(r"발표자료|발표|슬라이드|피피티|(?:^|[^A-Za-z])(?:slides?|deck|presentation|pptx?)(?![A-Za-z])", first, re.IGNORECASE)
634
639
  document = re.search(r"보고서|리포트|기획서|제안서|문서|워드|(?:^|[^A-Za-z])(?:report|docx?|word)(?![A-Za-z])", first, re.IGNORECASE)
635
640
  authoring = re.search(r"만들|작성|써\s*줘|써줘|제작|생성|정리|(?:^|[^A-Za-z])(?:make|create|write|draft|prepare|build|produce|generate)(?![A-Za-z])", first, re.IGNORECASE)
@@ -781,7 +786,7 @@ def detect_lit_mode(message: str) -> NaturalLitRoute | None:
781
786
 
782
787
  # After the named routes and before `design` (which names the UI skill):
783
788
  # "lit design a lyric video" is a film request (MO-C-18).
784
- if detect_motion_video_intent(re.split(r"[\n.!?]", after, maxsplit=1)[0]):
789
+ if detect_motion_video_intent(_first_sentence(after)):
785
790
  return NaturalLitRoute(mode=MOTION_MODE, objective=_clamp_task(after), visible_message=visible)
786
791
  rest = _after_mode_word(after, "design")
787
792
  if rest is not None: