@litfamily/lithermes 1.0.17 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +21 -67
  2. package/README_Ko-KR.md +20 -65
  3. package/assets/lithermes-plugin/auto_update.py +4 -1
  4. package/assets/lithermes-plugin/core_routing.py +7 -2
  5. package/assets/lithermes-plugin/payload-version.json +42 -38
  6. package/assets/lithermes-plugin/plugin.yaml +1 -1
  7. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +2 -2
  8. package/assets/lithermes-plugin/skills/lit-docx/references/page-composition.md +1 -3
  9. package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_docx.py +9 -9
  10. package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_design.py +9 -9
  11. package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_layout.py +6 -6
  12. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/brief.yaml +0 -1
  13. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/journal.yaml +0 -1
  14. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/manual.yaml +0 -1
  15. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/memo.yaml +0 -1
  16. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/proposal.yaml +0 -1
  17. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/report.yaml +0 -1
  18. package/assets/lithermes-plugin/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
  19. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/atlas.md +2 -2
  20. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/chalk.md +2 -3
  21. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/gazette.md +2 -2
  22. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/ledger.md +5 -5
  23. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/night.md +3 -3
  24. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/paper.md +2 -2
  25. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/signal.md +3 -3
  26. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/studio.md +2 -3
  27. package/assets/lithermes-plugin/skills/lit-pptx/scripts/deck_output.py +8 -8
  28. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-pack.js +96 -96
  29. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +1 -1
  30. package/assets/lithermes-plugin/skills/lit-pptx/scripts/qa_deck.py +7 -7
  31. package/assets/lithermes-plugin/skills/lit-pptx/scripts/validate_pptx.py +8 -3
  32. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -13
  33. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -13
  34. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -13
  35. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -15
  36. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -13
  37. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -13
  38. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -13
  39. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -13
  40. package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +2 -2
  41. package/package.json +19 -3
  42. package/readme-assets/badge-version.svg +1 -1
  43. package/src/cli.js +164 -34
  44. package/src/lib/check.js +13 -1
  45. package/src/lib/config.js +94 -36
  46. package/src/lib/hud.js +33 -2
  47. package/src/lib/install.js +39 -1
  48. package/src/lib/skins.js +29 -9
  49. package/readme-assets/ascii-readme.svg +0 -5
