@litfamily/litgrok 1.0.15 → 1.0.16
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/.grok/skills/lit-docx/references/tonalities/proposal.md +0 -1
- package/.grok/skills/lit-docx/scripts/docx_design.py +1 -1
- package/.grok/skills/lit-docx/templates/tonalities/brief.yaml +0 -1
- package/.grok/skills/lit-docx/templates/tonalities/journal.yaml +0 -1
- package/.grok/skills/lit-docx/templates/tonalities/manual.yaml +0 -1
- package/.grok/skills/lit-docx/templates/tonalities/memo.yaml +0 -1
- package/.grok/skills/lit-docx/templates/tonalities/proposal.yaml +0 -1
- package/.grok/skills/lit-docx/templates/tonalities/report.yaml +0 -1
- package/.grok/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
- package/.grok/skills/lit-pptx/references/tonalities/atlas.md +2 -5
- package/.grok/skills/lit-pptx/references/tonalities/chalk.md +1 -3
- package/.grok/skills/lit-pptx/references/tonalities/gazette.md +1 -3
- package/.grok/skills/lit-pptx/references/tonalities/ledger.md +4 -6
- package/.grok/skills/lit-pptx/references/tonalities/night.md +3 -6
- package/.grok/skills/lit-pptx/references/tonalities/paper.md +3 -5
- package/.grok/skills/lit-pptx/references/tonalities/signal.md +3 -5
- package/.grok/skills/lit-pptx/references/tonalities/studio.md +3 -5
- package/.grok/skills/lit-pptx/scripts/lib/template-registry.js +3 -4
- package/.grok/skills/lit-pptx/scripts/validate_pptx.py +9 -4
- package/.grok/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -20
- package/.grok/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -19
- package/.grok/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -20
- package/.grok/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -22
- package/.grok/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -20
- package/.grok/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -20
- package/.grok/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -21
- package/.grok/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -20
- package/.grok-plugin/plugin.json +1 -1
- package/CHANGELOG.md +6 -0
- package/README.md +8 -8
- package/README_ko-KR.md +8 -8
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/reference.md +1 -1
- package/docs/reference_ko-KR.md +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
|
@@ -42,7 +42,6 @@ Worked examples: `examples/04-proposal-ko.md` (cover and 3 body pages) and `exam
|
|
|
42
42
|
| Accent on | title rule, callout rules |
|
|
43
43
|
| Components | keyfigures (3 per row), callout (at most one), columns |
|
|
44
44
|
| Figures | at most 0.60 of the frame high |
|
|
45
|
-
| Fill target | median 0.75 |
|
|
46
45
|
|
|
47
46
|
## Components
|
|
48
47
|
|
|
@@ -59,7 +59,7 @@ LABELS = {
|
|
|
59
59
|
}
|
|
60
60
|
PACK_KEYS = {"schema_version", "tonality", "summary", "dials", "docx", "design"}
|
|
61
61
|
DESIGN_KEYS = {"ramp", "numbering", "h1_rule", "title_block", "contents", "summary_form", "conclusion_first", "running_head", "justify",
|
|
62
|
-
"palette", "accent_on", "page_geometry", "components", "figure_style", "
|
|
62
|
+
"palette", "accent_on", "page_geometry", "components", "figure_style", "spacing"}
|
|
63
63
|
ACCENT_PLACES = ("title_rule", "callout_rule", "sidebar_rule")
|
|
64
64
|
DIRECTIVE_KEYS = {
|
|
65
65
|
"cover": {"variant", "image", "kicker"},
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"case_insensitive": true,
|
|
3
|
+
"whole_word": false,
|
|
4
|
+
"terms": [
|
|
5
|
+
"click to add title",
|
|
6
|
+
"click to add subtitle",
|
|
7
|
+
"click to add text",
|
|
8
|
+
"content goes here",
|
|
9
|
+
"your logo",
|
|
10
|
+
"placeholder",
|
|
11
|
+
"lorem ipsum",
|
|
12
|
+
"tbd",
|
|
13
|
+
"fixme",
|
|
14
|
+
"todo",
|
|
15
|
+
"본 슬라이드는",
|
|
16
|
+
"슬라이드 7은",
|
|
17
|
+
"최종본에서 걸러냈다",
|
|
18
|
+
"[자사 확인 필요]",
|
|
19
|
+
"[출처 확인 필요]",
|
|
20
|
+
"[작성 중]"
|
|
21
|
+
],
|
|
22
|
+
"soft_terms": [
|
|
23
|
+
"revolutionary",
|
|
24
|
+
"cutting-edge",
|
|
25
|
+
"seamless",
|
|
26
|
+
"seamlessly",
|
|
27
|
+
"innovative",
|
|
28
|
+
"world-class",
|
|
29
|
+
"best-in-class",
|
|
30
|
+
"transformative",
|
|
31
|
+
"next-generation",
|
|
32
|
+
"game-changing",
|
|
33
|
+
"state-of-the-art",
|
|
34
|
+
"AI-powered",
|
|
35
|
+
"AI-generated",
|
|
36
|
+
"as an AI",
|
|
37
|
+
"unlock",
|
|
38
|
+
"empower",
|
|
39
|
+
"synergy",
|
|
40
|
+
"holistic",
|
|
41
|
+
"paradigm shift",
|
|
42
|
+
"frictionless",
|
|
43
|
+
"없다는 것이 발견",
|
|
44
|
+
"판이 굳었다",
|
|
45
|
+
"전제로 깐다",
|
|
46
|
+
"닫아야 할 게이트",
|
|
47
|
+
"역전 금지",
|
|
48
|
+
"논문이 없다",
|
|
49
|
+
"RAM",
|
|
50
|
+
"FTO",
|
|
51
|
+
"CNKI",
|
|
52
|
+
"코퍼스",
|
|
53
|
+
"전이원"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -19,18 +19,15 @@ for a read-alone briefing.
|
|
|
19
19
|
| ink / ink-muted / line | `#1A1D21` / `#555B63` / `#D6D9DD` |
|
|
20
20
|
| accent / accent-deep / accent-tint | `#2B4C7E` / `#1B2F4E` / `#E6ECF4` |
|
|
21
21
|
| field / on-field | `#1A1D21` / `#FFFFFF` |
|
|
22
|
-
| positive / negative | `#1E7A3F` / `#B3261E` |
|
|
23
22
|
| chart series | `#2B4C7E`, `#555B63`, `#8A6A2E`, `#3E7A5A` |
|
|
24
23
|
| faces | Pretendard Regular for display and figures, Bold for titles, Regular for body |
|
|
25
|
-
| figures | proportional |
|
|
26
24
|
| radius / edge | 0 / fill |
|
|
27
25
|
|
|
28
26
|
Atlas is the one pack whose display face is Regular: large cover and statement text stays light so
|
|
29
27
|
the photograph keeps the weight. Density 10, compact ramp. Variance 7 allows all five treatments.
|
|
30
28
|
|
|
31
|
-
**Pictures**
|
|
32
|
-
|
|
33
|
-
direct labels without annotation.
|
|
29
|
+
**Pictures** take no frame. **Tables** (inside KPI rows) use a light grid of row rules, no header
|
|
30
|
+
fill. **Charts**, if a figure is placed as an image, follow hairline gridlines and direct labels.
|
|
34
31
|
|
|
35
32
|
## Titles by role
|
|
36
33
|
|
|
@@ -18,16 +18,14 @@ KPI row); and for a timeline, which it cannot draw.
|
|
|
18
18
|
| ink / ink-muted / line | `#1F2933` / `#4E5A66` / `#CBD3DA` |
|
|
19
19
|
| accent / accent-deep / accent-tint | `#9A3412` / `#6B2409` / `#FCEBE0` |
|
|
20
20
|
| field / on-field | `#1F3B33` / `#FFFFFF` |
|
|
21
|
-
| positive / negative | `#1E7A3F` / `#B3261E` |
|
|
22
21
|
| chart series | `#9A3412`, `#1F3B33`, `#4E5A66`, `#2E6A8E` |
|
|
23
22
|
| faces | Pretendard Bold for titles, step numerals and display; Regular for body |
|
|
24
|
-
| figures | proportional |
|
|
25
23
|
| radius / edge | 6 pt / fill |
|
|
26
24
|
|
|
27
25
|
Density 10, compact ramp. Variance 6 allows four treatments; the pack has exactly four.
|
|
28
26
|
|
|
29
27
|
**Tables**: header row in the accent tint with deep rust labels, row rules, numbers right-aligned,
|
|
30
|
-
totals bold.
|
|
28
|
+
totals bold.
|
|
31
29
|
|
|
32
30
|
## Titles by role
|
|
33
31
|
|
|
@@ -19,10 +19,8 @@ a chart nor an image family), and for English read-alone decks, which suit Ledge
|
|
|
19
19
|
| ink / ink-muted / line | `#1A2230` / `#4A5568` / `#C8D0DA` |
|
|
20
20
|
| accent / accent-deep / accent-tint | `#A61B1B` / `#233A4F` / `#E8EEF4` |
|
|
21
21
|
| field / on-field | `#233A4F` / `#FFFFFF` |
|
|
22
|
-
| positive / negative | `#1E7A3F` / `#1A2230` |
|
|
23
22
|
| chart series | `#A61B1B`, `#233A4F`, `#4A5568`, `#7A6A2A` |
|
|
24
23
|
| faces | Pretendard Bold for titles and figures, Regular for body and labels |
|
|
25
|
-
| figures | tabular |
|
|
26
24
|
| radius / edge | 0 / fill and border |
|
|
27
25
|
|
|
28
26
|
Density 10, compact ramp. **Variance 4 allows three title treatments**, out of the four the pack
|
|
@@ -31,7 +29,7 @@ groups, two columns, a full table, a matrix, a timeline.
|
|
|
31
29
|
|
|
32
30
|
**Tables**: header in the slate field with white labels, a hairline grid on every cell, the first
|
|
33
31
|
column shaded with the surface colour, numbers right-aligned, totals bold. Pictures, if forced in,
|
|
34
|
-
sit in a hairline frame
|
|
32
|
+
sit in a hairline frame.
|
|
35
33
|
|
|
36
34
|
## Titles by role
|
|
37
35
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Ledger
|
|
2
2
|
|
|
3
3
|
Ledger is for decks that are studied line by line: quarterly results, budgets, programme status.
|
|
4
|
-
White pages, compact type,
|
|
4
|
+
White pages, compact type, tables with a dark header row, and one deep green that
|
|
5
5
|
marks the current period or the figure the slide is about. Tables and KPI rows carry the argument;
|
|
6
6
|
the title only labels it.
|
|
7
7
|
|
|
@@ -19,19 +19,17 @@ where Gazette's band heads and boxed summary serve the reader better.
|
|
|
19
19
|
| ink / ink-muted / line | `#16212C` / `#4B5866` / `#D0D6DC` |
|
|
20
20
|
| accent / accent-deep / accent-tint | `#0E6B5A` / `#0A4438` / `#E2F0EC` |
|
|
21
21
|
| field / on-field | `#0A4438` / `#FFFFFF` |
|
|
22
|
-
| positive / negative | `#1E7A3F` / `#B3261E` |
|
|
23
22
|
| chart series | `#0E6B5A`, `#4B5866`, `#9A6A12`, `#2F5F8A` |
|
|
24
23
|
| faces | Pretendard Bold for titles and figures, Regular for body and labels |
|
|
25
|
-
| figures | tabular, so columns of numbers align |
|
|
26
24
|
| radius / edge | 0 / fill |
|
|
27
25
|
|
|
28
26
|
Density 10 puts Ledger on the compact ramp (body 13 pt, labels 11, sources 9, title 26) with 24 pt
|
|
29
27
|
margins. Variance 5 allows four title treatments in a deck.
|
|
30
28
|
|
|
31
29
|
**Tables**: header row in the field colour with white labels, rules under the header and over the
|
|
32
|
-
totals, no banding, numbers right-aligned
|
|
33
|
-
gridlines, direct labels, the accent on the highlighted series and muted ink for the rest
|
|
34
|
-
|
|
30
|
+
totals, no banding, numbers right-aligned, the totals row bold. **Charts**: hairline
|
|
31
|
+
gridlines, direct labels, the accent on the highlighted series and muted ink for the rest.
|
|
32
|
+
Pictures, if ever used, sit inside a hairline frame.
|
|
35
33
|
|
|
36
34
|
## Titles by role
|
|
37
35
|
|
|
@@ -19,19 +19,16 @@ for running text.
|
|
|
19
19
|
| ink / ink-muted / line | `#E8EDF2` / `#A3AEBA` / `#5A6672` |
|
|
20
20
|
| accent / accent-deep / accent-tint | `#E3A857` / `#F2C98A` / `#2A2418` |
|
|
21
21
|
| field / on-field | `#1E2A36` / `#F5F7FA` |
|
|
22
|
-
| positive / negative | `#6CC08B` / `#F08A7E` |
|
|
23
22
|
| chart series | `#E3A857`, `#7FB8E0`, `#A3AEBA`, `#C58FD0` |
|
|
24
23
|
| faces | Pretendard Bold for titles and display, Regular for body and numerals |
|
|
25
|
-
| figures | tabular |
|
|
26
24
|
| radius / edge | 6 pt / fill |
|
|
27
25
|
|
|
28
26
|
On Night `accent-deep` is the lighter amber, because "deep" means the stronger contrast against the
|
|
29
27
|
ground. Density 10, compact ramp. Variance 6 allows four of the pack's five treatments.
|
|
30
28
|
|
|
31
|
-
**Tables** (KPI rows, closing tables): header on the surface colour, row rules, numbers right-aligned
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
dark ground at full size. Pictures bleed on one side only.
|
|
29
|
+
**Tables** (KPI rows, closing tables): header on the surface colour, row rules, numbers right-aligned,
|
|
30
|
+
totals bold; the row named in the title is tinted. **Charts**: hairline gridlines, direct labels,
|
|
31
|
+
amber on the highlighted series. Charts are native, drawn on the dark ground at full size.
|
|
35
32
|
|
|
36
33
|
## Titles by role
|
|
37
34
|
|
|
@@ -18,18 +18,16 @@ timeline or a process, none of which Paper carries.
|
|
|
18
18
|
| ink / ink-muted / line | `#111418` / `#50565E` / `#C9CDD2` |
|
|
19
19
|
| accent / accent-deep / accent-tint | `#8C1C2B` / `#5E121C` / `#F6E6E8` |
|
|
20
20
|
| field / on-field | `#111418` / `#FFFFFF` |
|
|
21
|
-
| positive / negative | `#1E6B3A` / `#50565E` |
|
|
22
21
|
| chart series | `#8C1C2B`, `#111418`, `#50565E`, `#2E5E8A` (series order, first is the proposed method) |
|
|
23
22
|
| faces | Pretendard Bold for titles and display, Regular for body and numerals |
|
|
24
|
-
| figures | tabular |
|
|
25
23
|
| radius / edge | 0 / border |
|
|
26
24
|
|
|
27
25
|
Density 10, compact ramp. Variance 5 allows four treatments, which is all Paper has.
|
|
28
26
|
|
|
29
27
|
**Tables**: booktabs (a heavy rule above the header, a light one under it, a heavy one at the foot),
|
|
30
|
-
no fills, numbers right-aligned
|
|
31
|
-
labels, colour by series order with the proposed method first
|
|
32
|
-
|
|
28
|
+
no fills, numbers right-aligned, totals bold. **Charts**: hairline gridlines, direct
|
|
29
|
+
labels, colour by series order with the proposed method first. **Pictures** take
|
|
30
|
+
no frame.
|
|
33
31
|
|
|
34
32
|
## Titles by role
|
|
35
33
|
|
|
@@ -19,18 +19,15 @@ timeline or long itemised text, none of which the pack carries.
|
|
|
19
19
|
| ink / ink-muted / line | `#15131A` / `#55525C` / `#D4D4D8` |
|
|
20
20
|
| accent / accent-deep / accent-tint | `#C8361A` / `#6E1A0C` / `#FBE7E2` |
|
|
21
21
|
| field / on-field | `#C8361A` / `#FFFFFF` |
|
|
22
|
-
| positive / negative | `#1E7A3F` / `#15131A` (a loss keeps the ink and carries its ▼) |
|
|
23
22
|
| chart series | `#C8361A`, `#15131A`, `#6B6870`, `#2F6F8F` |
|
|
24
23
|
| faces | Pretendard Bold for display, titles and figures; Regular for body and labels |
|
|
25
|
-
| figures | proportional |
|
|
26
24
|
| radius / edge | 0 / fill |
|
|
27
25
|
|
|
28
26
|
Density 10, compact ramp (title 26, display 36). Variance 6 allows four treatments; the pack has four.
|
|
29
27
|
|
|
30
|
-
**Tables**:
|
|
28
|
+
**Tables**: no header fill, a rule above and below, numbers right-aligned, totals bold;
|
|
31
29
|
the row whose first cell appears in the title is tinted red-pale as the row the slide is about.
|
|
32
|
-
**Charts**: no gridlines, direct labels, the red on the highlighted series
|
|
33
|
-
**Pictures** may bleed and crop.
|
|
30
|
+
**Charts**: no gridlines, direct labels, the red on the highlighted series.
|
|
34
31
|
|
|
35
32
|
## Titles by role
|
|
36
33
|
|
|
@@ -73,6 +70,7 @@ Decoration: colour field, hairline rules, real numerals. No cards.
|
|
|
73
70
|
- Red for losses; a loss is ink with ▼.
|
|
74
71
|
- More than two lines of display text on any slide.
|
|
75
72
|
- Cards and boxed bullet groups.
|
|
73
|
+
- Bullet lists longer than four items.
|
|
76
74
|
- A statement slide that holds a claim; claims go in the body of a content slide.
|
|
77
75
|
|
|
78
76
|
## Two worked slides
|
|
@@ -17,17 +17,15 @@ open layouts starve tables (Studio has no table family), and for read-alone brie
|
|
|
17
17
|
| ink / ink-muted / line | `#141414` / `#525252` / `#D2D2CE` |
|
|
18
18
|
| accent / accent-deep / accent-tint | `#8A5A00` / `#4D3200` / `#F5ECD9` |
|
|
19
19
|
| field / on-field | `#141414` / `#FFFFFF` |
|
|
20
|
-
| positive / negative | `#1E7A3F` / `#B3261E` |
|
|
21
20
|
| chart series | `#8A5A00`, `#141414`, `#525252`, `#3B5F7F` |
|
|
22
21
|
| faces | Pretendard Bold for titles, display and figures; Regular for body |
|
|
23
|
-
| figures | proportional |
|
|
24
22
|
| radius / edge | 0 / fill |
|
|
25
23
|
|
|
26
24
|
Density 10, compact ramp. **Variance 8 allows all five treatments**, and the engine uses them.
|
|
27
25
|
|
|
28
|
-
**Tables** (inside KPI rows and timelines):
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
**Tables** (inside KPI rows and timelines): a 2 pt rule under the header, no fills, numbers
|
|
27
|
+
right-aligned. **Charts**: no gridlines, direct labels, the ochre on the highlighted series.
|
|
28
|
+
**Pictures** take no frame.
|
|
31
29
|
|
|
32
30
|
## Titles by role
|
|
33
31
|
|
|
@@ -418,7 +418,7 @@ function listTonalities() {
|
|
|
418
418
|
return [...names].sort();
|
|
419
419
|
}
|
|
420
420
|
|
|
421
|
-
const PALETTE_ROLES = ["ground", "surface", "ink", "ink-muted", "line", "accent", "accent-deep", "accent-tint", "field", "on-field"
|
|
421
|
+
const PALETTE_ROLES = ["ground", "surface", "ink", "ink-muted", "line", "accent", "accent-deep", "accent-tint", "field", "on-field"];
|
|
422
422
|
const FACE_KEYS = ["display", "title", "body", "label", "numeral"];
|
|
423
423
|
const FACES = {
|
|
424
424
|
"Pretendard Regular": { font: "Pretendard", bold: false },
|
|
@@ -443,8 +443,7 @@ const DISPLAY_DEVICES = {
|
|
|
443
443
|
};
|
|
444
444
|
// Contrast pairs every pack must meet (text pairs 4.5:1, large marks 3:1).
|
|
445
445
|
const CONTRAST_PAIRS = [["ink", "ground", 4.5], ["ink", "surface", 4.5], ["ink-muted", "ground", 4.5], ["ink-muted", "surface", 4.5],
|
|
446
|
-
["accent", "ground", 3.0], ["accent-deep", "accent-tint", 4.5], ["ink", "accent-tint", 4.5], ["on-field", "field", 4.5]
|
|
447
|
-
["positive", "ground", 4.5], ["negative", "ground", 4.5]];
|
|
446
|
+
["accent", "ground", 3.0], ["accent-deep", "accent-tint", 4.5], ["ink", "accent-tint", 4.5], ["on-field", "field", 4.5]];
|
|
448
447
|
|
|
449
448
|
function luminance(hexColour) {
|
|
450
449
|
const v = String(hexColour).replace("#", "");
|
|
@@ -470,7 +469,7 @@ function validatePack(pack, file) {
|
|
|
470
469
|
need(typeof pack.intent === "string" && pack.intent.length > 0, "intent is missing");
|
|
471
470
|
need(isList(pack.canvas) && pack.canvas.length > 0 && pack.canvas.every((c) => grid.CANVAS[c]), "canvas must list 16:9 and/or 4:3");
|
|
472
471
|
// `faces` is the deck's default and is Pretendard only; `faces-a2z` applies when the source asks.
|
|
473
|
-
for (const key of ["faces", "faces-
|
|
472
|
+
for (const key of ["faces", "faces-a2z"]) {
|
|
474
473
|
if (key === "faces-a2z" && pack[key] == null) continue;
|
|
475
474
|
const faces = pack[key] || {};
|
|
476
475
|
for (const role of FACE_KEYS) {
|
|
@@ -52,16 +52,21 @@ def _load_terms() -> tuple[list[str], list[str], bool, bool]:
|
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def _build_regex(terms: list[str], case_insensitive: bool, whole_word: bool) -> re.Pattern[str] | None:
|
|
55
|
+
def _build_regex(terms: list[str], case_insensitive: bool, whole_word: bool, words_as_words: bool = False) -> re.Pattern[str] | None:
|
|
56
56
|
if not terms:
|
|
57
57
|
return None
|
|
58
58
|
# An acronym (RAM, FTO) is a word in capitals: matched as that word, so "diagram" or "program"
|
|
59
|
-
# does not contain it.
|
|
59
|
+
# does not contain it. In the hard list a single Latin word (todo, tbd) is matched as a word or its
|
|
60
|
+
# plural, so "TODOs" fails and "Mastodon" or "photodocument" does not. Phrases, Korean or bracketed
|
|
61
|
+
# terms and the soft list keep the file's settings.
|
|
60
62
|
acronyms = [term for term in terms if re.fullmatch(r"[A-Z]{2,5}", term)]
|
|
61
|
-
|
|
63
|
+
words = [term for term in terms if words_as_words and term not in acronyms and re.fullmatch(r"[A-Za-z]+", term)]
|
|
64
|
+
escaped = [re.escape(term) for term in terms if term not in acronyms and term not in words]
|
|
62
65
|
pattern = "|".join(escaped)
|
|
63
66
|
if whole_word and pattern:
|
|
64
67
|
pattern = rf"(?:(?<=\W)|^)(?:{pattern})(?:(?=\W)|$)"
|
|
68
|
+
if words:
|
|
69
|
+
pattern = "|".join(filter(None, [pattern, rf"(?<![A-Za-z])(?:{'|'.join(map(re.escape, words))})s?(?![A-Za-z])"]))
|
|
65
70
|
if case_insensitive and pattern:
|
|
66
71
|
pattern = f"(?i:{pattern})"
|
|
67
72
|
if acronyms:
|
|
@@ -138,7 +143,7 @@ def _slide_has_title(slide, slide_height: int | None) -> bool:
|
|
|
138
143
|
def lint(path: str | Path) -> dict[str, Any]:
|
|
139
144
|
prs = Presentation(str(path))
|
|
140
145
|
hard_terms, soft_terms, case_insensitive, whole_word = _load_terms()
|
|
141
|
-
hard_re = _build_regex(hard_terms, case_insensitive, whole_word)
|
|
146
|
+
hard_re = _build_regex(hard_terms, case_insensitive, whole_word, words_as_words=True)
|
|
142
147
|
soft_re = _build_regex(soft_terms, case_insensitive, whole_word)
|
|
143
148
|
|
|
144
149
|
missing_titles: list[int] = []
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Regular
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Regular
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Regular
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FFFFFF"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#E6ECF4"
|
|
33
27
|
field: "#1A1D21"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E7A3F"
|
|
36
|
-
negative: "#B3261E"
|
|
37
29
|
series: ["#2B4C7E", "#555B63", "#8A6A2E", "#3E7A5A"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: 0
|
|
43
35
|
display-tracking: -1
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: proportional
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 7
|
|
@@ -74,26 +64,16 @@ sections: [section-image, section-field]
|
|
|
74
64
|
closings: [closing-contact-split, closing-ask]
|
|
75
65
|
|
|
76
66
|
table:
|
|
77
|
-
style: light-grid
|
|
78
67
|
header: none
|
|
79
68
|
header-ink: ink
|
|
80
69
|
rules: rows
|
|
81
70
|
banding: none
|
|
82
|
-
numbers: right-tabular
|
|
83
71
|
totals: bold
|
|
84
72
|
chart:
|
|
85
73
|
gridlines: hairline
|
|
86
74
|
labels: direct
|
|
87
75
|
highlight: accent-on-muted
|
|
88
|
-
annotation: off
|
|
89
76
|
image:
|
|
90
|
-
bleed: allowed
|
|
91
|
-
crop: allowed
|
|
92
77
|
frame: none
|
|
93
78
|
|
|
94
79
|
fill-order: [anchor-visual, change-family, distribute, step-up]
|
|
95
|
-
avoid:
|
|
96
|
-
- text placed straight on photographs
|
|
97
|
-
- images in card frames
|
|
98
|
-
- more than three images in one row
|
|
99
|
-
- grey placeholder boxes in a delivered deck
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Bold
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Bold
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FAFBFC"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#FCEBE0"
|
|
33
27
|
field: "#1F3B33"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E7A3F"
|
|
36
|
-
negative: "#B3261E"
|
|
37
29
|
series: ["#9A3412", "#1F3B33", "#4E5A66", "#2E6A8E"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: -1
|
|
43
35
|
display-tracking: -1
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: proportional
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 6
|
|
@@ -80,25 +70,16 @@ sections: [section-numeral, section-rail]
|
|
|
80
70
|
closings: [closing-summary-list, closing-ask]
|
|
81
71
|
|
|
82
72
|
table:
|
|
83
|
-
style: header-fill
|
|
84
73
|
header: accent-tint
|
|
85
74
|
header-ink: accent-deep
|
|
86
75
|
rules: rows
|
|
87
76
|
banding: none
|
|
88
|
-
numbers: right-tabular
|
|
89
77
|
totals: bold
|
|
90
78
|
chart:
|
|
91
79
|
gridlines: hairline
|
|
92
80
|
labels: direct
|
|
93
81
|
highlight: accent-on-muted
|
|
94
|
-
annotation: on
|
|
95
82
|
image:
|
|
96
|
-
bleed: side-only
|
|
97
|
-
crop: none
|
|
98
83
|
frame: none
|
|
99
84
|
|
|
100
85
|
fill-order: [distribute, step-up, change-family, anchor-visual]
|
|
101
|
-
avoid:
|
|
102
|
-
- more than one marked term per slide
|
|
103
|
-
- numerals on points that are not a sequence
|
|
104
|
-
- definitions buried in bullets instead of the sidebar
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Bold
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Bold
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FFFFFF"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#E8EEF4"
|
|
33
27
|
field: "#233A4F"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E7A3F"
|
|
36
|
-
negative: "#1A2230"
|
|
37
29
|
series: ["#A61B1B", "#233A4F", "#4A5568", "#7A6A2A"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: -1
|
|
43
35
|
display-tracking: -1
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: tabular
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 4
|
|
@@ -74,26 +64,16 @@ sections: [section-band, section-rule]
|
|
|
74
64
|
closings: [closing-decision-box, closing-ask]
|
|
75
65
|
|
|
76
66
|
table:
|
|
77
|
-
style: header-fill
|
|
78
67
|
header: field
|
|
79
68
|
header-ink: on-field
|
|
80
69
|
rules: grid
|
|
81
70
|
banding: surface
|
|
82
|
-
numbers: right-tabular
|
|
83
71
|
totals: bold
|
|
84
72
|
chart:
|
|
85
73
|
gridlines: hairline
|
|
86
74
|
labels: direct
|
|
87
75
|
highlight: accent-on-muted
|
|
88
|
-
annotation: off
|
|
89
76
|
image:
|
|
90
|
-
bleed: none
|
|
91
|
-
crop: none
|
|
92
77
|
frame: hairline
|
|
93
78
|
|
|
94
79
|
fill-order: [step-up, distribute, change-family, anchor-visual]
|
|
95
|
-
avoid:
|
|
96
|
-
- English section kickers
|
|
97
|
-
- red for anything but the key line
|
|
98
|
-
- a summary box longer than three lines
|
|
99
|
-
- more than three text families in a row
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Ledger: a quarterly review the reader studies line by line. Compact type
|
|
2
|
-
#
|
|
1
|
+
# Ledger: a quarterly review the reader studies line by line. Compact type; tables and KPI rows
|
|
2
|
+
# carry the argument; the accent marks the current period and one key figure.
|
|
3
3
|
# A poor fit for a short spoken pitch or for a briefing written as running prose.
|
|
4
4
|
id: ledger
|
|
5
5
|
name: Ledger
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Bold
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Bold
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FFFFFF"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#E2F0EC"
|
|
33
27
|
field: "#0A4438"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E7A3F"
|
|
36
|
-
negative: "#B3261E"
|
|
37
29
|
series: ["#0E6B5A", "#4B5866", "#9A6A12", "#2F5F8A"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: -1
|
|
43
35
|
display-tracking: -1
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: tabular
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 5
|
|
@@ -74,27 +64,17 @@ sections: [section-rule, section-numeral]
|
|
|
74
64
|
closings: [closing-decision-box, closing-ask]
|
|
75
65
|
|
|
76
66
|
table:
|
|
77
|
-
style: ledger
|
|
78
67
|
# The header row is the ledger's one dark mass: deep field, white labels.
|
|
79
68
|
header: field
|
|
80
69
|
header-ink: on-field
|
|
81
70
|
rules: header-and-totals
|
|
82
71
|
banding: none
|
|
83
|
-
numbers: right-tabular
|
|
84
72
|
totals: bold
|
|
85
73
|
chart:
|
|
86
74
|
gridlines: hairline
|
|
87
75
|
labels: direct
|
|
88
76
|
highlight: accent-on-muted
|
|
89
|
-
annotation: on
|
|
90
77
|
image:
|
|
91
|
-
bleed: side-only
|
|
92
|
-
crop: none
|
|
93
78
|
frame: hairline
|
|
94
79
|
|
|
95
80
|
fill-order: [step-up, distribute, anchor-visual, change-family]
|
|
96
|
-
avoid:
|
|
97
|
-
- KPI cards for counts that are not results
|
|
98
|
-
- more than one accent on a chart
|
|
99
|
-
- tables stretched by padding
|
|
100
|
-
- side-rail on two data slides in a row
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Regular
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Regular
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#0F1419"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#2A2418"
|
|
33
27
|
field: "#1E2A36"
|
|
34
28
|
on-field: "#F5F7FA"
|
|
35
|
-
positive: "#6CC08B"
|
|
36
|
-
negative: "#F08A7E"
|
|
37
29
|
series: ["#E3A857", "#7FB8E0", "#A3AEBA", "#C58FD0"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: -1
|
|
43
35
|
display-tracking: -2
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: tabular
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 6
|
|
@@ -74,27 +64,17 @@ sections: [section-numeral, section-field]
|
|
|
74
64
|
closings: [closing-statement, closing-decision-box]
|
|
75
65
|
|
|
76
66
|
table:
|
|
77
|
-
style: header-fill
|
|
78
67
|
header: surface
|
|
79
68
|
header-ink: ink
|
|
80
69
|
rules: rows
|
|
81
70
|
banding: none
|
|
82
|
-
numbers: right-tabular
|
|
83
71
|
totals: bold
|
|
84
72
|
protagonist: accent-tint
|
|
85
73
|
chart:
|
|
86
74
|
gridlines: hairline
|
|
87
75
|
labels: direct
|
|
88
76
|
highlight: accent-on-muted
|
|
89
|
-
annotation: on
|
|
90
77
|
image:
|
|
91
|
-
bleed: side-only
|
|
92
|
-
crop: allowed
|
|
93
78
|
frame: none
|
|
94
79
|
|
|
95
80
|
fill-order: [anchor-visual, step-up, distribute, change-family]
|
|
96
|
-
avoid:
|
|
97
|
-
- neon or saturated glows
|
|
98
|
-
- a pure black ground
|
|
99
|
-
- light slides mixed in
|
|
100
|
-
- thin light type below 18 pt
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Regular
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Regular
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FFFFFF"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#F6E6E8"
|
|
33
27
|
field: "#111418"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E6B3A"
|
|
36
|
-
negative: "#50565E"
|
|
37
29
|
series: ["#8C1C2B", "#111418", "#50565E", "#2E5E8A"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: 0
|
|
43
35
|
display-tracking: -1
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: tabular
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 5
|
|
@@ -80,26 +70,16 @@ sections: [section-rule, section-field]
|
|
|
80
70
|
closings: [closing-summary-list, closing-ask]
|
|
81
71
|
|
|
82
72
|
table:
|
|
83
|
-
style: booktabs
|
|
84
73
|
header: none
|
|
85
74
|
header-ink: ink
|
|
86
75
|
rules: booktabs
|
|
87
76
|
banding: none
|
|
88
|
-
numbers: right-tabular
|
|
89
77
|
totals: bold
|
|
90
78
|
chart:
|
|
91
79
|
gridlines: hairline
|
|
92
80
|
labels: direct
|
|
93
81
|
highlight: series-order
|
|
94
|
-
annotation: off
|
|
95
82
|
image:
|
|
96
|
-
bleed: none
|
|
97
|
-
crop: none
|
|
98
83
|
frame: none
|
|
99
84
|
|
|
100
85
|
fill-order: [anchor-visual, distribute, step-up, change-family]
|
|
101
|
-
avoid:
|
|
102
|
-
- the short accent bar under a title (the rule is a hairline)
|
|
103
|
-
- coloured card fills
|
|
104
|
-
- figures without numbered captions
|
|
105
|
-
- the accent on anything but the proposed method
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Bold
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Bold
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FFFFFF"
|
|
@@ -32,9 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#FBE7E2"
|
|
33
27
|
field: "#C8361A"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E7A3F"
|
|
36
|
-
# The accent is red, so a loss keeps the ink colour and carries its ▼ sign instead.
|
|
37
|
-
negative: "#15131A"
|
|
38
29
|
series: ["#C8361A", "#15131A", "#6B6870", "#2F6F8F"]
|
|
39
30
|
|
|
40
31
|
ramp: reading
|
|
@@ -42,8 +33,6 @@ hero: false
|
|
|
42
33
|
type-voice:
|
|
43
34
|
title-tracking: -1
|
|
44
35
|
display-tracking: -2
|
|
45
|
-
latin-case: sentence
|
|
46
|
-
figures: proportional
|
|
47
36
|
|
|
48
37
|
density: 10
|
|
49
38
|
variance: 6
|
|
@@ -75,27 +64,17 @@ sections: [section-field, section-numeral]
|
|
|
75
64
|
closings: [closing-statement, closing-ask]
|
|
76
65
|
|
|
77
66
|
table:
|
|
78
|
-
style: open
|
|
79
67
|
header: none
|
|
80
68
|
header-ink: ink
|
|
81
69
|
rules: top-bottom
|
|
82
70
|
banding: none
|
|
83
|
-
numbers: right-tabular
|
|
84
71
|
totals: bold
|
|
85
72
|
protagonist: accent-tint
|
|
86
73
|
chart:
|
|
87
74
|
gridlines: none
|
|
88
75
|
labels: direct
|
|
89
76
|
highlight: accent-on-muted
|
|
90
|
-
annotation: on
|
|
91
77
|
image:
|
|
92
|
-
bleed: allowed
|
|
93
|
-
crop: allowed
|
|
94
78
|
frame: none
|
|
95
79
|
|
|
96
80
|
fill-order: [step-up, change-family, anchor-visual, distribute]
|
|
97
|
-
avoid:
|
|
98
|
-
- red for losses (losses carry ▼ in ink)
|
|
99
|
-
- more than two lines of display text
|
|
100
|
-
- cards
|
|
101
|
-
- bullet lists longer than four items
|
|
@@ -14,12 +14,6 @@ faces:
|
|
|
14
14
|
body: Pretendard Regular
|
|
15
15
|
label: Pretendard Regular
|
|
16
16
|
numeral: Pretendard Bold
|
|
17
|
-
faces-pretendard-only:
|
|
18
|
-
display: Pretendard Bold
|
|
19
|
-
title: Pretendard Bold
|
|
20
|
-
body: Pretendard Regular
|
|
21
|
-
label: Pretendard Regular
|
|
22
|
-
numeral: Pretendard Bold
|
|
23
17
|
|
|
24
18
|
palette:
|
|
25
19
|
ground: "#FFFFFF"
|
|
@@ -32,8 +26,6 @@ palette:
|
|
|
32
26
|
accent-tint: "#F5ECD9"
|
|
33
27
|
field: "#141414"
|
|
34
28
|
on-field: "#FFFFFF"
|
|
35
|
-
positive: "#1E7A3F"
|
|
36
|
-
negative: "#B3261E"
|
|
37
29
|
series: ["#8A5A00", "#141414", "#525252", "#3B5F7F"]
|
|
38
30
|
|
|
39
31
|
ramp: reading
|
|
@@ -41,8 +33,6 @@ hero: false
|
|
|
41
33
|
type-voice:
|
|
42
34
|
title-tracking: -1
|
|
43
35
|
display-tracking: -2
|
|
44
|
-
latin-case: sentence
|
|
45
|
-
figures: proportional
|
|
46
36
|
|
|
47
37
|
density: 10
|
|
48
38
|
variance: 8
|
|
@@ -74,26 +64,16 @@ sections: [section-numeral, section-rail]
|
|
|
74
64
|
closings: [closing-contact-split, closing-summary-list]
|
|
75
65
|
|
|
76
66
|
table:
|
|
77
|
-
style: open
|
|
78
67
|
header: none
|
|
79
68
|
header-ink: ink
|
|
80
69
|
rules: header-rule
|
|
81
70
|
banding: none
|
|
82
|
-
numbers: right-tabular
|
|
83
71
|
totals: bold
|
|
84
72
|
chart:
|
|
85
73
|
gridlines: none
|
|
86
74
|
labels: direct
|
|
87
75
|
highlight: accent-on-muted
|
|
88
|
-
annotation: on
|
|
89
76
|
image:
|
|
90
|
-
bleed: allowed
|
|
91
|
-
crop: allowed
|
|
92
77
|
frame: none
|
|
93
78
|
|
|
94
79
|
fill-order: [change-family, step-up, anchor-visual, distribute]
|
|
95
|
-
avoid:
|
|
96
|
-
- large numerals that are not real figures
|
|
97
|
-
- column hairlines through text
|
|
98
|
-
- two side-rail slides with the same split in a row
|
|
99
|
-
- centred body text
|
package/.grok-plugin/plugin.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.0.16 — 2026-10-09
|
|
6
|
+
|
|
7
|
+
- The deck check in `lit-pptx` now finds placeholder text. It reads its placeholder words from a list that LitGrok had never shipped, so it found nothing, and a slide that still said "Lorem ipsum" or "[작성 중]" passed. The list now ships with the skill, and the installer copies it.
|
|
8
|
+
- The same check reads a one-word placeholder term such as "todo", "tbd", "fixme" or "placeholder" as a whole word. A slide that mentions "Mastodon" or a "photodocument" now passes, while "TODO:", "TODOs" and "(TBD)" still fail.
|
|
9
|
+
- The eight deck looks and six document looks no longer list settings the engine never applied, such as letter case, figure style, picture cropping and page fill targets, and their reference pages no longer promise them. Decks and documents come out the same as before.
|
|
10
|
+
|
|
5
11
|
## 1.0.15 — 2026-10-08
|
|
6
12
|
|
|
7
13
|
- `lit-pptx` now chooses how a deck should look before it builds anything. It reads who the deck is for, whether it is presented or sent ahead, and how much of it is tables, pictures or steps, then picks one of eight looks: a dense numbers review, a pitch with one idea per slide, a picture-led deck, a teaching deck, a research talk, a Korean briefing deck, an editorial layout or a dark keynote. The reply names the look, gives the reason in a sentence and mentions two others that would also suit; say one of their names to switch. The AZURE and BOILERPLATE templates still work when you ask for them by name.
|
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
1
|
+
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion.webp" width="100%" alt="LitFamily motion cover: five armored robots power on one by one, the LitGrok robot wakes with glowing eyes and a lit frame, then LITFAMILY and KEEP THE WORK LIT. light up." /></picture></p>
|
|
2
2
|
|
|
3
3
|
<h1 align="center">LitGrok</h1>
|
|
4
4
|
<p align="center"><strong>Keep the work lit.</strong></p>
|
|
5
5
|
|
|
6
6
|
Make something useful in Grok Build. Leave the checked result and the next step with your project.
|
|
7
7
|
|
|
8
|
-
**[Full guide and skills gallery on GitHub](https://github.com/wjgoarxiv/litgrok#readme)** · [한국어](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md) · [Install](#install-in-30-seconds) · [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
8
|
+
**[Full guide and skills gallery on GitHub](https://github.com/wjgoarxiv/litgrok#readme)** · [한국어](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md) · [Install](#install-in-30-seconds) · [Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/reference.md)
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
12
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
11
|
+
<a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/badge-version.svg" alt="1.0.16" /></a>
|
|
12
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
|
-
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
15
|
+
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/reference.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> Docs</a> <a href="#install-in-30-seconds">Install</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/lucide-play.svg" width="16" alt="" /> Cover motion</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
|
|
16
16
|
|
|
17
17
|
LitGrok gives Grok Build a way of working: plan the change, build it, check it, and leave a handoff the next session can read. It ships 38 skills, 11 agents, one project rule, and eleven hook registrations. Grok Build still runs the session and chooses the model.
|
|
18
18
|
|
|
@@ -24,7 +24,7 @@ You need Node.js and Grok Build. In an interactive terminal, from the project yo
|
|
|
24
24
|
npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
The files land in `<project>/.grok/`. Add `--user` to install under `~/.grok/` instead, or use `--package @litfamily/litgrok@1.0.
|
|
27
|
+
The files land in `<project>/.grok/`. Add `--user` to install under `~/.grok/` instead, or use `--package @litfamily/litgrok@1.0.16` to pin this release. Add `--dry-run` to see every destination before anything is written.
|
|
28
28
|
|
|
29
29
|
Trying a local package instead? Put its real absolute path in a variable, then run these two lines separately:
|
|
30
30
|
|
|
@@ -72,7 +72,7 @@ Beyond code, `lit-pptx` makes slide decks and `lit-docx` makes reports and Word
|
|
|
72
72
|
|
|
73
73
|
## What changes after install
|
|
74
74
|
|
|
75
|
-
The installer copies the skills, agents, project rule, and hooks into `.grok/`. The eleven hook registrations in [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
75
|
+
The installer copies the skills, agents, project rule, and hooks into `.grok/`. The eleven hook registrations in [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/hooks/hooks.json) run only in a trusted Git root, and they log the order of events in `.grok/litgrok/session-ledger/`. Everything runs inside your Grok session, and nothing runs in the background; when the session ends, the work waits for the next one.
|
|
76
76
|
|
|
77
77
|
If you'd like a status row showing the active LitGrok skill, the model and how much context is used, add it with `install --user --status-line`. It writes `[ui.status_line]` into `~/.grok/config.toml` and backs up an existing file first.
|
|
78
78
|
|
|
@@ -107,6 +107,6 @@ The installer never runs `git init`, trusts hooks, signs in or picks a model for
|
|
|
107
107
|
|
|
108
108
|
**[Full guide, skills gallery and troubleshooting on GitHub →](https://github.com/wjgoarxiv/litgrok#readme)**
|
|
109
109
|
|
|
110
|
-
[Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
110
|
+
[Reference](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/reference.md) · [Changelog](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/CHANGELOG.md) · [Privacy](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/privacy.md) · [MIT license](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/LICENSE)
|
|
111
111
|
|
|
112
112
|
The cover is brand motion made with the LitFamily motion skill: animated artwork, with no Grok session recorded in it.
|
package/README_ko-KR.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
1
|
+
<p align="center"><picture><source media="(prefers-reduced-motion: reduce)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion-still.webp" /><source media="(prefers-reduced-motion: no-preference)" srcset="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion.webp" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion.webp" width="100%" alt="LitFamily 모션 커버: 다섯 로봇 패널이 차례로 켜지고, LitGrok 로봇의 눈과 테두리가 빛난 뒤 LITFAMILY와 KEEP THE WORK LIT. 문구가 밝아지는 영상" /></picture></p>
|
|
2
2
|
|
|
3
3
|
<h1 align="center">LitGrok</h1>
|
|
4
4
|
<p align="center"><strong>Keep the work lit.</strong></p>
|
|
5
5
|
|
|
6
6
|
Grok Build에서 작은 결과물을 만들고, 확인한 내용과 다음 할 일을 프로젝트에 남기세요.
|
|
7
7
|
|
|
8
|
-
**[GitHub에서 전체 안내와 스킬 갤러리 보기](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)** · [English](https://github.com/wjgoarxiv/litgrok#readme) · [설치](#30초-설치) · [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
8
|
+
**[GitHub에서 전체 안내와 스킬 갤러리 보기](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)** · [English](https://github.com/wjgoarxiv/litgrok#readme) · [설치](#30초-설치) · [상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/reference_ko-KR.md)
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
11
|
-
<a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
12
|
-
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
11
|
+
<a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/badge-version.svg" alt="1.0.16" /></a>
|
|
12
|
+
<a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
|
-
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
15
|
+
<p align="center"><a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/reference_ko-KR.md"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/lucide-book-open.svg" width="16" alt="" /> 상세 안내</a> <a href="#30초-설치">설치</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/cover-motion.webp"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/lucide-play.svg" width="16" alt="" /> 커버 모션</a> <a href="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/assets/readme/lucide-shield-check.svg" width="16" alt="" /> MIT</a></p>
|
|
16
16
|
|
|
17
17
|
LitGrok은 Grok Build 위에서 계획하고, 만들고, 확인하고, 다음 세션이 읽을 인수인계 문서를 남기는 흐름을 더합니다. 스킬 38개, 에이전트 11개, 프로젝트 규칙 하나, 훅 등록 열한 개가 들어 있고, 세션 실행과 모델 선택은 계속 Grok Build가 맡습니다.
|
|
18
18
|
|
|
@@ -24,7 +24,7 @@ Node.js와 Grok Build가 있으면 됩니다. 써 보고 싶은 프로젝트에
|
|
|
24
24
|
npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
파일은 `<project>/.grok/`에 들어갑니다. `~/.grok/`에 설치하려면 `--user`를, 이 릴리스로 고정하려면 `--package @litfamily/litgrok@1.0.
|
|
27
|
+
파일은 `<project>/.grok/`에 들어갑니다. `~/.grok/`에 설치하려면 `--user`를, 이 릴리스로 고정하려면 `--package @litfamily/litgrok@1.0.16`을 쓰세요. `--dry-run`을 붙이면 파일을 쓰기 전에 들어갈 경로를 모두 보여 줍니다.
|
|
28
28
|
|
|
29
29
|
로컬 패키지로 써 보려면 실제 절대 경로를 변수에 넣고 두 줄을 따로 실행하세요.
|
|
30
30
|
|
|
@@ -72,7 +72,7 @@ npm exec --yes --package "$LITGROK_PACK" -- litgrok install
|
|
|
72
72
|
|
|
73
73
|
## 설치하면 달라지는 것
|
|
74
74
|
|
|
75
|
-
설치 프로그램이 스킬, 에이전트, 프로젝트 규칙, 훅을 `.grok/`에 복사합니다. [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
75
|
+
설치 프로그램이 스킬, 에이전트, 프로젝트 규칙, 훅을 `.grok/`에 복사합니다. [`hooks/hooks.json`](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/hooks/hooks.json)에 있는 훅 등록 열한 개는 신뢰한 Git 루트에서만 동작하고, `.grok/litgrok/session-ledger/`에 이벤트 순서를 남깁니다. 모든 작업은 Grok 세션 안에서 돌고 백그라운드 작업은 없습니다. 세션이 끝나면 다음 세션이 이어받을 때까지 그 자리에 멈춰 있습니다.
|
|
76
76
|
|
|
77
77
|
지금 어떤 LitGrok 스킬이 동작 중인지, 어떤 모델을 쓰는지, 컨텍스트를 얼마나 썼는지 보고 싶으면 `install --user --status-line`으로 상태 행을 켜세요. `~/.grok/config.toml`에 `[ui.status_line]`을 넣고, 파일이 이미 있으면 먼저 백업합니다.
|
|
78
78
|
|
|
@@ -107,6 +107,6 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok uninstall --user
|
|
|
107
107
|
|
|
108
108
|
**[GitHub에서 전체 안내, 스킬 갤러리, 문제 해결 보기 →](https://github.com/wjgoarxiv/litgrok/blob/main/README_ko-KR.md)**
|
|
109
109
|
|
|
110
|
-
[상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.
|
|
110
|
+
[상세 안내](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/reference_ko-KR.md) · [변경 이력](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/CHANGELOG.md) · [개인정보](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/docs/privacy.md) · [MIT 라이선스](https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.16/LICENSE)
|
|
111
111
|
|
|
112
112
|
커버의 모션은 LitFamily 모션 스킬로 만든 브랜드 연출입니다. 그려서 움직인 그림이라 실제 Grok 세션을 녹화한 장면은 들어 있지 않습니다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.16"><title>local: 1.0.16</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="290" transform="scale(.1)">local</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.16</text></g></svg>
|
package/docs/reference.md
CHANGED
|
@@ -77,7 +77,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
|
77
77
|
Pin a version when you need a reproducible install:
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
npm exec --yes --package @litfamily/litgrok@1.0.
|
|
80
|
+
npm exec --yes --package @litfamily/litgrok@1.0.16 -- litgrok install
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
Preview without writing files:
|
package/docs/reference_ko-KR.md
CHANGED
|
@@ -77,7 +77,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
|
|
|
77
77
|
재현 가능한 설치는 버전을 고정합니다.
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
npm exec --yes --package @litfamily/litgrok@1.0.
|
|
80
|
+
npm exec --yes --package @litfamily/litgrok@1.0.16 -- litgrok install
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
파일을 쓰지 않고 미리보기:
|
package/package.json
CHANGED