@litfamily/litopencode 1.0.4 → 1.0.5

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 (72) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README-Ko-KR.md +146 -115
  3. package/README.md +144 -116
  4. package/dist/activation-workflow-prompts.js +1 -1
  5. package/dist/agents/registry.js +30 -26
  6. package/dist/cli/args.js +3 -3
  7. package/dist/cli/host-limits.d.ts +1 -1
  8. package/dist/cli/host-limits.js +3 -2
  9. package/dist/cli/install-config.js +2 -2
  10. package/dist/cli/install-report.js +2 -1
  11. package/dist/cli/managed-skill-assets.d.ts +1 -1
  12. package/dist/cli/managed-skill-assets.js +3 -1
  13. package/dist/cli/model-catalog.d.ts +56 -0
  14. package/dist/cli/model-catalog.js +78 -17
  15. package/dist/cli/model-policy.js +7 -6
  16. package/dist/cli/types.d.ts +1 -1
  17. package/dist/cli.js +8 -7
  18. package/dist/config-parser.js +3 -2
  19. package/dist/config.d.ts +1 -1
  20. package/dist/config.js +13 -12
  21. package/dist/features.d.ts +17 -1
  22. package/dist/features.js +10 -0
  23. package/dist/model-route-policy.d.ts +1 -1
  24. package/dist/model-route-policy.js +24 -7
  25. package/dist/skills.d.ts +8 -1
  26. package/dist/skills.js +8 -0
  27. package/dist/uiux-visual-catalog.js +5 -5
  28. package/docs/assets/cover-motion-still.webp +0 -0
  29. package/docs/assets/cover-motion.webp +0 -0
  30. package/docs/assets/readme/JetBrainsMono-OFL.txt +93 -0
  31. package/docs/assets/readme/Lucide-LICENSE.txt +43 -0
  32. package/docs/assets/readme/ascii-readme.svg +5 -0
  33. package/docs/assets/readme/badge-version.svg +1 -1
  34. package/docs/assets/readme/ignition-film.mp4 +0 -0
  35. package/docs/assets/readme/ignition-readme.gif +0 -0
  36. package/docs/assets/readme/litfamily-machines.png +0 -0
  37. package/docs/assets/readme/lucide-book-open.svg +14 -0
  38. package/docs/assets/readme/lucide-play.svg +13 -0
  39. package/docs/assets/readme/lucide-shield-check.svg +14 -0
  40. package/docs/assets/readme/poster.png +0 -0
  41. package/docs/migration.md +2 -2
  42. package/docs/reference-Ko-KR.md +21 -4
  43. package/docs/reference.md +30 -10
  44. package/package.json +1 -1
  45. package/skills/frontend-ui-ux/SKILL.md +25 -31
  46. package/skills/frontend-ui-ux/references/complete-contract.md +12 -12
  47. package/skills/frontend-ui-ux/references/default-editorial-pixel.json +19 -0
  48. package/skills/frontend-ui-ux/references/production.md +15 -0
  49. package/skills/managed-skill-manifest.json +92 -1
  50. package/skills/readme-studio/SKILL.md +76 -0
  51. package/skills/readme-studio/references/decoration-patterns.md +105 -0
  52. package/skills/readme-studio/references/motion.md +38 -0
  53. package/skills/readme-studio/references/production.md +13 -0
  54. package/skills/readme-studio/references/typography.md +16 -0
  55. package/skills/readme-studio/scripts/check-facts.mjs +28 -0
  56. package/skills/readme-studio/templates/cover-source.json +1 -0
  57. package/skills/readme-studio/templates/facts.json +1 -0
  58. package/skills/readme-studio/templates/hyperframes/index.html +62 -0
  59. package/skills/readme-studio/templates/hyperframes/index.motion.json +1 -0
  60. package/skills/readme-studio/templates/hyperframes/package-lock.json +1966 -0
  61. package/skills/readme-studio/templates/hyperframes/package.json +1 -0
  62. package/skills/readme-studio/templates/readme-cover-section.md +53 -0
  63. package/skills/readme-studio/templates/remotion/package-lock.json +3783 -0
  64. package/skills/readme-studio/templates/remotion/package.json +1 -0
  65. package/skills/readme-studio/templates/remotion/src/index.tsx +32 -0
  66. package/skills/readme-studio/templates/typography/files.mjs +46 -0
  67. package/skills/readme-studio/templates/typography/outline.mjs +47 -0
  68. package/skills/readme-studio/templates/typography/package-lock.json +133 -0
  69. package/skills/readme-studio/templates/typography/package.json +1 -0
  70. package/tools/check-pack-payload.mjs +34 -2
  71. package/tools/payload-substance-parity.json +4 -3
  72. package/tools/version-manifests.json +10 -4
package/README.md CHANGED
@@ -1,76 +1,59 @@
1
- <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/cover.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/cover-motion.webp" width="100%" alt="LitOpenCode cover art. A lime signal moves through orbital paths above the OPENCODE wordmark. The static family cover appears for reduced-motion preference." /></picture></p>
2
- <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/cover.webp">View the static cover</a></p>
1
+ <p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/cover-motion.webp" width="100%" alt="LitOpenCode cover art. A lime signal traces orbital paths above the OPENCODE wordmark. Reduced-motion users see a still frame from this cover." /></picture></p>
2
+ <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/cover.webp">View the static cover</a></p>
3
3
 
