@litfamily/litopencode 1.0.23 β 1.0.24
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 +4 -0
- package/README-Ko-KR.md +6 -6
- package/README.md +6 -6
- package/dist/tui/mission-band.d.ts +1 -1
- package/dist/tui/mission-band.js +4 -4
- package/dist/tui/mission-text.d.ts +7 -3
- package/dist/tui/mission-text.js +32 -14
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/reference-Ko-KR.md +16 -9
- package/docs/reference.md +15 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,10 @@ are tracked separately from this product history.
|
|
|
5
5
|
|
|
6
6
|
## Unreleased
|
|
7
7
|
|
|
8
|
+
## 1.0.24 - 2026-10-14
|
|
9
|
+
|
|
10
|
+
- The LIT card, the chip beside the prompt, the sidebar panel and the home line now wear the LIT colours in every OpenCode theme: the `π₯ LIT` pill runs from pink to flame, the workflow map ramps from flame through pink to the LIT accent, the running stage and the current skills are accent pills, and warnings and the finished state use LIT amber and green. Text, panels and borders still follow your theme, and on a light theme the LIT colours deepen so they stay readable. The README pictures of the card show the new look.
|
|
11
|
+
|
|
8
12
|
## 1.0.23 - 2026-10-13
|
|
9
13
|
|
|
10
14
|
- The README demo on GitHub is a new film of one real OpenCode turn with the workflow map. A numbered label names each part as it appears: the `lit` word, the LIT IGNITED toast, the card's map skipping interview and plan to light WORK, the new test, the running tool and its time beside the map (`bash Β· 0:00` while `npm test` runs), the passing test run and the card settling to IDLE when the turn ends. It still plays without music.
|
package/README-Ko-KR.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="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.24/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/cover-motion.webp" width="100%" alt="LitFamily λͺ¨μ
컀λ²: λ€μ― λ‘λ΄ ν¨λμ΄ μ°¨λ‘λ‘ μΌμ§κ³ , LitOpenCode λ‘λ΄μ λκ³Ό ν
λλ¦¬κ° λΉλ λ€ LITFAMILYμ KEEP THE WORK LIT. λ¬Έκ΅¬κ° λ°μμ§λ μμ" /></picture></p>
|
|
2
2
|
|
|
3
3
|
# LitOpenCode
|
|
4
4
|
|
|
5
5
|
**LitOpenCodeλ OpenCodeμ© μν¬νλ‘ νλ¬κ·ΈμΈμ
λλ€. ν둬ννΈμ `lit`λ§ λΆμ΄λ©΄ κ³ννκ³ , λ§λ€κ³ , νμΈνκ³ , κΈ°λ‘κΉμ§ λ¨κ²¨μ λ€μ μΈμ
μ΄ μ΄λμ λ©μ·λμ§ λ°λ‘ μλλ€.**
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@litfamily/litopencode"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
8
|
+
<a href="https://www.npmjs.com/package/@litfamily/litopencode"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/readme/badge-version.svg" alt="1.0.24" /></a>
|
|
9
9
|
<a href="https://www.npmjs.com/package/@litfamily/litopencode"><img src="https://img.shields.io/npm/dm/@litfamily/litopencode?label=downloads&color=D7F75B" alt="μκ° npm λ€μ΄λ‘λ μ" /></a>
|
|
10
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
10
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/readme/badge-license.svg" alt="MIT λΌμ΄μ μ€" /></a>
|
|
11
11
|
<a href="https://github.com/wjgoarxiv/litopencode"><img src="https://img.shields.io/github/stars/wjgoarxiv/litopencode?style=social" alt="GitHub μ€ν" /></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
@@ -57,9 +57,9 @@ npm uninstall -g @litfamily/litopencode
|
|
|
57
57
|
## λ 보기
|
|
58
58
|
|
|
59
59
|
- [GitHubμ μ¬μ© μλ΄](https://github.com/wjgoarxiv/litopencode/blob/main/docs/guide-Ko-KR.md): μ€μΉ μ΅μ
, μλ μΈμμΈκ³, λ¬Έμ ν΄κ²°, μ κ±°
|
|
60
|
-
- [μν¬νλ‘ μμΈ μλ΄](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
61
|
-
- [λ§μ΄κ·Έλ μ΄μ
μλ΄](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
62
|
-
- [LitFamily νλΈ](https://github.com/wjgoarxiv/litfamily) Β· [MIT λΌμ΄μ μ€](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
60
|
+
- [μν¬νλ‘ μμΈ μλ΄](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/reference-Ko-KR.md) Β· [English reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/reference.md)
|
|
61
|
+
- [λ§μ΄κ·Έλ μ΄μ
μλ΄](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/migration.md) Β· [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/CHANGELOG.md) Β· [κ°μΈμ 보μ λ€νΈμν¬ λμ](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/privacy.md)
|
|
62
|
+
- [LitFamily νλΈ](https://github.com/wjgoarxiv/litfamily) Β· [MIT λΌμ΄μ μ€](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/LICENSE) Β· [ASCII κΈκΌ΄ λΌμ΄μ μ€](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/readme/JetBrainsMono-OFL.txt)
|
|
63
63
|
|
|
64
64
|
<details>
|
|
65
65
|
<summary>ASCII λ‘κ³ λ³΅μ¬</summary>
|
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="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.24/docs/assets/cover-motion-still.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitOpenCode robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
|
|
2
2
|
|
|
3
3
|
# LitOpenCode
|
|
4
4
|
|
|
5
5
|
**LitOpenCode is a workflow plugin for OpenCode. Add `lit` to a prompt and the work gets planned, built, checked and written down, so the next session knows where you stopped.**
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://www.npmjs.com/package/@litfamily/litopencode"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
8
|
+
<a href="https://www.npmjs.com/package/@litfamily/litopencode"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/readme/badge-version.svg" alt="1.0.24" /></a>
|
|
9
9
|
<a href="https://www.npmjs.com/package/@litfamily/litopencode"><img src="https://img.shields.io/npm/dm/@litfamily/litopencode?label=downloads&color=D7F75B" alt="npm downloads per month" /></a>
|
|
10
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
10
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
|
|
11
11
|
<a href="https://github.com/wjgoarxiv/litopencode"><img src="https://img.shields.io/github/stars/wjgoarxiv/litopencode?style=social" alt="GitHub stars" /></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
@@ -57,9 +57,9 @@ npm uninstall -g @litfamily/litopencode
|
|
|
57
57
|
## More
|
|
58
58
|
|
|
59
59
|
- [Guide on GitHub](https://github.com/wjgoarxiv/litopencode/blob/main/docs/guide.md): install options, automatic handoff, troubleshooting and removal.
|
|
60
|
-
- [Workflow reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
61
|
-
- [Migration notes](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
62
|
-
- [LitFamily hub](https://github.com/wjgoarxiv/litfamily) Β· [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.
|
|
60
|
+
- [Workflow reference](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/reference.md)
|
|
61
|
+
- [Migration notes](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/migration.md) Β· [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/CHANGELOG.md) Β· [Privacy and network behavior](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/privacy.md)
|
|
62
|
+
- [LitFamily hub](https://github.com/wjgoarxiv/litfamily) Β· [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/LICENSE) Β· [ASCII font license](https://cdn.jsdelivr.net/npm/@litfamily/litopencode@1.0.24/docs/assets/readme/JetBrainsMono-OFL.txt)
|
|
63
63
|
|
|
64
64
|
<details>
|
|
65
65
|
<summary>Copy ASCII logo</summary>
|
|
@@ -23,7 +23,7 @@ export type NotifyOptions = {
|
|
|
23
23
|
*/
|
|
24
24
|
export declare function readNotifyOptions(options: unknown): NotifyOptions;
|
|
25
25
|
/**
|
|
26
|
-
* The skill chips row, exactly `width` cells: bright accent pills for the current request first, then
|
|
26
|
+
* The skill chips row, exactly `width` cells: bright LIT accent pills for the current request first, then
|
|
27
27
|
* dim recent names, and `+N` for the ones that do not fit. The label goes before any chip does.
|
|
28
28
|
*/
|
|
29
29
|
export declare function skillRow(chips: readonly SkillChip[], shimmer: ChipShimmer | undefined, palette: MissionPalette, width: number): Line;
|
package/dist/tui/mission-band.js
CHANGED
|
@@ -130,7 +130,7 @@ function phaseLabel(view, frame, palette, rest) {
|
|
|
130
130
|
return { text: `β ${stepName(view.phase, view).toUpperCase()}`, fg: palette.info, bold: true };
|
|
131
131
|
}
|
|
132
132
|
function topLine(view, frame, palette, width, border, rest) {
|
|
133
|
-
const brand = [{ text: "π₯ ", fg: palette.text }, { text: "LIT", fg: shine(palette.
|
|
133
|
+
const brand = [{ text: "π₯ ", fg: palette.text }, { text: "LIT", fg: shine(palette.secondary, palette, 0.5, shimmerAt(frame), 0.6), bold: true }];
|
|
134
134
|
const name = view.active ? view.discipline : "ready";
|
|
135
135
|
const right = [phaseLabel(view, frame, palette, rest)];
|
|
136
136
|
const withName = (room) => [...brand, { text: " Β· ", fg: palette.muted }, { text: truncateCells(name, room), fg: view.active ? palette.text : palette.muted }];
|
|
@@ -237,12 +237,12 @@ function chipSegments(chip, shimmer, palette) {
|
|
|
237
237
|
return [{ text, fg: palette.muted, ...(palette.element === undefined ? {} : { bg: palette.element }) }];
|
|
238
238
|
const sweep = shimmer?.names.includes(chip.name) === true ? shimmer.sweep : -1;
|
|
239
239
|
if (sweep < 0)
|
|
240
|
-
return [{ text, fg: palette.onFill, bg: palette.
|
|
240
|
+
return [{ text, fg: palette.onFill, bg: palette.fill, bold: true }];
|
|
241
241
|
const chars = [...text];
|
|
242
|
-
return chars.map((char, index) => ({ text: char, fg: palette.onFill, bg: shine(palette.
|
|
242
|
+
return chars.map((char, index) => ({ text: char, fg: palette.onFill, bg: shine(palette.fill, palette, index / (chars.length - 1), sweep, 0.3), bold: true }));
|
|
243
243
|
}
|
|
244
244
|
/**
|
|
245
|
-
* The skill chips row, exactly `width` cells: bright accent pills for the current request first, then
|
|
245
|
+
* The skill chips row, exactly `width` cells: bright LIT accent pills for the current request first, then
|
|
246
246
|
* dim recent names, and `+N` for the ones that do not fit. The label goes before any chip does.
|
|
247
247
|
*/
|
|
248
248
|
export function skillRow(chips, shimmer, palette, width) {
|
|
@@ -25,6 +25,9 @@ export type MissionPalette = {
|
|
|
25
25
|
readonly element?: string;
|
|
26
26
|
/** What fades and tints mix toward: the panel, else the background, else a neutral for the mode. */
|
|
27
27
|
readonly mixBase: string;
|
|
28
|
+
/** The running stage's pill and the current skill chip, and that pill on a warning: bright in every mode. */
|
|
29
|
+
readonly fill: string;
|
|
30
|
+
readonly fillWarn: string;
|
|
28
31
|
/** Text drawn on a filled pill. */
|
|
29
32
|
readonly onFill: string;
|
|
30
33
|
};
|
|
@@ -34,8 +37,9 @@ export declare const panelInnerWidth: number;
|
|
|
34
37
|
/** Theme tokens arrive as RGBA objects; plain hex strings pass through. Alpha is ignored here. */
|
|
35
38
|
export declare function colorToHex(value: unknown, fallback: string): string;
|
|
36
39
|
/**
|
|
37
|
-
* Builds the palette from `api.theme.current
|
|
38
|
-
*
|
|
40
|
+
* Builds the palette from `api.theme.current`: the LIT signature colours for the brand, the map ramp,
|
|
41
|
+
* the pills, the bar and the state colours, over the theme's text, muted text, fills and borders.
|
|
42
|
+
* A surface token with alpha 0 (the system and lucent-orng themes) means "draw no background", never black.
|
|
39
43
|
*/
|
|
40
44
|
export declare function paletteFromTheme(theme: Record<string, unknown> | undefined, mode?: "dark" | "light"): MissionPalette;
|
|
41
45
|
/**
|
|
@@ -62,7 +66,7 @@ export declare function shimmerAt(frame: MotionFrame): number;
|
|
|
62
66
|
* primary-to-accent gradient. The empty track is a thin muted rule, never a dither.
|
|
63
67
|
*/
|
|
64
68
|
export declare function progressBar(ratio: number, cells: number, palette: MissionPalette, sweep?: number): Segment[];
|
|
65
|
-
/** The stage colour ramp:
|
|
69
|
+
/** The stage colour ramp: LIT flame through pink to the LIT accent. */
|
|
66
70
|
export declare function stageColor(index: number, count: number, palette: MissionPalette): string;
|
|
67
71
|
/** A light pass over the running stage: once when the map moves forward, and during the completion moment. */
|
|
68
72
|
export declare function stageFlash(frame: MotionFrame): number;
|
package/dist/tui/mission-text.js
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
// renders as spans. Every frame of motion is drawn from a MotionFrame, so all of it is testable here.
|
|
4
4
|
import { ease, mixHex, rowEntryStart, seg, slideIn, motionTiming } from "./mission-motion.js";
|
|
5
5
|
import { currentStepIndex, missionRowKeys, missionStatus, stepName } from "./mission-model.js";
|
|
6
|
+
/**
|
|
7
|
+
* The LIT signature colours. Dark themes use them as they are; light themes deepen the colours drawn
|
|
8
|
+
* as text within the same hue so words stay readable, while pill fills keep the bright signature with
|
|
9
|
+
* dark ink in both modes.
|
|
10
|
+
*/
|
|
11
|
+
const litColors = {
|
|
12
|
+
dark: { flame: "#ff6337", pink: "#ff2d95", accent: "#5fd7ff", green: "#6bdb8f", amber: "#ffaf3c", red: "#ff5f5f" },
|
|
13
|
+
light: { flame: "#e2521f", pink: "#d81b78", accent: "#0a87b8", green: "#1f9d55", amber: "#b86e00", red: "#d93a3a" },
|
|
14
|
+
ink: "#0b0f14"
|
|
15
|
+
};
|
|
6
16
|
/** Panel box width in cells, and the content width inside its border and one cell of padding per side. */
|
|
7
17
|
export const panelWidth = 36;
|
|
8
18
|
export const panelInnerWidth = panelWidth - 4;
|
|
@@ -34,8 +44,9 @@ export function colorToHex(value, fallback) {
|
|
|
34
44
|
return readColor(value)?.hex ?? fallback;
|
|
35
45
|
}
|
|
36
46
|
/**
|
|
37
|
-
* Builds the palette from `api.theme.current
|
|
38
|
-
*
|
|
47
|
+
* Builds the palette from `api.theme.current`: the LIT signature colours for the brand, the map ramp,
|
|
48
|
+
* the pills, the bar and the state colours, over the theme's text, muted text, fills and borders.
|
|
49
|
+
* A surface token with alpha 0 (the system and lucent-orng themes) means "draw no background", never black.
|
|
39
50
|
*/
|
|
40
51
|
export function paletteFromTheme(theme, mode = "dark") {
|
|
41
52
|
const pick = (key, fallback) => colorToHex(theme?.[key], fallback);
|
|
@@ -47,14 +58,15 @@ export function paletteFromTheme(theme, mode = "dark") {
|
|
|
47
58
|
const panel = surface("backgroundPanel");
|
|
48
59
|
const element = surface("backgroundElement");
|
|
49
60
|
const neutral = mode === "light" ? "#f2f2f2" : "#1c1c1c";
|
|
61
|
+
const lit = litColors[mode];
|
|
50
62
|
return {
|
|
51
|
-
primary:
|
|
52
|
-
secondary:
|
|
53
|
-
accent:
|
|
54
|
-
info:
|
|
55
|
-
warning:
|
|
56
|
-
success:
|
|
57
|
-
error:
|
|
63
|
+
primary: lit.flame,
|
|
64
|
+
secondary: lit.pink,
|
|
65
|
+
accent: lit.accent,
|
|
66
|
+
info: lit.accent,
|
|
67
|
+
warning: lit.amber,
|
|
68
|
+
success: lit.green,
|
|
69
|
+
error: lit.red,
|
|
58
70
|
text: pick("text", "#e6edf3"),
|
|
59
71
|
muted: pick("textMuted", "#7d8590"),
|
|
60
72
|
borderActive: pick("borderActive", "#484f58"),
|
|
@@ -63,7 +75,9 @@ export function paletteFromTheme(theme, mode = "dark") {
|
|
|
63
75
|
...(panel === undefined ? {} : { panel }),
|
|
64
76
|
...(element === undefined ? {} : { element }),
|
|
65
77
|
mixBase: panel ?? background ?? neutral,
|
|
66
|
-
|
|
78
|
+
fill: litColors.dark.accent,
|
|
79
|
+
fillWarn: litColors.dark.amber,
|
|
80
|
+
onFill: litColors.ink
|
|
67
81
|
};
|
|
68
82
|
}
|
|
69
83
|
/**
|
|
@@ -183,7 +197,7 @@ export function progressBar(ratio, cells, palette, sweep = -1) {
|
|
|
183
197
|
segments.push({ text: "β".repeat(cells - used), fg: palette.borderSubtle });
|
|
184
198
|
return segments;
|
|
185
199
|
}
|
|
186
|
-
/** The stage colour ramp:
|
|
200
|
+
/** The stage colour ramp: LIT flame through pink to the LIT accent. */
|
|
187
201
|
export function stageColor(index, count, palette) {
|
|
188
202
|
return gradientAt([palette.primary, palette.secondary, palette.accent], count <= 1 ? 0 : index / (count - 1));
|
|
189
203
|
}
|
|
@@ -218,7 +232,7 @@ function pillStyle(state, palette, warn) {
|
|
|
218
232
|
if (state === "todo" || state === "skip")
|
|
219
233
|
return { fg: palette.muted, ...(palette.panel === undefined ? {} : { bg: palette.panel }), bold: false };
|
|
220
234
|
const level = state === "warn" ? Math.max(warn, 0.5) : warn;
|
|
221
|
-
return { fg: palette.onFill, bg: mixHex(palette.
|
|
235
|
+
return { fg: palette.onFill, bg: mixHex(palette.fill, palette.fillWarn, level), bold: true };
|
|
222
236
|
}
|
|
223
237
|
/** A light pass over the running stage: once when the map moves forward, and during the completion moment. */
|
|
224
238
|
export function stageFlash(frame) {
|
|
@@ -265,7 +279,7 @@ export function crumb(view, index, frame, palette, bar, flash = -1) {
|
|
|
265
279
|
const chars = [...label];
|
|
266
280
|
const pill = flash < 0
|
|
267
281
|
? [{ text: label, fg: style.fg, ...(style.bg === undefined ? {} : { bg: style.bg }), bold: style.bold }]
|
|
268
|
-
: chars.map((char, position) => ({ text: char, fg: style.fg, bg: shine(style.bg ?? palette.
|
|
282
|
+
: chars.map((char, position) => ({ text: char, fg: style.fg, bg: shine(style.bg ?? palette.fill, palette, position / (chars.length - 1), flash, 0.3), bold: true }));
|
|
269
283
|
if (!counted)
|
|
270
284
|
return pill;
|
|
271
285
|
return [...pill, ...(bar > 0 ? [{ text: " ", fg: palette.muted }, ...microBar(frame.barRatio, palette, bar)] : []), { text: ` ${countText(view)}`, fg: palette.text, bold: true }];
|
|
@@ -292,9 +306,13 @@ export function liveSegments(view, frame, palette, room) {
|
|
|
292
306
|
{ text: time, fg: palette.muted }
|
|
293
307
|
];
|
|
294
308
|
}
|
|
309
|
+
/** The `π₯ LIT` pill: LIT pink to flame across its cells with dark ink, bright on light themes too. */
|
|
295
310
|
function brandPill(palette, sweep) {
|
|
296
311
|
const chars = [" ", "π₯", " ", "L", "I", "T", " "];
|
|
297
|
-
return chars.map((char, index) =>
|
|
312
|
+
return chars.map((char, index) => {
|
|
313
|
+
const position = index / (chars.length - 1);
|
|
314
|
+
return { text: char, fg: palette.onFill, bg: shine(mixHex(litColors.dark.pink, litColors.dark.flame, position), palette, position, sweep, 0.3), bold: true };
|
|
315
|
+
});
|
|
298
316
|
}
|
|
299
317
|
/**
|
|
300
318
|
* The chip's groups for a tier. The full tier is the brand and the breadcrumb around the running stage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="release: 1.0.
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="release: 1.0.24"><title>release: 1.0.24</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="390" transform="scale(.1)">release</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.24</text></g></svg>
|
package/docs/reference-Ko-KR.md
CHANGED
|
@@ -269,8 +269,8 @@ OpenCode 1.18μ `tui.json`μ΄λ `tui.jsonc`μ `plugin` λ°°μ΄μ μ ν TUI
|
|
|
269
269
|
λ¨κ³λ₯Ό 건λλ΄ κ²μΌλ‘ λ³΄μ¬ μ£Όκ³ , νλ€κ³ νμνμ§ μμ΅λλ€. `review-work` μμ΄ ν μΌλ§ λͺ¨λ λλ΄λ
|
|
270
270
|
reviewλ `β`λ‘ λ¨μ΅λλ€. 리뷰 λͺ
λ Ή, 리뷰 λ§ν, ledger CLIλ‘ λλΈ λͺ©ν(μλ£ κ΄λ¬Έμ΄ 리뷰λ₯Ό ν¬ν¨ν¨)κ° μμ΄μΌ
|
|
271
271
|
μλ£λ‘ λ°λλλ€. μμ΄μ νΈκ° μ§μ μ΄ `goals.json`μμ λλ¬λ€κ³ νμν λͺ©νλ κ΄λ¬Έμ κ±°μΉμ§ μμμΌλ―λ‘
|
|
272
|
-
reviewλ₯Ό `β`λ‘ λ‘λλ€. μ§λμ¨ λ¨κ³λ
|
|
273
|
-
|
|
272
|
+
reviewλ₯Ό `β`λ‘ λ‘λλ€. μ§λμ¨ λ¨κ³λ LIT λΆκ½μμμ
|
|
273
|
+
λΆνμμ κ±°μ³ LIT accentλ‘ κ°λ μμ μ°¨λ‘λ‘ λ°κ³ , μμΌλ‘ ν λ¨κ³λ νλ¦¬κ² κ·Έλ¦½λλ€.
|
|
274
274
|
- μ
λ ₯μ°½ μλ agent/model μ€ μ€λ₯Έμͺ½μ μ§λ μΉ©: `π₯ LIT` μμ½ λ€μ μ§κΈ λ¨κ³ μλ€λ₯Ό μ΄μ΄ μ΄
|
|
275
275
|
`plan β βΊ WORK β°β°β°β±β±β±β± 3/7 βΊ review`κ° λΆμ΅λλ€. μ§κΈ λ¨κ³λ μ±μ΄ μμ½κ³Ό μΌκ³± μΉΈ λ§λλ‘ λ³΄μ
λλ€.
|
|
276
276
|
μλ¦¬κ° λλνλ©΄ μ§κΈ νλ μΌ(`β Ή bash Β· 0:48`)μ΄ λ€λ°λ¦
λλ€. μλ¦¬κ° μ’μΌλ©΄ μ§κΈ νλ μΌμ λ¨Όμ λΉΌκ³ ,
|
|
@@ -278,8 +278,8 @@ OpenCode 1.18μ `tui.json`μ΄λ `tui.jsonc`μ `plugin` λ°°μ΄μ μ ν TUI
|
|
|
278
278
|
κ°μλ§ λ¨κΉλλ€. μ리λ OpenCodeμ μ μ₯λ μ¬μ΄λλ° μ€μ κ³Ό μΈμ
μ’
λ₯(νμ μΈμ
μλ μ¬μ΄λλ°κ°
|
|
279
279
|
μμ)λ‘ κ³μ°ν©λλ€. μ€μ μ μμ§ μ½μ μ μμΌλ©΄ μ¬μ΄λλ°κ° μ΄λ € μλ€κ³ λ³΄κ³ μ’κ² μ‘μ΅λλ€.
|
|
280
280
|
- μΈμ
μ¬μ΄λλ° λ§¨ μμ λ―Έμ
ν¨λ: 36μΉΈμ§λ¦¬ λ₯κ·Ό μμμ΄κ³ , μ ν
λ리μ `π₯ LIT βΈ <λ¨κ³>`, μλ
|
|
281
|
-
ν
λ리μ `n/m criteria`κ° λΆμ΅λλ€. ν
λ리 μμ΄ μνλ₯Ό λ³΄μ¬ μ€λλ€. μΌνλ μ€μλ
|
|
282
|
-
κ²½κ³ κ° μμΌλ©΄
|
|
281
|
+
ν
λ리μ `n/m criteria`κ° λΆμ΅λλ€. ν
λ리 μμ΄ μνλ₯Ό λ³΄μ¬ μ€λλ€. μΌνλ μ€μλ LIT accent,
|
|
282
|
+
κ²½κ³ κ° μμΌλ©΄ LIT νΈλ°μ, λλλ©΄ LIT μ΄λ‘μμ
λλ€. μμλ λ μ€μ§λ¦¬ `LIT`κ³Ό κ·Έ μμ μμ
μ΄λ¦Β·μν,
|
|
283
283
|
κ΅΅μ λͺ©ν μ λͺ©, μΈλ‘ λ¨κ³ μ§λκ° λ€μ΄κ°λλ€. μ§λμμ μ§λ λ¨κ³λ `β`, μ§κΈ λ¨κ³λ κ΅΅μ `β`,
|
|
284
284
|
κ²½κ³ κ° κ±Έλ¦° λ¨κ³λ `β`, λ¨μ λ¨κ³λ `β`μ
λλ€. μ§κΈ λ¨κ³κΉμ§λ λ¨κ³ μμ `β`λ‘, κ·Έ λ€λ‘λ μ μ
|
|
285
285
|
`β`λ‘ μκ³ , plan μμλ μ μ₯λ κ³νμ ν μΌ μ, work μμλ `iter k`λ₯Ό μ μ΅λλ€. κ·Έ μλλ‘ 1/8μΉΈ
|
|
@@ -298,7 +298,7 @@ OpenCode 1.18μ `tui.json`μ΄λ `tui.jsonc`μ `plugin` λ°°μ΄μ μ ν TUI
|
|
|
298
298
|
μΌκ³Ό `βΈ λ€μ μΌ` μ리μ `β <λ΄μ©>`μ΄ λ€μ΄κ°λλ€. μ¬λ μΈμ
μμλ νλ¦° μ§λ μμ νλ‘μ νΈμ
|
|
299
299
|
λ§μ§λ§ λͺ©νλ₯Ό, λͺ©νκ° μμΌλ©΄ `add lit to a prompt to start`λ₯Ό λ³΄μ¬ μ€λλ€.
|
|
300
300
|
- λμ§Έ μ€μ μ€ν¬ μΉ©μ
λλ€. μΈμ
μμ μ€νλ LitOpenCode μ€ν¬μ΄ μ¬λ¬ κ° ν¨κ» 보μ
λλ€. μ§κΈ μμ²μμ
|
|
301
|
-
μ€νλ μ€ν¬μ μμ²μ΄ λλ λμ accent μ μμ½μΌλ‘ λ°κ² 보μ΄κ³ , μλ‘ λ€μ΄μ¨ μΉ©μλ λΉμ΄ μ§§κ² ν λ²
|
|
301
|
+
μ€νλ μ€ν¬μ μμ²μ΄ λλ λμ LIT accent μ μμ½μΌλ‘ λ°κ² 보μ΄κ³ , μλ‘ λ€μ΄μ¨ μΉ©μλ λΉμ΄ μ§§κ² ν λ²
|
|
302
302
|
μ§λκ°λλ€. ν΄μ΄ λλλ©΄ νλ €μ Έ μ΅κ·Ό λͺ©λ‘μΌλ‘ λ¨κ³ (μ΅κ·Ό κ²μ΄ μ), λ€μ μ€νλλ©΄ λ€μ λ°μμ§λλ€.
|
|
303
303
|
μλ¦¬κ° λͺ¨μλΌλ©΄ λ¨μ μΉ©μ `+N`μΌλ‘ μ μ΅λλ€.
|
|
304
304
|
- μλ ν
λ리μλ context μ¬μ©λ(75%λΆν° μ£Όν©), 첫 lit ν΄λΆν° μ§λ μκ°(`β³ 7m`), git λΈλμΉκ°
|
|
@@ -310,8 +310,8 @@ OpenCode 1.18μ `tui.json`μ΄λ `tui.jsonc`μ `plugin` λ°°μ΄μ μ ν TUI
|
|
|
310
310
|
λκΈ°μ§λ μμ΅λλ€. μλ£ μκ°λ μ¬κΈ°μ ν¨κ» 보μ
λλ€.
|
|
311
311
|
- ν νλ©΄ μ
λ ₯μ°½ μλ, OpenCode ν λ€μ μ€: `π₯ lit ready Β· last: <λͺ©ν> β n/m`. νλ‘μ νΈ ledgerμ
|
|
312
312
|
λͺ©νκ° μμ λλ§ λ³΄μ
λλ€.
|
|
313
|
-
- κ²½κ³ λ μλ§ λ°κΎΈμ§ μκ³ λ `β`μ κΈμλ₯Ό ν¨κ» λΆμ
λλ€.
|
|
314
|
-
|
|
313
|
+
- κ²½κ³ λ μλ§ λ°κΎΈμ§ μκ³ λ `β`μ κΈμλ₯Ό ν¨κ» λΆμ
λλ€. μμ΄ μμ΄λ λκ°μ΄ μ½νκ² νλ €λ
|
|
314
|
+
κ²μ
λλ€. μνκ° 0μΈ ν
λ§ λ°ν(system, lucent-orng)μ κ²κ² μΉ νμ§ μκ³ λΉμ λ‘λλ€.
|
|
315
315
|
- κ΄λ¬Έ μ¬κ±΄λ§λ€ ν μ€νΈ νλ: κ³ν μ μ₯ λλ μ μ₯ μ€ν¨, λͺ©ν μ€μ , κΈ°μ€ ν΅κ³Ό, 리뷰 λ§νκ³Ό ν΄κ²°, μλ£.
|
|
316
316
|
ν λ²μ μ¬λ¬ μ¬κ±΄μ΄ μκΈ°λ©΄ κ°μ₯ κΈν κ² νλλ‘ ν©μΉ©λλ€.
|
|
317
317
|
- λͺ©νκ° λλκ±°λ, ν μΌμ΄ λͺ¨λ λλκ±°λ, μ‘°μ¬ μ€νμ΄ λ³΄κ³ μλ₯Ό μ°λ©΄ 1.2μ΄ μμ λλλ μλ£ μκ°μ
|
|
@@ -361,8 +361,15 @@ ease-out-backμΌλ‘ 160msμ©, 60ms κ°κ²©μΌλ‘ λ€μ΄μ€κ³ , λ§λλ 300msμ
|
|
|
361
361
|
ν λ² λΉλ©λλ€. κ³μ λλ μμ§μμ μμ΅λλ€. μ§κΈ νλ μΌμ λ―Έλλ¬μ Έ λ€μ΄μ€μ§ μκ³ μ μ리μμ
|
|
362
362
|
λ°λλ©°, λκ΅¬κ° λλ λμμλ§ κ±Έλ¦° μκ°μ΄ 1μ΄μ ν λ² λ°λλλ€. λλ λκ΅¬κ° μμΌλ©΄ νμ΄λ¨Έλ
|
|
363
363
|
μμ΅λλ€. lit μΈμ
μ΄ μ΄λ € μλ λμλ§ 2μ΄λ§λ€ λͺ©ν ledger, λ²μ μμ
κΈ°λ‘, μ‘°μ¬ ν΄λλ₯Ό λ€μ μ½κ³ ,
|
|
364
|
-
μ¬λ μΈμ
μ μ½μ§ μμ΅λλ€.
|
|
365
|
-
|
|
364
|
+
μ¬λ μΈμ
μ μ½μ§ μμ΅λλ€.
|
|
365
|
+
|
|
366
|
+
LIT λΆλΆμ μ΄λ€ ν
λ§μμλ LIT μμ μλλ€. `π₯ LIT` μμ½μ λΆν(`#ff2d95`)μμ λΆκ½μ(`#ff6337`)μΌλ‘
|
|
367
|
+
λμ΄κ°κ³ , λ¨κ³ μμ λΆκ½μ, λΆν, LIT accent(`#5fd7ff`) μμλ‘ μ΄μ΄μ§λλ€. μ§κΈ λ¨κ³μ μ§κΈ μμ²μ
|
|
368
|
+
μ€ν¬ μΉ©μ accent μμ½μ΄κ³ , λ§λλ λΆκ½μμμ accentλ‘ κ°λ©°, μν μμ LIT νΈλ°μ(`#ffaf3c`),
|
|
369
|
+
μ΄λ‘μ(`#6bdb8f`), λΉ¨κ°μ(`#ff5f5f`)μ
λλ€. μμ½ κΈμλ λ μ΄λμ΄ μ(`#0b0f14`)μ
λλ€. κΈμ, νλ¦° κΈμ, ν¨λκ³Ό
|
|
370
|
+
μμ λ°ν, ν
λ리, ν¬λͺ
ν λ°νμ μ§κΈ OpenCode ν
λ§μμ κ°μ Έμ΅λλ€. λ°μ ν
λ§μμλ μμ½ λ°νμ
|
|
371
|
+
λ°κ² κ·Έλλ‘ λκ³ , κΈμλ‘ μ°λ LIT μλ§ κ°μ μμ‘° μμμ μ§νκ² λ°κΏ(λΆκ½μ `#e2521f`, λΆν
|
|
372
|
+
`#d81b78`, accent `#0a87b8`, μ΄λ‘ `#1f9d55`, νΈλ°μ `#b86e00`, λΉ¨κ° `#d93a3a`) ν° λ°νμμλ μ½νκ² ν©λλ€. μμ§μμ λλ €λ©΄ `tui.json`μ `["@litfamily/litopencode@<version>", { "motion": false }]`
|
|
366
373
|
μ²λΌ μ κ³ , νλ¬κ·ΈμΈ μ체λ₯Ό λλ €λ©΄ OpenCode νλ¬κ·ΈμΈ κ΄λ¦¬μλ `plugin_enabled`μμ id `litopencode`λ₯Ό λλλ€.
|
|
367
374
|
|
|
368
375
|
λ μ€μ λ κ°μ μ΅μ
κ°μ²΄μ μ μ΅λλ€.
|
package/docs/reference.md
CHANGED
|
@@ -372,7 +372,7 @@ What it draws:
|
|
|
372
372
|
at `β`. A review command, a review blocker or a goal completed through the ledger CLI (whose gate
|
|
373
373
|
includes review) marks it done; a goal the agent marks complete in a hand-written `goals.json`
|
|
374
374
|
passed no gate and leaves review at `β`. Stages behind the running one take their place on a colour
|
|
375
|
-
ramp from
|
|
375
|
+
ramp from LIT flame through pink to the LIT accent; stages ahead are muted.
|
|
376
376
|
- A map chip on the right of the prompt's agent/model row: a `π₯ LIT` pill and the breadcrumb around
|
|
377
377
|
the running stage, `plan β βΊ WORK β°β°β°β±β±β±β± 3/7 βΊ review`, with the running stage as a filled pill and a
|
|
378
378
|
seven-cell bar. When the row has room the live step follows (`β Ή bash Β· 0:48`). Narrower, it drops
|
|
@@ -382,7 +382,7 @@ What it draws:
|
|
|
382
382
|
read yet, the chip assumes the sidebar is open and stays narrower.
|
|
383
383
|
- A mission panel at the top of the session sidebar, in a 36-cell rounded box titled
|
|
384
384
|
`π₯ LIT βΈ <STAGE>` with `n/m criteria` in the bottom border. The border carries the state: the
|
|
385
|
-
|
|
385
|
+
LIT accent while working, LIT amber on a warning, LIT green when complete.
|
|
386
386
|
Inside: a two-row `LIT` with the discipline and a status beside it, the goal title in bold, the
|
|
387
387
|
vertical stage map (`β` behind, `β` running in bold, `β` flagged, `β` ahead, joined by `β`
|
|
388
388
|
connectors in the ramp colour up to the running stage and dotted `β` after it, with the saved
|
|
@@ -405,7 +405,7 @@ What it draws:
|
|
|
405
405
|
warning is open, `β <text>` takes the place of the live step and `βΈ next`. An idle session shows
|
|
406
406
|
the dim map with the project's last goal, or `add lit to a prompt to start`;
|
|
407
407
|
- row two holds the skill chips: every LitOpenCode skill that fired in the session, several at
|
|
408
|
-
once. Skills fired by the current request are bright accent pills while it runs, and a new one
|
|
408
|
+
once. Skills fired by the current request are bright LIT accent pills while it runs, and a new one
|
|
409
409
|
gets a short light sweep as it arrives; when the turn ends they dim and stay as the recent list,
|
|
410
410
|
newest first, and firing one again brightens it. Chips that do not fit collapse into `+N`;
|
|
411
411
|
- the bottom border holds the context use (amber from 75%), the time since the first lit turn
|
|
@@ -417,8 +417,8 @@ What it draws:
|
|
|
417
417
|
then the time, then the context use. It never wraps. The completion moment plays here too.
|
|
418
418
|
- A line under the home prompt, after OpenCode's tips: `π₯ lit ready Β· last: <goal> β n/m`. It
|
|
419
419
|
appears only when the project ledger holds a goal.
|
|
420
|
-
- Warnings always carry `β` and words, not colour alone,
|
|
421
|
-
|
|
420
|
+
- Warnings always carry `β` and words, not colour alone, so they read the same without colour.
|
|
421
|
+
Theme surfaces with alpha 0 (the system and lucent-orng themes) are left
|
|
422
422
|
unfilled rather than painted black.
|
|
423
423
|
- One toast per refresh for a gate event: plan saved or not saved, goal set, criterion passed,
|
|
424
424
|
review blocker opened or resolved, and completion. Several events at once collapse into the most
|
|
@@ -475,8 +475,16 @@ apart and the running pill flashes once; nothing loops. The live step changes in
|
|
|
475
475
|
slide-in, and while a tool runs its elapsed time ticks once a second; with no tool running there is
|
|
476
476
|
no timer at all. While a lit session is open the panel re-reads the goal ledger, the bounded work
|
|
477
477
|
record and the research folder every two seconds; an idle session does not.
|
|
478
|
-
|
|
479
|
-
|
|
478
|
+
|
|
479
|
+
The LIT parts wear the LIT colours in every theme: the `π₯ LIT` pill runs from pink (`#ff2d95`) to
|
|
480
|
+
flame (`#ff6337`), the stage ramp runs flame, pink, then the LIT accent (`#5fd7ff`), the running stage
|
|
481
|
+
and the current skill chips are accent pills, the bar runs flame to accent, and the state colours are
|
|
482
|
+
LIT amber (`#ffaf3c`), green (`#6bdb8f`) and red (`#ff5f5f`). Pills always use dark ink (`#0b0f14`). Text, muted
|
|
483
|
+
text, the panel and element fills, the borders and transparent surfaces still come from the active
|
|
484
|
+
OpenCode theme. On a light theme the pill fills stay bright, and the LIT colours drawn as text
|
|
485
|
+
deepen within the same hue (flame `#e2521f`, pink `#d81b78`, accent `#0a87b8`, green `#1f9d55`, amber
|
|
486
|
+
`#b86e00`, red `#d93a3a`) so they stay readable on a white background. Set
|
|
487
|
+
`["@litfamily/litopencode@<version>", { "motion": false }]` in `tui.json` to turn the motion off, or turn the plugin off by id `litopencode` in OpenCode's plugin
|
|
480
488
|
manager or with `plugin_enabled`.
|
|
481
489
|
|
|
482
490
|
Band options go in the same options object:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@litfamily/litopencode",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "Workflow plugin for OpenCode: add lit to a prompt and the work is planned, built, checked and written down so the next session can pick it up.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opencode",
|