@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.
- package/CHANGELOG.md +6 -0
- package/README-Ko-KR.md +146 -115
- package/README.md +144 -116
- package/dist/activation-workflow-prompts.js +1 -1
- package/dist/agents/registry.js +30 -26
- package/dist/cli/args.js +3 -3
- package/dist/cli/host-limits.d.ts +1 -1
- package/dist/cli/host-limits.js +3 -2
- package/dist/cli/install-config.js +2 -2
- package/dist/cli/install-report.js +2 -1
- package/dist/cli/managed-skill-assets.d.ts +1 -1
- package/dist/cli/managed-skill-assets.js +3 -1
- package/dist/cli/model-catalog.d.ts +56 -0
- package/dist/cli/model-catalog.js +78 -17
- package/dist/cli/model-policy.js +7 -6
- package/dist/cli/types.d.ts +1 -1
- package/dist/cli.js +8 -7
- package/dist/config-parser.js +3 -2
- package/dist/config.d.ts +1 -1
- package/dist/config.js +13 -12
- package/dist/features.d.ts +17 -1
- package/dist/features.js +10 -0
- package/dist/model-route-policy.d.ts +1 -1
- package/dist/model-route-policy.js +24 -7
- package/dist/skills.d.ts +8 -1
- package/dist/skills.js +8 -0
- package/dist/uiux-visual-catalog.js +5 -5
- package/docs/assets/cover-motion-still.webp +0 -0
- package/docs/assets/cover-motion.webp +0 -0
- package/docs/assets/readme/JetBrainsMono-OFL.txt +93 -0
- package/docs/assets/readme/Lucide-LICENSE.txt +43 -0
- package/docs/assets/readme/ascii-readme.svg +5 -0
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/assets/readme/ignition-film.mp4 +0 -0
- package/docs/assets/readme/ignition-readme.gif +0 -0
- package/docs/assets/readme/litfamily-machines.png +0 -0
- package/docs/assets/readme/lucide-book-open.svg +14 -0
- package/docs/assets/readme/lucide-play.svg +13 -0
- package/docs/assets/readme/lucide-shield-check.svg +14 -0
- package/docs/assets/readme/poster.png +0 -0
- package/docs/migration.md +2 -2
- package/docs/reference-Ko-KR.md +21 -4
- package/docs/reference.md +30 -10
- package/package.json +1 -1
- package/skills/frontend-ui-ux/SKILL.md +25 -31
- package/skills/frontend-ui-ux/references/complete-contract.md +12 -12
- package/skills/frontend-ui-ux/references/default-editorial-pixel.json +19 -0
- package/skills/frontend-ui-ux/references/production.md +15 -0
- package/skills/managed-skill-manifest.json +92 -1
- package/skills/readme-studio/SKILL.md +76 -0
- package/skills/readme-studio/references/decoration-patterns.md +105 -0
- package/skills/readme-studio/references/motion.md +38 -0
- package/skills/readme-studio/references/production.md +13 -0
- package/skills/readme-studio/references/typography.md +16 -0
- package/skills/readme-studio/scripts/check-facts.mjs +28 -0
- package/skills/readme-studio/templates/cover-source.json +1 -0
- package/skills/readme-studio/templates/facts.json +1 -0
- package/skills/readme-studio/templates/hyperframes/index.html +62 -0
- package/skills/readme-studio/templates/hyperframes/index.motion.json +1 -0
- package/skills/readme-studio/templates/hyperframes/package-lock.json +1966 -0
- package/skills/readme-studio/templates/hyperframes/package.json +1 -0
- package/skills/readme-studio/templates/readme-cover-section.md +53 -0
- package/skills/readme-studio/templates/remotion/package-lock.json +3783 -0
- package/skills/readme-studio/templates/remotion/package.json +1 -0
- package/skills/readme-studio/templates/remotion/src/index.tsx +32 -0
- package/skills/readme-studio/templates/typography/files.mjs +46 -0
- package/skills/readme-studio/templates/typography/outline.mjs +47 -0
- package/skills/readme-studio/templates/typography/package-lock.json +133 -0
- package/skills/readme-studio/templates/typography/package.json +1 -0
- package/tools/check-pack-payload.mjs +34 -2
- package/tools/payload-substance-parity.json +4 -3
- 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.
|
|
2
|
-
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
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
|
-
|
|
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
|
-
>
|
|
14
|
-
>
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
10
|
+
▄▄▄▄
|
|
11
|
+
▗███▌ ▗██████▖
|
|
12
|
+
▗▄▄▄▄▄ ▗▟████▌ ▝██████▘
|
|
13
|
+
▐█████ ▗▟██████▌ ▝▀▜█▀▘
|
|
14
|
+
▐█████ ▗▟███████▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
|
|
15
|
+
▐█████ ▗▟█████████████████████████ ▐█▀
|
|
16
|
+
▐█████ ████████████████████████████▀
|
|
17
|
+
▐█████ ██▛▘ ▄ ▄▄▄▄▖▄▄▄▄▄▄▄▄▄▄▄▄▄▖
|
|
18
|
+
▐█████ ▀ ▄██ ████▌█████████████▌
|
|
19
|
+
▐█████ ▄████ ████▌█████████████▌
|
|
20
|
+
▐█████ ▄█████▛ litopencode
|
|
21
|
+
▐█████ ▗▟█████▀▘ ▄▄▄▄▄ ▗▖
|
|
22
|
+
▐█████ ▐█████▀ █████ ▐▛▀
|
|
23
|
+
▐█████ ▐███▀ █████
|
|
24
|
+
▐█████ ▐█▀ █████
|
|
25
|
+
▐█████ ▝ █████
|
|
26
|
+
▐█████▄▄▄▄▄▄▄▖ █████
|
|
27
|
+
▐███████████▛ █████
|
|
28
|
+
▐██████████▀ █████
|
|
52
29
|
|
|
53
|
-
|
|
54
|
-
`vendor/scientific-visualization/`. Their numbered license and provenance filenames
|
|
55
|
-
remain source-attribution records.
|
|
30
|
+
```
|
|
56
31
|
|
|
57
|
-
|
|
32
|
+
</details>
|
|
58
33
|
|
|
59
|
-
|
|
34
|
+
# LitOpenCode
|
|
60
35
|
|
|
61
|
-
|
|
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
|
-
|
|
38
|
+
**Keep the work lit.**
|
|
64
39
|
|
|
65
|
-
<p align="center"><
|
|
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
|
-
|
|
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
|
-
|
|
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> <a href="#install">Install</a> <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> <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
|
|
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.
|
|
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
|
-
|
|
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
|
-
##
|
|
107
|
+
## Key features
|
|
124
108
|
|
|
125
|
-
|
|
109
|
+
> **The spark is yours.**<br>
|
|
110
|
+
> **Bring it to your work.**
|
|
126
111
|
|
|
127
|
-
|
|
128
|
-
<summary>Copy ASCII logo</summary>
|
|
112
|
+
A bug to fix. A screen to build. A project to finish.
|
|
129
113
|
|
|
130
|
-
|
|
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
|
-
|
|
131
|
+
### Practical routes and visual cues
|
|
154
132
|
|
|
155
|
-
<
|
|
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
|
-
<
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
+
### Design production and README Studio
|
|
189
170
|
|
|
190
|
-
|
|
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
|
-
|
|
193
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
- [
|
|
242
|
-
- [
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
+

|
|
273
|
+
|
|
274
|
+
LitClaude · LitHermes · LitCodex · LitOpenCode · LitGrok.
|
|
275
|
+
Five armored machines for five independent products, each working in its own host.
|
|
247
276
|
|
|
248
|
-
|
|
249
|
-
- [Code of conduct](CODE_OF_CONDUCT.md) · [Privacy and network behavior](docs/privacy.md)
|
|
277
|
+

|
|
250
278
|
|
|
251
|
-
|
|
279
|
+
### Ignition motion
|
|
252
280
|
|
|
253
|
-
[](docs/assets/readme/ignition-film.mp4)
|
|
281
|
+
[](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
|
|
package/dist/agents/registry.js
CHANGED
|
@@ -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({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
203
|
+
function registerOpenAiProviderModels(config) {
|
|
205
204
|
const providers = config.provider ?? {};
|
|
206
205
|
const openai = providers.openai;
|
|
207
206
|
const models = openai?.models ?? {};
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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/
|
|
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
|
-
|
|
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
|
|
335
|
+
if (cleaned !== undefined && isInstallModelEffort(cleaned))
|
|
336
336
|
return cleaned;
|
|
337
|
-
throw new Error(optionName + " must be one of
|
|
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
|
|
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;
|
package/dist/cli/host-limits.js
CHANGED
|
@@ -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
|
|
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
|
|
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 =
|
|
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",
|
|
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
|
-
"
|
|
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.",
|