4
- # LitOpenCode
5
-
6
- [English](README.md) · [한국어](README-Ko-KR.md)
7
-
8
- **Keep the work lit.**
9
-
10
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/readme/litopencode-wordmark.svg" width="480" alt="LITOPENCODE display type" /></p>
11
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/readme/litopencode-clay-icon.png" width="160" alt="LitOpenCode clay mark" /></p>
4
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/ascii-readme.svg" width="480" alt="LIT ASCII B mark" /></p>
12
5
 
13
- > **The spark is yours.**<br>
14
- > **Bring it to your work.**
15
-
16
- A bug to fix. A screen to build. A project to finish.
17
-
18
- Starting takes a line. Continuing takes more. When a conversation grows long or a
19
- session ends, you have to recover where you stopped: what you decided, what you
20
- checked, and what comes next.
21
-
22
- **LIT keeps that spark in the project.** It records the goal, the plan, verified
23
- results, and the next steps so another session can read them and continue.
24
-
25
- **Where one conversation ends, the next piece of work begins.**
26
-
27
- LitOpenCode adds workflow agents, slash commands, and a local evidence ledger to
28
- **OpenCode**. Keep the tool you already use; no other LitFamily product is required.
29
- A lasting flame does not mean a program runs forever. **It means leaving work ready
30
- to continue when the session ends.**
6
+ <details>
7
+ <summary>Copy ASCII logo</summary>
31
8
 
