@litfamily/lithermes 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +299 -13
- package/README_Ko-KR.md +300 -14
- package/assets/lithermes-plugin/README.md +17 -6
- package/assets/lithermes-plugin/__init__.py +96 -21
- package/assets/lithermes-plugin/core.py +15 -6
- package/assets/lithermes-plugin/core_commands.py +140 -28
- package/assets/lithermes-plugin/core_contexts.py +88 -15
- package/assets/lithermes-plugin/core_contract.py +118 -9
- package/assets/lithermes-plugin/core_routing.py +197 -8
- package/assets/lithermes-plugin/deliverable_hedge_guard.py +378 -357
- package/assets/lithermes-plugin/diagnostics.py +53 -2
- package/assets/lithermes-plugin/humanizer_detector.py +348 -0
- package/assets/lithermes-plugin/humanizer_ko_metrics.py +108 -0
- package/assets/lithermes-plugin/humanizer_office.py +18 -0
- package/assets/lithermes-plugin/lit_mark.py +1 -1
- package/assets/lithermes-plugin/motion_receipts.py +80 -0
- package/assets/lithermes-plugin/payload-version.json +2240 -64
- package/assets/lithermes-plugin/plugin.yaml +1 -1
- package/assets/lithermes-plugin/rules/bundled-rules/lit-humanizer.md +14 -0
- package/assets/lithermes-plugin/skills/autoconference/assets/report_template.md +2 -1
- package/assets/lithermes-plugin/skills/autoconference/modes/ship/SKILL.md +11 -8
- package/assets/lithermes-plugin/skills/autoresearch/modes/ship/type-checklists.md +2 -2
- package/assets/lithermes-plugin/skills/browser-drive/ORIGIN.json +17 -0
- package/assets/lithermes-plugin/skills/browser-drive/SKILL.md +41 -16
- package/assets/lithermes-plugin/skills/browser-drive/scripts/capability_probe.py +122 -10
- package/assets/lithermes-plugin/skills/frontend-ui-ux/SKILL.md +45 -13
- package/assets/lithermes-plugin/skills/frontend-ui-ux/examples/phase-3-readme-ab/README.md +51 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/README.md +44 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/adaptive-layout.md +34 -62
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/brand-and-imagery.md +22 -70
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +18 -4
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/composition.md +27 -78
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/craft-floor.md +74 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/creative-directions.md +25 -69
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/evidence-review.md +18 -97
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/implementation-platforms.md +23 -83
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/inclusive-interface.md +22 -70
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/interaction-motion.md +34 -68
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/motion-guide.md +62 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/operating-lanes.md +14 -78
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/performance-delivery.md +22 -71
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/product-direction.md +17 -70
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/production.md +19 -7
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/redesign-playbook.md +23 -76
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/slop-register.md +69 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/system-foundations.md +22 -67
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/visual-language.md +16 -72
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/visual-reconstruction.md +16 -81
- package/assets/lithermes-plugin/skills/frontend-ui-ux/resources/THIRD-PARTY-NOTICE.txt +15 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe-page.js +311 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe-rules.json +46 -0
- package/assets/lithermes-plugin/skills/frontend-ui-ux/scripts/probe.mjs +231 -0
- package/assets/lithermes-plugin/skills/lit-comprehend/SKILL.md +36 -25
- package/assets/lithermes-plugin/skills/lit-comprehend/references/artifact-template.md +45 -87
- package/assets/lithermes-plugin/skills/lit-comprehend/scripts/verify-explainer.py +3 -27
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/NOTICE +33 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/SKILL.md +308 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-er-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-er-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-line-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-line-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-process-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-process-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-state-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/fonts/OFL.txt +94 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/fonts/provenance.json +22 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/icons.html +231 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/index.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +20 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +21 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +21 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +30 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +21 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +33 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/02-release-decision/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +18 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/03-data-retention/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +19 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +17 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +17 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +17 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +19 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +1 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +20 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/accessibility.md +37 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/export.md +29 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-drawio.md +21 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-excalidraw.md +14 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-mermaid.md +18 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/import-schema.md +28 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/korean-typography.md +34 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/motion.md +29 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/office-pptx-docx.md +40 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/output-spec.md +48 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-annotation.md +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-icons.md +21 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-sketchy.md +11 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/primitive-terminal.md +11 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/profiles.md +24 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/semantic-patterns.md +27 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/style-guide.md +67 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-architecture.md +51 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-bar.md +51 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-beeswarm.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-bubble.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-bump.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-catalog.json +1433 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-data-flow.md +51 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-datalake.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-db-schema.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dependency.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-deployment.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dp-integration.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-er.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-fishbone.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-flowchart.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-gantt.md +49 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-heatmap.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-high-level-vertical.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-high-level.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-import-drawio.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-import-excalidraw.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-import-mermaid.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-it-state.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-journey.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-kanban.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-layers.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-line.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-loop-terminal.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-loop.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-marimekko.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-medallion.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-nested.md +59 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-org-chart.md +58 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-paved-road-animated.md +72 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-polar.md +67 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +69 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-process.md +58 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-pyramid.md +59 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +60 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-quadrant.md +57 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-queue-animated.md +63 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-radar.md +57 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-ridgeline.md +63 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-sankey.md +68 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-scatter.md +60 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-sequence-oauth.md +66 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-sequence.md +63 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-slopegraph.md +65 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-state-lifecycle.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-state.md +59 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-story-map.md +52 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-streamgraph.md +53 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-swimlane.md +52 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-timeline.md +52 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +57 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-tree.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-treemap.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-uml-class.md +52 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-venn.md +51 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-wardley.md +52 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/type-waterfall.md +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/references/verifier-guide.md +31 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/block-registry.mjs +43 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/browser-version.mjs +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/check-visible-text.py +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_brief.py +192 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_catalog.py +135 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_checks.py +123 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_cli.py +94 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_geometry.py +130 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_metrics.py +166 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_quality.py +293 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_quality_geometry.py +200 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_records.py +205 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/diagram_sequence.py +55 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/doctor.mjs +24 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/drawio_extract.py +209 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/drawio_source.py +188 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/excalidraw_extract.py +233 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/excalidraw_support.py +64 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/export.mjs +125 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/mermaid_extract.py +240 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/mermaid_source.py +39 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/office-safety.mjs +54 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-all.py +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-brief.py +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-diagram.py +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-motion.py +12 -0
- package/assets/lithermes-plugin/skills/lit-diagram-drawer/scripts/verify-type.py +12 -0
- package/assets/lithermes-plugin/skills/lit-docx/NOTICE +1 -0
- package/assets/lithermes-plugin/skills/lit-docx/SKILL.md +97 -0
- package/assets/lithermes-plugin/skills/lit-docx/references/frontmatter_schema.md +42 -0
- package/assets/lithermes-plugin/skills/lit-docx/references/journal_style_spec.md +17 -0
- package/assets/lithermes-plugin/skills/lit-docx/references/markdown_quality_checklist.md +37 -0
- package/assets/lithermes-plugin/skills/lit-docx/references/slop_phrase_list.yaml +58 -0
- package/assets/lithermes-plugin/skills/lit-docx/references/slop_rules.md +35 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/clean_markdown.py +95 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_docx.py +1041 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_pdf.py +281 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_pdf.py +130 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/edit_docx.py +297 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/embed_images.py +78 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/generate_docx_templates.py +491 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/slop_lint.py +536 -0
- package/assets/lithermes-plugin/skills/lit-docx/scripts/visual_audit.py +41 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/docx/acs.docx +0 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/docx/elsevier.docx +0 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/docx/ieee.docx +0 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/docx/nature.docx +0 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/acs/README.md +5 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/acs/template.tex +37 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/elsevier/README.md +5 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/elsevier/template.tex +38 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/ieee/README.md +5 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/ieee/template.tex +37 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/korean-generic/README.md +5 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/korean-generic/template.tex +37 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/nature/README.md +5 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/latex/nature/template.tex +37 -0
- package/assets/lithermes-plugin/skills/lit-docx/templates/registry.yaml +1366 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/NOTICE +170 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/SKILL.md +125 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/assets/report-skeleton.md +26 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/assets/slide-text-skeleton.md +30 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/accessibility-note/after.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/accessibility-note/before.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/api-reference/after.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/api-reference/before.md +15 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/changelog/after.md +5 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/changelog/before.md +12 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/code-comments/after.md +10 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/code-comments/before.md +19 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/commit/after.md +5 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/commit/before.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/data-release/after.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/data-release/before.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/detector-validation/ko-metrics-golden.json +49 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/detector-validation/pos-real.txt +26 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/detector-validation/rule-cases.json +306 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/english-essay/after.md +5 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/english-essay/before.md +5 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/incident-update/after.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/incident-update/before.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-essay/after.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-essay/before.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-report/after.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-report/before.md +13 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-slide/after.md +19 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/ko-slide/before.md +21 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/meeting-brief/after.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/meeting-brief/before.md +11 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/policy-faq/after.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/policy-faq/before.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/pr/after.md +15 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/pr/before.md +17 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/project-update/after.md +7 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/project-update/before.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/readme/after.md +12 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/readme/before.md +14 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/report/after.md +13 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/report/before.md +11 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/research-abstract/after.md +5 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/research-abstract/before.md +5 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/slides/after.md +19 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/slides/before.md +19 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/troubleshooting/after.md +11 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/examples/troubleshooting/before.md +11 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/README.md +16 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/always-on-rule.md +9 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/code-patterns.md +468 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/deliverable-channels.md +111 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns-checklist.md +43 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns-content.md +243 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns-structure.md +375 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/en-patterns.md +57 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-metrics.md +33 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-patterns-a-d.md +659 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-patterns-e-j.md +387 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/ko-patterns.md +31 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/rewrite-playbook.md +54 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/references/taxonomy.md +153 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/rules.json +884 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/scripts/detect.py +17 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/scripts/extract_office_text.py +114 -0
- package/assets/lithermes-plugin/skills/lit-humanizer/scripts/ko_metrics.py +35 -0
- package/assets/lithermes-plugin/skills/lit-pptx/NOTICE +1 -0
- package/assets/lithermes-plugin/skills/lit-pptx/SKILL.md +109 -0
- package/assets/lithermes-plugin/skills/lit-pptx/agents/analyst.md +49 -0
- package/assets/lithermes-plugin/skills/lit-pptx/agents/antithesis.md +65 -0
- package/assets/lithermes-plugin/skills/lit-pptx/agents/architect.md +44 -0
- package/assets/lithermes-plugin/skills/lit-pptx/agents/critic.md +42 -0
- package/assets/lithermes-plugin/skills/lit-pptx/agents/synthesizer.md +47 -0
- package/assets/lithermes-plugin/skills/lit-pptx/agents/thesis.md +33 -0
- package/assets/lithermes-plugin/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/assets/azure/circle-md.png +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/bin/office.mjs +77 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/PRETENDARD-OFL.txt +94 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Black.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Bold.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-ExtraBold.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-ExtraLight.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Light.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Medium.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Regular.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-SemiBold.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/A2Z-Thin.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/OFL.txt +94 -0
- package/assets/lithermes-plugin/skills/lit-pptx/fonts/a2z-font/SOURCE.md +29 -0
- package/assets/lithermes-plugin/skills/lit-pptx/pretendard-font/public/static/PretendardGOV-Bold.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/pretendard-font/public/static/PretendardGOV-Regular.otf +0 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/anti-slop-checklist.md +71 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/authoring-guide.md +139 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/consensus-protocol.md +125 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/data-display-cookbook.md +45 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/design-system-azure.md +58 -0
- package/assets/lithermes-plugin/skills/lit-pptx/runtime/package-lock.json +750 -0
- package/assets/lithermes-plugin/skills/lit-pptx/runtime/package.json +15 -0
- package/assets/lithermes-plugin/skills/lit-pptx/runtime/requirements.in +7 -0
- package/assets/lithermes-plugin/skills/lit-pptx/runtime/requirements.lock +391 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/compile-deck.js +447 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/craft_extras.py +215 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/embed_fonts.py +199 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/integrity.py +60 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/inventory.py +64 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/learn_template.py +433 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/derive-palette.js +176 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/directive-parser.js +244 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/font-map.js +79 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/gen-bg.js +85 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +36 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/layout-resolver.js +736 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/markdown-loader.js +136 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-adapter-html.js +357 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +1864 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/slide-ast.js +539 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/spec-validator.js +94 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +355 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/qa_deck.py +791 -0
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/validate_pptx.py +206 -0
- package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/markdown-slide-spec-v1.md +251 -0
- package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/markdown-slide-spec-v2.md +221 -0
- package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/slide-ast-v1.schema.json +229 -0
- package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/slide-ast-v2.schema.json +144 -0
- package/assets/lithermes-plugin/skills/lit-pptx/slide-formats/template-enrollment-contract.md +228 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +146 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +384 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +37 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +154 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +405 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +37 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +179 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +299 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +45 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +181 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +299 -0
- package/assets/lithermes-plugin/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +44 -0
- package/assets/lithermes-plugin/skills/lit-scientific-visualization/SKILL.md +2 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/SKILL.md +71 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/audio.py +45 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/motion.mjs +690 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/bin/runtime.mjs +299 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/NOTICE +23 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/THIRD_PARTY_NOTICES +55 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/browser.mjs +169 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/completion.mjs +52 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/constants.mjs +162 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/director.mjs +33 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/encode.mjs +191 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/flash.mjs +163 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/frame.mjs +428 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/gate.mjs +483 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/look.mjs +223 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/page.js +622 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/presets.mjs +170 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/scenes.mjs +242 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/sound.mjs +382 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-gate.mjs +97 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-init.js +186 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-kit.js +389 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-qa.mjs +358 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage-worker.mjs +33 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stage.mjs +691 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stills.mjs +71 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/stroke.mjs +231 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/timeline.mjs +177 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/treatment.mjs +244 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/type.mjs +183 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/engine/util.mjs +152 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/craft-loop.md +175 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/engine-contract.md +166 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/runtime.md +122 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/stage.md +261 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/style-bibles.md +122 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/treatment.md +164 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/references/type-craft.md +92 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/fonts.json +154 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/licenses/CREDITS +20 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/licenses/EMS-OFL.txt +91 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/package-lock.json +88 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/package.json +12 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/requirements.in +1 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/requirements.lock +727 -0
- package/assets/lithermes-plugin/skills/lit-typographic-motion/runtime/word-timing.json +9 -0
- package/assets/lithermes-plugin/skills/litresearch/SKILL.md +19 -18
- package/assets/lithermes-plugin/skills/litwork/SKILL.md +28 -0
- package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +3 -3
- package/package.json +1 -1
- package/readme-assets/ab-simple/s11-ui-baseline-desktop.webp +0 -0
- package/readme-assets/ab-simple/s11-ui-lithermes-desktop.webp +0 -0
- package/readme-assets/ab-simple/s3-ui-baseline-desktop.webp +0 -0
- package/readme-assets/ab-simple/s3-ui-lithermes-desktop.webp +0 -0
- package/readme-assets/ab-simple/s4-ui-baseline-desktop.webp +0 -0
- package/readme-assets/ab-simple/s4-ui-lithermes-desktop.webp +0 -0
- package/readme-assets/ab-simple/s5-office-baseline-slides.webp +0 -0
- package/readme-assets/ab-simple/s5-office-lithermes-slides.webp +0 -0
- package/readme-assets/ab-simple/s7-lithermes-diagram.webp +0 -0
- package/readme-assets/ab-simple/s8-office-baseline-slides.webp +0 -0
- package/readme-assets/ab-simple/s8-office-lithermes-slides.webp +0 -0
- package/readme-assets/ab-simple/s9-office-lithermes-pages.webp +0 -0
- package/readme-assets/badge-version.svg +1 -1
- package/readme-assets/cover-motion-still.webp +0 -0
- package/readme-assets/cover-motion.webp +0 -0
- package/readme-assets/skills/autoconference.webp +0 -0
- package/readme-assets/skills/autoresearch.webp +0 -0
- package/readme-assets/skills/browser-drive.webp +0 -0
- package/readme-assets/skills/comment-checker.webp +0 -0
- package/readme-assets/skills/debugging.webp +0 -0
- package/readme-assets/skills/deep-interview.webp +0 -0
- package/readme-assets/skills/frontend-ui-ux.webp +0 -0
- package/readme-assets/skills/lit-burnoff-file.webp +0 -0
- package/readme-assets/skills/lit-burnoff.webp +0 -0
- package/readme-assets/skills/lit-code.webp +0 -0
- package/readme-assets/skills/lit-commit.webp +0 -0
- package/readme-assets/skills/lit-comprehend.webp +0 -0
- package/readme-assets/skills/lit-crucible.webp +0 -0
- package/readme-assets/skills/lit-diagram-drawer.webp +0 -0
- package/readme-assets/skills/lit-docx.webp +0 -0
- package/readme-assets/skills/lit-handoff.webp +0 -0
- package/readme-assets/skills/lit-humanizer.webp +0 -0
- package/readme-assets/skills/lit-init.webp +0 -0
- package/readme-assets/skills/lit-plan.webp +0 -0
- package/readme-assets/skills/lit-pptx.webp +0 -0
- package/readme-assets/skills/lit-recap.webp +0 -0
- package/readme-assets/skills/lit-scientific-visualization.webp +0 -0
- package/readme-assets/skills/lit-typographic-motion.webp +0 -0
- package/readme-assets/skills/litgoal.webp +0 -0
- package/readme-assets/skills/litresearch.webp +0 -0
- package/readme-assets/skills/litwork.webp +0 -0
- package/readme-assets/skills/lsp-setup.webp +0 -0
- package/readme-assets/skills/lsp.webp +0 -0
- package/readme-assets/skills/readme-studio.webp +0 -0
- package/readme-assets/skills/refactor.webp +0 -0
- package/readme-assets/skills/review-work.webp +0 -0
- package/readme-assets/skills/rules.webp +0 -0
- package/readme-assets/skills/start-work.webp +0 -0
- package/readme-assets/skills/structural-search.webp +0 -0
- package/readme-assets/skills/visual-qa.webp +0 -0
- package/readme-assets/skills/wikify.webp +0 -0
- package/src/cli.js +40 -1
- package/src/lib/check.js +21 -0
- package/src/lib/install.js +262 -7
- package/src/lib/skillPayload.js +3 -3
- package/assets/lithermes-plugin/skills/lit-korean/SKILL.md +0 -237
- package/assets/lithermes-plugin/skills/lit-korean/references/quick-rules.md +0 -24
- package/assets/lithermes-plugin/skills/lit-korean/references/safety-checklist.md +0 -23
- package/readme-assets/cover.webp +0 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// The three preset style bibles as data (MO-B-01..03), the auto-pick table
|
|
2
|
+
// (MO-B-00), and the per-shot pass plan: seeds (MO-SH-01), event schedules
|
|
3
|
+
// under the shared per-shot ceiling (MO-SH-03), and the one software-GL
|
|
4
|
+
// downgrade formula (MO-SH-09).
|
|
5
|
+
import { EVENTS, PASS_CAPS } from './constants.mjs';
|
|
6
|
+
import { mulberry32, passSeed } from './util.mjs';
|
|
7
|
+
|
|
8
|
+
export const PRESETS = Object.freeze({
|
|
9
|
+
'swiss-signal': {
|
|
10
|
+
id: 'swiss-signal',
|
|
11
|
+
palette: { background: '#E9EBE4', ink: '#0C0E13', bone: '#E9EBE4', signal: '#0F7A82', accent: '#D9A441', secondary: '#4B5058' },
|
|
12
|
+
roles: { text: 'ink', annotation: 'ink', emphasis: 'signal', rule: 'ink', accent: 'accent' },
|
|
13
|
+
passes: ['swiss-grid', 'dither'],
|
|
14
|
+
post: { bloom: 0.12, bloomThreshold: 0.85, bloomKnee: 0.4, bloomRadius: 0.6, halation: 0.04, ca: 0.6, grain: 0.035, vignette: 0.18 },
|
|
15
|
+
motion: { entrance: 'slam', entranceSec: 0.18, drift: 0 },
|
|
16
|
+
voices: { display: 'archivo', body: 'pretendard', machine: 'meslo', label: 'meslo' },
|
|
17
|
+
},
|
|
18
|
+
terminalcore: {
|
|
19
|
+
id: 'terminalcore',
|
|
20
|
+
palette: { background: '#05070A', panel: '#0C1116', ink: '#39FF6A', signal: '#39FF6A', alternate: '#2FB6FF', secondary: '#7C8B93' },
|
|
21
|
+
roles: { text: 'signal', annotation: 'secondary', emphasis: 'signal', rule: 'secondary', accent: null },
|
|
22
|
+
passes: ['terminal-ui', 'crt', 'dither', 'glitch'],
|
|
23
|
+
post: { bloom: 0.35, bloomThreshold: 0.8, bloomKnee: 0.5, bloomRadius: 0.55, halation: 0.06, ca: 0.9, grain: 0.03, vignette: 0.12 },
|
|
24
|
+
motion: { entrance: 'type-in', typeCps: 22, drift: 0 },
|
|
25
|
+
voices: { display: 'pixel', body: 'pixel', machine: 'meslo', label: 'silkscreen' },
|
|
26
|
+
},
|
|
27
|
+
tidal: {
|
|
28
|
+
id: 'tidal',
|
|
29
|
+
palette: { background: '#0E1420', ink: '#E8ECEF', stopA: '#124559', stopB: '#4C3B6E', accent: '#E07856', secondary: '#AEB7C0' },
|
|
30
|
+
roles: { text: 'ink', annotation: 'secondary', emphasis: 'ink', rule: 'secondary', accent: 'accent' },
|
|
31
|
+
passes: ['tidal-gradient', 'swiss-grid', 'glitch'],
|
|
32
|
+
post: { bloom: 0.2, bloomThreshold: 0.85, bloomKnee: 0.5, bloomRadius: 0.7, halation: 0.04, ca: 0.4, grain: 0.03, vignette: 0.22 },
|
|
33
|
+
motion: { entrance: 'drift', entranceSec: 2.4, drift: 1 },
|
|
34
|
+
voices: { display: 'archivo', body: 'pretendard', machine: 'meslo', label: 'meslo' },
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// MO-B-00: first match wins; Latin at word boundaries, Korean at a token start.
|
|
39
|
+
const PICK_ROWS = [
|
|
40
|
+
['terminalcore', /\b(?:terminal|hacker|CRT)\b/i, /(?<![가-힣])(?:터미널|해커)/u],
|
|
41
|
+
['tidal', /\b(?:gradient|wave|tide|calm)\b/i, /(?<![가-힣])(?:물결|파도|잔잔한|흐름)/u],
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
// A style counts as user-specified only when the user's own request names it;
|
|
45
|
+
// a style the agent wrote into the brief is the agent's default choice.
|
|
46
|
+
const STYLE_WORDS = { 'swiss-signal': /swiss[\s-]*signal|스위스/i, terminalcore: /terminal[\s-]*core|터미널\s*코어/i, tidal: /(?<![A-Za-z])tidal(?![A-Za-z])|타이달/i };
|
|
47
|
+
|
|
48
|
+
export function pickPreset(brief, { request = '' } = {}) {
|
|
49
|
+
if (brief.style) {
|
|
50
|
+
if (!PRESETS[brief.style]) throw Object.assign(new Error(`unknown style "${brief.style}"; use swiss-signal, terminalcore or tidal`), { userError: true });
|
|
51
|
+
return { id: brief.style, reason: STYLE_WORDS[brief.style].test(request) ? 'user-specified' : 'agent default' };
|
|
52
|
+
}
|
|
53
|
+
const copy = [...(brief.text || []), brief.mood || '', brief.topic || ''].join(' ');
|
|
54
|
+
for (const [id, latin, korean] of PICK_ROWS) {
|
|
55
|
+
const hit = copy.match(latin) || copy.match(korean);
|
|
56
|
+
if (hit) return { id, reason: `agent default (the brief mentions "${hit[0]}"; auto-pick table, first match)` };
|
|
57
|
+
}
|
|
58
|
+
return { id: 'swiss-signal', reason: 'agent default (no terminal or tidal keyword in the brief)' };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function terminalSignal(brief) {
|
|
62
|
+
return brief.signalHue === 'blue' ? '#2FB6FF' : '#39FF6A';
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Events that count toward MO-SH-03 for one shot, all inside the shot window.
|
|
66
|
+
function scheduleShot(presetId, shot, index, shots, seedFor, fps) {
|
|
67
|
+
const events = [];
|
|
68
|
+
const hold = shot.end - shot.start;
|
|
69
|
+
const frameAt = (t) => Math.round(t * fps) / fps;
|
|
70
|
+
if (presetId === 'terminalcore') {
|
|
71
|
+
if (index === 0) events.push({ kind: 'boot-flicker', t: frameAt(shot.start), duration: 0.25 });
|
|
72
|
+
if (hold >= 1.8) {
|
|
73
|
+
const rng = mulberry32(seedFor('glitch'));
|
|
74
|
+
const t = frameAt(shot.start + hold * (0.45 + 0.2 * rng()));
|
|
75
|
+
events.push({ kind: 'glitch-hit', t, holdFrames: 2 });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (presetId === 'tidal') {
|
|
79
|
+
events.push({ kind: 'surge', t: frameAt(shot.start + Math.min(0.1, hold / 4)), attack: 0.15, decay: 0.25 });
|
|
80
|
+
const longest = shots.reduce((best, s, i) => (s.end - s.start > shots[best].end - shots[best].start ? i : best), 0);
|
|
81
|
+
if (index === longest && hold >= 3 && shots.length > 1) {
|
|
82
|
+
const rng = mulberry32(seedFor('glitch'));
|
|
83
|
+
events.push({ kind: 'glitch-hit', t: frameAt(shot.start + hold * (0.55 + 0.15 * rng())), holdFrames: 2 });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return events;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function maxEventsInWindow(events, windowSec = EVENTS.perShotWindowSec) {
|
|
90
|
+
const times = events.map((e) => e.t).sort((a, b) => a - b);
|
|
91
|
+
let worst = 0;
|
|
92
|
+
for (let i = 0; i < times.length; i++) {
|
|
93
|
+
let n = 0;
|
|
94
|
+
for (let j = i; j < times.length && times[j] - times[i] < windowSec - 1e-9; j++) n++;
|
|
95
|
+
worst = Math.max(worst, n);
|
|
96
|
+
}
|
|
97
|
+
return worst;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Glitch hit geometry from the shot's PRNG, sampled once per hit (MO-SH-05).
|
|
101
|
+
export function glitchHitGeometry(seed, hitIndex, areaCapPct = 12, sliceCount = 6) {
|
|
102
|
+
const rng = mulberry32((seed ^ Math.imul(hitIndex + 1, 0x9e3779b1)) >>> 0);
|
|
103
|
+
const slices = [];
|
|
104
|
+
const budget = (areaCapPct / 100) * 1080;
|
|
105
|
+
let used = 0;
|
|
106
|
+
for (let i = 0; i < sliceCount && used < budget; i++) {
|
|
107
|
+
const height = Math.min(budget - used, 8 + Math.floor(rng() * 34));
|
|
108
|
+
const y = 60 + Math.floor(rng() * (1080 - 120 - height));
|
|
109
|
+
const dx = (rng() < 0.5 ? -1 : 1) * (6 + Math.floor(rng() * 18));
|
|
110
|
+
slices.push([y, height, dx]);
|
|
111
|
+
used += height;
|
|
112
|
+
}
|
|
113
|
+
return { slices, areaPct: (used / 1080) * 100, rgbSplitPx: 2 };
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function planPasses({ presetId, timeline, runSeed, fps, software, brief = {} }) {
|
|
117
|
+
const preset = PRESETS[presetId];
|
|
118
|
+
const shots = timeline.filter((u) => u.kind === 'line' || u.kind === 'scene');
|
|
119
|
+
const passRanges = [];
|
|
120
|
+
const events = [];
|
|
121
|
+
const totalSec = shots.at(-1).end;
|
|
122
|
+
shots.forEach((shot, index) => {
|
|
123
|
+
const seedFor = (pass) => passSeed(runSeed, shot.sceneId, shot.shotIndex, pass);
|
|
124
|
+
const shotEvents = scheduleShot(presetId, shot, index, shots, seedFor, fps)
|
|
125
|
+
.map((e) => ({ ...e, sceneId: shot.sceneId, shotIndex: shot.shotIndex }));
|
|
126
|
+
if (maxEventsInWindow(shotEvents) > EVENTS.maxPerShotWindow) throw new Error(`event plan for ${shot.sceneId} exceeds MO-SH-03`);
|
|
127
|
+
events.push(...shotEvents);
|
|
128
|
+
const frameStart = Math.round(shot.start * fps);
|
|
129
|
+
const frameEnd = Math.round(shot.end * fps) - 1;
|
|
130
|
+
const hits = shotEvents.filter((e) => e.kind === 'glitch-hit');
|
|
131
|
+
const surges = shotEvents.filter((e) => e.kind === 'surge');
|
|
132
|
+
for (const pass of preset.passes) {
|
|
133
|
+
const seed = pass === 'swiss-grid' ? null : seedFor(pass);
|
|
134
|
+
let params;
|
|
135
|
+
if (pass === 'swiss-grid') params = { columns: 12, gutterPx: 24, marginPx: 96, baselinePx: 8, showGuides: false };
|
|
136
|
+
else if (pass === 'dither') params = { mode: 1, paletteSize: presetId === 'terminalcore' ? 6 : 12, pixelScale: presetId === 'terminalcore' ? 2 : 1, ditherStrength: presetId === 'terminalcore' ? 0.5 : 0.3 };
|
|
137
|
+
else if (pass === 'crt') {
|
|
138
|
+
const boot = shotEvents.some((e) => e.kind === 'boot-flicker');
|
|
139
|
+
params = {
|
|
140
|
+
scanlineFreq: 540, scanlineDepth: 0.22, curvature: 0.05, vignette: 0.3, triadMaskAmount: 0.12,
|
|
141
|
+
flickerAmp: 0.03, flickerFreqHz: 8, bootFlickerAmp: boot ? 0.06 : 0,
|
|
142
|
+
flickerAmpRealized: boot ? 0.06 : 0.03,
|
|
143
|
+
persistenceEnabled: !software, phosphorPersistence: software ? 0 : 0.15,
|
|
144
|
+
};
|
|
145
|
+
} else if (pass === 'glitch') {
|
|
146
|
+
const geometry = hits.map((_, i) => glitchHitGeometry(seed, i));
|
|
147
|
+
params = {
|
|
148
|
+
intensity: 0.35, sliceCount: 6, maxOffsetPx: 24, rgbSplitPx: 2, holdFrames: 2,
|
|
149
|
+
hitRatePerSec: presetId === 'tidal' ? 0.5 : 1.5, areaCapPct: 12,
|
|
150
|
+
hitRatePerSecRealized: Number((hits.length / Math.max(1e-6, shot.end - shot.start)).toFixed(4)),
|
|
151
|
+
hits: hits.map((h, i) => ({ t: h.t, frame: Math.round(h.t * fps), holdFrames: h.holdFrames, areaPct: Number(geometry[i].areaPct.toFixed(3)), slices: geometry[i].slices })),
|
|
152
|
+
};
|
|
153
|
+
} else if (pass === 'tidal-gradient') {
|
|
154
|
+
const octaves = software ? Math.max(3, Math.floor(4 / 2)) : 4;
|
|
155
|
+
params = {
|
|
156
|
+
paletteStopsHex: [preset.palette.stopA, preset.palette.stopB], flowSpeed: 0.06, warpAmount: 0.35, curlStrength: 0.4,
|
|
157
|
+
octaves, surgeOnHit: 0.5, surgeAttackSec: 0.15, surgeDecaySec: 0.25, surgeCapPerSec: 2,
|
|
158
|
+
ditherAmount: 0.02, surgeCountRealized: surges.length,
|
|
159
|
+
surges: surges.map((s) => ({ t: s.t, attack: s.attack, decay: s.decay })),
|
|
160
|
+
};
|
|
161
|
+
} else if (pass === 'terminal-ui') {
|
|
162
|
+
params = { layers: 1, compositedThrough: ['crt', 'dither'], meterCount: 2, logLineRateCharsPerSec: 22, wordTimingSource: 'reading-time', caretBlinkHz: 1.2 };
|
|
163
|
+
}
|
|
164
|
+
passRanges.push({ pass, frameStart, frameEnd, sceneId: shot.sceneId, shotIndex: shot.shotIndex, seed, params, downgraded: Boolean(software) });
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return { passRanges, events, totalSec, signal: presetId === 'terminalcore' ? terminalSignal(brief) : preset.palette.signal };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export const GLITCH_CAPS = PASS_CAPS;
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// Original starter scenes. Each render(f) is a pure function of the frame
|
|
2
|
+
// (shot-local time f.lt, progress f.p, beat length f.beat and the timeline's
|
|
3
|
+
// own reveal units) and returns a display list in logical 1920x1080 px:
|
|
4
|
+
// text elements, stroke text, flat graphics, hairline rules and post overrides.
|
|
5
|
+
// Beats are anchored to the shot window and reveal starts, never to literal
|
|
6
|
+
// frame numbers (MO-A-06). Only number-counter carries state (MO-A-05).
|
|
7
|
+
import { clamp, ease, lerp, prog } from './util.mjs';
|
|
8
|
+
import { eojeols } from './type.mjs';
|
|
9
|
+
import { listItems } from './timeline.mjs';
|
|
10
|
+
|
|
11
|
+
const LEFT = 120;
|
|
12
|
+
const CONTENT_W = 1680;
|
|
13
|
+
|
|
14
|
+
// Motion tokens per preset (MO-B-01..03), expressed against the shot window.
|
|
15
|
+
function entrance(f, token) {
|
|
16
|
+
if (f.still) return { alpha: 1, scale: 1, dy: 0, landed: true };
|
|
17
|
+
if (token === 'drift') {
|
|
18
|
+
const alpha = prog(f.lt, 0, Math.min(1.2, f.hold * 0.4), ease.inOutSine);
|
|
19
|
+
const dy = lerp(24, 0, prog(f.lt, 0, Math.min(2.4, f.hold * 0.8), ease.inOutSine));
|
|
20
|
+
return { alpha, scale: 1, dy, landed: f.lt >= Math.min(1.2, f.hold * 0.4) };
|
|
21
|
+
}
|
|
22
|
+
const dur = f.tokens.entranceSec ?? 0.18;
|
|
23
|
+
const k = prog(f.lt, 0, dur, ease.slam);
|
|
24
|
+
return { alpha: k, scale: lerp(0.96, 1, k), dy: 0, landed: f.lt >= dur };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function typedCount(f, text) {
|
|
28
|
+
if (f.still) return Array.from(text).length;
|
|
29
|
+
const cps = f.tokens.typeCps || 22;
|
|
30
|
+
const chars = Array.from(text);
|
|
31
|
+
const shown = Math.floor(Math.max(0, f.lt) * cps);
|
|
32
|
+
if (!/[가-힣]/u.test(text)) return Math.min(chars.length, shown);
|
|
33
|
+
// Hangul types a whole 어절 at a time so a word never appears half-built.
|
|
34
|
+
let count = 0, typed = 0;
|
|
35
|
+
for (const word of text.split(/(\s+)/u)) {
|
|
36
|
+
const n = Array.from(word).length;
|
|
37
|
+
if (typed + n <= shown || /^\s+$/u.test(word)) { count += n; typed += n; } else break;
|
|
38
|
+
}
|
|
39
|
+
return count;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function annotation(f, text, x, y, extra = {}) {
|
|
43
|
+
return { id: `${f.shot.id}:note`, text, voice: 'machine', role: 'annotation', size: 24, weight: 400, x, y, align: 'left', alpha: extra.alpha ?? 1, trackingEm: 0.02 };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// One window title for the whole film: a label that changes at a cut leaves a
|
|
47
|
+
// CRT-persistence ghost of the old text under the new one. The title is the
|
|
48
|
+
// film's own name or nothing, and the shot index shows only when the brief asks.
|
|
49
|
+
function terminalChrome(f) {
|
|
50
|
+
const status = f.showIndex ? `${String(f.shotNumber).padStart(2, '0')}/${String(f.shotCount).padStart(2, '0')}` : '';
|
|
51
|
+
return { window: [72, 64, 1776, 952], titleBar: 46, title: f.windowTitle, status, meters: [clamp(f.p), clamp((f.t) / f.duration)], caret: null };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function accentMark(f, x, y) {
|
|
55
|
+
if (!f.accent || f.still) return [];
|
|
56
|
+
const on = f.lt >= f.accent.from && f.lt < f.accent.to;
|
|
57
|
+
return on ? [{ id: `${f.shot.id}:accent`, x, y, w: 28, h: 28, role: 'accent', alpha: 1 }] : [];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const titleSlam = {
|
|
61
|
+
id: 'title-slam',
|
|
62
|
+
render(f) {
|
|
63
|
+
const text = f.shot.text;
|
|
64
|
+
const hangul = /[가-힣]/u.test(text);
|
|
65
|
+
const out = { texts: [], strokes: [], rects: [], rules: [], overrides: {} };
|
|
66
|
+
if (f.preset.id === 'terminalcore') {
|
|
67
|
+
const typed = typedCount(f, text);
|
|
68
|
+
out.terminal = terminalChrome(f);
|
|
69
|
+
out.texts.push({ id: f.shot.id, text, voice: 'display', role: 'text', fit: { maxWidth: 1540, max: hangul ? 108 : 150, min: 54, pixelGrid: hangul ? 9 : 0 }, x: 200, y: 560, align: 'left', alpha: 1, visibleChars: typed, trackingEm: 0 });
|
|
70
|
+
out.texts.push({ id: `${f.shot.id}:prompt`, text: '>', voice: 'machine', role: 'annotation', size: 72, weight: 400, x: 120, y: 540, alpha: 1, trackingEm: 0 });
|
|
71
|
+
out.terminal.caret = { after: f.shot.id, blinkHz: 1.2, t: f.lt, visibleAfterType: typed >= Array.from(text).length };
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
const e = entrance(f, f.tokens.entrance);
|
|
75
|
+
const widthStep = f.preset.id === 'swiss-signal' && !f.still && f.lt < (f.tokens.entranceSec ?? 0.18) / 2 ? 125 : 100;
|
|
76
|
+
out.texts.push({
|
|
77
|
+
id: f.shot.id, text, voice: 'display', role: 'text', weight: f.preset.id === 'tidal' ? 700 : 900, widthStep,
|
|
78
|
+
fit: { maxWidth: CONTENT_W, max: f.preset.id === 'tidal' ? 150 : (hangul ? 150 : 190), min: 64 },
|
|
79
|
+
x: LEFT, y: 590 + e.dy, align: 'left', alpha: e.alpha, scale: e.scale, trackingEm: hangul ? 0 : -0.02,
|
|
80
|
+
});
|
|
81
|
+
if (f.showIndex) out.texts.push(annotation(f, `${String(f.shotNumber).padStart(2, '0')} — ${String(f.shotCount).padStart(2, '0')}`, LEFT, 150, { alpha: e.alpha }));
|
|
82
|
+
if (f.preset.passes.includes('swiss-grid')) {
|
|
83
|
+
const len = f.still ? 1 : prog(f.lt, 0, 2 * f.beat, ease.outCubic);
|
|
84
|
+
out.rules.push({ id: `${f.shot.id}:rule`, x0: LEFT, y0: 660, x1: LEFT + 960 * len, y1: 660, width: 2, role: 'rule', alpha: 1 });
|
|
85
|
+
out.rules.push({ id: `${f.shot.id}:tick`, x0: LEFT, y0: 104, x1: LEFT + 64, y1: 104, width: 2, role: 'rule', alpha: 1 });
|
|
86
|
+
}
|
|
87
|
+
out.rects.push(...accentMark(f, LEFT + 980, 646));
|
|
88
|
+
return out;
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const karaokeLine = {
|
|
93
|
+
id: 'karaoke-line',
|
|
94
|
+
render(f) {
|
|
95
|
+
const text = f.shot.text;
|
|
96
|
+
const words = eojeols(text);
|
|
97
|
+
const reveals = f.reveals;
|
|
98
|
+
const out = { texts: [], strokes: [], rects: [], rules: [], overrides: {} };
|
|
99
|
+
const starts = reveals.length === words.length ? reveals.map((r) => r.start - f.shot.start) : words.map((_, i) => (i * f.hold * 0.6) / words.length);
|
|
100
|
+
const wordState = words.map((_, i) => {
|
|
101
|
+
if (f.still) return { alpha: 1, dy: 0, current: false };
|
|
102
|
+
const k = prog(f.lt, starts[i], starts[i] + 0.12, ease.outCubic);
|
|
103
|
+
const next = i + 1 < starts.length ? starts[i + 1] : Infinity;
|
|
104
|
+
return { alpha: k, dy: lerp(14, 0, k), current: f.lt >= starts[i] && f.lt < next && i < words.length - 1 };
|
|
105
|
+
});
|
|
106
|
+
const terminal = f.preset.id === 'terminalcore';
|
|
107
|
+
if (terminal) out.terminal = terminalChrome(f);
|
|
108
|
+
out.texts.push({
|
|
109
|
+
id: f.shot.id, text, voice: terminal ? 'display' : 'body', role: 'text', weight: 700,
|
|
110
|
+
fit: { maxWidth: terminal ? 1560 : CONTENT_W - 40, max: terminal ? 90 : 128, min: 48, maxLines: 3, pixelGrid: terminal ? 9 : 0 },
|
|
111
|
+
x: terminal ? 200 : LEFT + 40, y: 570, align: 'left', alpha: 1, trackingEm: 0,
|
|
112
|
+
words: wordState.map((w) => ({ alpha: w.alpha, dy: w.dy, role: w.current ? 'emphasis' : 'text' })),
|
|
113
|
+
});
|
|
114
|
+
if (f.preset.passes.includes('swiss-grid')) {
|
|
115
|
+
out.rules.push({ id: `${f.shot.id}:margin`, x0: LEFT, y0: 430, x1: LEFT, y1: 430 + 190 * (f.still ? 1 : prog(f.lt, 0, f.beat, ease.outCubic)), width: 2, role: 'rule', alpha: 1 });
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const kineticList = {
|
|
122
|
+
id: 'kinetic-list',
|
|
123
|
+
render(f) {
|
|
124
|
+
const items = listItems(f.shot.text);
|
|
125
|
+
const out = { texts: [], strokes: [], rects: [], rules: [], overrides: {} };
|
|
126
|
+
const terminal = f.preset.id === 'terminalcore';
|
|
127
|
+
if (terminal) out.terminal = terminalChrome(f);
|
|
128
|
+
const starts = f.reveals.length === items.length ? f.reveals.map((r) => r.start - f.shot.start) : items.map((_, i) => i * f.beat);
|
|
129
|
+
const rows = items.length;
|
|
130
|
+
const rowSize = Math.min(104, Math.floor(760 / (rows * 1.6)));
|
|
131
|
+
const top = 540 - ((rows - 1) * rowSize * 1.6) / 2;
|
|
132
|
+
out.block = { id: f.shot.id, lines: rows, lineHeight: 1.6 };
|
|
133
|
+
items.forEach((item, i) => {
|
|
134
|
+
const k = f.still ? 1 : prog(f.lt, starts[i], starts[i] + (f.tokens.entranceSec ?? 0.2), ease.slam);
|
|
135
|
+
const y = top + i * rowSize * 1.6 + rowSize * 0.35;
|
|
136
|
+
out.texts.push({ id: `${f.shot.id}:n${i}`, text: String(i + 1).padStart(2, '0'), voice: 'machine', role: 'annotation', size: 26, weight: 400, x: LEFT, y, alpha: k, trackingEm: 0.02 });
|
|
137
|
+
out.texts.push({ id: `${f.shot.id}:i${i}`, text: item, voice: terminal ? 'display' : 'body', role: i === rows - 1 && !f.still && f.lt < starts[i] + f.beat ? 'emphasis' : 'text', weight: 700, fit: { maxWidth: 1520, max: rowSize, min: 40, pixelGrid: terminal ? 9 : 0 }, x: 220 + lerp(-24, 0, k), y, alpha: k, trackingEm: 0, blockId: f.shot.id });
|
|
138
|
+
if (f.preset.passes.includes('swiss-grid') && i < rows - 1) {
|
|
139
|
+
out.rules.push({ id: `${f.shot.id}:sep${i}`, x0: LEFT, y0: y + rowSize * 0.55, x1: LEFT + 1560 * k, y1: y + rowSize * 0.55, width: 1.5, role: 'rule', alpha: k });
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return out;
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// Counts toward the brief's own number with a critically damped spring,
|
|
147
|
+
// integrated on a fixed 1/fps grid from the shot start so a seek re-derives
|
|
148
|
+
// exactly the state a sequential render carried (MO-A-05, MO-A-25).
|
|
149
|
+
const numberCounter = {
|
|
150
|
+
id: 'number-counter',
|
|
151
|
+
stateful: true,
|
|
152
|
+
prerollMax: Infinity,
|
|
153
|
+
reset() { return { steps: 0, x: 0, v: 0 }; },
|
|
154
|
+
// Settles inside about 0.8 s; once within half a displayed unit it snaps, so
|
|
155
|
+
// the final number is exact and holds for the rest of the shot.
|
|
156
|
+
step(state, target, fps, decimals = 0) {
|
|
157
|
+
if (state.done) return { ...state, steps: state.steps + 1 };
|
|
158
|
+
const dt = 1 / fps, w = 10;
|
|
159
|
+
const a = w * w * (target - state.x) - 2 * w * state.v;
|
|
160
|
+
const v = state.v + a * dt;
|
|
161
|
+
const x = state.x + v * dt;
|
|
162
|
+
const close = Math.abs(target - x) < 0.5 * 10 ** -decimals && Math.abs(v) < 10 ** -decimals * fps;
|
|
163
|
+
return close ? { steps: state.steps + 1, x: target, v: 0, done: true } : { steps: state.steps + 1, x, v };
|
|
164
|
+
},
|
|
165
|
+
render(f) {
|
|
166
|
+
const { raw, target, decimals, suffix } = counterTarget(f.shot.text);
|
|
167
|
+
const value = f.still ? target : Math.min(target, Math.max(0, f.state?.x ?? 0));
|
|
168
|
+
const shown = formatLike(raw, value, decimals) + suffix;
|
|
169
|
+
const label = f.shot.text.replace(raw + suffix, '').replace(/\s+/g, ' ').trim();
|
|
170
|
+
const out = { texts: [], strokes: [], rects: [], rules: [], overrides: {} };
|
|
171
|
+
const terminal = f.preset.id === 'terminalcore';
|
|
172
|
+
if (terminal) out.terminal = terminalChrome(f);
|
|
173
|
+
const e = terminal ? { alpha: 1, scale: 1, dy: 0 } : entrance(f, f.tokens.entrance === 'drift' ? 'drift' : 'slam');
|
|
174
|
+
out.texts.push({ id: `${f.shot.id}:num`, text: shown, voice: 'display', role: 'text', weight: 900, fit: { maxWidth: 1400, max: 220, min: 80, sample: formatLike(raw, target, decimals) + suffix, pixelGrid: 0 }, x: LEFT, y: 520 + e.dy, align: 'left', alpha: e.alpha, trackingEm: 0 });
|
|
175
|
+
if (label) out.texts.push({ id: `${f.shot.id}:label`, text: label, voice: 'body', role: 'text', weight: 400, fit: { maxWidth: CONTENT_W, max: 64, min: 36, pixelGrid: terminal ? 9 : 0 }, x: LEFT, y: 680 + e.dy, align: 'left', alpha: e.alpha, trackingEm: 0 });
|
|
176
|
+
const ratio = target > 0 ? clamp(value / target) : 1;
|
|
177
|
+
out.rects.push({ id: `${f.shot.id}:bar`, x: LEFT, y: 760, w: Math.max(2, 1200 * ratio), h: 10, role: 'emphasis', alpha: e.alpha });
|
|
178
|
+
return out;
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
export function counterTarget(text) {
|
|
183
|
+
const match = String(text).match(/(\d[\d,]*(?:\.\d+)?)(%?)/);
|
|
184
|
+
const raw = match ? match[1] : '0';
|
|
185
|
+
return { raw, suffix: match ? match[2] : '', target: Number(raw.replace(/,/g, '')) || 0, decimals: (raw.split('.')[1] || '').length };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function formatLike(raw, value, decimals) {
|
|
189
|
+
const fixed = value.toFixed(decimals);
|
|
190
|
+
if (!raw.includes(',')) return fixed;
|
|
191
|
+
const [int, frac] = fixed.split('.');
|
|
192
|
+
return int.replace(/\B(?=(\d{3})+(?!\d))/g, ',') + (frac ? `.${frac}` : '');
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const strokeSignature = {
|
|
196
|
+
id: 'stroke-signature',
|
|
197
|
+
render(f) {
|
|
198
|
+
const out = { texts: [], strokes: [], rects: [], rules: [], overrides: {} };
|
|
199
|
+
const chars = Array.from(f.shot.text);
|
|
200
|
+
const writeSec = Math.max(0.6, f.hold - f.beat);
|
|
201
|
+
const per = writeSec / Math.max(1, chars.length);
|
|
202
|
+
const charTimes = chars.map((_, i) => [f.shot.start + i * per, f.shot.start + (i + 1) * per]);
|
|
203
|
+
out.strokes.push({ id: f.shot.id, text: f.shot.text, font: 'script', size: 200, x: LEFT + 40, y: 600, width: 4, role: 'text', alpha: 1, charTimes, t: f.still ? Infinity : f.t });
|
|
204
|
+
if (f.preset.passes.includes('swiss-grid')) out.rules.push({ id: `${f.shot.id}:base`, x0: LEFT, y0: 660, x1: LEFT + 720, y1: 660, width: 1.5, role: 'rule', alpha: 1 });
|
|
205
|
+
if (f.preset.id === 'terminalcore') out.terminal = terminalChrome(f);
|
|
206
|
+
return out;
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const endCard = {
|
|
211
|
+
id: 'end-card',
|
|
212
|
+
render(f) {
|
|
213
|
+
const text = f.shot.text;
|
|
214
|
+
const out = { texts: [], strokes: [], rects: [], rules: [], overrides: {} };
|
|
215
|
+
const terminal = f.preset.id === 'terminalcore';
|
|
216
|
+
const hangul = /[가-힣]/u.test(text);
|
|
217
|
+
if (terminal) {
|
|
218
|
+
out.terminal = terminalChrome(f);
|
|
219
|
+
const typed = typedCount(f, text);
|
|
220
|
+
out.texts.push({ id: f.shot.id, text, voice: 'display', role: 'text', fit: { maxWidth: 1540, max: hangul ? 90 : 120, min: 54, maxLines: 2, pixelGrid: hangul ? 9 : 0 }, x: 200, y: 560, align: 'left', alpha: 1, visibleChars: typed, trackingEm: 0 });
|
|
221
|
+
out.texts.push({ id: `${f.shot.id}:prompt`, text: '>', voice: 'machine', role: 'annotation', size: 64, weight: 400, x: 120, y: 544, alpha: 1, trackingEm: 0 });
|
|
222
|
+
out.terminal.caret = { after: f.shot.id, blinkHz: 1.2, t: f.lt, visibleAfterType: typed >= Array.from(text).length };
|
|
223
|
+
} else {
|
|
224
|
+
const e = entrance(f, f.tokens.entrance);
|
|
225
|
+
out.texts.push({ id: f.shot.id, text, voice: 'display', role: 'text', weight: 700, fit: { maxWidth: CONTENT_W, max: hangul ? 120 : 132, min: 56, maxLines: 2 }, x: LEFT, y: 600 + e.dy, align: 'left', alpha: e.alpha, scale: e.scale, trackingEm: hangul ? 0 : -0.01 });
|
|
226
|
+
if (f.reduced && f.firstLine && f.firstLine !== text) {
|
|
227
|
+
out.texts.push({ id: `${f.shot.id}:title`, text: f.firstLine, voice: 'body', role: 'annotation', weight: 700, fit: { maxWidth: CONTENT_W, max: 44, min: 32 }, x: LEFT, y: 360, align: 'left', alpha: 1, trackingEm: 0 });
|
|
228
|
+
}
|
|
229
|
+
if (f.preset.passes.includes('swiss-grid')) out.rules.push({ id: `${f.shot.id}:rule`, x0: LEFT, y0: 420, x1: LEFT + 240, y1: 420, width: 2, role: 'rule', alpha: 1 });
|
|
230
|
+
}
|
|
231
|
+
return out;
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
export const SCENE_MODULES = Object.freeze({
|
|
236
|
+
'title-slam': titleSlam,
|
|
237
|
+
'karaoke-line': karaokeLine,
|
|
238
|
+
'kinetic-list': kineticList,
|
|
239
|
+
'number-counter': numberCounter,
|
|
240
|
+
'stroke-signature': strokeSignature,
|
|
241
|
+
'end-card': endCard,
|
|
242
|
+
});
|