@litfamily/lithermes 1.0.4 → 1.0.6
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/README.md +100 -85
- package/README_Ko-KR.md +108 -95
- package/assets/lithermes-plugin/README.md +27 -17
- package/assets/lithermes-plugin/__init__.py +5 -1
- package/assets/lithermes-plugin/core_contexts.py +18 -4
- package/assets/lithermes-plugin/core_routing.py +2 -0
- package/assets/lithermes-plugin/diagnostics.py +48 -16
- package/assets/lithermes-plugin/payload-version.json +105 -13
- package/assets/lithermes-plugin/plugin.yaml +1 -1
- package/assets/lithermes-plugin/skills/frontend-ui-ux/SKILL.md +11 -12
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +24 -13
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/default-editorial-pixel.json +18 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/operating-lanes.md +1 -1
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/product-direction.md +1 -1
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/production.md +13 -0
- package/assets/lithermes-plugin/skills/readme-studio/SKILL.md +73 -0
- package/assets/lithermes-plugin/skills/readme-studio/references/decoration-patterns.md +36 -0
- package/assets/lithermes-plugin/skills/readme-studio/references/facts.md +11 -0
- package/assets/lithermes-plugin/skills/readme-studio/references/motion.md +34 -0
- package/assets/lithermes-plugin/skills/readme-studio/references/production-interview.md +17 -0
- package/assets/lithermes-plugin/skills/readme-studio/references/type-and-images.md +17 -0
- package/assets/lithermes-plugin/skills/readme-studio/scripts/check_facts.py +103 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/cover-section.md +63 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/cover-settings.json +11 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/cover-source.json +12 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/facts.json +1 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/index.html +54 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/index.motion.json +1 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/package-lock.json +1843 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/hyperframes/package.json +6 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/package-lock.json +3783 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/package.json +7 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/remotion/src/index.tsx +34 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/typography/outline.mjs +79 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/typography/package-lock.json +133 -0
- package/assets/lithermes-plugin/skills/readme-studio/templates/typography/package.json +6 -0
- package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +3 -3
- package/package.json +1 -1
- package/readme-assets/Lucide-LICENSE.txt +43 -0
- package/readme-assets/ascii-readme.svg +5 -0
- package/readme-assets/badge-version.svg +1 -1
- package/readme-assets/cover-motion-still.webp +0 -0
- package/readme-assets/cover-motion.webp +0 -0
- package/readme-assets/ignition-film.mp4 +0 -0
- package/readme-assets/lucide-book-open.svg +14 -0
- package/readme-assets/lucide-play.svg +13 -0
- package/readme-assets/lucide-shield-check.svg +14 -0
- package/src/lib/check.js +75 -2
- package/src/lib/config.js +23 -0
- package/src/lib/install.js +2 -1
- package/src/lib/modelConfig.js +11 -7
- package/src/lib/modelRoutePolicy.js +94 -51
- package/src/lib/skillPayload.js +1 -1
|
@@ -124,7 +124,7 @@ CLI/plugin name, not the npm package name.
|
|
|
124
124
|
`lithermes:lit-comprehend`,
|
|
125
125
|
`lithermes:lit-korean`, `lithermes:comment-checker`,
|
|
126
126
|
`lithermes:debugging`, `lithermes:deep-interview`,
|
|
127
|
-
`lithermes:frontend-ui-ux`, `lithermes:lit-commit`,
|
|
127
|
+
`lithermes:frontend-ui-ux`, `lithermes:readme-studio`, `lithermes:lit-commit`,
|
|
128
128
|
`lithermes:lit-crucible`, `lithermes:lit-init`, `lithermes:lit-recap`,
|
|
129
129
|
`lithermes:lit-handoff`, `lithermes:lit-scientific-visualization`,
|
|
130
130
|
`lithermes:lsp`, `lithermes:lsp-setup`,
|
|
@@ -136,7 +136,7 @@ CLI/plugin name, not the npm package name.
|
|
|
136
136
|
`lithermes:lit-plan`, `lithermes:litgoal`, `lithermes:litwork`, and `lithermes:wikify`.
|
|
137
137
|
- The two UI/UX entrypoints are concise and route preserved dense guidance through
|
|
138
138
|
`references/complete-contract.md`. The detailed `lithermes:frontend-ui-ux`
|
|
139
|
-
contract routes
|
|
139
|
+
contract routes 17 focused design references, and the detailed
|
|
140
140
|
`lithermes:visual-qa` contract routes `skills/visual-qa/references/capture-playbook.md` for
|
|
141
141
|
per-channel capture rules and the exact blocked-capability codes. Every reference is
|
|
142
142
|
hash-listed in `payload-version.json` and verified by installer doctor. Reference text
|
|
@@ -186,29 +186,39 @@ CLI/plugin name, not the npm package name.
|
|
|
186
186
|
dispatched lane is accounted for. There is no named-agent registry
|
|
187
187
|
and no per-child model selection. Broad review commands record a local redacted
|
|
188
188
|
`delegate_batch_intent` summary under `.hermes/lithermes/runs/<run>/delegate_batches/<batch>/`.
|
|
189
|
-
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
189
|
+
- New installs default to the lead route `gpt-6-astra` / `xhigh` for planning,
|
|
190
|
+
review, and other lead work, and to `gpt-6-luna` / `max` for helpers and
|
|
191
|
+
ordinary workers on the global child route. Model diagnostics report these
|
|
192
|
+
routes without exposing credential fields. The coding-lead alternative is `gpt-6-sol` /
|
|
193
|
+
`xhigh`. Astra and Sol each support `low`, `medium`, `high`, `xhigh`, `max`,
|
|
194
|
+
and `ultra`; Sol defaults to `xhigh` when selected as lead. Luna supports
|
|
195
|
+
`low`, `medium`, `high`, `xhigh`, and `max`, with no `ultra`. Existing GPT-5.6
|
|
196
|
+
choices remain selectable within their listed bounds: `gpt-5.6-sol` at
|
|
197
|
+
`high` or `xhigh`, `gpt-5.6-terra` at `high`, `xhigh`, or `max`, and `gpt-5.6-luna`
|
|
198
|
+
at `high` or `max`; general `gpt-5.6` offers `high`. The live model catalog
|
|
199
|
+
lists no retirement date for these GPT-5.6 values. Ordinary reinstall and
|
|
200
|
+
update preserve existing configured model and effort settings, while
|
|
201
|
+
`--reconfigure-model` is the explicit selection reset. An explicit GPT-5.6
|
|
202
|
+
lead reset applies the existing 372,000 context length and 0.9 compression
|
|
203
|
+
threshold; GPT-6 resets do not add either value when absent.
|
|
195
204
|
Hermes has no per-task model override and no per-subagent model override. The
|
|
196
205
|
named reviewer and `litwork-reviewer` routes are unavailable. Hermes also
|
|
197
206
|
exposes no TUI route visibility surface. A configured route is not execution
|
|
198
|
-
proof; an execution receipt is required. A global child
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
207
|
+
proof; an execution receipt is required. A global child `gpt-5.6-luna`
|
|
208
|
+
`xhigh` route is forbidden and stops before installation; `gpt-6-luna`
|
|
209
|
+
accepts `xhigh`. Existing Astra routes with a missing or unsupported effort
|
|
210
|
+
(`none` or arbitrary text) stop before preservation, with bytes and
|
|
211
|
+
permissions unchanged. On
|
|
203
212
|
Hermes 0.17.0 and 0.19.0, `delegation.max_concurrent_children: 20` is a hard per-batch
|
|
204
213
|
limit; fresh or explicitly reconfigured managed settings keep delegation flat at depth 1,
|
|
205
214
|
preserved nested settings make doctor fail, and diagnostics expose
|
|
206
215
|
async batch slots plus the potential simultaneous-child ceiling. Normal delegation uses the OpenAI OAuth Responses runtime; 650K
|
|
207
216
|
auto-compaction is unavailable because the host compression schema is
|
|
208
|
-
ratio-only. The host exposes no verified
|
|
209
|
-
fresh
|
|
210
|
-
thresholds; existing explicit values
|
|
211
|
-
|
|
217
|
+
ratio-only. The host exposes no verified GPT-6-specific context limit, so
|
|
218
|
+
fresh or explicitly reconfigured GPT-6 settings do not add
|
|
219
|
+
`model.context_length` or compression thresholds; existing explicit values
|
|
220
|
+
are preserved. The 372,000 / 0.9 defaults apply only to explicit GPT-5.6 lead
|
|
221
|
+
resets. Credential-risk or malformed config stays no-write with no backup
|
|
212
222
|
and the installer directs model selection to `hermes model`.
|
|
213
223
|
Direct mutation also requires exact 0.17.0 or 0.19.0 source markers for both the
|
|
214
224
|
per-batch limit, global delegation route, and Responses route. A source hash is rechecked immediately
|
|
@@ -84,7 +84,11 @@ PORTED_SKILLS = [
|
|
|
84
84
|
),
|
|
85
85
|
(
|
|
86
86
|
"frontend-ui-ux",
|
|
87
|
-
"
|
|
87
|
+
"Build and inspect authorized UI with an evolving Design Contract and 17 bundled design references.",
|
|
88
|
+
),
|
|
89
|
+
(
|
|
90
|
+
"readme-studio",
|
|
91
|
+
"Write factual READMEs and compose local covers with outlined type, honest image capability and verified motion.",
|
|
88
92
|
),
|
|
89
93
|
(
|
|
90
94
|
"lit-commit",
|
|
@@ -102,15 +102,29 @@ _SKILL_ROUTE_CONTRACTS = {
|
|
|
102
102
|
),
|
|
103
103
|
"frontend-ui-ux": (
|
|
104
104
|
"Design target",
|
|
105
|
-
"Mode Contract:
|
|
106
|
-
"and
|
|
107
|
-
"
|
|
105
|
+
"Mode Contract: an authorized design/build request with a sufficient target proceeds to "
|
|
106
|
+
"implementation and rendered inspection. Record a compact direction and evolve the "
|
|
107
|
+
"Design Contract with the work; do not stop at a contract or demand routine reapproval.",
|
|
108
|
+
"Review-only and plan-only requests are read-only. Incidental UI words grant no write "
|
|
109
|
+
"authority. Ask one material question per turn while target or direction conflicts or "
|
|
110
|
+
"named directions stay undecided (not defaults); retain answers, build once resolved.",
|
|
108
111
|
"Every field you record must be one the shipped validator accepts. `design_contract_validation` "
|
|
109
112
|
"answers `contract has unapproved keys [...]` and exits 1 on anything else; the reference "
|
|
110
113
|
"documents name the real fields.",
|
|
111
114
|
"Verification is a separate skill: when the surface is renderable, run lithermes:visual-qa "
|
|
112
115
|
"before claiming the change is done. Naming it here is not the same as having run it.",
|
|
113
116
|
),
|
|
117
|
+
"readme-studio": (
|
|
118
|
+
"README target",
|
|
119
|
+
"Mode Contract: inspect repository facts, then implement the authorized README and "
|
|
120
|
+
"local cover. Review-only and plan-only requests are read-only.",
|
|
121
|
+
"Read the installed lithermes:readme-studio skill and its references before composition. "
|
|
122
|
+
"Use only a native Hermes image tool actually available in this session; otherwise "
|
|
123
|
+
"report IMAGE_GENERATION_UNAVAILABLE and continue independent fact work. A supplied "
|
|
124
|
+
"background permits composition, never a native-generation claim.",
|
|
125
|
+
"Keep outlined type, licensed font records, editable source, static fallback and "
|
|
126
|
+
"verified 60fps master/compact preview. No login, credential workaround or host dependency.",
|
|
127
|
+
),
|
|
114
128
|
"visual-qa": (
|
|
115
129
|
"Verification target",
|
|
116
130
|
"Mode Contract: verify a rendered surface with captured evidence. A claim without an "
|
|
@@ -246,7 +260,7 @@ def _build_skill_route_context(
|
|
|
246
260
|
# families point at their entrypoint instead, and browser-drive joins them for
|
|
247
261
|
# the same reason: what must be in context is the MEASURED verdict below, not
|
|
248
262
|
# six kilobytes of prose the bound would truncate anyway.
|
|
249
|
-
reference_only = large_family or route.mode in {"browser-drive", "lit-code"}
|
|
263
|
+
reference_only = large_family or route.mode in {"browser-drive", "lit-code", "readme-studio"}
|
|
250
264
|
body = (
|
|
251
265
|
f'<lithermes-skill-reference name="{route.mode}">'
|
|
252
266
|
f"Read skills/{route.mode}/SKILL.md from the installed plugin before acting; "
|
|
@@ -92,6 +92,7 @@ _BARE_SKILL_PREFIXES = (
|
|
|
92
92
|
# after case and stays. Both ids are hyphenated compounds, so neither can be
|
|
93
93
|
# reached by an ordinary English sentence; see the token-shape note below.
|
|
94
94
|
("frontend-ui-ux", "frontend-ui-ux"),
|
|
95
|
+
("readme-studio", "readme-studio"),
|
|
95
96
|
("visual-qa", "visual-qa"),
|
|
96
97
|
("structural-search", "structural-search"),
|
|
97
98
|
# Name-only, deliberately. A message that merely mentions a browser, a URL, or
|
|
@@ -133,6 +134,7 @@ _LIT_SKILL_SUFFIXES = (
|
|
|
133
134
|
("slop", "lit-burnoff"),
|
|
134
135
|
("rules", "rules"),
|
|
135
136
|
("frontend-ui-ux", "frontend-ui-ux"),
|
|
137
|
+
("readme-studio", "readme-studio"),
|
|
136
138
|
("visual-qa", "visual-qa"),
|
|
137
139
|
# `design` is safe HERE and only here: the user already typed `lit`, so intent is
|
|
138
140
|
# declared. It is deliberately not a bare route.
|
|
@@ -61,11 +61,25 @@ _RUNTIME_STEM = "".join(("co", "dex"))
|
|
|
61
61
|
_OPENAI_PROVIDER = f"openai-{_RUNTIME_STEM}"
|
|
62
62
|
_RESPONSES_MODE = f"{_RUNTIME_STEM}_responses"
|
|
63
63
|
_ASTRA_MODEL = "gpt-6-astra"
|
|
64
|
-
|
|
64
|
+
_SOL_MODEL = "gpt-6-sol"
|
|
65
|
+
_LUNA_MODEL = "gpt-6-luna"
|
|
66
|
+
_LEGACY_SOL_MODEL = "gpt-5.6-sol"
|
|
67
|
+
_TERRA_MODEL = "gpt-5.6-terra"
|
|
68
|
+
_LEGACY_LUNA_MODEL = "gpt-5.6-luna"
|
|
69
|
+
_LUNA_MODELS = frozenset((_LUNA_MODEL, _LEGACY_LUNA_MODEL))
|
|
70
|
+
_GPT6_LEAD_EFFORTS = frozenset(("low", "medium", "high", "xhigh", "max", "ultra"))
|
|
71
|
+
_GPT6_LUNA_EFFORTS = frozenset(("low", "medium", "high", "xhigh", "max"))
|
|
72
|
+
_LEGACY_LUNA_EFFORTS = frozenset(("high", "max"))
|
|
73
|
+
_LEGACY_SOL_EFFORTS = frozenset(("high", "xhigh"))
|
|
74
|
+
_TERRA_EFFORTS = frozenset(("high", "xhigh", "max"))
|
|
75
|
+
_ASTRA_EFFORTS = _GPT6_LEAD_EFFORTS
|
|
65
76
|
_OPENAI_CATALOG_EFFORTS = {
|
|
66
77
|
_ASTRA_MODEL: _ASTRA_EFFORTS,
|
|
67
|
-
|
|
68
|
-
|
|
78
|
+
_SOL_MODEL: _GPT6_LEAD_EFFORTS,
|
|
79
|
+
_LUNA_MODEL: _GPT6_LUNA_EFFORTS,
|
|
80
|
+
_LEGACY_SOL_MODEL: _LEGACY_SOL_EFFORTS,
|
|
81
|
+
_TERRA_MODEL: _TERRA_EFFORTS,
|
|
82
|
+
_LEGACY_LUNA_MODEL: _LEGACY_LUNA_EFFORTS,
|
|
69
83
|
"gpt-5.6": frozenset(("high",)),
|
|
70
84
|
}
|
|
71
85
|
_REVIEWER_ROUTE_NAME = "".join(chr(code) for code in (109, 111, 109, 117, 115))
|
|
@@ -254,9 +268,12 @@ def _parse_capabilities(host_version: str) -> CapabilityResult:
|
|
|
254
268
|
if any(key in delegation_config for key in ("base_url", "api_mode")) or custom_delegation_provider:
|
|
255
269
|
return UnavailableCapabilities("custom global child transport is preserved; managed route unapplied")
|
|
256
270
|
if provider == _OPENAI_PROVIDER and model == _ASTRA_MODEL and not _effort_is(effort, _ASTRA_EFFORTS):
|
|
257
|
-
return UnavailableCapabilities("parent Astra effort is unsupported or missing; choose low, medium, high, xhigh, or
|
|
271
|
+
return UnavailableCapabilities("parent Astra effort is unsupported or missing; choose low, medium, high, xhigh, max, or ultra")
|
|
258
272
|
if child_provider == _OPENAI_PROVIDER and child_model == _ASTRA_MODEL and not _effort_is(child_effort, _ASTRA_EFFORTS):
|
|
259
|
-
return UnavailableCapabilities("global child Astra effort is unsupported or missing; choose low, medium, high, xhigh, or
|
|
273
|
+
return UnavailableCapabilities("global child Astra effort is unsupported or missing; choose low, medium, high, xhigh, max, or ultra")
|
|
274
|
+
if provider == _OPENAI_PROVIDER and model in _OPENAI_CATALOG_EFFORTS and not _cataloged_route(model, effort):
|
|
275
|
+
allowed = ", ".join(sorted(_OPENAI_CATALOG_EFFORTS[model]))
|
|
276
|
+
return UnavailableCapabilities(f"parent {model} effort is unsupported or missing; choose {allowed}")
|
|
260
277
|
sampling_issue = _managed_astra_sampling_issue(
|
|
261
278
|
config,
|
|
262
279
|
provider=provider,
|
|
@@ -279,30 +296,45 @@ def _parse_capabilities(host_version: str) -> CapabilityResult:
|
|
|
279
296
|
cataloged_parent = provider == _OPENAI_PROVIDER and _cataloged_route(model, effort)
|
|
280
297
|
cataloged_child = child_provider == _OPENAI_PROVIDER and _cataloged_route(child_model, child_effort)
|
|
281
298
|
astra = (astra_parent or astra_child) and cataloged_parent and cataloged_child
|
|
282
|
-
|
|
299
|
+
sol_lead = (
|
|
283
300
|
provider == _OPENAI_PROVIDER
|
|
284
|
-
and model
|
|
285
|
-
and effort
|
|
286
|
-
and child_model
|
|
287
|
-
and child_effort
|
|
301
|
+
and model in (_SOL_MODEL, _LEGACY_SOL_MODEL)
|
|
302
|
+
and _cataloged_route(model, effort)
|
|
303
|
+
and child_model in _LUNA_MODELS
|
|
304
|
+
and _cataloged_route(child_model, child_effort)
|
|
305
|
+
)
|
|
306
|
+
terra_lead = (
|
|
307
|
+
provider == _OPENAI_PROVIDER
|
|
308
|
+
and model == _TERRA_MODEL
|
|
309
|
+
and _cataloged_route(model, effort)
|
|
310
|
+
and child_model in _LUNA_MODELS
|
|
311
|
+
and _cataloged_route(child_model, child_effort)
|
|
288
312
|
)
|
|
289
313
|
approved = (
|
|
290
314
|
astra
|
|
291
|
-
or
|
|
315
|
+
or sol_lead
|
|
316
|
+
or terra_lead
|
|
292
317
|
or (
|
|
293
318
|
provider == _OPENAI_PROVIDER
|
|
294
|
-
and model ==
|
|
319
|
+
and model == _LEGACY_LUNA_MODEL
|
|
295
320
|
and effort == "max"
|
|
296
|
-
and child_model ==
|
|
297
|
-
and _effort_is(child_effort,
|
|
321
|
+
and child_model == _LEGACY_LUNA_MODEL
|
|
322
|
+
and _effort_is(child_effort, _LEGACY_LUNA_EFFORTS)
|
|
298
323
|
)
|
|
299
324
|
)
|
|
300
325
|
if (
|
|
301
326
|
child_provider == _OPENAI_PROVIDER
|
|
302
|
-
and child_model ==
|
|
327
|
+
and child_model == _LEGACY_LUNA_MODEL
|
|
303
328
|
and child_effort == "xhigh"
|
|
304
329
|
):
|
|
305
|
-
return UnavailableCapabilities("global child Luna xhigh is forbidden
|
|
330
|
+
return UnavailableCapabilities("global child Luna xhigh is forbidden for legacy Luna; it runs at high or max")
|
|
331
|
+
if (
|
|
332
|
+
child_provider == _OPENAI_PROVIDER
|
|
333
|
+
and child_model in _LUNA_MODELS
|
|
334
|
+
and not _cataloged_route(child_model, child_effort)
|
|
335
|
+
):
|
|
336
|
+
allowed = ", ".join(sorted(_OPENAI_CATALOG_EFFORTS[child_model]))
|
|
337
|
+
return UnavailableCapabilities(f"global child Luna effort is unsupported; choose {allowed}")
|
|
306
338
|
if not approved:
|
|
307
339
|
return UnavailableCapabilities("approved Astra lead and global child Luna max routes are not configured")
|
|
308
340
|
try:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"syncedAt": "2026-09-
|
|
2
|
+
"syncedAt": "2026-09-24T07:38:36.208Z",
|
|
3
3
|
"source": "bundled-payload",
|
|
4
|
-
"sourceHash": "
|
|
4
|
+
"sourceHash": "ae1d45a687de0c01415820ff467295f77a175cc393e4923b940729668f58c49b",
|
|
5
5
|
"files": [
|
|
6
6
|
{
|
|
7
7
|
"path": "NOTICE.md",
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"path": "README.md",
|
|
12
|
-
"sha256": "
|
|
12
|
+
"sha256": "8e0eee0e8ff8b8c6fd8b38c1d5c4925730db97fe2ceb5cce1a54e501acc27d57"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "__init__.py",
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "bf8627a5d951dbb294c3dd2bff36a839ca26dbe5047af0462852eeeb2fde6aea"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "auto_update.py",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"path": "core_contexts.py",
|
|
40
|
-
"sha256": "
|
|
40
|
+
"sha256": "a60c32bd38a47ecac6bffc39a8549d2ea1b3b87733d666fbb1be4b5685f2fbbb"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"path": "core_contract.py",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
"path": "core_routing.py",
|
|
68
|
-
"sha256": "
|
|
68
|
+
"sha256": "415d43988b05543ab6f95c73baab246f3b40ed1e3f3e7940ede4171efb48e62f"
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"path": "core_runs.py",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
"path": "diagnostics.py",
|
|
88
|
-
"sha256": "
|
|
88
|
+
"sha256": "8d8196c1c50a6dfa44a68f8681a22b3c84428776bc7b0af1847d80d30346f0d0"
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
"path": "handoff.py",
|
|
@@ -157,7 +157,7 @@
|
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"path": "plugin.yaml",
|
|
160
|
-
"sha256": "
|
|
160
|
+
"sha256": "9a82f3005c45dab04f48b1bdd4ef79937bdbf7dae7e0f2fcd9a5a391a64c3c96"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"path": "provider_metrics.py",
|
|
@@ -545,7 +545,7 @@
|
|
|
545
545
|
},
|
|
546
546
|
{
|
|
547
547
|
"path": "skills/frontend-ui-ux/SKILL.md",
|
|
548
|
-
"sha256": "
|
|
548
|
+
"sha256": "9a33479d6a5e1f04afb19fb151175e56d406ab38c4c6b4ec6f8fbb97d7e92e64"
|
|
549
549
|
},
|
|
550
550
|
{
|
|
551
551
|
"path": "skills/frontend-ui-ux/references/_canonical-corpus/.gitattributes",
|
|
@@ -1245,7 +1245,7 @@
|
|
|
1245
1245
|
},
|
|
1246
1246
|
{
|
|
1247
1247
|
"path": "skills/frontend-ui-ux/references/complete-contract.md",
|
|
1248
|
-
"sha256": "
|
|
1248
|
+
"sha256": "1a7d471fc7a12ec4eb74d7a78110e5104564a64417f2687e90df89dd80c3b249"
|
|
1249
1249
|
},
|
|
1250
1250
|
{
|
|
1251
1251
|
"path": "skills/frontend-ui-ux/references/composition.md",
|
|
@@ -1255,6 +1255,10 @@
|
|
|
1255
1255
|
"path": "skills/frontend-ui-ux/references/creative-directions.md",
|
|
1256
1256
|
"sha256": "c7e9df8e86b51ed36761099bf29fbc8981e1762e4fbbdcce1ec0e4562cd2ae33"
|
|
1257
1257
|
},
|
|
1258
|
+
{
|
|
1259
|
+
"path": "skills/frontend-ui-ux/references/default-editorial-pixel.json",
|
|
1260
|
+
"sha256": "27788d347cafd23305b5d3d30f3721b6574210f6718781bfb78e56a31a16280d"
|
|
1261
|
+
},
|
|
1258
1262
|
{
|
|
1259
1263
|
"path": "skills/frontend-ui-ux/references/evidence-review.md",
|
|
1260
1264
|
"sha256": "1dac4581ee32b39164f6d5eed97682944969072b30441d45ddf54835ad6a4c50"
|
|
@@ -1273,7 +1277,7 @@
|
|
|
1273
1277
|
},
|
|
1274
1278
|
{
|
|
1275
1279
|
"path": "skills/frontend-ui-ux/references/operating-lanes.md",
|
|
1276
|
-
"sha256": "
|
|
1280
|
+
"sha256": "5c3ea0e5a0e1c3e055bcb1e56598b166152bfcbd2408c4b197c25a823afa8b02"
|
|
1277
1281
|
},
|
|
1278
1282
|
{
|
|
1279
1283
|
"path": "skills/frontend-ui-ux/references/performance-delivery.md",
|
|
@@ -1281,7 +1285,11 @@
|
|
|
1281
1285
|
},
|
|
1282
1286
|
{
|
|
1283
1287
|
"path": "skills/frontend-ui-ux/references/product-direction.md",
|
|
1284
|
-
"sha256": "
|
|
1288
|
+
"sha256": "97a7ac17af9dd50026a4625bd24afd0f05f468c4c5823758f6e307507ccebe46"
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
"path": "skills/frontend-ui-ux/references/production.md",
|
|
1292
|
+
"sha256": "f859bbca4a70621c4440feb4b288d6225e6ecdd206ef4e32baeea199526df2a3"
|
|
1285
1293
|
},
|
|
1286
1294
|
{
|
|
1287
1295
|
"path": "skills/frontend-ui-ux/references/redesign-playbook.md",
|
|
@@ -1847,6 +1855,90 @@
|
|
|
1847
1855
|
"path": "skills/lsp-setup/scripts/verify-lsp.ts",
|
|
1848
1856
|
"sha256": "33c6c22236234ed5f4db7b0deae560b9b5e0c8c018be4ded1a6c1179792655fe"
|
|
1849
1857
|
},
|
|
1858
|
+
{
|
|
1859
|
+
"path": "skills/readme-studio/SKILL.md",
|
|
1860
|
+
"sha256": "010f567e56dbfb73da49acbaa2762737a7351cd0856123e86ac49b5b8d2b3533"
|
|
1861
|
+
},
|
|
1862
|
+
{
|
|
1863
|
+
"path": "skills/readme-studio/references/decoration-patterns.md",
|
|
1864
|
+
"sha256": "be96f61a63fd445cf29d3fa606cc239c76218b4b69e6d84cd47e1b4563b0494c"
|
|
1865
|
+
},
|
|
1866
|
+
{
|
|
1867
|
+
"path": "skills/readme-studio/references/facts.md",
|
|
1868
|
+
"sha256": "649d2e532864c16f3010cdbc89a045956a308d7d1f20ec137ff29d67b2dfd10a"
|
|
1869
|
+
},
|
|
1870
|
+
{
|
|
1871
|
+
"path": "skills/readme-studio/references/motion.md",
|
|
1872
|
+
"sha256": "570c0bd7c32e32db71038d446f4c7a6c9ad07b389a9f7414cf739734ba254baa"
|
|
1873
|
+
},
|
|
1874
|
+
{
|
|
1875
|
+
"path": "skills/readme-studio/references/production-interview.md",
|
|
1876
|
+
"sha256": "7ec8fcd79e3d55e8d17642696793f557717db0453ba7f0008eb3e80cc6e471a2"
|
|
1877
|
+
},
|
|
1878
|
+
{
|
|
1879
|
+
"path": "skills/readme-studio/references/type-and-images.md",
|
|
1880
|
+
"sha256": "029027269e3766ef2e8749bd7e78e80aff343bf4c290d2a8c7086680b050b800"
|
|
1881
|
+
},
|
|
1882
|
+
{
|
|
1883
|
+
"path": "skills/readme-studio/scripts/check_facts.py",
|
|
1884
|
+
"sha256": "2b3de706c553ef0616e8d4e012cc547bc63103222f2943e3d1b6c414edb3b3be"
|
|
1885
|
+
},
|
|
1886
|
+
{
|
|
1887
|
+
"path": "skills/readme-studio/templates/cover-section.md",
|
|
1888
|
+
"sha256": "345c4d8d1cbddde35af02715e52bab45763d2d9a11de88a9f9eae2ec5910adb0"
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"path": "skills/readme-studio/templates/cover-settings.json",
|
|
1892
|
+
"sha256": "d3696c1ba05f6fe8ab6824f1b89bd7c8c9ea242d966a20e60decd9dad93289f9"
|
|
1893
|
+
},
|
|
1894
|
+
{
|
|
1895
|
+
"path": "skills/readme-studio/templates/cover-source.json",
|
|
1896
|
+
"sha256": "3d72d6f05d2941f0c6273d85353271f1c76438199eb0599f938ec53e54562d47"
|
|
1897
|
+
},
|
|
1898
|
+
{
|
|
1899
|
+
"path": "skills/readme-studio/templates/facts.json",
|
|
1900
|
+
"sha256": "6cbb9fc3ee132bc2dfdeb4b1b803320bcd0aa561613880cec0ead352d18dc836"
|
|
1901
|
+
},
|
|
1902
|
+
{
|
|
1903
|
+
"path": "skills/readme-studio/templates/hyperframes/index.html",
|
|
1904
|
+
"sha256": "13e01dd37f74542f9f20295121b69a2baf44aab1009d49094c94a683b162b4f9"
|
|
1905
|
+
},
|
|
1906
|
+
{
|
|
1907
|
+
"path": "skills/readme-studio/templates/hyperframes/index.motion.json",
|
|
1908
|
+
"sha256": "bef879ce5abe7810d73cc733ab635884ec807eccd7bc5e1c9bc9900049187249"
|
|
1909
|
+
},
|
|
1910
|
+
{
|
|
1911
|
+
"path": "skills/readme-studio/templates/hyperframes/package-lock.json",
|
|
1912
|
+
"sha256": "0e0e2b1826133e71eb031d33d8071638d27dc91a4d904c13a5527096b9512324"
|
|
1913
|
+
},
|
|
1914
|
+
{
|
|
1915
|
+
"path": "skills/readme-studio/templates/hyperframes/package.json",
|
|
1916
|
+
"sha256": "5e5612bbd32ef12b388cac17bc21a73c75c85e1afa88dcd4c333c627aea7ac9a"
|
|
1917
|
+
},
|
|
1918
|
+
{
|
|
1919
|
+
"path": "skills/readme-studio/templates/remotion/package-lock.json",
|
|
1920
|
+
"sha256": "2dd475a00975edccf6a6399f3fa728b4e69d8d7c8229416edf2c702fd9d47bba"
|
|
1921
|
+
},
|
|
1922
|
+
{
|
|
1923
|
+
"path": "skills/readme-studio/templates/remotion/package.json",
|
|
1924
|
+
"sha256": "2cb155200ddbcf5d60066500f1bf2dd0b4951b862e8417c17eae186e333c4cbb"
|
|
1925
|
+
},
|
|
1926
|
+
{
|
|
1927
|
+
"path": "skills/readme-studio/templates/remotion/src/index.tsx",
|
|
1928
|
+
"sha256": "40e4b5dc43eb01ac1930011533a591ce83c814f1d98b2746b5cd54c9153336f7"
|
|
1929
|
+
},
|
|
1930
|
+
{
|
|
1931
|
+
"path": "skills/readme-studio/templates/typography/outline.mjs",
|
|
1932
|
+
"sha256": "e19797f18ae29021be6191263a4fc65e190cb9690ee88fd67902e306595f0216"
|
|
1933
|
+
},
|
|
1934
|
+
{
|
|
1935
|
+
"path": "skills/readme-studio/templates/typography/package-lock.json",
|
|
1936
|
+
"sha256": "d930544aa8f87bc0d459fa102754197f995042e112becd38163d85edcea375aa"
|
|
1937
|
+
},
|
|
1938
|
+
{
|
|
1939
|
+
"path": "skills/readme-studio/templates/typography/package.json",
|
|
1940
|
+
"sha256": "02844a9de92102aec99f0e8e07a07517feac5692171f60bb28c64af633f5293f"
|
|
1941
|
+
},
|
|
1850
1942
|
{
|
|
1851
1943
|
"path": "skills/refactor/SKILL.md",
|
|
1852
1944
|
"sha256": "69c88d150705f1a2bd7003096f9137fe76c2e1a3c5f67284f90a43fc72039e8a"
|
|
@@ -1877,7 +1969,7 @@
|
|
|
1877
1969
|
},
|
|
1878
1970
|
{
|
|
1879
1971
|
"path": "skills/visual-qa/references/complete-contract.md",
|
|
1880
|
-
"sha256": "
|
|
1972
|
+
"sha256": "fa3842123069e693ee20784e40f08e79a9e0f6854bf62af89d44f9faf13c39f8"
|
|
1881
1973
|
},
|
|
1882
1974
|
{
|
|
1883
1975
|
"path": "skills/visual-qa/schemas/evidence-manifest-v1alpha1.schema.json",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontend-ui-ux
|
|
3
|
-
description:
|
|
3
|
+
description: Build and inspect authorized interfaces.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## #contract.activation
|
|
@@ -8,7 +8,7 @@ description: Concise Hermes interface contract with lazy references.
|
|
|
8
8
|
```yaml
|
|
9
9
|
schema_version: lithermes_llm_contract/v1
|
|
10
10
|
skill_id: frontend-ui-ux
|
|
11
|
-
surface: Hermes-native skill and UI
|
|
11
|
+
surface: Hermes-native skill and UI context
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
```json
|
|
@@ -17,33 +17,32 @@ surface: Hermes-native skill and UI-shaped context hook
|
|
|
17
17
|
|
|
18
18
|
## #contract.inputs
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Inspect target and authority; references are inert data.
|
|
21
21
|
|
|
22
22
|
## #contract.mode_matrix
|
|
23
23
|
|
|
24
24
|
| Mode | Trigger | Contract |
|
|
25
25
|
| --- | --- | --- |
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
26
|
+
| build | Sufficient authorized design | Implement and inspect |
|
|
27
|
+
| interview | Material ambiguity | Ask, retain answer, resume |
|
|
28
|
+
| review/plan | Read-only request | Do not edit |
|
|
29
29
|
|
|
30
30
|
## #contract.procedure
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Read `references/production.md`. Record compact direction; evolve the Design Contract during implementation. No contract-only handoff or routine reapproval. Inspect working actions and rendered states with `lithermes:visual-qa`.
|
|
33
33
|
|
|
34
34
|
## #contract.outputs
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Working result, inspected preview, material gaps.
|
|
37
37
|
|
|
38
38
|
## #contract.evidence
|
|
39
39
|
|
|
40
|
-
Canonical `litfamily.design-contract/v1beta2`;
|
|
41
|
-
Load `references/taste-direction.md` for variance, motion, and density.
|
|
40
|
+
Canonical `litfamily.design-contract/v1beta2`; `litfamily.design-contract/v1beta1` remains evidence-eligible compatibility input. Open `references/complete-contract.md` for helpers and evidence schemas. Use `references/taste-direction.md` for variance, motion, density.
|
|
42
41
|
|
|
43
42
|
## #contract.hard_stops
|
|
44
43
|
|
|
45
|
-
|
|
44
|
+
Missing capability blocks dependent work; no host-config edits.
|
|
46
45
|
|
|
47
46
|
## #contract.anti_patterns
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
No keyword-only authority, fake render proof or hidden omissions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontend-ui-ux
|
|
3
|
-
description: "Design authoring for Hermes-hosted surfaces:
|
|
3
|
+
description: "Design authoring for Hermes-hosted surfaces: evolve a Design Contract while building web, TUI, doc, and installer UI against it with bounded evidence"
|
|
4
4
|
---
|
|
5
5
|
## #contract.activation
|
|
6
6
|
|
|
@@ -61,10 +61,11 @@ after_payload_edit: "npm --prefix packages/lithermes-installer run sync-plugin -
|
|
|
61
61
|
1. Classify the request against the frontmatter description and the route wrapper.
|
|
62
62
|
2. Name the operating lane and the smallest complete outcome, plus explicit non-goals,
|
|
63
63
|
before mutating a file.
|
|
64
|
-
3.
|
|
65
|
-
|
|
64
|
+
3. Record a compact direction and inventory, then evolve the Design Contract during
|
|
65
|
+
authorized implementation. Validate and hash the review snapshot before evidence review.
|
|
66
|
+
Do not require complete schema output or routine reapproval before an adequate build.
|
|
66
67
|
4. Open only the reference documents the lane needs, using the router below.
|
|
67
|
-
5. Implement
|
|
68
|
+
5. Implement the authorized inventory using Hermes-native surfaces: slash commands,
|
|
68
69
|
`pre_llm_call` context, `delegate_task` batches, and `goal_*` tools for durable criteria.
|
|
69
70
|
6. Verify with targeted commands plus a real-surface probe, then refresh payload hashes
|
|
70
71
|
when any file under `assets/lithermes-plugin/**` changed.
|
|
@@ -112,7 +113,7 @@ after_payload_edit: "npm --prefix packages/lithermes-installer run sync-plugin -
|
|
|
112
113
|
| Anti-pattern | Replacement |
|
|
113
114
|
|---|---|
|
|
114
115
|
| copy sibling repo prose or foreign harness names | write in Hermes vocabulary: `plugin.yaml`, Python hooks, `delegate_task`, `goal_*` |
|
|
115
|
-
|
|
|
116
|
+
| contract-only handoff on a build request | start with compact direction, implement, then validate the evolved inventory |
|
|
116
117
|
| claim done from tests alone | pair tests with route/plugin/CLI evidence and cleanup receipts |
|
|
117
118
|
| a screenshot as proof of quality | contract-hash-keyed evidence for every inventory entry |
|
|
118
119
|
| broaden scope while editing | keep changes tied to the request and preserve unrelated worktree state |
|
|
@@ -139,7 +140,7 @@ Hermes registers this as `lithermes:frontend-ui-ux`. It is a skill, not a slash
|
|
|
139
140
|
|
|
140
141
|
## Prerequisites and the input contract
|
|
141
142
|
|
|
142
|
-
|
|
143
|
+
Inspect these as the work begins. Ask about material uncertainty; record reasonable defaults when the user delegates the choice.
|
|
143
144
|
|
|
144
145
|
- The product, the audience, the platform, and the stack actually in the repository.
|
|
145
146
|
- The operating lane, chosen from what is on disk rather than from how the request was
|
|
@@ -197,6 +198,7 @@ asking; a reference nobody can find does not exist.
|
|
|
197
198
|
| `references/visual-reconstruction.md` | How do I rebuild a supplied target as a live tree without raster fakery? |
|
|
198
199
|
| `references/redesign-playbook.md` | How do I change appearance without silently losing product behavior? |
|
|
199
200
|
| `references/evidence-review.md` | What packet does an independent reviewer need, and which verdicts exist? |
|
|
201
|
+
| `references/production.md` | How does authorized production proceed, ask questions and resume? |
|
|
200
202
|
| `references/taste-direction.md` | Which variance, motion, and density dials should the design contract freeze? |
|
|
201
203
|
|
|
202
204
|
### Canonical design library route
|
|
@@ -271,7 +273,7 @@ honestly; and borrowed voice, taken from a product whose audience is not this on
|
|
|
271
273
|
Dials belong in the contract, not in prose around it. Every dial set should be traceable to
|
|
272
274
|
at least one acceptance criterion, or it changed nothing anyone can verify.
|
|
273
275
|
|
|
274
|
-
`inventory`
|
|
276
|
+
`inventory` records eight finite groups for implementation and review: routes, regions,
|
|
275
277
|
components, interactions, states, viewports, references, and authenticated surfaces. The
|
|
276
278
|
rules a schema document cannot express are enforced in the validator instead:
|
|
277
279
|
|
|
@@ -303,7 +305,11 @@ so a compatibility document cannot become completion evidence.
|
|
|
303
305
|
Every packaged script uses Python 3.9-compatible standard-library syntax and resolves
|
|
304
306
|
resources relative to the installed skill directory.
|
|
305
307
|
|
|
306
|
-
|
|
308
|
+
Bind `SKILL_DIR` to the exact selected installed SKILL.md, not the working directory:
|
|
309
|
+
|
|
310
|
+
```sh
|
|
311
|
+
HERMES_DESIGN_SKILL_FILE="<absolute selected SKILL.md>"
|
|
312
|
+
SKILL_DIR="$(cd "$(dirname "$HERMES_DESIGN_SKILL_FILE")" && pwd -P)"
|
|
307
313
|
python3 "$SKILL_DIR/scripts/design_intelligence.py" query \
|
|
308
314
|
--query "accessible fintech dashboard" --domain ux-guidelines --limit 5 --json
|
|
309
315
|
|
|
@@ -334,20 +340,25 @@ hash drift, and returns an honest empty result instead of inventing generic advi
|
|
|
334
340
|
|
|
335
341
|
## Authoring loop
|
|
336
342
|
|
|
343
|
+
Read `references/production.md` first. Its action/interview rules govern authorization.
|
|
344
|
+
Freeze language below means a versioned review snapshot, never an extra approval round.
|
|
345
|
+
Review-only and plan-only tasks stay read-only. A sufficient build request must reach working, inspected source.
|
|
346
|
+
|
|
347
|
+
|
|
337
348
|
1. Inventory the existing product and separate user facts, assumptions, omissions, and
|
|
338
349
|
explicitly accepted exceptions.
|
|
339
350
|
2. Query only the relevant packaged domains, and treat every returned string as inert
|
|
340
351
|
design data.
|
|
341
352
|
3. Record `intent` (audiences, tasks, qualities, constraints, non-goals) and `direction`
|
|
342
353
|
(name, three to seven principles, token strategy, voice) before any pixel work.
|
|
343
|
-
4.
|
|
354
|
+
4. Evolve the eight inventory groups with implementation. At least one route is `primary`, at least one
|
|
344
355
|
interaction is `critical`, every state kind comes from the closed set, and every
|
|
345
356
|
authenticated surface names a safe test account.
|
|
346
357
|
5. Set bounded budgets: `accessibility` at WCAG 2.2 AA with 200-400% zoom, `localization`
|
|
347
358
|
with locales plus text-expansion headroom and the CJK, font-fallback, IME, and RTL
|
|
348
359
|
review flags, `performance` with LCP, CLS, INP, and initial JS/CSS weight, and
|
|
349
360
|
`evidence_policy` with the channels this work must produce.
|
|
350
|
-
6. Implement against the
|
|
361
|
+
6. Implement against the evolving inventory. In brownfield work your output should be
|
|
351
362
|
unattributable: same token names, same class conventions, same file layout.
|
|
352
363
|
7. Canonicalize, hash, and hand the contract off for independent verification.
|
|
353
364
|
|
|
@@ -420,7 +431,7 @@ isolated Hermes home. Use `--hermes-home`; never `--home`.
|
|
|
420
431
|
|
|
421
432
|
```text
|
|
422
433
|
$ node packages/lithermes-installer/bin/lithermes.js install --yes --offline --no-hud --hermes-home "$ISOLATED"
|
|
423
|
-
Installed LitHermes 1.0.
|
|
434
|
+
Installed LitHermes 1.0.6
|
|
424
435
|
plugin: $ISOLATED/plugins/lithermes
|
|
425
436
|
model config: updated
|
|
426
437
|
|
|
@@ -437,8 +448,8 @@ installed payload: PASS
|
|
|
437
448
|
enabled config: PASS
|
|
438
449
|
|
|
439
450
|
$ hermes lithermes doctor
|
|
440
|
-
[OK] plugin.yaml readable (version 1.0.
|
|
441
|
-
[OK] skills bundled:
|
|
451
|
+
[OK] plugin.yaml readable (version 1.0.6)
|
|
452
|
+
[OK] skills bundled: 32
|
|
442
453
|
[OK] litgoal durable runtime importable
|
|
443
454
|
```
|
|
444
455
|
|