32
9
  ```text
33
- Plan → Build → Verify → Leave the next step
34
- ```
35
-
36
- [Install](#install-in-30-seconds) · [First use](#first-use) · [Core routes](#core-routes) · [Safety](#safety-and-updates) · [Docs](#documentation)
37
-
38
- ## Start with one lit task
39
-
40
- Append `lit` to a prompt, or use `/lit`, to select the LitOpenCode workflow. OpenCode owns the model and permission prompts; the plugin keeps project records.
41
-
42
- | Prompt or route | Effect |
43
- | --- | --- |
44
- | `lit` or `/lit` | Start a bounded task and record what was checked. |
45
- | `handoff` or `/lit-handoff` | Carry the current result and next step into another session. |
46
- | `lit-plan` | Prepare a plan before implementation. |
47
- | `/start-work <approved-plan>` | Execute an approved plan. |
48
- | `/review-work` | Review the change and evidence. |
49
- | `/litresearch` | Use the shipped source-backed research route. |
50
-
51
- Selecting a route does not claim that the model ran or that a visual check passed.
10
+ ▄▄▄▄
11
+ ▗███▌ ▗██████▖
12
+ ▗▄▄▄▄▄ ▗▟████▌ ▝██████▘
13
+ ▐█████ ▗▟██████▌ ▝▀▜█▀▘
14
+ ▐█████ ▗▟███████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
15
+ ▐█████ ▗▟█████████████████████████ ▐█▀
16
+ ▐█████ ████████████████████████████▀
17
+ ▐█████ ██▛▘ ▄ ▄▄▄▄▖▄▄▄▄▄▄▄▄▄▄▄▄▄▖
18
+ ▐█████ ▀ ▄██ ████▌█████████████▌
19
+ ▐█████ ▄████ ████▌█████████████▌
20
+ ▐█████ ▄█████▛ litopencode
21
+ ▐█████ ▗▟█████▀▘ ▄▄▄▄▄ ▗▖
22
+ ▐█████ ▐█████▀ █████ ▐▛▀
23
+ ▐█████ ▐███▀ █████
24
+ ▐█████ ▐█▀ █████
25
+ ▐█████ ▝ █████
26
+ ▐█████▄▄▄▄▄▄▄▖ █████
27
+ ▐███████████▛ █████
28
+ ▐██████████▀ █████
52
29
 
53
- The packaged reference corpora use the canonical paths `vendor/handoff/` and
54
- `vendor/scientific-visualization/`. Their numbered license and provenance filenames
55
- remain source-attribution records.
30
+ ```
56
31
 
57
- ## Practical routes and visual cues
32
+ </details>
58
33
 
59
- Use `lit` or `/lit` to start a bounded task; `handoff` or `/lit-handoff` carries the checked result and next step; `lit-plan` prepares a plan; `/start-work <approved-plan>` executes an approved plan; `/review-work` checks the change and its evidence; and `/litresearch` uses the shipped source-backed research route. The expected effect is a project-local goal, evidence, and next-step record that another session can resume. The host limit is explicit: OpenCode owns model execution and permission prompts, while the plugin supplies routes and records; selecting a route does not prove execution or a visual check.
34
+ # LitOpenCode
60
35
 
61
- When a Lit route activates, the reply starts with a bold ignition line. The plugin requests a six-second warning toast with five micro-logo rows and a final `🔥 LIT IGNITED · <discipline> 🔥` line when the environment supports mark glyphs; otherwise, it shows only that line.
36
+ [English](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/README.md) · [한국어](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/README-Ko-KR.md)
62
37
 
63
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/litopencode-ignition-1600.webp" width="48%" alt="LitOpenCode ignition apparatus" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/litopencode-continuity-1600.webp" width="48%" alt="LitOpenCode continuity apparatus" /></p>
38
+ **Keep the work lit.**
64
39
 
65
- <p align="center"><a href="docs/assets/readme/ignition-film.mp4"><img src="docs/assets/readme/poster.png" width="720" alt="Ignition motion poster" /></a></p>
40
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/litopencode-wordmark.svg" width="480" alt="LITOPENCODE display type" /></p>
41
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/litopencode-clay-icon.png" width="160" alt="LitOpenCode clay mark" /></p>
66
42
 
67
- The poster opens the optional film; this README keeps motion opt-in.
43
+ <p align="center">
44
+ <a href="#install"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/badge-version.svg" alt="1.0.5" /></a>
45
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
46
+ </p>
68
47
 
69
- The retained `docs/assets/cover.svg` is the editable, low-bandwidth fallback; the WebP above is the product emphasis export.
48
+ <p align="center">
49
+ <a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> Docs</a> &nbsp; <a href="#install">Install</a> &nbsp; <a href="#ignition-motion"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/lucide-play.svg" width="16" alt="" /> Ignition</a> &nbsp; <a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
50
+ </p>
70
51
 
52
+ ## What is LitOpenCode
71
53
 
54
+ LitOpenCode adds workflow agents, slash commands, and a local evidence ledger to OpenCode.
72
55
 
73
- ## Install in 30 seconds
56
+ ## Install
74
57
 
75
58
  Install the scoped package with Node.js/npm and OpenCode available:
76
59
 
@@ -83,19 +66,20 @@ Restart OpenCode, press **Tab**, and select **lit-loop**. Model access and crede
83
66
  come from your OpenCode provider setup. The installer offers model, permission, and
84
67
  output-style choices; the default permission mode is safe/ask-first.
85
68
 
69
+ With the OpenAI provider, fresh installs use GPT-6 Astra (`gpt-6-astra`) at `xhigh` for planning and review, and GPT-6 Luna (`gpt-6-luna`) at `max` for execution and research. The installer also offers supported model and effort choices.
70
+
86
71
  ```sh
87
72
  npm exec --package @litfamily/litopencode@latest -- litopencode install --dry-run # preview changes
88
73
  npm exec --package @litfamily/litopencode@latest -- litopencode install --yes # use defaults; preserve saved choices
89
- npm exec --package @litfamily/litopencode@latest -- litopencode doctor # inspect package and configuration health
90
74
  ```
91
75
 
92
76
  Installation registers the plugin and native command/skill files under your OpenCode
93
77
  config root. Routes live in `~/.config/opencode/litopencode.json`; `XDG_CONFIG_HOME`
94
78
  changes that root. Existing custom routes remain user-owned. See the
95
- [installation and model reference](docs/reference.md#install) for custom roots,
79
+ [installation and model reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md#install) for custom roots,
96
80
  provider choices, terminal policy, and unattended setup.
97
81
 
98
- This checkout is `@litfamily/litopencode@1.0.4`. Registry `@latest` can differ; inspect it with
82
+ This checkout is `@litfamily/litopencode@1.0.5`. Registry `@latest` can differ; inspect it with
99
83
  `npm view @litfamily/litopencode version` when an exact version matters.
100
84
 
101
85
  ## First use
@@ -108,7 +92,7 @@ lit Build a to-do list in one index.html with no dependencies; check adding and
108
92
  ```
109
93
 
110
94
  Your first result is `index.html`. Open it and try adding and completing an item.
111
- If the behavior differs from the completion report, tell the agent what happened.
95
+
112
96
  When you return, use `/lit-recap` to read the record and find the next step.
113
97
 
114
98
  Use `/lit` for the same workflow. For work that needs a reviewed plan, select
@@ -120,48 +104,45 @@ Progress and evidence live in `.litopencode/litgoal/`. OpenCode does not expose
120
104
  native goal primitive; this repository-local ledger supports resuming work. Static
121
105
  skills provide guidance when their documented routes select them.
122
106
 
123
- ## Ignition mark
107
+ ## Key features
124
108
 
125
- <p align="center"><img src="docs/assets/readme/ascii-readme.svg" width="480" alt="LIT ASCII B mark" /></p>
109
+ > **The spark is yours.**<br>
110
+ > **Bring it to your work.**
126
111
 
127
- <details>
128
- <summary>Copy ASCII logo</summary>
112
+ A bug to fix. A screen to build. A project to finish.
129
113
 
130
- ```text
131
- ▄▄▄▄
132
- ▗███▌ ▗██████▖
133
- ▗▄▄▄▄▄ ▗▟████▌ ▝██████▘
134
- ▐█████ ▗▟██████▌ ▝▀▜█▀▘
135
- ▐█████ ▗▟███████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
136
- ▐█████ ▗▟█████████████████████████ ▐█▀
137
- ▐█████ ████████████████████████████▀
138
- ▐█████ ██▛▘ ▄ ▄▄▄▄▖▄▄▄▄▄▄▄▄▄▄▄▄▄▖
139
- ▐█████ ▀ ▄██ ████▌█████████████▌
140
- ▐█████ ▄████ ████▌█████████████▌
141
- ▐█████ ▄█████▛ litopencode
142
- ▐█████ ▗▟█████▀▘ ▄▄▄▄▄ ▗▖
143
- ▐█████ ▐█████▀ █████ ▐▛▀
144
- ▐█████ ▐███▀ █████
145
- ▐█████ ▐█▀ █████
146
- ▐█████ ▝ █████
147
- ▐█████▄▄▄▄▄▄▄▖ █████
148
- ▐███████████▛ █████
149
- ▐██████████▀ █████
114
+ Starting takes a line. Continuing takes more. When a conversation grows long or a
115
+ session ends, you have to recover where you stopped: what you decided, what you
116
+ checked, and what comes next.
117
+
118
+ **LIT keeps that spark in the project.** It records the goal, the plan, verified
119
+ results, and the next steps so another session can read them and continue.
120
+
121
+ **Where one conversation ends, the next piece of work begins.**
150
122
 
123
+ Keep the tool you already use; no other LitFamily product is required.
124
+ A lasting flame does not mean a program runs forever. **It means leaving work ready
125
+ to continue when the session ends.**
126
+
127
+ ```text
128
+ Plan → Build → Verify → Leave the next step
151
129
  ```
152
130
 
153
- </details>
131
+ ### Practical routes and visual cues
154
132
 
155
- <p align="center">
156
- <a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/readme/badge-version.svg" alt="1.0.4" /></a>
157
- <a href="LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.4/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
158
- </p>
133
+ Use `lit` or `/lit` to start a bounded task; `handoff` or `/lit-handoff` carries the checked result and next step; `lit-plan` prepares a plan; `/start-work <approved-plan>` executes an approved plan; `/review-work` checks the change and its evidence; and `/litresearch` uses the shipped source-backed research route. The expected effect is a project-local goal, evidence, and next-step record that another session can resume. The host limit is explicit: OpenCode owns model execution and permission prompts, while the plugin supplies routes and records; selecting a route does not prove execution or a visual check.
159
134
 
160
- <p align="center">
161
- <a href="docs/reference.md"><img src="docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> Docs</a> &nbsp; <a href="#install-in-30-seconds">Install</a> &nbsp; <a href="#ignition-motion"><img src="docs/assets/readme/lucide-play.svg" width="16" alt="" /> Ignition</a> &nbsp; <a href="LICENSE"><img src="docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a>
162
- </p>
135
+ When a Lit route activates, the reply starts with a bold ignition line. The plugin requests a six-second warning toast with five micro-logo rows and a final `🔥 LIT IGNITED · <discipline> 🔥` line when the environment supports mark glyphs; otherwise, it shows only that line.
136
+
137
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/litopencode-ignition-1600.webp" width="48%" alt="LitOpenCode ignition apparatus" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/litopencode-continuity-1600.webp" width="48%" alt="LitOpenCode continuity apparatus" /></p>
163
138
 
164
- ## How LitOpenCode fits into OpenCode
139
+ <p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/ignition-film.mp4"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/poster.png" width="720" alt="Ignition motion poster" /></a></p>
140
+
141
+ The poster opens the optional film; this README keeps motion opt-in.
142
+
143
+ The retained `docs/assets/cover.svg` is the editable, low-bandwidth fallback; the WebP above is the product emphasis export.
144
+
145
+ ### How LitOpenCode fits into OpenCode
165
146
 
166
147
  OpenCode loads the plugin from its config. Agents and chat/command routes select
167
148
  workflows and installed skills. Tools and lifecycle hooks keep the project records
@@ -185,14 +166,34 @@ flowchart TD
185
166
  class Skills,Records local
186
167
  ```
187
168
 
188
- ## LITFAMILY
169
+ ### Design production and README Studio
189
170
 
190
- ![Five armored machines representing LitClaude, LitHermes, LitCodex, LitOpenCode and LitGrok](docs/assets/readme/litfamily-machines.png)
171
+ The native `frontend-ui-ux` skill takes an adequate authorized build request through working implementation and rendered inspection. It asks only material design choices and retains answers; review and plan requests remain read-only.
191
172
 
192
- LitClaude · LitHermes · LitCodex · LitOpenCode · LitGrok.
193
- Five armored machines for five independent products, each working in its own host.
173
+ Select `readme-studio` through OpenCode's native skill tool for factual README writing and local cover composition. The installed resources include outlined typography helpers and pinned Remotion/HyperFrames recipes. Without a native image generator it reports `IMAGE_GENERATION_UNAVAILABLE` and can continue from a supplied background. Public GitHub/npm rendering is a separate gate. No dedicated slash command is claimed.
174
+
175
+ ## Commands
194
176
 
195
- ## Core routes
177
+ ### Start with one lit task
178
+
179
+ Append `lit` to a prompt, or use `/lit`, to select the LitOpenCode workflow. OpenCode owns the model and permission prompts; the plugin keeps project records.
180
+
181
+ | Prompt or route | Effect |
182
+ | --- | --- |
183
+ | `lit` or `/lit` | Start a bounded task and record what was checked. |
184
+ | `handoff` or `/lit-handoff` | Carry the current result and next step into another session. |
185
+ | `lit-plan` | Prepare a plan before implementation. |
186
+ | `/start-work <approved-plan>` | Execute an approved plan. |
187
+ | `/review-work` | Review the change and evidence. |
188
+ | `/litresearch` | Use the shipped source-backed research route. |
189
+
190
+ Selecting a route does not claim that the model ran or that a visual check passed.
191
+
192
+ The packaged reference corpora use the canonical paths `vendor/handoff/` and
193
+ `vendor/scientific-visualization/`. Their numbered license and provenance filenames
194
+ remain source-attribution records.
195
+
196
+ ### Core routes
196
197
 
197
198
  | Route | Use it to |
198
199
  | --- | --- |
@@ -205,9 +206,9 @@ Five armored machines for five independent products, each working in its own hos
205
206
  | `/lit-korean` | Improve Korean prose without changing its meaning. |
206
207
  | `/lit-scientific-visualization` | Use the packaged scientific-visualization workflow. |
207
208
 
208
- The [full route and skill reference](docs/reference.md#core-commands) covers
209
+ The [full route and skill reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md#core-commands) covers
209
210
  Autoresearch, Autoconference, Wikify, UI/UX, and the two-lane repository rules engine.
210
- [Migration notes](docs/migration.md#skill-id-renames) explain the one-release skill aliases.
211
+ [Migration notes](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/migration.md#skill-id-renames) explain the one-release skill aliases.
211
212
 
212
213
  ## Safety and updates
213
214
 
@@ -218,7 +219,19 @@ Autoresearch, Autoconference, Wikify, UI/UX, and the two-lane repository rules e
218
219
  check. Use `--no-auto-update` or `LITOPENCODE_NO_AUTO_UPDATE=1` to disable automatic updates.
219
220
  - Skill learning requires an explicit apply command. Its review, mutation, rollback, and
220
221
  curator boundaries support POSIX; on Windows those boundaries fail closed. Install,
221
- doctor, and passive surfaces remain available. [Learning-loop details](docs/reference.md#skill-learning-loop).
222
+ doctor, and passive surfaces remain available. [Learning-loop details](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md#skill-learning-loop).
223
+
224
+ ## Troubleshooting
225
+
226
+ If the behavior differs from the completion report, tell the agent what happened.
227
+
228
+ Inspect package and configuration health with:
229
+
230
+ ```sh
231
+ npm exec --package @litfamily/litopencode@latest -- litopencode doctor
232
+ ```
233
+
234
+ See the [installation and model reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md#install).
222
235
 
223
236
  ## Uninstall
224
237
 
@@ -234,22 +247,37 @@ npm uninstall -g @litfamily/litopencode
234
247
  Review installed command/skill files before removing installer-owned copies; preserve
235
248
  user-created files and edits. Keep `litopencode.json` if you still need its routes, and
236
249
  keep project `.litopencode/` ledgers if you plan to resume. Restart OpenCode after removal.
237
- See the [removal reference](docs/reference.md#remove).
250
+ See the [removal reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md#remove).
251
+
252
+ ## License
253
+
254
+ MIT
255
+
256
+ ## Links
257
+
258
+ ### Documentation
238
259
 
239
- ## Documentation
260
+ - [Workflow reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference.md): models, permissions, host hooks, all skills, learning loop, and reproducible verification.
261
+ - [한국어 상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/reference-Ko-KR.md)
262
+ - [Migration notes](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/migration.md)
263
+ - [Terminal mark and activation probes](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/lit-mark.md)
264
+ - [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/CHANGELOG.md)
265
+ - Maintainer release checklist (repository only)
240
266
 
241
- - [Workflow reference](docs/reference.md): models, permissions, host hooks, all skills, learning loop, and reproducible verification.
242
- - [한국어 상세 안내](docs/reference-Ko-KR.md)
243
- - [Migration notes](docs/migration.md)
244
- - [Terminal mark and activation probes](docs/lit-mark.md)
245
- - [Changelog](CHANGELOG.md)
246
- - [Maintainer release checklist](docs/release-checklist.md) (repository only)
267
+ - [Contributing](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/CONTRIBUTING.md) · [Support](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/SUPPORT.md) · [Security](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/SECURITY.md)
268
+ - [Code of conduct](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/CODE_OF_CONDUCT.md) · [Privacy and network behavior](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/privacy.md)
269
+
270
+ ### LITFAMILY
271
+
272
+ ![Five armored machines representing LitClaude, LitHermes, LitCodex, LitOpenCode and LitGrok](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/litfamily-machines.png)
273
+
274
+ LitClaude · LitHermes · LitCodex · LitOpenCode · LitGrok.
275
+ Five armored machines for five independent products, each working in its own host.
247
276
 
248
- - [Contributing](CONTRIBUTING.md) · [Support](SUPPORT.md) · [Security](SECURITY.md)
249
- - [Code of conduct](CODE_OF_CONDUCT.md) · [Privacy and network behavior](docs/privacy.md)
277
+ ![Five robots beneath the LITFAMILY and KEEP THE WORK LIT. lettering.](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/cover.webp)
250
278
 
251
- ## Ignition motion
279
+ ### Ignition motion
252
280
 
253
- [![Ignition motion graphic poster](docs/assets/readme/poster.png)](docs/assets/readme/ignition-film.mp4)
281
+ [![Ignition motion graphic poster](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/poster.png)](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/ignition-film.mp4)
254
282
 
255
- [Watch the 10-second film](docs/assets/readme/ignition-film.mp4) · [Animated GIF](docs/assets/readme/ignition-readme.gif) · [Lucide icon license](docs/assets/readme/Lucide-LICENSE.txt) · [ASCII font license](docs/assets/readme/JetBrainsMono-OFL.txt)
283
+ [Watch the 10-second film](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/ignition-film.mp4) · [Animated GIF](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/ignition-readme.gif) · [Lucide icon license](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/Lucide-LICENSE.txt) · [ASCII font license](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.5/docs/assets/readme/JetBrainsMono-OFL.txt)
@@ -174,7 +174,7 @@ Stop when nothing left is unknown that would change the plan. Over-interviewing
174
174
  Hand off a brief that states the objective in product terms, explicit non-goals, the decisions taken and who made each, the assumptions with their fallbacks, the acceptance criteria, and the unknowns deliberately left open. Then hand it to lit-plan; do not plan here.
175
175
  `;
176
176
  export const deepInterviewPromptInjection = skillBackedPromptInjection("deep-interview-mode", deepInterviewActivationGuidance, "deep-interview");
177
- export const frontendUiUxPromptInjection = skillBackedPromptInjection("frontend-ui-ux-mode", "", "frontend-ui-ux");
177
+ export const frontendUiUxPromptInjection = skillBackedPromptInjection("frontend-ui-ux-mode", "Honor build, review and plan intent. Continue an adequately specified authorized build through implementation and inspection.", "frontend-ui-ux");
178
178
  const browserDriveActivationGuidance = `
179
179
  Activate browser-drive. The answer lives in a running page, and the first action is to find out whether a driver exists here.
180
180
 
@@ -2,20 +2,19 @@ import { litOpenCodeDefaultAgents } from "./defaults.js";
2
2
  import { litOpenCodeSpecialistAgents } from "./specialists.js";
3
3
  import { withReaderFacingCommunicationContract } from "../reader-facing-output.js";
4
4
  import { defaultGlobalConfigFile, configSectionWasAuthored, effectiveAgentConfig } from "../config.js";
5
+ import { defaultOpenAiRoutes, newGenerationOpenAiModels, openAiModelEfforts, openaiProviderModels } from "../cli/model-catalog.js";
5
6
  import { assertSafeEffectiveAgentRoutes } from "../model-route-policy.js";
6
7
  export const litOpenCodeAgents = Object.freeze([
7
8
  ...litOpenCodeDefaultAgents,
8
9
  ...litOpenCodeSpecialistAgents
9
10
  ]);
10
- const hostLeadRoute = Object.freeze({ model: "openai/gpt-6-astra", variant: "xhigh", reasoningEffort: "xhigh" });
11
- const specialLeadAgentIds = Object.freeze(["momus", "litwork-reviewer"]);
12
- const astraEfforts = new Set(["low", "medium", "high", "xhigh", "max"]);
13
- const astraModelMetadata = Object.freeze({
14
- name: "GPT-6 Astra",
15
- reasoning: true,
16
- temperature: false,
17
- tool_call: true
11
+ const hostLeadRoute = Object.freeze({
12
+ model: "openai/" + defaultOpenAiRoutes.lead.model,
13
+ variant: defaultOpenAiRoutes.lead.effort,
14
+ reasoningEffort: defaultOpenAiRoutes.lead.effort
18
15
  });
16
+ const specialLeadAgentIds = Object.freeze(["momus", "litwork-reviewer"]);
17
+ const astraEfforts = new Set(openAiModelEfforts(newGenerationOpenAiModels.astra));
19
18
  function toolsToConfig(tools) {
20
19
  const enabledTools = {};
21
20
  for (const tool of tools) {
@@ -201,30 +200,35 @@ function applySpecialLeadRoute(agentTarget, agentId) {
201
200
  return;
202
201
  agentTarget[agentId] = { ...existing, ...hostLeadRoute };
203
202
  }
204
- function registerAstraProviderModel(config) {
203
+ function registerOpenAiProviderModels(config) {
205
204
  const providers = config.provider ?? {};
206
205
  const openai = providers.openai;
207
206
  const models = openai?.models ?? {};
208
- const existingAstra = models["gpt-6-astra"];
209
- const astraModel = existingAstra === undefined
210
- ? { ...astraModelMetadata }
211
- : {
212
- ...existingAstra,
213
- ...(existingAstra.name === undefined ? { name: astraModelMetadata.name } : {}),
214
- ...(existingAstra.reasoning === undefined ? { reasoning: astraModelMetadata.reasoning } : {}),
215
- ...(existingAstra.temperature === undefined ? { temperature: astraModelMetadata.temperature } : {}),
216
- ...(existingAstra.tool_call === undefined ? { tool_call: astraModelMetadata.tool_call } : {})
217
- };
218
- if (existingAstra !== undefined && JSON.stringify(existingAstra) === JSON.stringify(astraModel))
207
+ const nextModels = { ...models };
208
+ let changed = false;
209
+ for (const [modelId, metadata] of Object.entries(openaiProviderModels)) {
210
+ const existing = models[modelId];
211
+ const next = existing === undefined
212
+ ? { ...metadata }
213
+ : {
214
+ ...existing,
215
+ ...(existing.name === undefined ? { name: metadata.name } : {}),
216
+ ...(existing.reasoning === undefined ? { reasoning: metadata.reasoning } : {}),
217
+ ...(existing.temperature === undefined ? { temperature: metadata.temperature } : {}),
218
+ ...(existing.tool_call === undefined ? { tool_call: metadata.tool_call } : {})
219
+ };
220
+ if (JSON.stringify(existing) !== JSON.stringify(next)) {
221
+ nextModels[modelId] = next;
222
+ changed = true;
223
+ }
224
+ }
225
+ if (!changed)
219
226
  return;
220
227
  config.provider = {
221
228
  ...providers,
222
229
  openai: {
223
230
  ...(openai ?? {}),
224
- models: {
225
- ...models,
226
- "gpt-6-astra": astraModel
227
- }
231
+ models: nextModels
228
232
  }
229
233
  };
230
234
  }
@@ -234,7 +238,7 @@ function isAstraEffort(value) {
234
238
  function modelFields(override) {
235
239
  const model = openCodeModel(override);
236
240
  const nativeReasoningEffort = override.reasoningEffort ??
237
- (model === "openai/gpt-6-astra" && override.variant !== undefined && isAstraEffort(override.variant)
241
+ (model === "openai/" + newGenerationOpenAiModels.astra && override.variant !== undefined && isAstraEffort(override.variant)
238
242
  ? override.variant
239
243
  : undefined);
240
244
  return {
@@ -270,7 +274,7 @@ export function registerLitOpenCodeAgents(config, litConfig = defaultGlobalConfi
270
274
  ...specialLeadAgentIds.filter((agentId) => litConfig.agents[agentId] !== undefined)
271
275
  ];
272
276
  assertSafeEffectiveAgentRoutes(litConfig, routeAgentIds);
273
- registerAstraProviderModel(config);
277
+ registerOpenAiProviderModels(config);
274
278
  const existingBuild = config.agent?.build ?? {};
275
279
  const existingPlan = config.agent?.plan ?? {};
276
280
  const inheritedTaskPermission = taskPermission(config.permission);
package/dist/cli/args.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import os from "node:os";
2
2
  import path from "node:path";
3
- import { resolveModelRoute } from "./model-catalog.js";
3
+ import { installModelEfforts, isInstallModelEffort, resolveModelRoute } from "./model-catalog.js";
4
4
  export const loopCommands = [
5
5
  "create-goals",
6
6
  "status",
@@ -332,9 +332,9 @@ function parsePermissionMode(value, optionName) {
332
332
  }
333
333
  function parseModelEffort(value, optionName) {
334
334
  const cleaned = cleanOption(value, optionName);
335
- if (cleaned === "low" || cleaned === "medium" || cleaned === "high" || cleaned === "xhigh" || cleaned === "max")
335
+ if (cleaned !== undefined && isInstallModelEffort(cleaned))
336
336
  return cleaned;
337
- throw new Error(optionName + " must be one of low, medium, high, xhigh, max");
337
+ throw new Error(optionName + " must be one of " + installModelEfforts.join(", "));
338
338
  }
339
339
  function cleanOption(value, optionName) {
340
340
  if (value === undefined)
@@ -1,7 +1,7 @@
1
1
  export declare const contextCeilingTokens = 372000;
2
2
  export declare const compactionTriggerTokens = 334800;
3
3
  export declare const compactionReserveTokens: number;
4
- export declare const offeredGpt56Models: readonly ["gpt-5.6-luna"];
4
+ export declare const offeredOpenAiModels: readonly ["gpt-6-luna", "gpt-5.6-luna"];
5
5
  export type HostLimitMutation = {
6
6
  readonly reconfigure: boolean;
7
7
  readonly changed: boolean;
@@ -1,11 +1,12 @@
1
1
  import { isRecord } from "./json.js";
2
2
  import { writeTextAtomically } from "./install-config.js";
3
+ import { hostLimitModelIds } from "./model-catalog.js";
3
4
  import fs from "node:fs/promises";
4
5
  import path from "node:path";
5
6
  export const contextCeilingTokens = 372000;
6
7
  export const compactionTriggerTokens = 334800;
7
8
  export const compactionReserveTokens = contextCeilingTokens - compactionTriggerTokens;
8
- export const offeredGpt56Models = ["gpt-5.6-luna"];
9
+ export const offeredOpenAiModels = hostLimitModelIds;
9
10
  class HostConfigShapeError extends Error {
10
11
  path;
11
12
  constructor(path) {
@@ -34,7 +35,7 @@ export function applyHostLimits(config) {
34
35
  const openai = optionalRecord(provider.openai, "provider.openai");
35
36
  const models = optionalRecord(openai.models, "provider.openai.models");
36
37
  const nextModels = { ...models };
37
- for (const model of offeredGpt56Models) {
38
+ for (const model of offeredOpenAiModels) {
38
39
  const currentModel = optionalRecord(models[model], "provider.openai.models." + model);
39
40
  const limit = optionalRecord(currentModel.limit, "provider.openai.models." + model + ".limit");
40
41
  nextModels[model] = { ...currentModel, limit: { ...limit, ...modelLimit() } };
@@ -6,7 +6,7 @@ import { defaultGlobalConfigFile, defaultGlobalConfigJson, mergeConfigs, readLit
6
6
  import { diagnoseModelRoutes, effectiveAuthoredAgentRoutes, UnsafeModelRouteError } from "../model-route-policy.js";
7
7
  import { litOpenCodeConfigFileForOpenCodeRoot } from "../state.js";
8
8
  import { isRecord, readJsonObjectIfPresent } from "./json.js";
9
- import { isModelProvider, modelMenuRows, stripFastSuffix } from "./model-catalog.js";
9
+ import { installModelEfforts, isModelProvider, modelMenuRows, stripFastSuffix } from "./model-catalog.js";
10
10
  import { classifyModelConfig, selectedLitConfig } from "./model-policy.js";
11
11
  export async function writeTextAtomically(filePath, text, overrides = {}) {
12
12
  const tempPath = path.join(path.dirname(filePath), "." + path.basename(filePath) + ".tmp-" + randomUUID());
@@ -39,7 +39,7 @@ export async function readInstallModelClassification(root) {
39
39
  return classifyModelConfig(await readValidatedConfig(root));
40
40
  }
41
41
  const installCategories = ["planning", "execution", "review", "research"];
42
- const installEfforts = ["low", "medium", "high", "xhigh", "max"];
42
+ const installEfforts = installModelEfforts;
43
43
  function existingInstallRoute(value) {
44
44
  if (!isRecord(value) || typeof value.provider !== "string" || !isModelProvider(value.provider))
45
45
  return undefined;
@@ -1,3 +1,4 @@
1
+ import { shippedDefaultsSummary } from "./model-catalog.js";
1
2
  const reset = "\u001b[0m";
2
3
  const green = "\u001b[38;5;82m";
3
4
  const cyan = "\u001b[1;38;5;81m";
@@ -154,7 +155,7 @@ export function renderInstallReport(report) {
154
155
  line("Permissions", permissionRoute(report)),
155
156
  line("Authority lifecycle", "schema 3; bounded history/context; trusted resume only"),
156
157
  line("Agents", "lit-loop, lit-plan, lit-implement"),
157
- line("Shipped defaults", "Astra/xhigh lead + planning/review; LUNA/max execution/research helpers"),
158
+ line("Shipped defaults", shippedDefaultsSummary()),
158
159
  line("Override order", "project merges after global; per-agent routes override categories"),
159
160
  line("Coverage", report.litopencodeConfig.agents.length + " agents / " + report.litopencodeConfig.categories.length + " categories"),
160
161
  ...section("Host capabilities"),
@@ -1,5 +1,5 @@
1
1
  import type { LitOpenCodeRuntimeSkillId } from "../skills.ts";
2
- export type ManagedSkillId = "lit-comprehend" | "lit-handoff" | "lit-scientific-visualization" | "frontend-ui-ux" | "visual-qa" | "lit-plan" | "browser-drive" | "autoresearch" | "autoconference" | "wikify";
2
+ export type ManagedSkillId = "lit-comprehend" | "lit-handoff" | "lit-scientific-visualization" | "readme-studio" | "frontend-ui-ux" | "visual-qa" | "lit-plan" | "browser-drive" | "autoresearch" | "autoconference" | "wikify";
3
3
  export type CanonicalManagedAsset = {
4
4
  readonly path: string;
5
5
  readonly sha256: string;
@@ -10,6 +10,7 @@ export function managedSkillDefinition(id) {
10
10
  id !== "lit-handoff" &&
11
11
  id !== "lit-scientific-visualization" &&
12
12
  id !== "browser-drive" &&
13
+ id !== "readme-studio" &&
13
14
  id !== "frontend-ui-ux" &&
14
15
  id !== "visual-qa" &&
15
16
  id !== "lit-plan" &&
@@ -104,7 +105,8 @@ const skillDiscoveryDescriptions = Object.freeze({
104
105
  "lit-recap": "Trigger when the user asks what has happened so far — \"recap\", \"리캡\", \"where are we\", \"summarize this session\", or resuming after a break — so the answer is a read-only Korean-default digest built from the durable ledger and session evidence instead of a new action.",
105
106
  "lit-handoff": "Trigger only for explicit `/lit-handoff`, an exact bare `handoff` message, or native selection by the exact `lit-handoff` id.",
106
107
  "lit-scientific-visualization": "Trigger only for explicit `/lit-scientific-visualization`, an exact bare `lit-scientific-visualization` message, or native selection by the exact `lit-scientific-visualization` id.",
107
- "frontend-ui-ux": "Trigger the moment interface work is described, not after it starts — \"design a settings page\", \"redesign the dashboard\", \"build a login screen\", or any making verb aimed at a UI, screen, layout, component, or stylesheet — so the design contract and the existing tokens shape the work before markup exists. Also on the exact `frontend-ui-ux` id. The SKILL.md reference router names which of the fifteen shipped reference documents answers which question.",
108
+ "readme-studio": "Select by native skill name for factual README writing and local cover composition. Inspect actual session image capability; never infer generation support or authorize publication from selection.",
109
+ "frontend-ui-ux": "Trigger the moment interface work is described, not after it starts — \"design a settings page\", \"redesign the dashboard\", \"build a login screen\", or any making verb aimed at a UI, screen, layout, component, or stylesheet — so compact direction and existing tokens shape the authorized build. Evolve the contract with implementation and inspect renders; review and plan intent remains read-only. Also on the exact `frontend-ui-ux` id. The SKILL.md reference router names which of the fifteen shipped reference documents answers which question.",
108
110
  "visual-qa": "Trigger when a rendered surface needs to be checked rather than described — an explicit `visual-qa` request, or verifying that an interface change actually looks and behaves right. Selection does not make a browser callable: the shipped capture playbook names the exact blocked code per unavailable channel, and a blocked check reported honestly outranks an unproven pass.",
109
111
  autoresearch: "Trigger when a measurable objective needs repeated hypothesis, experiment, evaluation, and keep/revert decisions, or when its debug, fix, learn, plan, predict, reason, scenario, security, or readiness modes fit the request.",
110
112
  autoconference: "Trigger when several genuinely independent research lanes should explore partitions and exchange peer-reviewed packets; block rather than role-play when the current root lacks real OpenCode task capability.",