@litfamily/lithermes 1.0.0
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/LICENSE +21 -0
- package/README.md +186 -0
- package/README_Ko-KR.md +188 -0
- package/assets/lithermes-plugin/NOTICE.md +46 -0
- package/assets/lithermes-plugin/README.md +390 -0
- package/assets/lithermes-plugin/__init__.py +589 -0
- package/assets/lithermes-plugin/auto_update.py +338 -0
- package/assets/lithermes-plugin/bounded_work.py +1120 -0
- package/assets/lithermes-plugin/bounded_work_tools.py +115 -0
- package/assets/lithermes-plugin/core.py +1813 -0
- package/assets/lithermes-plugin/core_commands.py +243 -0
- package/assets/lithermes-plugin/core_contexts.py +458 -0
- package/assets/lithermes-plugin/core_contract.py +456 -0
- package/assets/lithermes-plugin/core_plans.py +418 -0
- package/assets/lithermes-plugin/core_reader_args.py +34 -0
- package/assets/lithermes-plugin/core_recap_command.py +141 -0
- package/assets/lithermes-plugin/core_recap_state.py +175 -0
- package/assets/lithermes-plugin/core_review.py +198 -0
- package/assets/lithermes-plugin/core_routing.py +641 -0
- package/assets/lithermes-plugin/core_runs.py +283 -0
- package/assets/lithermes-plugin/core_runtime.py +251 -0
- package/assets/lithermes-plugin/core_workflow_commands.py +207 -0
- package/assets/lithermes-plugin/deliverable_hedge_guard.py +562 -0
- package/assets/lithermes-plugin/diagnostics.py +468 -0
- package/assets/lithermes-plugin/handoff.py +97 -0
- package/assets/lithermes-plugin/knowledge.py +920 -0
- package/assets/lithermes-plugin/knowledge_tools.py +130 -0
- package/assets/lithermes-plugin/lit_mark.py +140 -0
- package/assets/lithermes-plugin/lit_mark_rows.json +1363 -0
- package/assets/lithermes-plugin/litgoal/__init__.py +10 -0
- package/assets/lithermes-plugin/litgoal/cli.py +207 -0
- package/assets/lithermes-plugin/litgoal/hook.py +81 -0
- package/assets/lithermes-plugin/litgoal/model.py +203 -0
- package/assets/lithermes-plugin/litgoal/runtime.py +522 -0
- package/assets/lithermes-plugin/litgoal/store.py +367 -0
- package/assets/lithermes-plugin/litgoal/tools.py +300 -0
- package/assets/lithermes-plugin/output-styles/asd-ste100-ko.md +41 -0
- package/assets/lithermes-plugin/output-styles/asd-ste100.md +40 -0
- package/assets/lithermes-plugin/output-styles/eli5-ko.md +13 -0
- package/assets/lithermes-plugin/output-styles/eli5.md +11 -0
- package/assets/lithermes-plugin/output_styles.py +62 -0
- package/assets/lithermes-plugin/payload-version.json +2107 -0
- package/assets/lithermes-plugin/plugin.yaml +16 -0
- package/assets/lithermes-plugin/provider_metrics.py +161 -0
- package/assets/lithermes-plugin/redaction.py +148 -0
- package/assets/lithermes-plugin/rules/__init__.py +55 -0
- package/assets/lithermes-plugin/rules/bundled-rules/baseline-discipline.md +20 -0
- package/assets/lithermes-plugin/rules/bundled-rules/build-decision-gate.md +19 -0
- package/assets/lithermes-plugin/rules/bundled-rules/windows-git-bash.md +17 -0
- package/assets/lithermes-plugin/rules/constants.py +122 -0
- package/assets/lithermes-plugin/rules/discovery.py +276 -0
- package/assets/lithermes-plugin/rules/engine.py +447 -0
- package/assets/lithermes-plugin/rules/frontmatter.py +149 -0
- package/assets/lithermes-plugin/rules/globmatch.py +333 -0
- package/assets/lithermes-plugin/scientific_visualization.py +158 -0
- package/assets/lithermes-plugin/session_context.py +8 -0
- package/assets/lithermes-plugin/skill_loop.py +2044 -0
- package/assets/lithermes-plugin/skill_observer.py +1778 -0
- package/assets/lithermes-plugin/skills/autoconference/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/autoconference/ORIGIN.json +11 -0
- package/assets/lithermes-plugin/skills/autoconference/SKILL.md +163 -0
- package/assets/lithermes-plugin/skills/autoconference/assets/conference_template.md +76 -0
- package/assets/lithermes-plugin/skills/autoconference/assets/report_template.md +53 -0
- package/assets/lithermes-plugin/skills/autoconference/assets/synthesis_template.md +39 -0
- package/assets/lithermes-plugin/skills/autoconference/dependencies/autoresearch.md +14 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/analyze/SKILL.md +269 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/core/SKILL.md +134 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/core/convergence-guide.md +162 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/core/crash-recovery.md +63 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/debate/SKILL.md +383 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/plan/SKILL.md +304 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/resume/SKILL.md +82 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/ship/SKILL.md +78 -0
- package/assets/lithermes-plugin/skills/autoconference/modes/survey/SKILL.md +376 -0
- package/assets/lithermes-plugin/skills/autoconference/references/agent-prompts.md +110 -0
- package/assets/lithermes-plugin/skills/autoconference/references/conference-protocol.md +90 -0
- package/assets/lithermes-plugin/skills/autoconference/references/core-principles.md +78 -0
- package/assets/lithermes-plugin/skills/autoconference/references/results-logging.md +165 -0
- package/assets/lithermes-plugin/skills/autoconference/references/visualization-guide.md +99 -0
- package/assets/lithermes-plugin/skills/autoconference/scripts/check_conference.sh +197 -0
- package/assets/lithermes-plugin/skills/autoconference/scripts/init_conference.py +489 -0
- package/assets/lithermes-plugin/skills/autoconference/scripts/style_presets.py +104 -0
- package/assets/lithermes-plugin/skills/autoconference/templates/code-performance.md +59 -0
- package/assets/lithermes-plugin/skills/autoconference/templates/debate-mode.md +50 -0
- package/assets/lithermes-plugin/skills/autoconference/templates/prompt-optimization.md +58 -0
- package/assets/lithermes-plugin/skills/autoconference/templates/quick-conference.md +48 -0
- package/assets/lithermes-plugin/skills/autoconference/templates/research-synthesis.md +56 -0
- package/assets/lithermes-plugin/skills/autoconference/templates/survey-mode.md +63 -0
- package/assets/lithermes-plugin/skills/autoresearch/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/autoresearch/ORIGIN.json +11 -0
- package/assets/lithermes-plugin/skills/autoresearch/SKILL.md +175 -0
- package/assets/lithermes-plugin/skills/autoresearch/assets/report_template.md +50 -0
- package/assets/lithermes-plugin/skills/autoresearch/assets/research_template.md +38 -0
- package/assets/lithermes-plugin/skills/autoresearch/assets/results_template.tsv +2 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/core/SKILL.md +204 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/core/evaluator-contract.md +108 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/core/stuck-detection.md +102 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/debug/SKILL.md +240 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/debug/investigation-techniques.md +254 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/fix/SKILL.md +176 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/learn/SKILL.md +96 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/plan/SKILL.md +291 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/predict/SKILL.md +271 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/predict/persona-templates.md +227 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/reason/SKILL.md +174 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/scenario/SKILL.md +168 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/scenario/dimensions.md +173 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/security/SKILL.md +287 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/security/owasp-checklist.md +156 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/security/stride-model.md +191 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/ship/SKILL.md +99 -0
- package/assets/lithermes-plugin/skills/autoresearch/modes/ship/type-checklists.md +158 -0
- package/assets/lithermes-plugin/skills/autoresearch/references/core-principles.md +75 -0
- package/assets/lithermes-plugin/skills/autoresearch/references/results-logging.md +55 -0
- package/assets/lithermes-plugin/skills/autoresearch/references/visualization-guide.md +90 -0
- package/assets/lithermes-plugin/skills/autoresearch/scripts/check_progress.sh +139 -0
- package/assets/lithermes-plugin/skills/autoresearch/scripts/init_research.py +219 -0
- package/assets/lithermes-plugin/skills/autoresearch/scripts/style_presets.py +104 -0
- package/assets/lithermes-plugin/skills/browser-drive/SKILL.md +147 -0
- package/assets/lithermes-plugin/skills/browser-drive/scripts/capability_probe.py +528 -0
- package/assets/lithermes-plugin/skills/comment-checker/SKILL.md +162 -0
- package/assets/lithermes-plugin/skills/debugging/SKILL.md +271 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/00-setup.md +108 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/02-investigate.md +122 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/04-oracle-triple.md +136 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/05-escalate.md +69 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/06-fix.md +116 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/08-qa.md +94 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/09-cleanup.md +164 -0
- package/assets/lithermes-plugin/skills/debugging/references/methodology/partial-runtime-evidence.md +229 -0
- package/assets/lithermes-plugin/skills/debugging/references/runtimes/bundled-js-binary.md +415 -0
- package/assets/lithermes-plugin/skills/debugging/references/runtimes/go.md +252 -0
- package/assets/lithermes-plugin/skills/debugging/references/runtimes/native-binary.md +484 -0
- package/assets/lithermes-plugin/skills/debugging/references/runtimes/node.md +260 -0
- package/assets/lithermes-plugin/skills/debugging/references/runtimes/python.md +248 -0
- package/assets/lithermes-plugin/skills/debugging/references/runtimes/rust.md +234 -0
- package/assets/lithermes-plugin/skills/debugging/references/tools/ghidra.md +212 -0
- package/assets/lithermes-plugin/skills/debugging/references/tools/playwright-cli.md +194 -0
- package/assets/lithermes-plugin/skills/debugging/references/tools/pwndbg.md +263 -0
- package/assets/lithermes-plugin/skills/debugging/references/tools/pwntools.md +265 -0
- package/assets/lithermes-plugin/skills/deep-interview/SKILL.md +419 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/SKILL.md +49 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/.gitattributes +2 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/README.md +248 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/_INDEX.md +191 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/airbnb.md +393 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/airtable.md +92 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/apple.md +250 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/aside.md +209 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/binance.md +348 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/bmw.md +183 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/brutalist-skill.md +92 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/bugatti.md +271 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/cal.md +262 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/claude.md +315 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/clay.md +307 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/clickhouse.md +284 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/clone-from-url.md +65 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/cohere.md +269 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/coinbase.md +132 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/composio.md +310 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/cursor.md +312 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/design-system-architecture.md +244 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/elevenlabs.md +268 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/expo.md +284 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/ferrari.md +317 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/figma.md +223 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/framer.md +249 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/gpt-tasteskill.md +74 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/hashicorp.md +281 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/ibm.md +335 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/image-to-code-skill.md +1228 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/imagegen-brandkit.md +798 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/imagegen-frontend-mobile.md +1465 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/imagegen-frontend-web.md +987 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/intercom.md +149 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/kraken.md +128 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/lamborghini.md +291 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/layout-skill.md +107 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/lazyweb.md +77 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/linear.app.md +370 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/lovable.md +301 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/mastercard.md +368 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/meta.md +369 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/minimalist-skill.md +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/minimax.md +260 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/mintlify.md +329 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/miro.md +111 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/mistral.ai.md +264 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/mongodb.md +269 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/nike.md +366 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/notion.md +312 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/nvidia.md +296 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/ollama.md +270 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/opencode.ai.md +284 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/output-skill.md +49 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/pinterest.md +233 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/playstation.md +367 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/posthog.md +259 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/raycast.md +271 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/react-dev-tooling-skill.md +230 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/redesign-skill.md +178 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/renault.md +314 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/replicate.md +264 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/resend.md +306 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/revolut.md +188 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/runwayml.md +247 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/sanity.md +360 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/sentry.md +265 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/shopify.md +353 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/soft-skill.md +98 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/spacex.md +197 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/spotify.md +249 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/starbucks.md +583 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/stitch-design-example.md +121 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/stitch-skill.md +184 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/stripe.md +325 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/supabase.md +258 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/superhuman.md +255 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/taste-skill.md +1206 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/tesla.md +289 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/theverge.md +342 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/together.ai.md +266 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/uber.md +298 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/vercel.md +313 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/vodafone.md +426 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/voltagent.md +326 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/warp.md +256 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/webflow.md +95 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/wired.md +281 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/wise.md +176 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/x.ai.md +260 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/design/zapier.md +331 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/EVIDENCE.md +97 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/README.md +48 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/UPSTREAM.md +80 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/lane-a-direction.md +64 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/lane-b-execution.md +65 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/lane-c-review.md +65 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/lane-d-memory.md +83 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/orchestration.md +80 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/routing.md +79 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/content-writer.md +132 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/design-builder.md +109 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/design-critic.md +89 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/design-lead.md +113 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/design-scout.md +78 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/design-strategist.md +121 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/agents/motion-designer.md +120 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/accessible-content/reference.md +101 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/adaptive-interfaces/reference.md +109 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/cognitive-accessibility/reference.md +107 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-debate/reference.md +199 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-debt-tracker/reference.md +174 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-handoff/reference.md +125 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-md/reference.md +106 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-retrospective/reference.md +266 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-review/reference.md +123 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/design-system-alignment/reference.md +120 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/designpowers-critique/reference.md +164 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/heuristic-evaluation/reference.md +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/inclusive-personas/reference.md +98 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/inspiration-scouting/reference.md +165 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/interaction-design/reference.md +122 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/motion-choreography/reference.md +81 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/research-planning/reference.md +96 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/responsive-patterns/reference.md +77 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/synthetic-user-testing/reference.md +192 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/taste-feedback/reference.md +165 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/taste-report/reference.md +78 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/token-architecture/reference.md +75 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/ui-composition/reference.md +117 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/usability-testing/reference.md +78 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/verification-before-shipping/reference.md +125 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/voice-and-tone/reference.md +79 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/designpowers/vendor/skills/writing-design-plans/reference.md +119 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/perfection/README.md +160 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/perfection/react-perf-tooling.md +127 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/README.md +659 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/charts.csv +26 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/colors.csv +162 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/icons.csv +106 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/landing.csv +35 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/products.csv +162 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/react-performance.csv +45 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/astro.csv +54 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/flutter.csv +53 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/html-tailwind.csv +56 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/jetpack-compose.csv +53 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/nextjs.csv +53 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/nuxt-ui.csv +51 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/nuxtjs.csv +59 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/react-native.csv +52 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/react.csv +54 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/shadcn.csv +61 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/svelte.csv +54 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/swiftui.csv +51 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/stacks/vue.csv +50 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/styles.csv +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/typography.csv +74 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/ui-reasoning.csv +162 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/ux-guidelines.csv +100 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/data/web-interface.csv +31 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/scripts/core.py +262 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/scripts/design_system.py +1148 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/corpus/ui-ux-db/scripts/search.py +114 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/legal/ATTRIBUTION.md +217 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/legal/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/legal/LICENSE-Apache-2.0.txt +201 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +876 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/adaptive-layout.md +81 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/brand-and-imagery.md +84 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +457 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/composition.md +89 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/creative-directions.md +81 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/evidence-review.md +113 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/implementation-platforms.md +92 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/inclusive-interface.md +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/interaction-motion.md +87 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/operating-lanes.md +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/performance-delivery.md +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/product-direction.md +86 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/redesign-playbook.md +91 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/system-foundations.md +82 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/taste-direction.md +86 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/visual-language.md +85 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/visual-reconstruction.md +94 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/PROVENANCE.json +38 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/THIRD-PARTY-NOTICE.txt +14 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/design-intelligence.json +1 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/import-manifest.json +1060 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.schema.json +264 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/schemas/design-contract-v1beta1.schema.json +268 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/schemas/design-contract-v1beta2.schema.json +280 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/design_contract_validation.py +996 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/design_intelligence.py +128 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/design_runtime.py +98 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/import_design_intelligence.py +56 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/source_import.py +144 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/source_manifest.py +65 -0
- package/assets/lithermes-plugin/skills/lit-burnoff/SKILL.md +448 -0
- package/assets/lithermes-plugin/skills/lit-burnoff-file/SKILL.md +254 -0
- package/assets/lithermes-plugin/skills/lit-code/SKILL.md +609 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/README.md +90 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/backend-stack.md +641 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/bootstrap.md +328 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/bubbletea-v2.md +359 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/cobra-stack.md +468 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/concurrency.md +362 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/data-modeling.md +329 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/error-handling.md +359 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/golangci-strict.md +236 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/grpc-connect.md +375 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/libraries.md +337 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/one-liners.md +202 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/sqlc-pgx.md +471 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/testing.md +467 -0
- package/assets/lithermes-plugin/skills/lit-code/references/go/type-patterns.md +298 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/README.md +314 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/async-anyio.md +442 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/data-modeling.md +233 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/data-processing.md +133 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/error-handling.md +218 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/fastapi-stack.md +316 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/httpx2-optimization.md +360 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/libraries.md +307 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/one-liners.md +268 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/orjson-stack.md +378 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/pydantic-ai.md +285 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/pyproject-strict.md +232 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/textual-tui.md +201 -0
- package/assets/lithermes-plugin/skills/lit-code/references/python/type-patterns.md +176 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/README.md +317 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/async-tokio.md +299 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/axum-stack.md +467 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/cargo-strict.md +317 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/clap-stack.md +409 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/concurrency.md +375 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/libraries.md +439 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/one-liners.md +291 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/proptest-insta.md +429 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/type-state.md +354 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/unsafe-discipline.md +250 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust/zero-cost-safety.md +527 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust-ub/README.md +289 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust-ub/miri-sanitizers-loom.md +411 -0
- package/assets/lithermes-plugin/skills/lit-code/references/rust-ub/ub-taxonomy.md +269 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/README.md +195 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/backend-hono.md +672 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/bootstrap.md +199 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/data-modeling.md +202 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/error-handling.md +169 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/tsconfig-strict.md +152 -0
- package/assets/lithermes-plugin/skills/lit-code/references/typescript/type-patterns.md +196 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/check-no-excuse-rules.sh +173 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/new-project.py +138 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/.editorconfig +13 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/.golangci.yml +95 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/AGENTS.md.tmpl +24 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/README.md.tmpl +12 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/Taskfile.yml +40 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/ci.yml +37 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/config.go +24 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/gitignore +15 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/main.go.tmpl +22 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/go/templates/run.go +15 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/python/check-no-excuse-rules.py +687 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/python/new-project.py +172 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/python/new-script.py +116 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/rust/check-no-excuse-rules.py +296 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/rust/check-no-excuse-rules.sh +158 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/rust/new-project.py +175 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/typescript/check-no-excuse-rules.ts +282 -0
- package/assets/lithermes-plugin/skills/lit-code/scripts/typescript/new-project.ts +177 -0
- package/assets/lithermes-plugin/skills/lit-commit/SKILL.md +242 -0
- package/assets/lithermes-plugin/skills/lit-comprehend/SKILL.md +259 -0
- package/assets/lithermes-plugin/skills/lit-comprehend/assets/explainer-scaffold.html +123 -0
- package/assets/lithermes-plugin/skills/lit-comprehend/references/artifact-template.md +205 -0
- package/assets/lithermes-plugin/skills/lit-comprehend/references/micro-worlds.md +139 -0
- package/assets/lithermes-plugin/skills/lit-comprehend/scripts/verify-explainer.py +324 -0
- package/assets/lithermes-plugin/skills/lit-crucible/SKILL.md +315 -0
- package/assets/lithermes-plugin/skills/lit-handoff/ORIGIN.json +23 -0
- package/assets/lithermes-plugin/skills/lit-handoff/SKILL.md +145 -0
- package/assets/lithermes-plugin/skills/lit-init/SKILL.md +329 -0
- package/assets/lithermes-plugin/skills/lit-korean/SKILL.md +237 -0
- package/assets/lithermes-plugin/skills/lit-korean/references/quick-rules.md +24 -0
- package/assets/lithermes-plugin/skills/lit-korean/references/safety-checklist.md +23 -0
- package/assets/lithermes-plugin/skills/lit-plan/SKILL.md +596 -0
- package/assets/lithermes-plugin/skills/lit-recap/SKILL.md +183 -0
- package/assets/lithermes-plugin/skills/lit-scientific-visualization/ORIGIN.json +32 -0
- package/assets/lithermes-plugin/skills/lit-scientific-visualization/SKILL.md +170 -0
- package/assets/lithermes-plugin/skills/litgoal/.gitkeep +0 -0
- package/assets/lithermes-plugin/skills/litgoal/SKILL.md +372 -0
- package/assets/lithermes-plugin/skills/litresearch/ATTRIBUTION.md +50 -0
- package/assets/lithermes-plugin/skills/litresearch/SKILL.md +593 -0
- package/assets/lithermes-plugin/skills/litwork/SKILL.md +419 -0
- package/assets/lithermes-plugin/skills/lsp/SKILL.md +165 -0
- package/assets/lithermes-plugin/skills/lsp-setup/SKILL.md +265 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/bash/README.md +68 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/c-cpp/README.md +78 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/csharp/README.md +90 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/dart/README.md +59 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/elixir/README.md +61 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/go/README.md +63 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/haskell/README.md +69 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/java/README.md +70 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/julia/README.md +70 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/kotlin/README.md +72 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/lua/README.md +68 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/php/README.md +61 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/python/README.md +73 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/ruby/README.md +67 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/rust/README.md +65 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/swift/README.md +64 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/terraform/README.md +66 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/typescript/README.md +82 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/yaml/README.md +65 -0
- package/assets/lithermes-plugin/skills/lsp-setup/references/zig/README.md +59 -0
- package/assets/lithermes-plugin/skills/lsp-setup/scripts/detect-lsp.ts +221 -0
- package/assets/lithermes-plugin/skills/lsp-setup/scripts/lsp-server-table.ts +146 -0
- package/assets/lithermes-plugin/skills/lsp-setup/scripts/tsconfig.json +18 -0
- package/assets/lithermes-plugin/skills/lsp-setup/scripts/verify-lsp.ts +252 -0
- package/assets/lithermes-plugin/skills/refactor/SKILL.md +896 -0
- package/assets/lithermes-plugin/skills/review-work/SKILL.md +450 -0
- package/assets/lithermes-plugin/skills/rules/SKILL.md +194 -0
- package/assets/lithermes-plugin/skills/skill-observer/SKILL.md +190 -0
- package/assets/lithermes-plugin/skills/skill-observer/references/review-contract.md +77 -0
- package/assets/lithermes-plugin/skills/start-work/SKILL.md +550 -0
- package/assets/lithermes-plugin/skills/structural-search/SKILL.md +274 -0
- package/assets/lithermes-plugin/skills/visual-qa/SKILL.md +48 -0
- package/assets/lithermes-plugin/skills/visual-qa/references/capture-playbook.md +133 -0
- package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +522 -0
- package/assets/lithermes-plugin/skills/visual-qa/schemas/evidence-manifest-v1alpha1.schema.json +135 -0
- package/assets/lithermes-plugin/skills/visual-qa/schemas/evidence-manifest-v1beta1.schema.json +110 -0
- package/assets/lithermes-plugin/skills/visual-qa/schemas/review-receipt-v1alpha1.schema.json +49 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/contract_checks.py +71 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/evidence_contract.py +288 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/png_runtime.py +379 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/review_contract.py +151 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/tier_checks.py +190 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/tier_contract.py +103 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/tui_runtime.py +170 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/visual_contracts.py +31 -0
- package/assets/lithermes-plugin/skills/visual-qa/scripts/visual_qa.py +79 -0
- package/assets/lithermes-plugin/skills/wikify/LICENSE +21 -0
- package/assets/lithermes-plugin/skills/wikify/ORIGIN.json +12 -0
- package/assets/lithermes-plugin/skills/wikify/SKILL.md +192 -0
- package/assets/lithermes-plugin/skills/wikify/assets/home-template.md +44 -0
- package/assets/lithermes-plugin/skills/wikify/assets/maintenance-report-template.md +46 -0
- package/assets/lithermes-plugin/skills/wikify/assets/paper-source-note-template.md +138 -0
- package/assets/lithermes-plugin/skills/wikify/assets/source-note-template.md +45 -0
- package/assets/lithermes-plugin/skills/wikify/assets/wiki-rules-template.md +117 -0
- package/assets/lithermes-plugin/skills/wikify/modes/ingest/SKILL.md +24 -0
- package/assets/lithermes-plugin/skills/wikify/modes/init/SKILL.md +26 -0
- package/assets/lithermes-plugin/skills/wikify/modes/lint/SKILL.md +30 -0
- package/assets/lithermes-plugin/skills/wikify/modes/query/SKILL.md +22 -0
- package/assets/lithermes-plugin/skills/wikify/modes/save/SKILL.md +32 -0
- package/assets/lithermes-plugin/skills/wikify/references/full-contract.md +761 -0
- package/assets/lithermes-plugin/uiux_runtime_common.py +117 -0
- package/assets/lithermes-plugin/vendor/NOTICE.md +21 -0
- package/assets/lithermes-plugin/vendor/handoff/SKILL.md +199 -0
- package/assets/lithermes-plugin/vendor/handoff/evals/evals.json +154 -0
- package/assets/lithermes-plugin/vendor/handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
- package/assets/lithermes-plugin/vendor/handoff/templates/HANDOFF.md +121 -0
- package/assets/lithermes-plugin/vendor/licenses/022_handoff-MIT.txt +21 -0
- package/assets/lithermes-plugin/vendor/licenses/045_scientific-visualization-MIT.txt +21 -0
- package/assets/lithermes-plugin/vendor/provenance/022_handoff.md +16 -0
- package/assets/lithermes-plugin/vendor/provenance/045_scientific-visualization.md +18 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/SKILL.md +283 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/assets/color_palettes.py +197 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/assets/nature.mplstyle +75 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/assets/presentation.mplstyle +74 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/assets/publication.mplstyle +78 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/evals/evals.json +158 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/references/color_palettes.md +380 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/references/journal_requirements.md +359 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/references/matplotlib_examples.md +608 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/references/publication_guidelines.md +217 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/references/seaborn_for_publications.md +293 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/scripts/figure_export.py +238 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/scripts/style_presets.py +467 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/tests/test_figure_export.py +51 -0
- package/assets/lithermes-plugin/vendor/scientific-visualization/tests/test_style_presets.py +114 -0
- package/bin/lithermes.js +8 -0
- package/package.json +58 -0
- package/readme-assets/badge-license.svg +1 -0
- package/readme-assets/badge-version.svg +1 -0
- package/readme-assets/cover.webp +0 -0
- package/readme-assets/lithermes-clay-icon.png +0 -0
- package/readme-assets/lithermes-wordmark.svg +5 -0
- package/src/cli.js +396 -0
- package/src/lib/autoUpdate.js +4 -0
- package/src/lib/canonicalCorpus.js +436 -0
- package/src/lib/check.js +200 -0
- package/src/lib/config.js +229 -0
- package/src/lib/files.js +126 -0
- package/src/lib/hermesDiscovery.js +122 -0
- package/src/lib/hud.js +135 -0
- package/src/lib/install.js +559 -0
- package/src/lib/litMark.js +68 -0
- package/src/lib/modelConfig.js +431 -0
- package/src/lib/modelConfigBoundary.js +206 -0
- package/src/lib/modelPrompt.js +201 -0
- package/src/lib/modelRoutePolicy.js +379 -0
- package/src/lib/patch.js +153 -0
- package/src/lib/skillLoop.js +62 -0
- package/src/lib/skillPayload.js +306 -0
- package/src/lib/skins.js +274 -0
- package/src/lib/spinner.js +193 -0
- package/src/lib/updateNotifier.js +1133 -0
- package/src/lib/updateNotifierWorker.js +9 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import math
|
|
5
|
+
import re
|
|
6
|
+
import sys
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from datetime import datetime, timezone
|
|
9
|
+
from typing import Any, Dict, Final, List, Tuple
|
|
10
|
+
|
|
11
|
+
JsonValue = Any
|
|
12
|
+
RFC3339_TIME: Final = re.compile(
|
|
13
|
+
r"^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:[Zz]|[+-]\d{2}:\d{2})$"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass(frozen=True)
|
|
18
|
+
class ContractError(Exception):
|
|
19
|
+
code: str
|
|
20
|
+
detail: str
|
|
21
|
+
|
|
22
|
+
def __str__(self) -> str:
|
|
23
|
+
return f"{self.code}: {self.detail}"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _pairs_without_duplicates(pairs: List[Tuple[str, JsonValue]]) -> Dict[str, JsonValue]:
|
|
27
|
+
result: Dict[str, JsonValue] = {}
|
|
28
|
+
for key, value in pairs:
|
|
29
|
+
if key in result:
|
|
30
|
+
raise ContractError("DUPLICATE_JSON_KEY", key)
|
|
31
|
+
result[key] = value
|
|
32
|
+
return result
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _reject_nonfinite(value: str) -> float:
|
|
36
|
+
raise ContractError("NON_FINITE_NUMBER", value)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def parse_json_bytes(raw: bytes, *, maximum_bytes: int) -> JsonValue:
|
|
40
|
+
if len(raw) > maximum_bytes:
|
|
41
|
+
raise ContractError("INPUT_TOO_LARGE", f"{len(raw)} > {maximum_bytes}")
|
|
42
|
+
if b"\x00" in raw:
|
|
43
|
+
raise ContractError("NUL_BYTE", "JSON transport contains NUL")
|
|
44
|
+
try:
|
|
45
|
+
text = raw.decode("utf-8", errors="strict")
|
|
46
|
+
except UnicodeDecodeError as error:
|
|
47
|
+
raise ContractError("INVALID_UTF8", str(error)) from error
|
|
48
|
+
try:
|
|
49
|
+
return json.loads(
|
|
50
|
+
text,
|
|
51
|
+
object_pairs_hook=_pairs_without_duplicates,
|
|
52
|
+
parse_constant=_reject_nonfinite,
|
|
53
|
+
)
|
|
54
|
+
except ContractError:
|
|
55
|
+
raise
|
|
56
|
+
except json.JSONDecodeError as error:
|
|
57
|
+
raise ContractError("MALFORMED_JSON", str(error)) from error
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def read_stdin_json(*, maximum_bytes: int) -> JsonValue:
|
|
61
|
+
return parse_json_bytes(sys.stdin.buffer.read(maximum_bytes + 1), maximum_bytes=maximum_bytes)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def read_stdin_text(*, maximum_bytes: int) -> str:
|
|
65
|
+
raw = sys.stdin.buffer.read(maximum_bytes + 1)
|
|
66
|
+
if len(raw) > maximum_bytes:
|
|
67
|
+
raise ContractError("INPUT_TOO_LARGE", f"{len(raw)} > {maximum_bytes}")
|
|
68
|
+
try:
|
|
69
|
+
return raw.decode("utf-8", errors="strict")
|
|
70
|
+
except UnicodeDecodeError as error:
|
|
71
|
+
raise ContractError("INVALID_UTF8", str(error)) from error
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def require_mapping(value: JsonValue, *, code: str) -> Dict[str, JsonValue]:
|
|
75
|
+
if not isinstance(value, dict):
|
|
76
|
+
raise ContractError(code, "expected JSON object")
|
|
77
|
+
return value
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def canonical_json(value: JsonValue) -> str:
|
|
81
|
+
return json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def emit_json(value: JsonValue) -> None:
|
|
85
|
+
sys.stdout.write(canonical_json(value) + "\n")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def emit_error(error: ContractError) -> int:
|
|
89
|
+
# An absent capability is BLOCKED and outranks FAIL; everything else is a plain failure.
|
|
90
|
+
verdict = "BLOCKED" if error.code.startswith("BLOCKED_") else "FAIL"
|
|
91
|
+
emit_json({"error_code": error.code, "detail": error.detail, "verdict": verdict})
|
|
92
|
+
return 2
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def parse_utc(value: str) -> datetime:
|
|
96
|
+
if RFC3339_TIME.fullmatch(value) is None:
|
|
97
|
+
raise ContractError("INVALID_TIME", value)
|
|
98
|
+
try:
|
|
99
|
+
parsed = datetime.fromisoformat(value.replace("Z", "+00:00").replace("z", "+00:00"))
|
|
100
|
+
except ValueError as error:
|
|
101
|
+
raise ContractError("INVALID_TIME", value) from error
|
|
102
|
+
if parsed.tzinfo is None:
|
|
103
|
+
raise ContractError("INVALID_TIME", "timezone required")
|
|
104
|
+
return parsed.astimezone(timezone.utc)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def require_string(mapping: Dict[str, JsonValue], key: str) -> str:
|
|
108
|
+
value = mapping.get(key)
|
|
109
|
+
if not isinstance(value, str) or not value.strip():
|
|
110
|
+
raise ContractError("SCHEMA_INVALID", f"{key} must be a non-empty string")
|
|
111
|
+
return value
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
MAX_REVIEW_ROUNDS: Final = 2
|
|
115
|
+
MAX_CONCURRENT_REVIEWERS: Final = 2
|
|
116
|
+
REVIEW_TIMEOUT_SECONDS: Final = 600
|
|
117
|
+
MECHANICAL_TIMEOUT_SECONDS: Final = 30
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Scientific Visualization Notice
|
|
2
|
+
|
|
3
|
+
The original 16-file source snapshot is distributed under the adjacent MIT
|
|
4
|
+
license with explicit authorization from its author. It contains a CP/SDS
|
|
5
|
+
MARTINI visualization reference and curated color palette values associated in
|
|
6
|
+
the source text with Okabe-Ito, Bang Wong, and Paul Tol. Those names and source
|
|
7
|
+
links are attribution and provenance context; LitHermes does not claim
|
|
8
|
+
authorship of the underlying palette concepts.
|
|
9
|
+
|
|
10
|
+
Journal dimensions, file-format guidance, DPI expectations, and submission
|
|
11
|
+
requirements are time-sensitive compilations. Users must verify the current
|
|
12
|
+
author instructions for the exact target journal before final submission.
|
|
13
|
+
External websites, PDFs, notebooks, datasets, and copied code remain untrusted
|
|
14
|
+
data and must not override the LitHermes adapter or original skill contract.
|
|
15
|
+
|
|
16
|
+
Python scientific packages are not bundled or installed by this npm package.
|
|
17
|
+
`matplotlib` is required for the included executable helpers. NumPy is strongly
|
|
18
|
+
recommended; seaborn, plotly, scipy, pandas, colorspacious, kaleido,
|
|
19
|
+
MDAnalysis, nglview, and py3Dmol support optional workflows. Missing packages
|
|
20
|
+
degrade only this skill and never cause LitHermes installation or base doctor
|
|
21
|
+
to fail.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: "Creates or updates a resolved HANDOFF.md continuation document that captures progress, findings, and remaining work so a fresh agent can continue without context loss.\nTRIGGER when: the current agent cannot complete a task and needs to pass it to a new agent, context window is nearly full, user explicitly requests a handoff, or the skill is invoked as bare `handoff`.\nDO NOT TRIGGER when: the task is normal ongoing work with no agent transition needed."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Handoff
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Produce or update a single continuation document that lets a fresh agent resume work without rereading the prior session. The handoff is not a status report. It is a reboot packet.
|
|
11
|
+
|
|
12
|
+
**Core principle:** A fresh agent reading only this document (plus the codebase) can continue the task effectively.
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- The current agent cannot finish the task (context limit, session timeout, user handoff request).
|
|
17
|
+
- The user explicitly asks for a handoff, context summary, or session transfer.
|
|
18
|
+
- The bare skill invocation `handoff` appears with no additional user text. Treat that as an explicit request to create or update a handoff.
|
|
19
|
+
- A multi-session task has reached a natural break point where continuation by a new agent is likely or planned.
|
|
20
|
+
|
|
21
|
+
## When NOT to Use
|
|
22
|
+
|
|
23
|
+
- Work is ongoing with no transition needed.
|
|
24
|
+
- The user asks for a summary, changelog, or documentation that is not meant for a fresh agent.
|
|
25
|
+
- The task is trivially complete and no continuation context is useful.
|
|
26
|
+
- The user wants a commit message, PR description, or release notes (those have their own formats).
|
|
27
|
+
|
|
28
|
+
## Contract
|
|
29
|
+
|
|
30
|
+
This skill operates under the following rules. Every invocation must satisfy all points.
|
|
31
|
+
|
|
32
|
+
### 1. Trigger Conditions
|
|
33
|
+
|
|
34
|
+
See `## When to Use` above.
|
|
35
|
+
|
|
36
|
+
### 2. Non-Trigger Conditions
|
|
37
|
+
|
|
38
|
+
See `## When NOT to Use` above.
|
|
39
|
+
|
|
40
|
+
### 3. Destination Resolution
|
|
41
|
+
|
|
42
|
+
Before writing, resolve a single handoff destination for the active project or workspace.
|
|
43
|
+
|
|
44
|
+
| Workspace state | Resolved handoff path | Required behavior |
|
|
45
|
+
|-----------------|----------------------|-------------------|
|
|
46
|
+
| Git repository, no existing root `HANDOFF.md`, and no explicit user request for root output | `.handoff/HANDOFF.md` | Create or update the local handoff under `.handoff/`. |
|
|
47
|
+
| Git repository with an existing root `HANDOFF.md` | root `HANDOFF.md` | Read, classify, and update the root file for backward compatibility unless the user requests migration. |
|
|
48
|
+
| Git repository with an explicit user request for root `HANDOFF.md` | root `HANDOFF.md` | Allow root output, but warn that handoffs may contain local/session detail and should stay ignored or otherwise kept out of public commits when appropriate. |
|
|
49
|
+
| Non-git workspace | root `HANDOFF.md` | Create or update the handoff at the workspace root. |
|
|
50
|
+
|
|
51
|
+
The resolved handoff path is the only generated output target. Vague wording such as "save it somewhere I can find it later" is not a destination override.
|
|
52
|
+
|
|
53
|
+
**Never write generated handoff output into:**
|
|
54
|
+
- The skill directory itself or its subdirectories
|
|
55
|
+
- A `system-prompt-extraction/` folder (this is a known anti-pattern from an earlier version)
|
|
56
|
+
- Any path outside the active project or workspace root
|
|
57
|
+
- Arbitrary package, docs, examples, template, or scratch subdirectories that are not the resolved handoff path
|
|
58
|
+
|
|
59
|
+
### 4. Primary Audience
|
|
60
|
+
|
|
61
|
+
The only intended reader is the next fresh agent who picks up the task. Optimize for that reader:
|
|
62
|
+
|
|
63
|
+
- Prioritize current state and next steps over history. Current State appears early in the document so the next agent knows where things stand before reading details.
|
|
64
|
+
- Include only context the fresh agent needs to act.
|
|
65
|
+
- Omit session narrative, general observations, and anything the fresh agent could discover by reading the codebase.
|
|
66
|
+
|
|
67
|
+
### 5. Evidence Rule
|
|
68
|
+
|
|
69
|
+
Every factual claim about progress, state, or results must be backed by evidence when available:
|
|
70
|
+
|
|
71
|
+
- **File paths** for changed or relevant files.
|
|
72
|
+
- **Commands** that reproduce a result or verify state.
|
|
73
|
+
- **Commit hashes** for changes pushed.
|
|
74
|
+
- **Error output** for failures encountered.
|
|
75
|
+
|
|
76
|
+
When evidence is unavailable or unverified, label it explicitly:
|
|
77
|
+
|
|
78
|
+
- `[UNVERIFIED]` for claims not yet confirmed.
|
|
79
|
+
- `[UNKNOWN]` for facts that could not be determined.
|
|
80
|
+
|
|
81
|
+
Never fabricate or guess missing context. A labeled gap is always better than a fabricated assertion.
|
|
82
|
+
|
|
83
|
+
### 6. Existing Resolved Handoff Handling
|
|
84
|
+
|
|
85
|
+
When the resolved handoff file already exists, apply this three-step decision procedure. In git repositories with an existing root `HANDOFF.md`, that root file is the resolved handoff file for compatibility unless the user requests migration.
|
|
86
|
+
|
|
87
|
+
**Step 1: Classify the existing file.** Read it and determine which case applies:
|
|
88
|
+
|
|
89
|
+
| Signal | Classification | Action |
|
|
90
|
+
|--------|---------------|--------|
|
|
91
|
+
| Different task, different workstream, or task fully completed | **Obsolete** | Replace fully. Discard entire file. |
|
|
92
|
+
| Same task, same workstream, still in progress | **Active continuation** | Proceed to Step 2. |
|
|
93
|
+
| Same task but state has diverged significantly from reality | **Stale continuation** | Proceed to Step 2 (treat as selective salvage). |
|
|
94
|
+
|
|
95
|
+
**Step 2: Evaluate each section for carry-forward.** For each section in the existing file, apply this test:
|
|
96
|
+
|
|
97
|
+
*Would the next agent be materially worse off if this section were missing?*
|
|
98
|
+
|
|
99
|
+
Materially worse off means the section contains one of:
|
|
100
|
+
- An unresolved blocker or risk that is still open (not resolved in the current session).
|
|
101
|
+
- A key decision with rationale that the next agent might reverse without understanding why it was made.
|
|
102
|
+
- A failed approach or dead end the next agent would otherwise retry.
|
|
103
|
+
- An environment or setup detail not discoverable from the codebase alone.
|
|
104
|
+
|
|
105
|
+
If the section meets none of these criteria, discard it. Do not preserve it "just in case."
|
|
106
|
+
|
|
107
|
+
**Step 3: Compose the new document.** Write a fresh document from the template. For any section that passed the Step 2 test, carry its content forward into the corresponding new section. Do not create a "Legacy" or "Previous" section to dump old content. Integrate carried-forward facts into the appropriate template sections. Prefix each carried-forward item with `[PRIOR]` so the next agent can distinguish inherited context from facts established in the current session. Example: `[PRIOR] CI pipeline requires Node 18; newer versions break a native dependency.`
|
|
108
|
+
|
|
109
|
+
**Rules that always apply:**
|
|
110
|
+
- **Never append the new document after the old one.** This produces a confusing hybrid that forces the next agent to guess which parts are current.
|
|
111
|
+
- **Never carry forward a section verbatim without re-evaluating it.** Even if a section seems relevant, verify its facts are still accurate before including it.
|
|
112
|
+
- **When in doubt, replace fully.** A clean, smaller document is always better than a bloated one padded with uncertain legacy context.
|
|
113
|
+
|
|
114
|
+
## Output Location
|
|
115
|
+
|
|
116
|
+
| Asset Type | Location | Notes |
|
|
117
|
+
|------------|----------|-------|
|
|
118
|
+
| **Template** (reference structure) | `${SKILL_ROOT}/templates/HANDOFF.md` | Read-only scaffold the agent uses as a guide |
|
|
119
|
+
| **Generated output** (actual handoff) | Resolved handoff path from Destination Resolution | The document the agent writes for the next agent |
|
|
120
|
+
|
|
121
|
+
The template is an asset shipped with the skill. The generated output is the handoff document the agent produces at runtime. They are separate things. Never write generated output into the template path.
|
|
122
|
+
|
|
123
|
+
## Required Sections
|
|
124
|
+
|
|
125
|
+
Every generated handoff file at the resolved destination must include these sections, in this order:
|
|
126
|
+
|
|
127
|
+
1. **Task** - What was the agent trying to accomplish. One or two sentences.
|
|
128
|
+
2. **Current State** - Where things stand right now. What is done, what is in progress, what is blocked. Lead with this.
|
|
129
|
+
3. **What Was Done** - Changes made, with file paths and commit hashes where available. Not a narrative. A list.
|
|
130
|
+
4. **Key Decisions** - Architectural or design choices made, and why. Only include decisions the next agent might question or reverse.
|
|
131
|
+
5. **Open Issues** - Unresolved problems, known bugs, things that still need investigation. Use `[UNKNOWN]` or `[UNVERIFIED]` tags where evidence is missing.
|
|
132
|
+
6. **Next Steps** - Ordered list of concrete actions the next agent should take. Be specific: file names, command lines, test names.
|
|
133
|
+
7. **Context for Continuation** - Anything else the next agent needs but cannot easily discover from the codebase. Keep this tight.
|
|
134
|
+
|
|
135
|
+
If a section would be empty, include it with a one-line note like "None at this time" rather than omitting it. The next agent needs to know the section was considered.
|
|
136
|
+
|
|
137
|
+
Supplementary sections beyond these seven (e.g., Verification Commands, Key Files, Evidence & References) are allowed when they help the next agent act. They must earn their place: omit them if they contain no information the next agent could not discover from the codebase.
|
|
138
|
+
|
|
139
|
+
## Process
|
|
140
|
+
|
|
141
|
+
1. **Assess need.** Confirm a handoff is warranted (see trigger conditions). If not, stop.
|
|
142
|
+
2. **Gather evidence.** Read recent files, git log, error output, and any existing planning documents. Do not guess.
|
|
143
|
+
3. **Resolve the destination and check for an existing handoff.** Apply Destination Resolution first. If the resolved handoff file exists, follow the three-step procedure in Contract point 6: classify the file, evaluate each section for carry-forward, then compose fresh from the template.
|
|
144
|
+
4. **Draft the document.** Follow the required sections above. Current State appears early so the next agent sees the status first. Mark unknowns as `[UNKNOWN]` or `[UNVERIFIED]`. Do not fabricate.
|
|
145
|
+
5. **Write to the resolved handoff path.** Not the skill directory. Not `system-prompt-extraction/`. Not an arbitrary path outside the destination policy.
|
|
146
|
+
6. **Verify resumability.** Read back the written file. Apply the Resumability Criteria audit: confirm all six questions (where am I, what was done, what failed, what remains, how do I verify, what don't I know) have concrete answers. Confirm every factual claim is either evidenced or tagged `[UNKNOWN]`/`[UNVERIFIED]`. If any question is unanswered, revise before finalizing.
|
|
147
|
+
|
|
148
|
+
## Common Mistakes
|
|
149
|
+
|
|
150
|
+
| Mistake | Fix |
|
|
151
|
+
|---------|-----|
|
|
152
|
+
| Writing a narrative timeline ("First I did X, then I tried Y...") | Use structured sections. The next agent needs state, not story. |
|
|
153
|
+
| Writing to the skill directory or `system-prompt-extraction/` | Resolve the destination from Destination Resolution, then write only to that handoff path. |
|
|
154
|
+
| Appending to an existing handoff without classifying it | Follow the three-step procedure in Contract point 6: classify, evaluate per-section, compose fresh. |
|
|
155
|
+
| Creating a "Legacy" or "Previous" section to dump old content | Integrate carried-forward facts into the appropriate template sections. No dumping grounds. |
|
|
156
|
+
| Carrying forward a section verbatim without verifying accuracy | Re-check each fact before including it. Stale facts are worse than missing facts. |
|
|
157
|
+
| Omitting evidence ("tests pass" without the command or output) | Include the command and a summary of the result. |
|
|
158
|
+
| Fabricating or guessing missing information | Tag as `[UNKNOWN]` or `[UNVERIFIED]`. Gaps are fine. Lies are not. |
|
|
159
|
+
| Including information the next agent can discover from the codebase | Omit it. The handoff is for continuation context, not a codebase tour. |
|
|
160
|
+
| Leaving out the Next Steps section | This is the most important section for the next agent. Always include it. |
|
|
161
|
+
| Mixing template structure with generated content | Template is read-only reference. Generated output goes to the resolved handoff path. |
|
|
162
|
+
|
|
163
|
+
## Resumability Criteria
|
|
164
|
+
|
|
165
|
+
A handoff document is **resumable** if a fresh agent reading only the resolved handoff file (plus the codebase) can answer all six of these questions without guessing:
|
|
166
|
+
|
|
167
|
+
| # | Question | Where in the document | Pass condition |
|
|
168
|
+
|---|----------|-----------------------|----------------|
|
|
169
|
+
| 1 | **Where am I?** What was the last completed action? | Current State | States the last completed action explicitly. Not "we worked on X" but "file Y was edited, line Z changed, commit abc1234." |
|
|
170
|
+
| 2 | **What was done?** What changes exist in the codebase? | What Was Done | Lists every changed file with evidence (path, commit hash, or command output). No vague "refactored the module" without specifics. |
|
|
171
|
+
| 3 | **What failed or blocked?** What dead ends and blockers exist? | Open Issues + Dead Ends | Every blocker names the specific error, file, or test. Every dead end names the approach tried and why it failed. Tagged `[UNKNOWN]` if evidence is missing. |
|
|
172
|
+
| 4 | **What remains?** What must happen next? | Next Steps | First step is independently actionable (a specific command or file edit). Steps are ordered, not a wishlist. |
|
|
173
|
+
| 5 | **How do I verify?** Can I confirm current state before proceeding? | Verification Commands (supplementary) | At least one command the fresh agent can run to confirm the handoff accurately describes the codebase state. |
|
|
174
|
+
| 6 | **What don't I know?** Where are the gaps? | Throughout | Every information gap is tagged `[UNKNOWN]` or `[UNVERIFIED]`. No fabricated details filling gaps. |
|
|
175
|
+
|
|
176
|
+
**Anti-fabrication rule:** If the agent cannot determine a fact (e.g., whether a test passes, what a file contains, whether a change was committed), it must tag the gap explicitly. A handoff with five labeled unknowns is resumable. A handoff with one fabricated assertion is not.
|
|
177
|
+
|
|
178
|
+
**Verification procedure:** After writing the handoff, the authoring agent must perform this audit:
|
|
179
|
+
|
|
180
|
+
1. Read the document back.
|
|
181
|
+
2. For each of the six questions above, confirm the document provides a concrete answer (not a guess).
|
|
182
|
+
3. If any question cannot be answered from the document alone, revise that section.
|
|
183
|
+
4. Confirm every factual claim is either evidenced or tagged `[UNKNOWN]`/`[UNVERIFIED]`.
|
|
184
|
+
|
|
185
|
+
A handoff that passes this audit is resumable. One that does not is a status report, and the next agent will waste time re-discovering context.
|
|
186
|
+
|
|
187
|
+
## Integration
|
|
188
|
+
|
|
189
|
+
### With planning-with-files
|
|
190
|
+
|
|
191
|
+
If `task_plan.md`, `findings.md`, or `progress.md` exist in the project, reference their locations in the handoff. The next agent should know these files exist and can read them for deeper context.
|
|
192
|
+
|
|
193
|
+
### With verification-before-completion
|
|
194
|
+
|
|
195
|
+
Before declaring the handoff complete, verify: read the file back, confirm all required sections are present, and check that every claim is evidenced or tagged.
|
|
196
|
+
|
|
197
|
+
### With session recovery
|
|
198
|
+
|
|
199
|
+
When an agent starts a new session and finds root `HANDOFF.md` or `.handoff/HANDOFF.md`, it should read the applicable handoff first before examining the rest of the codebase. The handoff is the entry point for continuation.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "handoff",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"name": "happy-path-incomplete-session",
|
|
7
|
+
"prompt": "My context window is nearly full and I still have work left on the auth module refactor. Create a handoff document so a fresh agent can pick up where I left off.",
|
|
8
|
+
"expected_output": "Creates a handoff at the resolved handoff path with all seven required sections (Task, Current State, What Was Done, Key Decisions, Open Issues, Next Steps, Context for Continuation). Current State appears early so the next agent sees status first. Every factual claim is evidenced or tagged [UNKNOWN]/[UNVERIFIED].",
|
|
9
|
+
"files": [],
|
|
10
|
+
"expectations": [
|
|
11
|
+
"Resolves the handoff destination from workspace state before writing",
|
|
12
|
+
"Uses .handoff/HANDOFF.md for a new handoff in a git repository with no root handoff",
|
|
13
|
+
"Includes all seven required sections in order: Task, Current State, What Was Done, Key Decisions, Open Issues, Next Steps, Context for Continuation",
|
|
14
|
+
"Current State appears early in the document so the next agent sees status before details",
|
|
15
|
+
"Every factual claim about progress or state includes file paths, commands, commit hashes, or error output as evidence",
|
|
16
|
+
"Information gaps are tagged with [UNKNOWN] or [UNVERIFIED] rather than fabricated or guessed",
|
|
17
|
+
"Does NOT mention system-prompt-extraction as a destination for the generated handoff",
|
|
18
|
+
"Current State answers 'where am I' with the last completed action, not a vague summary",
|
|
19
|
+
"Next Steps first item is independently actionable (specific file, command, or test name), not a conceptual goal"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 2,
|
|
24
|
+
"name": "blocked-session-handoff",
|
|
25
|
+
"prompt": "I'm stuck on a failing CI pipeline. The tests pass locally but fail in GitHub Actions. I've spent most of my context investigating. Write a handoff so someone else can debug this.",
|
|
26
|
+
"expected_output": "Creates or updates the resolved handoff path. Open Issues section contains the specific CI failure details, environment differences investigated, and dead ends already ruled out. Next Steps are ordered and independently actionable by a fresh agent.",
|
|
27
|
+
"files": [],
|
|
28
|
+
"expectations": [
|
|
29
|
+
"Writes to the resolved handoff path selected by the Destination Resolution policy",
|
|
30
|
+
"Open Issues section documents the CI failure with error output, not vague descriptions",
|
|
31
|
+
"Lists approaches already tried and ruled out under What Was Done -> Dead Ends, preventing the next agent from repeating dead ends",
|
|
32
|
+
"Next Steps section gives concrete, ordered actions (e.g., specific commands to run, files to inspect)",
|
|
33
|
+
"Verification Commands section includes commands the next agent can run to reproduce the failure and confirm the environment",
|
|
34
|
+
"No narrative storytelling about the debugging journey; structured sections only",
|
|
35
|
+
"Dead Ends section names each failed approach and why it failed, so the next agent can skip it",
|
|
36
|
+
"Open Issues tags any unverified hypothesis with [UNVERIFIED] rather than presenting it as confirmed"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": 3,
|
|
41
|
+
"name": "pre-existing-root-handoff-adaptive",
|
|
42
|
+
"prompt": "I need to hand off my work on the API rate limiter. There's already a HANDOFF.md in the project root from a previous session working on a different task (the caching layer). Update it for my current work.",
|
|
43
|
+
"prompt_note": "This eval covers the existing root HANDOFF.md compatibility path in a git repository.",
|
|
44
|
+
"expected_output": "Reads the existing root HANDOFF.md, evaluates each section for relevance to the current rate-limiter task, replaces stale caching-layer content fully, and writes a new root HANDOFF.md. Does not blindly append. Preserves any sections that are still relevant to continuation.",
|
|
45
|
+
"files": [
|
|
46
|
+
"HANDOFF.md"
|
|
47
|
+
],
|
|
48
|
+
"expectations": [
|
|
49
|
+
"Reads the existing root HANDOFF.md before writing",
|
|
50
|
+
"Treats existing root HANDOFF.md as the resolved handoff file for compatibility unless migration is requested",
|
|
51
|
+
"Evaluates existing content: replaces fully if obsolete (different task/stale state), preserves selectively if sections materially help the next agent",
|
|
52
|
+
"Does NOT blindly append new content to the old file without reviewing relevance",
|
|
53
|
+
"Final document is a coherent handoff for the current rate-limiter task, not a confusing hybrid of two tasks",
|
|
54
|
+
"If the old handoff's Verification Commands or Key Files sections contained still-valid references, those may be carried forward",
|
|
55
|
+
"Writes the result back to root HANDOFF.md"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": 4,
|
|
60
|
+
"name": "minimal-complete-boundary",
|
|
61
|
+
"prompt": "Create a handoff. I barely started, I only read the README and identified the entry point file.",
|
|
62
|
+
"expected_output": "Creates a valid handoff at the resolved destination even with minimal progress. All seven required sections are present. Sections with no content say 'None at this time' rather than being omitted. Next Steps reflect the early stage appropriately.",
|
|
63
|
+
"files": [],
|
|
64
|
+
"expectations": [
|
|
65
|
+
"Includes all seven required sections even though most have minimal content",
|
|
66
|
+
"Empty sections contain a note like 'None at this time' rather than being omitted entirely",
|
|
67
|
+
"What Was Done section records the README review and entry-point identification as actual progress, however small",
|
|
68
|
+
"Next Steps are concrete and actionable given the early stage (e.g., 'Read src/index.ts and map module exports')",
|
|
69
|
+
"Does not fabricate progress or pad sections with generic observations to appear substantial",
|
|
70
|
+
"Writes to the resolved handoff path"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": 5,
|
|
75
|
+
"name": "negative-wrong-destination",
|
|
76
|
+
"prompt": "I need a handoff for my work on the payment service. Save it somewhere I can find it later.",
|
|
77
|
+
"prompt_note": "This eval tests that ambiguous destination wording does not override Destination Resolution. The sanctioned .handoff/HANDOFF.md path is allowed for new handoffs in git repositories.",
|
|
78
|
+
"expected_output": "Creates or updates only the resolved handoff path. Does not write into the skill directory, templates/, examples/, system-prompt-extraction/, outside the active project, or arbitrary unsafe destinations.",
|
|
79
|
+
"files": [],
|
|
80
|
+
"expectations": [
|
|
81
|
+
"Output lands only at the resolved handoff path from policy, including .handoff/HANDOFF.md when that is the sanctioned git-repo destination",
|
|
82
|
+
"Does NOT write to any path inside the skill directory or its subdirectories",
|
|
83
|
+
"Does NOT write to templates/ or examples/",
|
|
84
|
+
"Does NOT write to system-prompt-extraction/ under any circumstance",
|
|
85
|
+
"Does NOT write outside the active project or workspace root",
|
|
86
|
+
"Does NOT write to unapproved project subdirectories such as docs/HANDOFF.md or handoff/HANDOFF.md",
|
|
87
|
+
"Includes all seven required sections per the contract"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": 6,
|
|
92
|
+
"name": "resumability-audit",
|
|
93
|
+
"prompt": "I'm handing off mid-task. I've implemented the database migration and updated two models, but the API endpoint tests are failing with a 500 error I haven't diagnosed yet. Create a handoff so a fresh agent can pick this up.",
|
|
94
|
+
"prompt_note": "This eval tests the resumability criteria: the handoff must let a fresh agent answer all six resumability questions (where am I, what was done, what failed, what remains, how do I verify, what don't I know) without guessing.",
|
|
95
|
+
"expected_output": "Creates a handoff that passes the resumability audit. A fresh agent reading only this document can answer all six resumability questions. Unknowns are labeled, not fabricated. Verification commands let the next agent confirm state before proceeding.",
|
|
96
|
+
"files": [],
|
|
97
|
+
"expectations": [
|
|
98
|
+
"Current State specifies the last completed action (e.g., 'migration file created, models updated') not a vague progress summary",
|
|
99
|
+
"What Was Done lists specific file paths for the migration and model changes, with evidence (commit hash or file path)",
|
|
100
|
+
"Open Issues documents the 500 error with available error output or log excerpts, not just 'tests are failing'",
|
|
101
|
+
"Dead Ends lists any debugging approaches tried for the 500 error and why they didn't resolve it, or states 'None attempted yet' if no debugging occurred",
|
|
102
|
+
"Next Steps first item is a concrete action like 'run test X and capture full error output' or 'inspect file Y line Z', not a conceptual goal",
|
|
103
|
+
"Information gaps about the 500 error cause are tagged [UNKNOWN] rather than guessed or attributed to a specific cause without evidence",
|
|
104
|
+
"Includes at least one Verification Command the fresh agent can run to confirm the migration and model state before proceeding",
|
|
105
|
+
"Does not fabricate a root cause for the 500 error; the cause is genuinely unknown and tagged as such"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": 7,
|
|
110
|
+
"name": "bare-invocation-creates-missing-git-handoff",
|
|
111
|
+
"prompt": "handoff",
|
|
112
|
+
"prompt_note": "The active workspace is a git repository with no root HANDOFF.md and no existing .handoff/HANDOFF.md. This eval covers bare skill invocation with no additional user text.",
|
|
113
|
+
"expected_output": "Treats bare skill invocation with no additional user text as an explicit handoff request and creates .handoff/HANDOFF.md.",
|
|
114
|
+
"files": [],
|
|
115
|
+
"expectations": [
|
|
116
|
+
"Does not ask the user to clarify whether a handoff is requested",
|
|
117
|
+
"Creates .handoff/HANDOFF.md because the workspace is a git repository with no existing root handoff",
|
|
118
|
+
"Includes all seven required sections",
|
|
119
|
+
"Uses available workspace evidence and tags unknowns rather than inventing session detail"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": 8,
|
|
124
|
+
"name": "bare-invocation-updates-existing-git-handoff",
|
|
125
|
+
"prompt": "handoff",
|
|
126
|
+
"prompt_note": "The active workspace is a git repository with an existing .handoff/HANDOFF.md and no root HANDOFF.md. This eval covers bare skill invocation updating an existing resolved handoff.",
|
|
127
|
+
"expected_output": "Treats bare skill invocation as an update request, reads the existing .handoff/HANDOFF.md, classifies it, selectively carries forward still-material context, and writes a fresh updated handoff.",
|
|
128
|
+
"files": [
|
|
129
|
+
".handoff/HANDOFF.md"
|
|
130
|
+
],
|
|
131
|
+
"expectations": [
|
|
132
|
+
"Reads the existing .handoff/HANDOFF.md before writing",
|
|
133
|
+
"Classifies the existing handoff as obsolete, active continuation, or stale continuation",
|
|
134
|
+
"Does NOT blindly append new content to the old handoff",
|
|
135
|
+
"Carries forward only materially useful prior context with [PRIOR] markers",
|
|
136
|
+
"Writes the updated handoff back to .handoff/HANDOFF.md"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"id": 9,
|
|
141
|
+
"name": "non-git-root-destination",
|
|
142
|
+
"prompt": "Create a handoff for this non-git workspace.",
|
|
143
|
+
"prompt_note": "The active workspace has no .git directory.",
|
|
144
|
+
"expected_output": "Creates root HANDOFF.md because the workspace is non-git.",
|
|
145
|
+
"files": [],
|
|
146
|
+
"expectations": [
|
|
147
|
+
"Detects that the active workspace is non-git",
|
|
148
|
+
"Uses root HANDOFF.md as the resolved handoff path",
|
|
149
|
+
"Does not create .handoff/HANDOFF.md in the non-git workspace by default",
|
|
150
|
+
"Includes all seven required sections and evidence/unknown tags"
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
package/assets/lithermes-plugin/vendor/handoff/examples/HANDOFF-example-generic-auth-refactor.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# HANDOFF: Authentication Module Refactor
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
EXAMPLE — This is a filled-out illustration of a good handoff, not the canonical template.
|
|
5
|
+
Use `templates/HANDOFF.md` for the structural scaffold.
|
|
6
|
+
|
|
7
|
+
This example is intentionally generic:
|
|
8
|
+
- no repo-specific product name
|
|
9
|
+
- no contributor-specific context
|
|
10
|
+
- realistic but reusable mid-task state
|
|
11
|
+
-->
|
|
12
|
+
|
|
13
|
+
**Written**: 2026-04-19T16:20:00+09:00
|
|
14
|
+
**Status**: in-progress
|
|
15
|
+
**Branch**: feature/auth-refactor
|
|
16
|
+
**Last commit**: a1b2c3d refactor(auth): split token validation from session loading
|
|
17
|
+
|
|
18
|
+
## Task
|
|
19
|
+
|
|
20
|
+
Refactor the authentication module so token validation, session loading, and request-level authorization are separated into clearer components without changing external behavior.
|
|
21
|
+
|
|
22
|
+
## Current State
|
|
23
|
+
|
|
24
|
+
The token validation helper has been extracted and the request middleware now calls it before loading the user session. The middleware path works for valid tokens in local testing, but the integration tests for expired-token handling are still failing because the error response shape is inconsistent with the existing API contract.
|
|
25
|
+
|
|
26
|
+
## What Was Done
|
|
27
|
+
|
|
28
|
+
- Extracted token parsing and validation logic into `src/auth/validate-token.ts`.
|
|
29
|
+
- Updated `src/auth/middleware.ts` to call the validator before session loading.
|
|
30
|
+
- Added focused tests in `tests/auth/validate-token.test.ts` for valid, missing, and malformed tokens.
|
|
31
|
+
- Ran `npm test -- tests/auth/validate-token.test.ts` successfully after the refactor.
|
|
32
|
+
|
|
33
|
+
### Successful Approaches
|
|
34
|
+
- Reused the existing request context shape instead of introducing a new auth context object. This reduced downstream edits.
|
|
35
|
+
- Verified the extracted validator first with targeted unit tests before reconnecting it to middleware.
|
|
36
|
+
- Confirmed the middleware still accepts valid bearer tokens by running:
|
|
37
|
+
- `npm test -- tests/auth/validate-token.test.ts`
|
|
38
|
+
- `npm test -- tests/auth/middleware.valid-token.test.ts`
|
|
39
|
+
|
|
40
|
+
### Dead Ends
|
|
41
|
+
- Tried moving expired-token handling fully into `validate-token.ts`, but that forced transport-level response formatting into a low-level helper and made test expectations harder to preserve.
|
|
42
|
+
- Tried normalizing the error response in the integration test fixture instead of the middleware, but that would have hidden a real contract mismatch.
|
|
43
|
+
|
|
44
|
+
## Key Decisions
|
|
45
|
+
|
|
46
|
+
- Keep `validate-token.ts` responsible for validation only; response formatting stays in `middleware.ts` so HTTP behavior remains visible at the boundary.
|
|
47
|
+
- Preserve the existing request context shape for now. A broader auth-context redesign would be a separate change and is out of scope for this refactor.
|
|
48
|
+
|
|
49
|
+
## Open Issues
|
|
50
|
+
|
|
51
|
+
- Expired-token integration tests still fail because the middleware currently returns a different error body shape than the contract expected by `tests/auth/middleware.expired-token.test.ts`.
|
|
52
|
+
- [UNKNOWN] Whether the mismatch comes from the middleware branch itself or from a shared error-formatting helper introduced earlier in the project.
|
|
53
|
+
- [UNVERIFIED] There may be one more affected endpoint using the same middleware wrapper, but that has not been checked yet.
|
|
54
|
+
|
|
55
|
+
## Next Steps
|
|
56
|
+
|
|
57
|
+
1. Run `npm test -- tests/auth/middleware.expired-token.test.ts --runInBand` and capture the exact diff between expected and actual response bodies.
|
|
58
|
+
2. Inspect `src/auth/middleware.ts` and any shared response formatter it calls to identify where the expired-token payload diverges from the established contract.
|
|
59
|
+
3. Apply the smallest fix that restores the old error body shape without changing valid-token behavior.
|
|
60
|
+
4. Re-run the expired-token test, then run the full auth test group to check for regressions.
|
|
61
|
+
|
|
62
|
+
## Context for Continuation
|
|
63
|
+
|
|
64
|
+
### Origin
|
|
65
|
+
This work came from a larger reliability cleanup plan for the authentication layer after multiple test failures made the middleware logic hard to reason about.
|
|
66
|
+
|
|
67
|
+
### Constraints
|
|
68
|
+
- Do not redesign the full authentication architecture in this task.
|
|
69
|
+
- Do not change public API error semantics except to restore existing behavior.
|
|
70
|
+
- Keep the fix minimal: this is a behavior-preserving refactor, not a feature addition.
|
|
71
|
+
|
|
72
|
+
- [PRIOR] Earlier investigation found that downstream handlers assume `req.auth` exists only after middleware success; avoid introducing partial auth state on failure paths.
|
|
73
|
+
|
|
74
|
+
## Verification Commands
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# verify validator unit coverage
|
|
78
|
+
npm test -- tests/auth/validate-token.test.ts
|
|
79
|
+
|
|
80
|
+
# reproduce the failing expired-token integration case
|
|
81
|
+
npm test -- tests/auth/middleware.expired-token.test.ts --runInBand
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Key Files
|
|
85
|
+
|
|
86
|
+
| File | Role |
|
|
87
|
+
|------|------|
|
|
88
|
+
| `src/auth/validate-token.ts` | Extracted token validation helper |
|
|
89
|
+
| `src/auth/middleware.ts` | Request boundary where validation and error response formatting meet |
|
|
90
|
+
| `tests/auth/validate-token.test.ts` | Focused validator unit coverage |
|
|
91
|
+
| `tests/auth/middleware.expired-token.test.ts` | Failing integration test that currently blocks completion |
|
|
92
|
+
|
|
93
|
+
## Evidence & References
|
|
94
|
+
|
|
95
|
+
- Last completed refactor commit: `a1b2c3d refactor(auth): split token validation from session loading`
|
|
96
|
+
- Passing targeted check: `npm test -- tests/auth/validate-token.test.ts`
|
|
97
|
+
- Failing path to investigate next: `tests/auth/middleware.expired-token.test.ts`
|