@@ -468,7 +468,7 @@ function validatePack(pack, file) {
468
468
  need(typeof pack.intent === "string" && pack.intent.length > 0, "intent is missing");
469
469
  need(isList(pack.canvas) && pack.canvas.length > 0 && pack.canvas.every((c) => grid.CANVAS[c]), "canvas must list 16:9 and/or 4:3");
470
470
  // `faces` is the deck's default and is Pretendard only; `faces-a2z` applies when the source asks.
471
- for (const key of ["faces", "faces-pretendard-only", "faces-a2z"]) {
471
+ for (const key of ["faces", "faces-a2z"]) {
472
472
  if (key === "faces-a2z" && pack[key] == null) continue;
473
473
  const faces = pack[key] || {};
474
474
  for (const role of FACE_KEYS) {
@@ -175,7 +175,7 @@ def check_contrast(path: Path) -> dict[str, Any]:
175
175
  return {"pass": not violations, "checked_runs": checked, "violations": violations[:30]}
176
176
 
177
177
 
178
- # ── picture / table overlap ───────────────────────────────────────────────── inventory.py only considers text
178
+ # ── picture / table overlap ───────────────────────────────────────────────── inventory.py only considers text shapes.
179
179
  OVERLAP_TOL_IN = 0.06 # inches; ignore hairline touches / rounding
180
180
  MIN_TEXT_PT = 6.0
181
181
 
@@ -286,7 +286,7 @@ def check_overlaps(path: Path) -> dict[str, Any]:
286
286
  for z2, sh2, kind2, box2 in shapes:
287
287
  if z2 >= z or kind2 is None:
288
288
  continue # only shapes drawn *behind* this picture/table
289
- # A full-bleed background image (mesh/gradient wash) is never an occlusion victim — anything may sit on top of
289
+ # A full-bleed background image (mesh/gradient wash) is never an occlusion victim; anything may sit on it.
290
290
  if kind2 == "picture" and is_full_bleed(box2):
291
291
  continue
292
292
  # Picture-over-picture is intentional decorative layering.
@@ -617,7 +617,7 @@ def check_slide_craft(path: Path) -> dict[str, Any]:
617
617
  text_only = 0
618
618
  content_slides = 0
619
619
  for slide_number, slide in enumerate(prs.slides, 1):
620
- # A pack-built slide names its family
620
+ # A pack-built slide names its family; display slides are never judged sparse.
621
621
  family = next((shape.name.split("@", 1)[1] for shape in slide.shapes if shape.name.startswith("family@")), "")
622
622
  if family and re.match(r"(cover|section)(-|$)|(statement|quote|closing-statement|image-full)$", family):
623
623
  continue
@@ -629,7 +629,7 @@ def check_slide_craft(path: Path) -> dict[str, Any]:
629
629
  if shape.shape_type == MSO_SHAPE_TYPE.PICTURE
630
630
  and (family or shape.top >= prs.slide_height * 0.20)
631
631
  ]
632
- # Body text is judged on what the frames say together
632
+ # Body text is judged on what the frames say together.
633
633
  frames = [
634
634
  shape for shape in slide.shapes
635
635
  if getattr(shape, "has_text_frame", False)
@@ -647,7 +647,7 @@ def check_slide_craft(path: Path) -> dict[str, Any]:
647
647
  ]
648
648
  if tables or charts or body_text or len(panels) >= 2:
649
649
  content_slides += 1
650
- # On a pack slide the family says whether the page is a plain text page
650
+ # On a pack slide the family says whether the page is a plain text page.
651
651
  plain_text = family in TEXT_FAMILIES if family else len(panels) < 2
652
652
  if body_text and not tables and not charts and not pictures and plain_text:
653
653
  text_only += 1
@@ -668,7 +668,7 @@ def check_slide_craft(path: Path) -> dict[str, Any]:
668
668
  continue
669
669
  if shape.width * shape.height > prs.slide_width * prs.slide_height * 0.8:
670
670
  continue
671
- # An outline drawn around other frames (a matrix quadrant, a card whose text is its own box) frames that
671
+ # An outline drawn around other frames frames that content; only an empty outline is an empty frame.
672
672
  if any(_centre_inside(other, shape) for other in slide.shapes if other is not shape
673
673
  and (getattr(other, "has_table", False) or getattr(other, "has_chart", False)
674
674
  or other.shape_type == MSO_SHAPE_TYPE.PICTURE
@@ -726,7 +726,7 @@ def summarize_inventory(issues: dict[str, Any]) -> dict[str, Any]:
726
726
  slide_overflow += 1
727
727
  if "frame" in ov:
728
728
  frame_overflow += 1
729
- # inventory.py nests this under "overlap"
729
+ # inventory.py nests this under "overlap"; it reports only (see qa()).
730
730
  if (shape.get("overlap") or {}).get("overlapping_shapes"):
731
731
  overlap += 1
732
732
  return {
@@ -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, latin_words_whole: 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
59
  # does not contain it. Every other term keeps the file's case and word settings.
60
60
  acronyms = [term for term in terms if re.fullmatch(r"[A-Z]{2,5}", term)]
61
- escaped = [re.escape(term) for term in terms if term not in acronyms]
61
+ # With latin_words_whole (the hard list), a single Latin word (todo, tbd) is matched as that word or its
62
+ # plural in s, in the file's case setting: "TODOs" fails, "Mastodon" or "photodocument" does not.
63
+ words = [term for term in terms if latin_words_whole 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, latin_words_whole=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
  faces-a2z:
24
18
  display: A2Z Light
25
19
  title: Pretendard Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: 0
49
43
  display-tracking: -1
50
- latin-case: sentence
51
- figures: proportional
52
44
 
53
45
  density: 10
54
46
  variance: 7
@@ -80,21 +72,16 @@ sections: [section-image, section-field]
80
72
  closings: [closing-contact-split, closing-ask]
81
73
 
82
74
  table:
83
- style: light-grid
84
75
  header: none
85
76
  header-ink: ink
86
77
  rules: rows
87
78
  banding: none
88
- numbers: right-tabular
89
79
  totals: bold
90
80
  chart:
91
81
  gridlines: hairline
92
82
  labels: direct
93
83
  highlight: accent-on-muted
94
- annotation: off
95
84
  image:
96
- bleed: allowed
97
- crop: allowed
98
85
  frame: none
99
86
 
100
87
  fill-order: [anchor-visual, change-family, distribute, step-up]
@@ -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
  faces-a2z:
24
18
  display: A2Z Bold
25
19
  title: A2Z Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: -1
49
43
  display-tracking: -1
50
- latin-case: sentence
51
- figures: proportional
52
44
 
53
45
  density: 10
54
46
  variance: 6
@@ -86,21 +78,16 @@ sections: [section-numeral, section-rail]
86
78
  closings: [closing-summary-list, closing-ask]
87
79
 
88
80
  table:
89
- style: header-fill
90
81
  header: accent-tint
91
82
  header-ink: accent-deep
92
83
  rules: rows
93
84
  banding: none
94
- numbers: right-tabular
95
85
  totals: bold
96
86
  chart:
97
87
  gridlines: hairline
98
88
  labels: direct
99
89
  highlight: accent-on-muted
100
- annotation: on
101
90
  image:
102
- bleed: side-only
103
- crop: none
104
91
  frame: none
105
92
 
106
93
  fill-order: [distribute, step-up, change-family, anchor-visual]
@@ -15,12 +15,6 @@ faces:
15
15
  body: Pretendard Regular
16
16
  label: Pretendard Regular
17
17
  numeral: Pretendard Bold
18
- faces-pretendard-only:
19
- display: Pretendard Bold
20
- title: Pretendard Bold
21
- body: Pretendard Regular
22
- label: Pretendard Regular
23
- numeral: Pretendard Bold
24
18
  faces-a2z:
25
19
  display: A2Z Bold
26
20
  title: Pretendard Bold
@@ -48,8 +42,6 @@ hero: false
48
42
  type-voice:
49
43
  title-tracking: -1
50
44
  display-tracking: -1
51
- latin-case: sentence
52
- figures: tabular
53
45
 
54
46
  density: 10
55
47
  variance: 4
@@ -81,21 +73,16 @@ sections: [section-band, section-rule]
81
73
  closings: [closing-decision-box, closing-ask]
82
74
 
83
75
  table:
84
- style: header-fill
85
76
  header: field
86
77
  header-ink: on-field
87
78
  rules: grid
88
79
  banding: surface
89
- numbers: right-tabular
90
80
  totals: bold
91
81
  chart:
92
82
  gridlines: hairline
93
83
  labels: direct
94
84
  highlight: accent-on-muted
95
- annotation: off
96
85
  image:
97
- bleed: none
98
- crop: none
99
86
  frame: hairline
100
87
 
101
88
  fill-order: [step-up, distribute, change-family, anchor-visual]
@@ -1,5 +1,5 @@
1
- # Ledger: a set of accounts made readable. Small, exact type, numbers in tabular
2
- # figures, tables and KPI rows doing most of the talking; colour marks only "this
1
+ # Ledger: a set of accounts made readable. Small, exact type, numbers right-aligned,
2
+ # tables and KPI rows doing most of the talking; colour marks only "this
3
3
  # period" and the one figure that matters. Wrong for a live pitch with little data
4
4
  # or for a briefing that is read as prose.
5
5
  id: ledger
@@ -15,12 +15,6 @@ faces:
15
15
  body: Pretendard Regular
16
16
  label: Pretendard Regular
17
17
  numeral: Pretendard Bold
18
- faces-pretendard-only:
19
- display: Pretendard Bold
20
- title: Pretendard Bold
21
- body: Pretendard Regular
22
- label: Pretendard Regular
23
- numeral: Pretendard Bold
24
18
  faces-a2z:
25
19
  display: A2Z Bold
26
20
  title: Pretendard Bold
@@ -48,8 +42,6 @@ hero: false
48
42
  type-voice:
49
43
  title-tracking: -1
50
44
  display-tracking: -1
51
- latin-case: sentence
52
- figures: tabular
53
45
 
54
46
  density: 10
55
47
  variance: 5
@@ -81,22 +73,17 @@ sections: [section-rule, section-numeral]
81
73
  closings: [closing-decision-box, closing-ask]
82
74
 
83
75
  table:
84
- style: ledger
85
76
  # The header row is the ledger's one dark mass: deep field, white labels.
86
77
  header: field
87
78
  header-ink: on-field
88
79
  rules: header-and-totals
89
80
  banding: none
90
- numbers: right-tabular
91
81
  totals: bold
92
82
  chart:
93
83
  gridlines: hairline
94
84
  labels: direct
95
85
  highlight: accent-on-muted
96
- annotation: on
97
86
  image:
98
- bleed: side-only
99
- crop: none
100
87
  frame: hairline
101
88
 
102
89
  fill-order: [step-up, distribute, anchor-visual, change-family]
@@ -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
  faces-a2z:
24
18
  display: Pretendard Bold
25
19
  title: Pretendard Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: -1
49
43
  display-tracking: -2
50
- latin-case: sentence
51
- figures: tabular
52
44
 
53
45
  density: 10
54
46
  variance: 6
@@ -80,22 +72,17 @@ sections: [section-numeral, section-field]
80
72
  closings: [closing-statement, closing-decision-box]
81
73
 
82
74
  table:
83
- style: header-fill
84
75
  header: surface
85
76
  header-ink: ink
86
77
  rules: rows
87
78
  banding: none
88
- numbers: right-tabular
89
79
  totals: bold
90
80
  protagonist: accent-tint
91
81
  chart:
92
82
  gridlines: hairline
93
83
  labels: direct
94
84
  highlight: accent-on-muted
95
- annotation: on
96
85
  image:
97
- bleed: side-only
98
- crop: allowed
99
86
  frame: none
100
87
 
101
88
  fill-order: [anchor-visual, step-up, distribute, change-family]
@@ -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
  faces-a2z:
24
18
  display: Pretendard Bold
25
19
  title: Pretendard Bold
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: 0
49
43
  display-tracking: -1
50
- latin-case: sentence
51
- figures: tabular
52
44
 
53
45
  density: 10
54
46
  variance: 5
@@ -86,21 +78,16 @@ sections: [section-rule, section-field]
86
78
  closings: [closing-summary-list, closing-ask]
87
79
 
88
80
  table:
89
- style: booktabs
90
81
  header: none
91
82
  header-ink: ink
92
83
  rules: booktabs
93
84
  banding: none
94
- numbers: right-tabular
95
85
  totals: bold
96
86
  chart:
97
87
  gridlines: hairline
98
88
  labels: direct
99
89
  highlight: series-order
100
- annotation: off
101
90
  image:
102
- bleed: none
103
- crop: none
104
91
  frame: none
105
92
 
106
93
  fill-order: [anchor-visual, distribute, step-up, change-family]
@@ -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
  faces-a2z:
24
18
  display: A2Z Black
25
19
  title: A2Z Bold
@@ -48,8 +42,6 @@ hero: false
48
42
  type-voice:
49
43
  title-tracking: -1
50
44
  display-tracking: -2
51
- latin-case: sentence
52
- figures: proportional
53
45
 
54
46
  density: 10
55
47
  variance: 6
@@ -81,22 +73,17 @@ sections: [section-field, section-numeral]
81
73
  closings: [closing-statement, closing-ask]
82
74
 
83
75
  table:
84
- style: open
85
76
  header: none
86
77
  header-ink: ink
87
78
  rules: top-bottom
88
79
  banding: none
89
- numbers: right-tabular
90
80
  totals: bold
91
81
  protagonist: accent-tint
92
82
  chart:
93
83
  gridlines: none
94
84
  labels: direct
95
85
  highlight: accent-on-muted
96
- annotation: on
97
86
  image:
98
- bleed: allowed
99
- crop: allowed
100
87
  frame: none
101
88
 
102
89
  fill-order: [step-up, change-family, anchor-visual, distribute]
@@ -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
  faces-a2z:
24
18
  display: A2Z Black
25
19
  title: A2Z Medium
@@ -47,8 +41,6 @@ hero: false
47
41
  type-voice:
48
42
  title-tracking: -1
49
43
  display-tracking: -2
50
- latin-case: sentence
51
- figures: proportional
52
44
 
53
45
  density: 10
54
46
  variance: 8
@@ -80,21 +72,16 @@ sections: [section-numeral, section-rail]
80
72
  closings: [closing-contact-split, closing-summary-list]
81
73
 
82
74
  table:
83
- style: open
84
75
  header: none
85
76
  header-ink: ink
86
77
  rules: header-rule
87
78
  banding: none
88
- numbers: right-tabular
89
79
  totals: bold
90
80
  chart:
91
81
  gridlines: none
92
82
  labels: direct
93
83
  highlight: accent-on-muted
94
- annotation: on
95
84
  image:
96
- bleed: allowed
97
- crop: allowed
98
85
  frame: none
99
86
 
100
87
  fill-order: [change-family, step-up, anchor-visual, distribute]
@@ -485,7 +485,7 @@ isolated Hermes home. Use `--hermes-home`; never `--home`.
485
485
 
486
486
  ```text
487
487
  $ node packages/lithermes-installer/bin/lithermes.js install --yes --offline --no-hud --hermes-home "$ISOLATED"
488
- Installed LitHermes 1.0.17
488
+ Installed LitHermes 1.0.19
489
489
  plugin: $ISOLATED/plugins/lithermes
490
490
  model config: updated
491
491
 
@@ -502,7 +502,7 @@ installed payload: PASS
502
502
  enabled config: PASS
503
503
 
504
504
  $ hermes lithermes doctor
505
- [OK] plugin.yaml readable (version 1.0.17)
505
+ [OK] plugin.yaml readable (version 1.0.19)
506
506
  [OK] skills bundled: 36
507
507
  [OK] litgoal durable runtime importable
508
508
  ```
package/package.json CHANGED
@@ -1,14 +1,30 @@
1
1
  {
2
2
  "name": "@litfamily/lithermes",
3
- "version": "1.0.17",
4
- "description": "npx/bunx installer for the LitHermes Hermes plugin",
3
+ "version": "1.0.19",
4
+ "description": "Hermes Agent plugin that plans, builds, checks and hands off your work when you add one word, lit, to a request.",
5
+ "keywords": [
6
+ "hermes-agent",
7
+ "hermes",
8
+ "nous-research",
9
+ "plugin",
10
+ "ai-agent",
11
+ "coding-agent",
12
+ "agent-workflow",
13
+ "planning",
14
+ "code-review",
15
+ "research",
16
+ "handoff",
17
+ "korean",
18
+ "docx",
19
+ "pptx"
20
+ ],
5
21
  "license": "MIT",
6
22
  "repository": {
7
23
  "type": "git",
8
24
  "url": "git+https://github.com/wjgoarxiv/lithermes.git",
9
25
  "directory": "packages/lithermes-installer"
10
26
  },
11
- "homepage": "https://www.npmjs.com/package/@litfamily/lithermes",
27
+ "homepage": "https://github.com/wjgoarxiv/lithermes",
12
28
  "bugs": {
13
29
  "url": "https://github.com/wjgoarxiv/lithermes/issues"
14
30
  },
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="release: 1.0.17"><title>release: 1.0.17</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.17</text></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="release: 1.0.19"><title>release: 1.0.19</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.19</text></g></svg>