@litfamily/litgrok 1.0.33 → 1.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.grok/hooks/lit-status-line.mjs +59 -1
- package/.grok/rules/00-litgrok.md +5 -7
- package/.grok/skills/browser-drive/scripts/capability-probe.mjs +1 -1
- package/.grok/skills/frontend-ui-ux/SKILL.md +47 -39
- package/.grok/skills/lit-adhd/SKILL.md +36 -12
- package/.grok/skills/lit-adhd/references/card-examples.md +106 -3
- package/.grok/skills/lit-adhd/references/status-taxonomy.md +20 -1
- package/.grok/skills/lit-adhd/scripts/lib/board.mjs +333 -0
- package/.grok/skills/lit-adhd/scripts/lib/collect.mjs +76 -8
- package/.grok/skills/lit-diagram-drawer/SKILL.md +32 -93
- package/.grok/skills/lit-docx/SKILL.md +31 -77
- package/.grok/skills/lit-humanizer/scripts/extract.mjs +1 -1
- package/.grok/skills/lit-humanizer/scripts/test-fixtures.mjs +1 -1
- package/.grok/skills/lit-pptx/SKILL.md +30 -90
- package/.grok/skills/lit-schematic/SKILL.md +30 -115
- package/.grok/skills/lit-scientific-visualization/SKILL.md +36 -221
- package/.grok/skills/lit-typographic-motion/SKILL.md +40 -29
- package/.grok/skills/litgrok/SKILL.md +6 -3
- package/.grok/skills/litwork/SKILL.md +1 -1
- package/.grok/skills/lsp-setup/scripts/lsp-server-table.mjs +1 -1
- package/.grok/skills/readme-studio/SKILL.md +40 -24
- package/.grok/skills/visual-qa/SKILL.md +33 -28
- package/.grok-plugin/plugin.json +1 -1
- package/CHANGELOG.md +16 -1
- package/CONTRIBUTING.md +0 -1
- package/README.md +9 -9
- package/README_ko-KR.md +9 -9
- package/bin/litgrok.mjs +351 -30
- package/docs/assets/readme/README.md +7 -0
- package/docs/assets/readme/badge-version.svg +1 -1
- package/docs/reference.md +11 -5
- package/docs/reference_ko-KR.md +10 -5
- package/package.json +4 -6
- package/plugin.json +1 -1
- package/.grok/skills/frontend-ui-ux/ATTRIBUTION.md +0 -23
- package/.grok/skills/frontend-ui-ux/LICENSE +0 -21
- package/.grok/skills/frontend-ui-ux/PROVENANCE.json +0 -38
- package/.grok/skills/frontend-ui-ux/SOURCE-MANIFEST.json +0 -1060
- package/.grok/skills/frontend-ui-ux/THIRD-PARTY-NOTICE.txt +0 -24
- package/.grok/skills/frontend-ui-ux/data/design-intelligence.json +0 -1
- package/.grok/skills/frontend-ui-ux/examples/phase-3-readme-ab/README.md +0 -9
- package/.grok/skills/frontend-ui-ux/examples/phase-3-readme-motion-ab.md +0 -24
- package/.grok/skills/frontend-ui-ux/kit/components.css +0 -414
- package/.grok/skills/frontend-ui-ux/kit/fonts.json +0 -22
- package/.grok/skills/frontend-ui-ux/kit/layouts/landing.html +0 -164
- package/.grok/skills/frontend-ui-ux/kit/layouts/settings.html +0 -114
- package/.grok/skills/frontend-ui-ux/kit/layouts/workspace.html +0 -115
- package/.grok/skills/frontend-ui-ux/kit/styles/computational-brutalism.json +0 -227
- package/.grok/skills/frontend-ui-ux/kit/styles/field-notes.json +0 -205
- package/.grok/skills/frontend-ui-ux/kit/styles/graphite.json +0 -200
- package/.grok/skills/frontend-ui-ux/kit/styles/meadow.json +0 -199
- package/.grok/skills/frontend-ui-ux/kit/styles/neo-brutalism.json +0 -222
- package/.grok/skills/frontend-ui-ux/kit/ui.js +0 -226
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-ATTRIBUTION.md +0 -217
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-LICENSE-Apache-2.0.txt +0 -201
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/root-LICENSE +0 -21
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +0 -873
- package/.grok/skills/frontend-ui-ux/references/adaptive-layout.md +0 -88
- package/.grok/skills/frontend-ui-ux/references/brand-and-imagery.md +0 -87
- package/.grok/skills/frontend-ui-ux/references/complete-contract.md +0 -572
- package/.grok/skills/frontend-ui-ux/references/composition.md +0 -79
- package/.grok/skills/frontend-ui-ux/references/craft-floor.md +0 -262
- package/.grok/skills/frontend-ui-ux/references/creative-directions.md +0 -74
- package/.grok/skills/frontend-ui-ux/references/default-editorial-pixel.json +0 -28
- package/.grok/skills/frontend-ui-ux/references/design/README.md +0 -248
- package/.grok/skills/frontend-ui-ux/references/design/_INDEX.md +0 -191
- package/.grok/skills/frontend-ui-ux/references/design/airbnb.md +0 -393
- package/.grok/skills/frontend-ui-ux/references/design/airtable.md +0 -92
- package/.grok/skills/frontend-ui-ux/references/design/apple.md +0 -250
- package/.grok/skills/frontend-ui-ux/references/design/aside.md +0 -209
- package/.grok/skills/frontend-ui-ux/references/design/binance.md +0 -348
- package/.grok/skills/frontend-ui-ux/references/design/bmw.md +0 -183
- package/.grok/skills/frontend-ui-ux/references/design/brutalist-skill.md +0 -92
- package/.grok/skills/frontend-ui-ux/references/design/bugatti.md +0 -271
- package/.grok/skills/frontend-ui-ux/references/design/cal.md +0 -262
- package/.grok/skills/frontend-ui-ux/references/design/claude.md +0 -315
- package/.grok/skills/frontend-ui-ux/references/design/clay.md +0 -307
- package/.grok/skills/frontend-ui-ux/references/design/clickhouse.md +0 -284
- package/.grok/skills/frontend-ui-ux/references/design/clone-from-url.md +0 -65
- package/.grok/skills/frontend-ui-ux/references/design/cohere.md +0 -269
- package/.grok/skills/frontend-ui-ux/references/design/coinbase.md +0 -132
- package/.grok/skills/frontend-ui-ux/references/design/composio.md +0 -310
- package/.grok/skills/frontend-ui-ux/references/design/cursor.md +0 -312
- package/.grok/skills/frontend-ui-ux/references/design/design-system-architecture.md +0 -244
- package/.grok/skills/frontend-ui-ux/references/design/elevenlabs.md +0 -268
- package/.grok/skills/frontend-ui-ux/references/design/expo.md +0 -284
- package/.grok/skills/frontend-ui-ux/references/design/ferrari.md +0 -317
- package/.grok/skills/frontend-ui-ux/references/design/figma.md +0 -223
- package/.grok/skills/frontend-ui-ux/references/design/framer.md +0 -249
- package/.grok/skills/frontend-ui-ux/references/design/gpt-tasteskill.md +0 -74
- package/.grok/skills/frontend-ui-ux/references/design/hashicorp.md +0 -281
- package/.grok/skills/frontend-ui-ux/references/design/ibm.md +0 -335
- package/.grok/skills/frontend-ui-ux/references/design/image-to-code-skill.md +0 -1228
- package/.grok/skills/frontend-ui-ux/references/design/imagegen-brandkit.md +0 -798
- package/.grok/skills/frontend-ui-ux/references/design/imagegen-frontend-mobile.md +0 -1465
- package/.grok/skills/frontend-ui-ux/references/design/imagegen-frontend-web.md +0 -987
- package/.grok/skills/frontend-ui-ux/references/design/intercom.md +0 -149
- package/.grok/skills/frontend-ui-ux/references/design/kraken.md +0 -128
- package/.grok/skills/frontend-ui-ux/references/design/lamborghini.md +0 -291
- package/.grok/skills/frontend-ui-ux/references/design/layout-skill.md +0 -107
- package/.grok/skills/frontend-ui-ux/references/design/lazyweb.md +0 -77
- package/.grok/skills/frontend-ui-ux/references/design/linear.app.md +0 -370
- package/.grok/skills/frontend-ui-ux/references/design/lovable.md +0 -301
- package/.grok/skills/frontend-ui-ux/references/design/mastercard.md +0 -368
- package/.grok/skills/frontend-ui-ux/references/design/meta.md +0 -369
- package/.grok/skills/frontend-ui-ux/references/design/minimalist-skill.md +0 -85
- package/.grok/skills/frontend-ui-ux/references/design/minimax.md +0 -260
- package/.grok/skills/frontend-ui-ux/references/design/mintlify.md +0 -329
- package/.grok/skills/frontend-ui-ux/references/design/miro.md +0 -111
- package/.grok/skills/frontend-ui-ux/references/design/mistral.ai.md +0 -264
- package/.grok/skills/frontend-ui-ux/references/design/mongodb.md +0 -269
- package/.grok/skills/frontend-ui-ux/references/design/nike.md +0 -366
- package/.grok/skills/frontend-ui-ux/references/design/notion.md +0 -312
- package/.grok/skills/frontend-ui-ux/references/design/nvidia.md +0 -296
- package/.grok/skills/frontend-ui-ux/references/design/ollama.md +0 -270
- package/.grok/skills/frontend-ui-ux/references/design/opencode.ai.md +0 -284
- package/.grok/skills/frontend-ui-ux/references/design/output-skill.md +0 -49
- package/.grok/skills/frontend-ui-ux/references/design/pinterest.md +0 -233
- package/.grok/skills/frontend-ui-ux/references/design/playstation.md +0 -367
- package/.grok/skills/frontend-ui-ux/references/design/posthog.md +0 -259
- package/.grok/skills/frontend-ui-ux/references/design/raycast.md +0 -271
- package/.grok/skills/frontend-ui-ux/references/design/react-dev-tooling-skill.md +0 -230
- package/.grok/skills/frontend-ui-ux/references/design/redesign-skill.md +0 -178
- package/.grok/skills/frontend-ui-ux/references/design/renault.md +0 -314
- package/.grok/skills/frontend-ui-ux/references/design/replicate.md +0 -264
- package/.grok/skills/frontend-ui-ux/references/design/resend.md +0 -306
- package/.grok/skills/frontend-ui-ux/references/design/revolut.md +0 -188
- package/.grok/skills/frontend-ui-ux/references/design/runwayml.md +0 -247
- package/.grok/skills/frontend-ui-ux/references/design/sanity.md +0 -360
- package/.grok/skills/frontend-ui-ux/references/design/sentry.md +0 -265
- package/.grok/skills/frontend-ui-ux/references/design/shopify.md +0 -353
- package/.grok/skills/frontend-ui-ux/references/design/soft-skill.md +0 -98
- package/.grok/skills/frontend-ui-ux/references/design/spacex.md +0 -197
- package/.grok/skills/frontend-ui-ux/references/design/spotify.md +0 -249
- package/.grok/skills/frontend-ui-ux/references/design/starbucks.md +0 -583
- package/.grok/skills/frontend-ui-ux/references/design/stitch-design-example.md +0 -121
- package/.grok/skills/frontend-ui-ux/references/design/stitch-skill.md +0 -184
- package/.grok/skills/frontend-ui-ux/references/design/stripe.md +0 -325
- package/.grok/skills/frontend-ui-ux/references/design/supabase.md +0 -258
- package/.grok/skills/frontend-ui-ux/references/design/superhuman.md +0 -255
- package/.grok/skills/frontend-ui-ux/references/design/taste-skill.md +0 -1206
- package/.grok/skills/frontend-ui-ux/references/design/tesla.md +0 -289
- package/.grok/skills/frontend-ui-ux/references/design/theverge.md +0 -342
- package/.grok/skills/frontend-ui-ux/references/design/together.ai.md +0 -266
- package/.grok/skills/frontend-ui-ux/references/design/uber.md +0 -298
- package/.grok/skills/frontend-ui-ux/references/design/vercel.md +0 -313
- package/.grok/skills/frontend-ui-ux/references/design/vodafone.md +0 -426
- package/.grok/skills/frontend-ui-ux/references/design/voltagent.md +0 -326
- package/.grok/skills/frontend-ui-ux/references/design/warp.md +0 -256
- package/.grok/skills/frontend-ui-ux/references/design/webflow.md +0 -95
- package/.grok/skills/frontend-ui-ux/references/design/wired.md +0 -281
- package/.grok/skills/frontend-ui-ux/references/design/wise.md +0 -176
- package/.grok/skills/frontend-ui-ux/references/design/x.ai.md +0 -260
- package/.grok/skills/frontend-ui-ux/references/design/zapier.md +0 -331
- package/.grok/skills/frontend-ui-ux/references/designpowers/EVIDENCE.md +0 -97
- package/.grok/skills/frontend-ui-ux/references/designpowers/README.md +0 -48
- package/.grok/skills/frontend-ui-ux/references/designpowers/UPSTREAM.md +0 -80
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-a-direction.md +0 -64
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-b-execution.md +0 -65
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-c-review.md +0 -65
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-d-memory.md +0 -83
- package/.grok/skills/frontend-ui-ux/references/designpowers/orchestration.md +0 -80
- package/.grok/skills/frontend-ui-ux/references/designpowers/routing.md +0 -79
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/LICENSE +0 -21
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/accessibility-reviewer.md +0 -83
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/content-writer.md +0 -132
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-builder.md +0 -109
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-critic.md +0 -89
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-lead.md +0 -113
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-scout.md +0 -78
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-strategist.md +0 -121
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/heuristic-evaluator.md +0 -268
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/inspiration-scout.md +0 -107
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/motion-designer.md +0 -120
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/accessible-content/reference.md +0 -101
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/adaptive-interfaces/reference.md +0 -109
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/cognitive-accessibility/reference.md +0 -107
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debate/reference.md +0 -199
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debt-tracker/reference.md +0 -174
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-handoff/reference.md +0 -125
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-md/reference.md +0 -106
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-retrospective/reference.md +0 -266
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-review/reference.md +0 -123
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-system-alignment/reference.md +0 -120
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/designpowers-critique/reference.md +0 -164
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/heuristic-evaluation/reference.md +0 -85
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/inclusive-personas/reference.md +0 -98
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/inspiration-scouting/reference.md +0 -165
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/interaction-design/reference.md +0 -122
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/motion-choreography/reference.md +0 -81
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/research-planning/reference.md +0 -96
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/responsive-patterns/reference.md +0 -77
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/synthetic-user-testing/reference.md +0 -192
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-feedback/reference.md +0 -165
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-report/reference.md +0 -78
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/token-architecture/reference.md +0 -75
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/ui-composition/reference.md +0 -117
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/usability-testing/reference.md +0 -78
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/verification-before-shipping/reference.md +0 -125
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/voice-and-tone/reference.md +0 -79
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/writing-design-plans/reference.md +0 -119
- package/.grok/skills/frontend-ui-ux/references/evidence-review.md +0 -126
- package/.grok/skills/frontend-ui-ux/references/house-styles.md +0 -234
- package/.grok/skills/frontend-ui-ux/references/implementation-platforms.md +0 -103
- package/.grok/skills/frontend-ui-ux/references/inclusive-interface.md +0 -88
- package/.grok/skills/frontend-ui-ux/references/interaction-motion.md +0 -47
- package/.grok/skills/frontend-ui-ux/references/motion-guide.md +0 -130
- package/.grok/skills/frontend-ui-ux/references/operating-lanes.md +0 -92
- package/.grok/skills/frontend-ui-ux/references/perfection/README.md +0 -160
- package/.grok/skills/frontend-ui-ux/references/perfection/react-perf-tooling.md +0 -127
- package/.grok/skills/frontend-ui-ux/references/performance-delivery.md +0 -85
- package/.grok/skills/frontend-ui-ux/references/probe-loop.md +0 -27
- package/.grok/skills/frontend-ui-ux/references/product-direction.md +0 -80
- package/.grok/skills/frontend-ui-ux/references/production-interview.md +0 -17
- package/.grok/skills/frontend-ui-ux/references/production.md +0 -27
- package/.grok/skills/frontend-ui-ux/references/redesign-playbook.md +0 -91
- package/.grok/skills/frontend-ui-ux/references/slop-register.md +0 -150
- package/.grok/skills/frontend-ui-ux/references/system-foundations.md +0 -80
- package/.grok/skills/frontend-ui-ux/references/taste-direction.md +0 -86
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/README.md +0 -659
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/charts.csv +0 -26
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/colors.csv +0 -162
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/icons.csv +0 -106
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/landing.csv +0 -35
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/products.csv +0 -162
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/react-performance.csv +0 -45
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/astro.csv +0 -54
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/flutter.csv +0 -53
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/html-tailwind.csv +0 -56
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/jetpack-compose.csv +0 -53
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nextjs.csv +0 -53
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxt-ui.csv +0 -51
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxtjs.csv +0 -59
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react-native.csv +0 -52
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react.csv +0 -54
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/shadcn.csv +0 -61
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/svelte.csv +0 -54
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/swiftui.csv +0 -51
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/vue.csv +0 -50
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/styles.csv +0 -85
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/typography.csv +0 -74
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/ui-reasoning.csv +0 -162
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/ux-guidelines.csv +0 -100
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/web-interface.csv +0 -31
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/core.py +0 -262
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/design_system.py +0 -1148
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/search.py +0 -114
- package/.grok/skills/frontend-ui-ux/references/visual-language.md +0 -80
- package/.grok/skills/frontend-ui-ux/references/visual-reconstruction.md +0 -51
- package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.schema.json +0 -306
- package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1beta1.schema.json +0 -291
- package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1beta2.schema.json +0 -311
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-format.mjs +0 -286
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-inventory-rules.mjs +0 -354
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-rules.mjs +0 -361
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-surface-rules.mjs +0 -313
- package/.grok/skills/frontend-ui-ux/scripts/design-data.mjs +0 -68
- package/.grok/skills/frontend-ui-ux/scripts/design-lock.mjs +0 -400
- package/.grok/skills/frontend-ui-ux/scripts/errors.mjs +0 -12
- package/.grok/skills/frontend-ui-ux/scripts/import-design-intelligence.mjs +0 -124
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-driver.mjs +0 -33
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-lock.mjs +0 -196
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-page.mjs +0 -1555
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-rules.mjs +0 -153
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-server.mjs +0 -57
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe-static.mjs +0 -139
- package/.grok/skills/frontend-ui-ux/scripts/interface-probe.mjs +0 -363
- package/.grok/skills/frontend-ui-ux/scripts/json-boundary.mjs +0 -63
- package/.grok/skills/frontend-ui-ux/scripts/pixel-art.mjs +0 -60
- package/.grok/skills/frontend-ui-ux/scripts/query-design-intelligence.mjs +0 -106
- package/.grok/skills/frontend-ui-ux/scripts/search.mjs +0 -43
- package/.grok/skills/frontend-ui-ux/scripts/source-replay.mjs +0 -153
- package/.grok/skills/frontend-ui-ux/scripts/strict-json.mjs +0 -143
- package/.grok/skills/frontend-ui-ux/scripts/validate-design-contract.mjs +0 -52
- package/.grok/skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs +0 -214
- package/.grok/skills/lit-diagram-drawer/NOTICE +0 -33
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-architecture-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-architecture-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-architecture-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bar-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bar-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bar-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-beeswarm-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-beeswarm-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-beeswarm-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bubble-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bubble-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bubble-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bump-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bump-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-bump-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-data-flow-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-data-flow-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-data-flow-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-datalake-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-datalake-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-datalake-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-db-schema-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-db-schema-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-db-schema-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dependency-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dependency-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dependency-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-deployment-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-deployment-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-deployment-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-integration-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-integration-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-integration-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-dp-security-matrix-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-er-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-er-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-er-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-fishbone-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-fishbone-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-fishbone-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-flowchart-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-flowchart-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-flowchart-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-gantt-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-gantt-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-gantt-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-heatmap-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-heatmap-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-heatmap-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-high-level-vertical-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-drawio-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-drawio-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-drawio-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-excalidraw-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-import-mermaid-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-it-state-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-it-state-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-it-state-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-journey-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-journey-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-journey-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-kanban-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-kanban-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-kanban-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-layers-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-layers-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-layers-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-line-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-line-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-line-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-loop-terminal-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-marimekko-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-marimekko-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-marimekko-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-medallion-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-medallion-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-medallion-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-nested-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-nested-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-nested-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-org-chart-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-org-chart-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-org-chart-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-paved-road-animated-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-polar-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-polar-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-polar-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-policy-trace-animated-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-process-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-process-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-process-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-pyramid-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-pyramid-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-pyramid-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-consultant-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-quadrant-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-queue-animated-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-queue-animated-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-queue-animated-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-radar-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-radar-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-radar-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-ridgeline-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-ridgeline-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-ridgeline-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sankey-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sankey-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sankey-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-scatter-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-scatter-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-scatter-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-sequence-oauth-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-slopegraph-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-slopegraph-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-slopegraph-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-lifecycle-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-state-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-story-map-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-story-map-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-story-map-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-streamgraph-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-streamgraph-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-streamgraph-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-swimlane-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-swimlane-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-swimlane-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-timeline-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-timeline-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-timeline-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-block-decomposition-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-tree-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-treemap-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-treemap-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-treemap-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-uml-class-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-uml-class-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-uml-class-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-venn-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-venn-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-venn-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-wardley-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-wardley-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-wardley-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-waterfall-dark.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-waterfall-full.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/examples/type-waterfall-light.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/fonts/OFL.txt +0 -94
- package/.grok/skills/lit-diagram-drawer/assets/fonts/PretendardVariable.woff2 +0 -0
- package/.grok/skills/lit-diagram-drawer/assets/fonts/provenance.json +0 -22
- package/.grok/skills/lit-diagram-drawer/assets/icons.html +0 -231
- package/.grok/skills/lit-diagram-drawer/assets/index.html +0 -1
- package/.grok/skills/lit-diagram-drawer/assets/licenses/devicon-MIT.txt +0 -20
- package/.grok/skills/lit-diagram-drawer/assets/licenses/diagram-design-MIT.txt +0 -21
- package/.grok/skills/lit-diagram-drawer/assets/licenses/log-z-MIT.txt +0 -21
- package/.grok/skills/lit-diagram-drawer/assets/licenses/simple-icons-CC0.md +0 -30
- package/.grok/skills/lit-diagram-drawer/assets/licenses/tabler-MIT.txt +0 -21
- package/.grok/skills/lit-diagram-drawer/examples/01-service-architecture/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/01-service-architecture/brief.md +0 -33
- package/.grok/skills/lit-diagram-drawer/examples/01-service-architecture/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/02-release-decision/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/02-release-decision/brief.md +0 -18
- package/.grok/skills/lit-diagram-drawer/examples/02-release-decision/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/03-data-retention/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/03-data-retention/brief.md +0 -19
- package/.grok/skills/lit-diagram-drawer/examples/03-data-retention/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/04-oauth-sequence/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/04-oauth-sequence/brief.md +0 -17
- package/.grok/skills/lit-diagram-drawer/examples/04-oauth-sequence/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/05-review-lanes/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/05-review-lanes/brief.md +0 -17
- package/.grok/skills/lit-diagram-drawer/examples/05-review-lanes/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/06-rollout-gates/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/06-rollout-gates/brief.md +0 -17
- package/.grok/skills/lit-diagram-drawer/examples/06-rollout-gates/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/07-deployment-boundary/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/07-deployment-boundary/brief.md +0 -19
- package/.grok/skills/lit-diagram-drawer/examples/07-deployment-boundary/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/08-policy-traces/after.html +0 -1
- package/.grok/skills/lit-diagram-drawer/examples/08-policy-traces/brief.md +0 -20
- package/.grok/skills/lit-diagram-drawer/examples/08-policy-traces/constructed-naive-foil.html +0 -1
- package/.grok/skills/lit-diagram-drawer/references/accessibility.md +0 -37
- package/.grok/skills/lit-diagram-drawer/references/export.md +0 -29
- package/.grok/skills/lit-diagram-drawer/references/import-drawio.md +0 -21
- package/.grok/skills/lit-diagram-drawer/references/import-excalidraw.md +0 -14
- package/.grok/skills/lit-diagram-drawer/references/import-mermaid.md +0 -18
- package/.grok/skills/lit-diagram-drawer/references/import-schema.md +0 -28
- package/.grok/skills/lit-diagram-drawer/references/korean-typography.md +0 -34
- package/.grok/skills/lit-diagram-drawer/references/motion.md +0 -29
- package/.grok/skills/lit-diagram-drawer/references/office-pptx-docx.md +0 -42
- package/.grok/skills/lit-diagram-drawer/references/output-spec.md +0 -48
- package/.grok/skills/lit-diagram-drawer/references/primitive-annotation.md +0 -12
- package/.grok/skills/lit-diagram-drawer/references/primitive-icons.md +0 -21
- package/.grok/skills/lit-diagram-drawer/references/primitive-sketchy.md +0 -11
- package/.grok/skills/lit-diagram-drawer/references/primitive-terminal.md +0 -11
- package/.grok/skills/lit-diagram-drawer/references/profiles.md +0 -24
- package/.grok/skills/lit-diagram-drawer/references/semantic-patterns.md +0 -27
- package/.grok/skills/lit-diagram-drawer/references/style-guide.md +0 -76
- package/.grok/skills/lit-diagram-drawer/references/type-architecture.md +0 -51
- package/.grok/skills/lit-diagram-drawer/references/type-bar.md +0 -51
- package/.grok/skills/lit-diagram-drawer/references/type-beeswarm.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-bubble.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-bump.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-catalog.json +0 -1433
- package/.grok/skills/lit-diagram-drawer/references/type-data-flow.md +0 -51
- package/.grok/skills/lit-diagram-drawer/references/type-datalake.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-db-schema.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-dependency.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-deployment.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-dp-integration.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-dp-security-matrix.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-er.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-fishbone.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-flowchart.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-gantt.md +0 -49
- package/.grok/skills/lit-diagram-drawer/references/type-heatmap.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-high-level-vertical.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-high-level.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-import-drawio.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-import-excalidraw.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-import-mermaid.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-it-state.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-journey.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-kanban.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-layers.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-line.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-loop-terminal.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-loop.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-marimekko.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-medallion.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-nested.md +0 -59
- package/.grok/skills/lit-diagram-drawer/references/type-org-chart.md +0 -58
- package/.grok/skills/lit-diagram-drawer/references/type-paved-road-animated.md +0 -72
- package/.grok/skills/lit-diagram-drawer/references/type-polar.md +0 -67
- package/.grok/skills/lit-diagram-drawer/references/type-policy-trace-animated.md +0 -69
- package/.grok/skills/lit-diagram-drawer/references/type-process.md +0 -58
- package/.grok/skills/lit-diagram-drawer/references/type-pyramid.md +0 -59
- package/.grok/skills/lit-diagram-drawer/references/type-quadrant-consultant.md +0 -60
- package/.grok/skills/lit-diagram-drawer/references/type-quadrant.md +0 -57
- package/.grok/skills/lit-diagram-drawer/references/type-queue-animated.md +0 -63
- package/.grok/skills/lit-diagram-drawer/references/type-radar.md +0 -57
- package/.grok/skills/lit-diagram-drawer/references/type-ridgeline.md +0 -63
- package/.grok/skills/lit-diagram-drawer/references/type-sankey.md +0 -68
- package/.grok/skills/lit-diagram-drawer/references/type-scatter.md +0 -60
- package/.grok/skills/lit-diagram-drawer/references/type-sequence-oauth.md +0 -66
- package/.grok/skills/lit-diagram-drawer/references/type-sequence.md +0 -63
- package/.grok/skills/lit-diagram-drawer/references/type-slopegraph.md +0 -65
- package/.grok/skills/lit-diagram-drawer/references/type-state-lifecycle.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-state.md +0 -59
- package/.grok/skills/lit-diagram-drawer/references/type-story-map.md +0 -52
- package/.grok/skills/lit-diagram-drawer/references/type-streamgraph.md +0 -53
- package/.grok/skills/lit-diagram-drawer/references/type-swimlane.md +0 -52
- package/.grok/skills/lit-diagram-drawer/references/type-timeline.md +0 -52
- package/.grok/skills/lit-diagram-drawer/references/type-tree-block-decomposition.md +0 -57
- package/.grok/skills/lit-diagram-drawer/references/type-tree.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-treemap.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/type-uml-class.md +0 -52
- package/.grok/skills/lit-diagram-drawer/references/type-venn.md +0 -51
- package/.grok/skills/lit-diagram-drawer/references/type-wardley.md +0 -52
- package/.grok/skills/lit-diagram-drawer/references/type-waterfall.md +0 -54
- package/.grok/skills/lit-diagram-drawer/references/verifier-guide.md +0 -64
- package/.grok/skills/lit-diagram-drawer/scripts/block-registry.mjs +0 -43
- package/.grok/skills/lit-diagram-drawer/scripts/brief-contract.mjs +0 -94
- package/.grok/skills/lit-diagram-drawer/scripts/check-visible-text.mjs +0 -15
- package/.grok/skills/lit-diagram-drawer/scripts/diagram-metrics.mjs +0 -219
- package/.grok/skills/lit-diagram-drawer/scripts/doctor.mjs +0 -22
- package/.grok/skills/lit-diagram-drawer/scripts/drawio-extract.mjs +0 -359
- package/.grok/skills/lit-diagram-drawer/scripts/excalidraw-extract.mjs +0 -196
- package/.grok/skills/lit-diagram-drawer/scripts/export.mjs +0 -117
- package/.grok/skills/lit-diagram-drawer/scripts/import-common.mjs +0 -68
- package/.grok/skills/lit-diagram-drawer/scripts/mermaid-extract.mjs +0 -232
- package/.grok/skills/lit-diagram-drawer/scripts/office-safety.mjs +0 -54
- package/.grok/skills/lit-diagram-drawer/scripts/renderer-status.mjs +0 -43
- package/.grok/skills/lit-diagram-drawer/scripts/verify-all.mjs +0 -73
- package/.grok/skills/lit-diagram-drawer/scripts/verify-brief.mjs +0 -16
- package/.grok/skills/lit-diagram-drawer/scripts/verify-coverage.mjs +0 -56
- package/.grok/skills/lit-diagram-drawer/scripts/verify-diagram.mjs +0 -22
- package/.grok/skills/lit-diagram-drawer/scripts/verify-motion.mjs +0 -12
- package/.grok/skills/lit-diagram-drawer/scripts/verify-type.mjs +0 -48
- package/.grok/skills/lit-diagram-drawer/scripts/visual-quality.mjs +0 -344
- package/.grok/skills/lit-docx/LICENSE +0 -21
- package/.grok/skills/lit-docx/NOTICE.md +0 -1
- package/.grok/skills/lit-docx/examples/01-report-ko.md +0 -137
- package/.grok/skills/lit-docx/examples/02-brief-ko.md +0 -82
- package/.grok/skills/lit-docx/examples/03-manual-ko.md +0 -118
- package/.grok/skills/lit-docx/examples/04-proposal-ko.md +0 -92
- package/.grok/skills/lit-docx/examples/05-memo-en.md +0 -42
- package/.grok/skills/lit-docx/examples/06-journal-en.md +0 -90
- package/.grok/skills/lit-docx/examples/07-report-en.md +0 -103
- package/.grok/skills/lit-docx/examples/08-proposal-en.md +0 -90
- package/.grok/skills/lit-docx/examples/09-memo-ko.md +0 -41
- package/.grok/skills/lit-docx/references/components.md +0 -151
- package/.grok/skills/lit-docx/references/direction-step.md +0 -129
- package/.grok/skills/lit-docx/references/frontmatter_schema.md +0 -42
- package/.grok/skills/lit-docx/references/journal_style_spec.md +0 -17
- package/.grok/skills/lit-docx/references/markdown_quality_checklist.md +0 -37
- package/.grok/skills/lit-docx/references/page-composition.md +0 -129
- package/.grok/skills/lit-docx/references/slop_phrase_list.yaml +0 -58
- package/.grok/skills/lit-docx/references/slop_rules.md +0 -35
- package/.grok/skills/lit-docx/references/tonalities/brief.md +0 -98
- package/.grok/skills/lit-docx/references/tonalities/journal.md +0 -100
- package/.grok/skills/lit-docx/references/tonalities/manual.md +0 -107
- package/.grok/skills/lit-docx/references/tonalities/memo.md +0 -95
- package/.grok/skills/lit-docx/references/tonalities/proposal.md +0 -104
- package/.grok/skills/lit-docx/references/tonalities/report.md +0 -114
- package/.grok/skills/lit-docx/requirements.lock +0 -12
- package/.grok/skills/lit-docx/scripts/clean_markdown.py +0 -95
- package/.grok/skills/lit-docx/scripts/convert_md_to_docx.py +0 -1377
- package/.grok/skills/lit-docx/scripts/convert_md_to_pdf.py +0 -284
- package/.grok/skills/lit-docx/scripts/convert_pdf.py +0 -130
- package/.grok/skills/lit-docx/scripts/docx_design.py +0 -2446
- package/.grok/skills/lit-docx/scripts/docx_gate.py +0 -206
- package/.grok/skills/lit-docx/scripts/docx_layout.py +0 -959
- package/.grok/skills/lit-docx/scripts/edit_docx.py +0 -297
- package/.grok/skills/lit-docx/scripts/embed_images.py +0 -78
- package/.grok/skills/lit-docx/scripts/generate_docx_templates.py +0 -491
- package/.grok/skills/lit-docx/scripts/pdf_fonts.py +0 -63
- package/.grok/skills/lit-docx/scripts/run.mjs +0 -23
- package/.grok/skills/lit-docx/scripts/slop_lint.py +0 -563
- package/.grok/skills/lit-docx/scripts/visual_audit.py +0 -41
- package/.grok/skills/lit-docx/templates/docx/acs.docx +0 -0
- package/.grok/skills/lit-docx/templates/docx/elsevier.docx +0 -0
- package/.grok/skills/lit-docx/templates/docx/ieee.docx +0 -0
- package/.grok/skills/lit-docx/templates/docx/korean-generic.docx +0 -0
- package/.grok/skills/lit-docx/templates/docx/nature.docx +0 -0
- package/.grok/skills/lit-docx/templates/latex/acs/README.md +0 -5
- package/.grok/skills/lit-docx/templates/latex/acs/template.tex +0 -42
- package/.grok/skills/lit-docx/templates/latex/elsevier/README.md +0 -5
- package/.grok/skills/lit-docx/templates/latex/elsevier/template.tex +0 -43
- package/.grok/skills/lit-docx/templates/latex/ieee/README.md +0 -5
- package/.grok/skills/lit-docx/templates/latex/ieee/template.tex +0 -42
- package/.grok/skills/lit-docx/templates/latex/korean-generic/README.md +0 -5
- package/.grok/skills/lit-docx/templates/latex/korean-generic/template.tex +0 -42
- package/.grok/skills/lit-docx/templates/latex/nature/README.md +0 -5
- package/.grok/skills/lit-docx/templates/latex/nature/template.tex +0 -42
- package/.grok/skills/lit-docx/templates/registry.yaml +0 -1366
- package/.grok/skills/lit-docx/templates/tonalities/brief.yaml +0 -28
- package/.grok/skills/lit-docx/templates/tonalities/journal.yaml +0 -25
- package/.grok/skills/lit-docx/templates/tonalities/manual.yaml +0 -26
- package/.grok/skills/lit-docx/templates/tonalities/memo.yaml +0 -26
- package/.grok/skills/lit-docx/templates/tonalities/proposal.yaml +0 -26
- package/.grok/skills/lit-docx/templates/tonalities/report.yaml +0 -26
- package/.grok/skills/lit-pptx/FORBIDDEN_TERMS.json +0 -55
- package/.grok/skills/lit-pptx/NOTICE.md +0 -1
- package/.grok/skills/lit-pptx/agents/analyst.md +0 -49
- package/.grok/skills/lit-pptx/agents/antithesis.md +0 -59
- package/.grok/skills/lit-pptx/agents/architect.md +0 -44
- package/.grok/skills/lit-pptx/agents/critic.md +0 -42
- package/.grok/skills/lit-pptx/agents/synthesizer.md +0 -47
- package/.grok/skills/lit-pptx/agents/thesis.md +0 -33
- package/.grok/skills/lit-pptx/assets/azure/circle-lg.png +0 -0
- package/.grok/skills/lit-pptx/assets/azure/circle-md.png +0 -0
- package/.grok/skills/lit-pptx/assets/azure/circle-sm.png +0 -0
- package/.grok/skills/lit-pptx/examples/01-pitch-signal-ko.md +0 -175
- package/.grok/skills/lit-pptx/examples/02-business-review-ledger-ko.md +0 -199
- package/.grok/skills/lit-pptx/examples/03-research-talk-paper-en.md +0 -177
- package/.grok/skills/lit-pptx/examples/04-lecture-chalk-ko.md +0 -176
- package/.grok/skills/lit-pptx/examples/05-data-review-night-en.md +0 -221
- package/.grok/skills/lit-pptx/examples/06-image-led-atlas-en.md +0 -143
- package/.grok/skills/lit-pptx/examples/07-briefing-gazette-ko.md +0 -192
- package/.grok/skills/lit-pptx/examples/08-status-update-ledger-en.md +0 -168
- package/.grok/skills/lit-pptx/examples/09-pitch-studio-en.md +0 -157
- package/.grok/skills/lit-pptx/examples/10-image-led-studio-ko.md +0 -175
- package/.grok/skills/lit-pptx/examples/11-business-review-night-en.md +0 -181
- package/.grok/skills/lit-pptx/examples/12-status-update-gazette-ko.md +0 -199
- package/.grok/skills/lit-pptx/examples/13-engineering-review-computational-brutalism-ko.md +0 -173
- package/.grok/skills/lit-pptx/examples/14-launch-pitch-neo-brutalism-ko.md +0 -154
- package/.grok/skills/lit-pptx/examples/15-design-lecture-bauhaus-ko.md +0 -139
- package/.grok/skills/lit-pptx/examples/16-community-programme-riso-ko.md +0 -158
- package/.grok/skills/lit-pptx/examples/17-public-data-briefing-newsroom-ko.md +0 -179
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf +0 -0
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf +0 -0
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/OFL.txt +0 -93
- package/.grok/skills/lit-pptx/fonts/jetbrains-mono/provenance.json +0 -1
- package/.grok/skills/lit-pptx/package-lock.json +0 -795
- package/.grok/skills/lit-pptx/package.json +0 -13
- package/.grok/skills/lit-pptx/pretendard-font/OFL.txt +0 -94
- package/.grok/skills/lit-pptx/pretendard-font/public/static/Pretendard-Bold.otf +0 -0
- package/.grok/skills/lit-pptx/pretendard-font/public/static/Pretendard-Regular.otf +0 -0
- package/.grok/skills/lit-pptx/references/density-and-fill.md +0 -155
- package/.grok/skills/lit-pptx/references/direction-step.md +0 -237
- package/.grok/skills/lit-pptx/references/layout-families.md +0 -193
- package/.grok/skills/lit-pptx/references/title-treatments.md +0 -134
- package/.grok/skills/lit-pptx/references/tonalities/atlas.md +0 -121
- package/.grok/skills/lit-pptx/references/tonalities/bauhaus.md +0 -140
- package/.grok/skills/lit-pptx/references/tonalities/chalk.md +0 -133
- package/.grok/skills/lit-pptx/references/tonalities/computational-brutalism.md +0 -150
- package/.grok/skills/lit-pptx/references/tonalities/gazette.md +0 -125
- package/.grok/skills/lit-pptx/references/tonalities/ledger.md +0 -132
- package/.grok/skills/lit-pptx/references/tonalities/neo-brutalism.md +0 -161
- package/.grok/skills/lit-pptx/references/tonalities/newsroom.md +0 -144
- package/.grok/skills/lit-pptx/references/tonalities/night.md +0 -129
- package/.grok/skills/lit-pptx/references/tonalities/paper.md +0 -125
- package/.grok/skills/lit-pptx/references/tonalities/riso.md +0 -137
- package/.grok/skills/lit-pptx/references/tonalities/signal.md +0 -116
- package/.grok/skills/lit-pptx/references/tonalities/studio.md +0 -121
- package/.grok/skills/lit-pptx/requirements.lock +0 -12
- package/.grok/skills/lit-pptx/scripts/compile-deck.js +0 -451
- package/.grok/skills/lit-pptx/scripts/craft_extras.py +0 -307
- package/.grok/skills/lit-pptx/scripts/deck_output.py +0 -612
- package/.grok/skills/lit-pptx/scripts/deps.cjs +0 -83
- package/.grok/skills/lit-pptx/scripts/embed_fonts.py +0 -213
- package/.grok/skills/lit-pptx/scripts/inventory.py +0 -74
- package/.grok/skills/lit-pptx/scripts/learn_template.py +0 -433
- package/.grok/skills/lit-pptx/scripts/lib/derive-palette.js +0 -176
- package/.grok/skills/lit-pptx/scripts/lib/directive-parser.js +0 -244
- package/.grok/skills/lit-pptx/scripts/lib/font-map.js +0 -79
- package/.grok/skills/lit-pptx/scripts/lib/gen-bg.js +0 -85
- package/.grok/skills/lit-pptx/scripts/lib/gen-gradient-assets.js +0 -36
- package/.grok/skills/lit-pptx/scripts/lib/grid-resolver.js +0 -512
- package/.grok/skills/lit-pptx/scripts/lib/layout-resolver.js +0 -1113
- package/.grok/skills/lit-pptx/scripts/lib/markdown-loader.js +0 -138
- package/.grok/skills/lit-pptx/scripts/lib/render-adapter-html.js +0 -356
- package/.grok/skills/lit-pptx/scripts/lib/render-adapter-pptx.js +0 -2236
- package/.grok/skills/lit-pptx/scripts/lib/render-pack.js +0 -3365
- package/.grok/skills/lit-pptx/scripts/lib/slide-ast.js +0 -565
- package/.grok/skills/lit-pptx/scripts/lib/slide-grid.js +0 -104
- package/.grok/skills/lit-pptx/scripts/lib/spec-validator.js +0 -94
- package/.grok/skills/lit-pptx/scripts/lib/template-registry.js +0 -730
- package/.grok/skills/lit-pptx/scripts/ooxml_integrity.py +0 -37
- package/.grok/skills/lit-pptx/scripts/qa_deck.py +0 -809
- package/.grok/skills/lit-pptx/scripts/run.mjs +0 -25
- package/.grok/skills/lit-pptx/scripts/validate_pptx.py +0 -223
- package/.grok/skills/lit-pptx/specs/markdown-slide-spec-v1.md +0 -251
- package/.grok/skills/lit-pptx/specs/markdown-slide-spec-v2.md +0 -207
- package/.grok/skills/lit-pptx/specs/slide-ast-v1.schema.json +0 -229
- package/.grok/skills/lit-pptx/specs/slide-ast-v2.schema.json +0 -144
- package/.grok/skills/lit-pptx/specs/template-enrollment-contract.md +0 -379
- package/.grok/skills/lit-pptx/templates/bauhaus_light.css +0 -4
- package/.grok/skills/lit-pptx/templates/boilerplate_professional.css +0 -508
- package/.grok/skills/lit-pptx/templates/enrolled/AZURE-A2Z/capabilities.yaml +0 -146
- package/.grok/skills/lit-pptx/templates/enrolled/AZURE-A2Z/layout-mapping.yaml +0 -454
- package/.grok/skills/lit-pptx/templates/enrolled/AZURE-A2Z/template.yaml +0 -40
- package/.grok/skills/lit-pptx/templates/enrolled/AZURE-PRO/capabilities.yaml +0 -154
- package/.grok/skills/lit-pptx/templates/enrolled/AZURE-PRO/layout-mapping.yaml +0 -435
- package/.grok/skills/lit-pptx/templates/enrolled/AZURE-PRO/template.yaml +0 -40
- package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/capabilities.yaml +0 -179
- package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/layout-mapping.yaml +0 -299
- package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-A2Z/template.yaml +0 -45
- package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/capabilities.yaml +0 -181
- package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/layout-mapping.yaml +0 -299
- package/.grok/skills/lit-pptx/templates/enrolled/BOILERPLATE-PRETENDARD/template.yaml +0 -44
- package/.grok/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -81
- package/.grok/skills/lit-pptx/templates/tonalities/bauhaus/pack.yaml +0 -98
- package/.grok/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -87
- package/.grok/skills/lit-pptx/templates/tonalities/computational-brutalism/pack.yaml +0 -99
- package/.grok/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -81
- package/.grok/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +0 -82
- package/.grok/skills/lit-pptx/templates/tonalities/neo-brutalism/pack.yaml +0 -107
- package/.grok/skills/lit-pptx/templates/tonalities/newsroom/pack.yaml +0 -99
- package/.grok/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -82
- package/.grok/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -87
- package/.grok/skills/lit-pptx/templates/tonalities/riso/pack.yaml +0 -99
- package/.grok/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -83
- package/.grok/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -81
- package/.grok/skills/lit-schematic/examples/iso-heat-exchanger/build.mjs +0 -38
- package/.grok/skills/lit-schematic/examples/iso-heat-exchanger/scene.mjs +0 -133
- package/.grok/skills/lit-schematic/examples/journal-adsorption-rig/build.mjs +0 -87
- package/.grok/skills/lit-schematic/examples/pid-dosing-skid/build.mjs +0 -85
- package/.grok/skills/lit-schematic/references/cutaway-outputs.md +0 -70
- package/.grok/skills/lit-schematic/references/isometric-craft.md +0 -101
- package/.grok/skills/lit-schematic/references/journal-figures.md +0 -72
- package/.grok/skills/lit-schematic/references/kit-api.md +0 -134
- package/.grok/skills/lit-schematic/references/pfd-and-layout.md +0 -53
- package/.grok/skills/lit-schematic/references/pid-drafting.md +0 -103
- package/.grok/skills/lit-schematic/references/pid-symbols.md +0 -163
- package/.grok/skills/lit-schematic/references/verification.md +0 -100
- package/.grok/skills/lit-schematic/scripts/doctor.mjs +0 -57
- package/.grok/skills/lit-schematic/scripts/lib/figure.mjs +0 -81
- package/.grok/skills/lit-schematic/scripts/lib/fonts.mjs +0 -27
- package/.grok/skills/lit-schematic/scripts/lib/geom.mjs +0 -113
- package/.grok/skills/lit-schematic/scripts/lib/interactive.mjs +0 -292
- package/.grok/skills/lit-schematic/scripts/lib/isa.mjs +0 -115
- package/.grok/skills/lit-schematic/scripts/lib/iso.mjs +0 -719
- package/.grok/skills/lit-schematic/scripts/lib/legend-sheet.mjs +0 -162
- package/.grok/skills/lit-schematic/scripts/lib/pid.mjs +0 -937
- package/.grok/skills/lit-schematic/scripts/lib/png.mjs +0 -132
- package/.grok/skills/lit-schematic/scripts/lib/qa-core.mjs +0 -658
- package/.grok/skills/lit-schematic/scripts/lib/route.mjs +0 -218
- package/.grok/skills/lit-schematic/scripts/lib/sheet.mjs +0 -890
- package/.grok/skills/lit-schematic/scripts/lib/svg.mjs +0 -82
- package/.grok/skills/lit-schematic/scripts/lib/theme.mjs +0 -115
- package/.grok/skills/lit-schematic/scripts/motion.mjs +0 -129
- package/.grok/skills/lit-schematic/scripts/qa.mjs +0 -92
- package/.grok/skills/lit-schematic/scripts/render.mjs +0 -233
- package/.grok/skills/lit-schematic/scripts/scaffold.mjs +0 -60
- package/.grok/skills/lit-scientific-visualization/scripts/verify-canonical-corpus.mjs +0 -181
- package/.grok/skills/lit-typographic-motion/NOTICE +0 -23
- package/.grok/skills/lit-typographic-motion/THIRD_PARTY_NOTICES +0 -56
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-OFL.txt +0 -93
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w100-wt400.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w100-wt700.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w100-wt900.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w125-wt400.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w125-wt700.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w125-wt900.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w75-wt400.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w75-wt700.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Archivo-w75-wt900.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/JetBrainsMono-OFL.txt +0 -93
- package/.grok/skills/lit-typographic-motion/fonts/JetBrainsMono-wght-latin.woff2 +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Silkscreen-Bold.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/Silkscreen-OFL.txt +0 -93
- package/.grok/skills/lit-typographic-motion/fonts/Silkscreen-Regular.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/VT323-OFL.txt +0 -93
- package/.grok/skills/lit-typographic-motion/fonts/VT323-Regular.ttf +0 -0
- package/.grok/skills/lit-typographic-motion/fonts/pins.json +0 -386
- package/.grok/skills/lit-typographic-motion/fonts/stroke/CREDITS +0 -41
- package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSAllure.svg +0 -216
- package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSFelix.svg +0 -216
- package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSOsmotron.svg +0 -216
- package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSReadability.svg +0 -216
- package/.grok/skills/lit-typographic-motion/fonts/stroke/EMSTech.svg +0 -217
- package/.grok/skills/lit-typographic-motion/fonts/stroke/OFL-1.1.txt +0 -91
- package/.grok/skills/lit-typographic-motion/package-lock.json +0 -63
- package/.grok/skills/lit-typographic-motion/package.json +0 -10
- package/.grok/skills/lit-typographic-motion/recipes/hero-3d/expected.json +0 -62
- package/.grok/skills/lit-typographic-motion/recipes/hero-3d/index.html +0 -82
- package/.grok/skills/lit-typographic-motion/recipes/negatives/card-scenes/expected.json +0 -16
- package/.grok/skills/lit-typographic-motion/recipes/negatives/card-scenes/index.html +0 -36
- package/.grok/skills/lit-typographic-motion/recipes/negatives/reset-sweep/expected.json +0 -16
- package/.grok/skills/lit-typographic-motion/recipes/negatives/reset-sweep/index.html +0 -24
- package/.grok/skills/lit-typographic-motion/recipes/negatives/still-glow/expected.json +0 -17
- package/.grok/skills/lit-typographic-motion/recipes/negatives/still-glow/index.html +0 -25
- package/.grok/skills/lit-typographic-motion/recipes/negatives/title-slam/expected.json +0 -17
- package/.grok/skills/lit-typographic-motion/recipes/negatives/title-slam/index.html +0 -37
- package/.grok/skills/lit-typographic-motion/recipes/orbit-loop/expected.json +0 -67
- package/.grok/skills/lit-typographic-motion/recipes/orbit-loop/index.html +0 -119
- package/.grok/skills/lit-typographic-motion/recipes/painted-light/expected.json +0 -95
- package/.grok/skills/lit-typographic-motion/recipes/painted-light/index.html +0 -192
- package/.grok/skills/lit-typographic-motion/recipes/weight-tide/expected.json +0 -67
- package/.grok/skills/lit-typographic-motion/recipes/weight-tide/index.html +0 -85
- package/.grok/skills/lit-typographic-motion/references/choice-first.md +0 -30
- package/.grok/skills/lit-typographic-motion/references/complete-contract.md +0 -124
- package/.grok/skills/lit-typographic-motion/references/cover.md +0 -389
- package/.grok/skills/lit-typographic-motion/references/craft-loop.md +0 -112
- package/.grok/skills/lit-typographic-motion/references/depth.md +0 -119
- package/.grok/skills/lit-typographic-motion/references/runtime.md +0 -138
- package/.grok/skills/lit-typographic-motion/references/scene-contract.md +0 -98
- package/.grok/skills/lit-typographic-motion/references/stage.md +0 -194
- package/.grok/skills/lit-typographic-motion/references/style-bible.md +0 -102
- package/.grok/skills/lit-typographic-motion/references/treatment.md +0 -153
- package/.grok/skills/lit-typographic-motion/references/type-craft.md +0 -94
- package/.grok/skills/lit-typographic-motion/requirements-audio.txt +0 -794
- package/.grok/skills/lit-typographic-motion/scripts/beat_grid.py +0 -29
- package/.grok/skills/lit-typographic-motion/scripts/blender/runner.py +0 -218
- package/.grok/skills/lit-typographic-motion/scripts/lib/assets.mjs +0 -230
- package/.grok/skills/lit-typographic-motion/scripts/lib/blender.mjs +0 -136
- package/.grok/skills/lit-typographic-motion/scripts/lib/board.mjs +0 -153
- package/.grok/skills/lit-typographic-motion/scripts/lib/bundle.mjs +0 -23
- package/.grok/skills/lit-typographic-motion/scripts/lib/cache.mjs +0 -107
- package/.grok/skills/lit-typographic-motion/scripts/lib/chrome.mjs +0 -276
- package/.grok/skills/lit-typographic-motion/scripts/lib/clips.mjs +0 -119
- package/.grok/skills/lit-typographic-motion/scripts/lib/completion.mjs +0 -43
- package/.grok/skills/lit-typographic-motion/scripts/lib/constants.mjs +0 -244
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-assets.mjs +0 -88
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-capture.mjs +0 -153
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-gate.mjs +0 -312
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-image.mjs +0 -111
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-pool.mjs +0 -62
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-sheet.mjs +0 -73
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-treatment.mjs +0 -128
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover-webp.mjs +0 -134
- package/.grok/skills/lit-typographic-motion/scripts/lib/cover.mjs +0 -354
- package/.grok/skills/lit-typographic-motion/scripts/lib/encode.mjs +0 -33
- package/.grok/skills/lit-typographic-motion/scripts/lib/flash.mjs +0 -170
- package/.grok/skills/lit-typographic-motion/scripts/lib/fonts.mjs +0 -150
- package/.grok/skills/lit-typographic-motion/scripts/lib/frame-pool.mjs +0 -162
- package/.grok/skills/lit-typographic-motion/scripts/lib/gallery.mjs +0 -160
- package/.grok/skills/lit-typographic-motion/scripts/lib/gate.mjs +0 -586
- package/.grok/skills/lit-typographic-motion/scripts/lib/house.mjs +0 -43
- package/.grok/skills/lit-typographic-motion/scripts/lib/look.mjs +0 -289
- package/.grok/skills/lit-typographic-motion/scripts/lib/png.mjs +0 -95
- package/.grok/skills/lit-typographic-motion/scripts/lib/presets.mjs +0 -161
- package/.grok/skills/lit-typographic-motion/scripts/lib/render.mjs +0 -563
- package/.grok/skills/lit-typographic-motion/scripts/lib/report.mjs +0 -65
- package/.grok/skills/lit-typographic-motion/scripts/lib/scaffold.mjs +0 -174
- package/.grok/skills/lit-typographic-motion/scripts/lib/score.mjs +0 -640
- package/.grok/skills/lit-typographic-motion/scripts/lib/seed.mjs +0 -31
- package/.grok/skills/lit-typographic-motion/scripts/lib/session.mjs +0 -102
- package/.grok/skills/lit-typographic-motion/scripts/lib/sound.mjs +0 -517
- package/.grok/skills/lit-typographic-motion/scripts/lib/soundtrack.mjs +0 -46
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage-gate.mjs +0 -139
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage-qa.mjs +0 -400
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage-session.mjs +0 -166
- package/.grok/skills/lit-typographic-motion/scripts/lib/stage.mjs +0 -504
- package/.grok/skills/lit-typographic-motion/scripts/lib/stills.mjs +0 -90
- package/.grok/skills/lit-typographic-motion/scripts/lib/styles.mjs +0 -224
- package/.grok/skills/lit-typographic-motion/scripts/lib/text.mjs +0 -114
- package/.grok/skills/lit-typographic-motion/scripts/lib/timeline.mjs +0 -223
- package/.grok/skills/lit-typographic-motion/scripts/lib/treatment.mjs +0 -446
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/LICENSE +0 -21
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/addons/environments/RoomEnvironment.js +0 -144
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/addons/geometries/RoundedBoxGeometry.js +0 -155
- package/.grok/skills/lit-typographic-motion/scripts/lib/vendor/three/three.module.js +0 -54571
- package/.grok/skills/lit-typographic-motion/scripts/motion.mjs +0 -225
- package/.grok/skills/lit-typographic-motion/scripts/page/engine.js +0 -344
- package/.grok/skills/lit-typographic-motion/scripts/page/gl.js +0 -365
- package/.grok/skills/lit-typographic-motion/scripts/page/passes.js +0 -211
- package/.grok/skills/lit-typographic-motion/scripts/page/post.js +0 -127
- package/.grok/skills/lit-typographic-motion/scripts/page/scenes.js +0 -359
- package/.grok/skills/lit-typographic-motion/scripts/page/stroke.js +0 -154
- package/.grok/skills/lit-typographic-motion/scripts/page/type.js +0 -142
- package/.grok/skills/lit-typographic-motion/scripts/page/util.js +0 -68
- package/.grok/skills/lit-typographic-motion/scripts/prewarm.mjs +0 -216
- package/.grok/skills/lit-typographic-motion/scripts/stage/cover-init.js +0 -56
- package/.grok/skills/lit-typographic-motion/scripts/stage/host.js +0 -200
- package/.grok/skills/lit-typographic-motion/scripts/stage/loop-kit.js +0 -96
- package/.grok/skills/lit-typographic-motion/scripts/stage/qa.js +0 -137
- package/.grok/skills/lit-typographic-motion/scripts/stage/stage-kit.js +0 -523
- package/.grok/skills/lit-typographic-motion/styles/paper.json +0 -1
- package/.grok/skills/lit-typographic-motion/styles/swiss-signal.json +0 -1
- package/.grok/skills/lit-typographic-motion/styles/terminalcore.json +0 -1
- package/.grok/skills/lit-typographic-motion/styles/tidal.json +0 -1
- package/.grok/skills/readme-studio/references/choice-first.md +0 -24
- package/.grok/skills/readme-studio/references/complete-contract.md +0 -26
- package/.grok/skills/readme-studio/references/decoration-patterns.md +0 -29
- package/.grok/skills/readme-studio/references/facts.md +0 -15
- package/.grok/skills/readme-studio/references/motion.md +0 -42
- package/.grok/skills/readme-studio/references/production.md +0 -9
- package/.grok/skills/readme-studio/references/typography.md +0 -16
- package/.grok/skills/readme-studio/scripts/validate-facts.mjs +0 -52
- package/.grok/skills/readme-studio/templates/cover-source.json +0 -27
- package/.grok/skills/readme-studio/templates/facts.json +0 -13
- package/.grok/skills/readme-studio/templates/hyperframes/index.html +0 -41
- package/.grok/skills/readme-studio/templates/hyperframes/index.motion.json +0 -4
- package/.grok/skills/readme-studio/templates/hyperframes/package-lock.json +0 -2016
- package/.grok/skills/readme-studio/templates/hyperframes/package.json +0 -12
- package/.grok/skills/readme-studio/templates/picture.md +0 -61
- package/.grok/skills/readme-studio/templates/remotion/package-lock.json +0 -3785
- package/.grok/skills/readme-studio/templates/remotion/package.json +0 -19
- package/.grok/skills/readme-studio/templates/remotion/src/index.jsx +0 -31
- package/.grok/skills/readme-studio/templates/typography/outline.mjs +0 -62
- package/.grok/skills/readme-studio/templates/typography/package-lock.json +0 -135
- package/.grok/skills/readme-studio/templates/typography/package.json +0 -10
- package/.grok/skills/visual-qa/references/capture-playbook.md +0 -47
- package/.grok/skills/visual-qa/references/complete-contract.md +0 -721
- package/.grok/skills/visual-qa/references/verdict-taxonomy.md +0 -34
- package/.grok/skills/visual-qa/scripts/verify-evidence-manifest.mjs +0 -91
- package/.grok/vendor/NOTICE.md +0 -16
- package/.grok/vendor/licenses/045_scientific-visualization-MIT.txt +0 -21
- package/.grok/vendor/provenance/045_scientific-visualization.md +0 -37
- package/.grok/vendor/scientific-visualization/assets/color_palettes.py +0 -197
- package/.grok/vendor/scientific-visualization/assets/nature.mplstyle +0 -75
- package/.grok/vendor/scientific-visualization/assets/presentation.mplstyle +0 -74
- package/.grok/vendor/scientific-visualization/assets/publication.mplstyle +0 -78
- package/.grok/vendor/scientific-visualization/evals/evals.json +0 -158
- package/.grok/vendor/scientific-visualization/references/_canonical-corpus/manifest.json +0 -38
- package/.grok/vendor/scientific-visualization/references/color_palettes.md +0 -380
- package/.grok/vendor/scientific-visualization/references/journal_requirements.md +0 -359
- package/.grok/vendor/scientific-visualization/references/matplotlib_examples.md +0 -608
- package/.grok/vendor/scientific-visualization/references/mdanalysis_martini_visualization.md +0 -85
- package/.grok/vendor/scientific-visualization/references/publication_guidelines.md +0 -217
- package/.grok/vendor/scientific-visualization/references/seaborn_for_publications.md +0 -293
- package/.grok/vendor/scientific-visualization/scripts/figure_export.py +0 -238
- package/.grok/vendor/scientific-visualization/scripts/style_presets.py +0 -467
- package/.grok/vendor/scientific-visualization/tests/test_figure_export.py +0 -51
- package/.grok/vendor/scientific-visualization/tests/test_style_presets.py +0 -114
- /package/.grok/skills/{lit-pptx → litgrok}/scripts/proc.cjs +0 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
// The lit-adhd KPI board: the default answer to `lit adhd`. In ten seconds a reader learns the one
|
|
2
|
+
// thing to do now and what to type, what is done, what is left and what not to forget. `buildBoard`
|
|
3
|
+
// turns the collector's records into language-free facts (four buckets, counts, bars, milestones,
|
|
4
|
+
// done and remaining rows, reminders); `renderBoard` lays those facts out as Markdown in English or
|
|
5
|
+
// Korean. Both are pure, so the same records always draw the same board and the model only shows it.
|
|
6
|
+
// The board never prints a session id, a commit hash, a raw status code or an internal path; the only
|
|
7
|
+
// path it may print is one the reader has to type.
|
|
8
|
+
|
|
9
|
+
import { basename } from "node:path";
|
|
10
|
+
|
|
11
|
+
import { clipToWidth } from "./gauge.mjs";
|
|
12
|
+
|
|
13
|
+
const CELLS = 10;
|
|
14
|
+
const MILESTONES = 4;
|
|
15
|
+
const DONE_ROWS = 5;
|
|
16
|
+
const LEFT_ROWS = 7;
|
|
17
|
+
const REMINDERS = 5;
|
|
18
|
+
|
|
19
|
+
/** `███████░░░ 4/6`, with ` (67%)` on request; null unless a total above zero is known. */
|
|
20
|
+
export const boardBar = (done, total, { percent = false } = {}) => {
|
|
21
|
+
if (!Number.isInteger(total) || total <= 0 || !Number.isInteger(done) || done < 0) return null;
|
|
22
|
+
const k = Math.min(done, total);
|
|
23
|
+
let filled = Math.round((k * CELLS) / total);
|
|
24
|
+
// Some progress always shows, and an unfinished plan never shows a full bar.
|
|
25
|
+
if (k > 0 && k < total) filled = Math.min(CELLS - 1, Math.max(1, filled));
|
|
26
|
+
const bar = `${"█".repeat(filled)}${"░".repeat(CELLS - filled)} ${k}/${total}`;
|
|
27
|
+
return percent ? `${bar} (${Math.round((k * 100) / total)}%)` : bar;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const bare = (text) => String(text ?? "").replace(/\s+/gu, " ").trim();
|
|
31
|
+
// One line of data as Markdown text: no tags or code spans, emphasis and table marks escaped.
|
|
32
|
+
const plain = (text) => bare(text).replace(/[<>`]/gu, (ch) => ({ "<": "‹", ">": "›", "`": "'" }[ch])).replace(/[*_|[\]\\]/gu, (ch) => `\\${ch}`);
|
|
33
|
+
const code = (text) => `\`${String(text).replace(/`/gu, "'")}\``;
|
|
34
|
+
// A plan row as a sentence: `3. Draw the board` reads `Draw the board`.
|
|
35
|
+
const sentence = (text) => bare(text).replace(/^\d+[.)]\s*/u, "");
|
|
36
|
+
const placeName = (worktree) => {
|
|
37
|
+
const name = basename(String(worktree ?? ""));
|
|
38
|
+
return name && name !== "unknown" ? name : null;
|
|
39
|
+
};
|
|
40
|
+
const sessionName = (session) => {
|
|
41
|
+
const title = [session.title, ...(session.asked ?? [])].find((text) => text && text !== "unknown");
|
|
42
|
+
return title ? clipToWidth(bare(title), 40) : null;
|
|
43
|
+
};
|
|
44
|
+
// The last question a session asked, from its last assistant words.
|
|
45
|
+
const questionOf = (result) => {
|
|
46
|
+
const found = [...String(result ?? "").matchAll(/[^.!?。?\n]{4,}[??]/gu)].at(-1)?.[0];
|
|
47
|
+
return found ? clipToWidth(bare(found), 80) : null;
|
|
48
|
+
};
|
|
49
|
+
const stepKey = (text) => sentence(text).toLowerCase();
|
|
50
|
+
|
|
51
|
+
/** The board's facts from the collected records: no wording, only what the records hold. */
|
|
52
|
+
export const buildBoard = (data) => {
|
|
53
|
+
const sessions = (data.sessions ?? []).filter((session) => !session.self);
|
|
54
|
+
const plans = data.roadmap?.plans ?? [];
|
|
55
|
+
const next = data.next ?? { kind: "none" };
|
|
56
|
+
const ticked = plans.reduce((sum, plan) => sum + (plan.rows ?? []).filter((row) => row.checked).length, 0);
|
|
57
|
+
const left = plans.reduce((sum, plan) => sum + (plan.rows ?? []).filter((row) => !row.checked).length, 0);
|
|
58
|
+
const waitingSessions = sessions.filter((session) => session.status === "waiting-on-user");
|
|
59
|
+
const working = sessions.filter((session) => session.status === "active");
|
|
60
|
+
const boundaries = (data.startWork ?? []).filter((work) => work.pendingBoundary);
|
|
61
|
+
const herdrBusy = (data.herdr?.agents ?? []).filter((agent) => agent && typeof agent === "object" && !agent.self && agent.status === "working").length;
|
|
62
|
+
const glance = {
|
|
63
|
+
done: ticked,
|
|
64
|
+
inProgress: sessions.filter((session) => session.status === "active" || session.status === "idle").length,
|
|
65
|
+
waiting: waitingSessions.length + boundaries.length,
|
|
66
|
+
remaining: left,
|
|
67
|
+
progress: { done: ticked, total: ticked + left, bar: boardBar(ticked, ticked + left, { percent: true }) },
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Open before finished, this worktree before others, the most recently saved first.
|
|
71
|
+
const byRecency = (a, b) => (b.changedMs ?? 0) - (a.changedMs ?? 0);
|
|
72
|
+
const milestonesAll = [...plans].sort((a, b) => Number(a.complete) - Number(b.complete) || Number(b.local) - Number(a.local) || byRecency(a, b));
|
|
73
|
+
const milestones = milestonesAll.slice(0, MILESTONES).map((plan) => ({
|
|
74
|
+
title: plan.title ?? sentence(basename(plan.plan, ".md")),
|
|
75
|
+
place: plan.local ? null : placeName(plan.worktree),
|
|
76
|
+
state: plan.complete ? "done" : plan.progress?.done ? "inProgress" : "notStarted",
|
|
77
|
+
done: plan.progress?.done ?? null,
|
|
78
|
+
total: plan.progress?.total ?? null,
|
|
79
|
+
bar: boardBar(plan.progress?.done, plan.progress?.total),
|
|
80
|
+
changedMs: plan.changedMs ?? null,
|
|
81
|
+
}));
|
|
82
|
+
|
|
83
|
+
// Done lately: ticked rows, the most recently saved plan first and its later rows first.
|
|
84
|
+
const doneRows = [...plans].sort(byRecency).flatMap((plan) => (plan.rows ?? []).filter((row) => row.checked).map((row) => sentence(row.title)).reverse());
|
|
85
|
+
|
|
86
|
+
// The plan to work on now leads the remaining rows; the rest follow in plan order.
|
|
87
|
+
const targetPlan = next.target?.plan ?? null;
|
|
88
|
+
const open = plans.filter((plan) => !plan.complete).sort((a, b) => Number(b.plan === targetPlan) - Number(a.plan === targetPlan) || Number(b.local) - Number(a.local) || byRecency(a, b));
|
|
89
|
+
const tagged = open.length > 1;
|
|
90
|
+
const leftRows = open.flatMap((plan) => (plan.rows ?? []).filter((row) => !row.checked).map((row) => ({ text: sentence(row.title), plan: tagged ? plan.title ?? null : null })));
|
|
91
|
+
|
|
92
|
+
const now = nowStep(data, { sessions, waitingSessions, working, herdrBusy, open });
|
|
93
|
+
|
|
94
|
+
const reminders = [];
|
|
95
|
+
for (const session of waitingSessions) reminders.push({ kind: "waiting", title: sessionName(session), question: questionOf(session.result) });
|
|
96
|
+
for (const work of boundaries) reminders.push({ kind: "approve", action: work.pendingBoundary.action ?? null });
|
|
97
|
+
for (const tree of data.worktreeState ?? []) {
|
|
98
|
+
if (tree.uncommitted) reminders.push({ kind: "uncommitted", count: tree.uncommitted, place: placeName(tree.worktree) });
|
|
99
|
+
}
|
|
100
|
+
for (const tree of data.worktreeState ?? []) {
|
|
101
|
+
if (tree.unpushed) reminders.push({ kind: "unpushed", count: tree.unpushed, place: placeName(tree.worktree) });
|
|
102
|
+
}
|
|
103
|
+
if (working.length + herdrBusy) reminders.push({ kind: "lanes", count: working.length + herdrBusy });
|
|
104
|
+
for (const plan of data.roadmap?.stalePlans ?? []) reminders.push({ kind: "stale", title: plan.title, days: plan.days, place: plan.local ? null : placeName(plan.worktree) });
|
|
105
|
+
const handoffItem = handoffNext(data);
|
|
106
|
+
if (handoffItem && !(now.kind === "handoff" && now.item === handoffItem)) reminders.push({ kind: "handoff", item: handoffItem });
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
now,
|
|
110
|
+
glance,
|
|
111
|
+
milestones,
|
|
112
|
+
milestonesTotal: milestonesAll.length,
|
|
113
|
+
doneLately: doneRows.slice(0, DONE_ROWS),
|
|
114
|
+
doneTotal: doneRows.length,
|
|
115
|
+
remaining: leftRows.slice(0, LEFT_ROWS),
|
|
116
|
+
remainingMore: Math.max(0, leftRows.length - LEFT_ROWS),
|
|
117
|
+
reminders,
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// The first `## Next` item of this worktree's handoff that no checked row or commit already did.
|
|
122
|
+
const handoffNext = (data) => {
|
|
123
|
+
const doneSteps = new Set([
|
|
124
|
+
...(data.roadmap?.plans ?? []).flatMap((plan) => (plan.rows ?? []).filter((row) => row.checked).map((row) => stepKey(row.title))),
|
|
125
|
+
...(data.commits ?? []).map((commit) => stepKey(commit.subject)),
|
|
126
|
+
]);
|
|
127
|
+
const handoff = (data.handoffs ?? []).find((item) => item.local && item.next?.length);
|
|
128
|
+
const item = handoff?.next.find((entry) => !doneSteps.has(stepKey(entry)));
|
|
129
|
+
return item ? clipToWidth(bare(item), 60) : null;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// "Do this now" keeps the next-step priority of next-step.mjs (a step that runs on a typed word wins)
|
|
133
|
+
// and, when none runs, the fallback order of the brief: a question waiting on the user, a paused
|
|
134
|
+
// frame, a lane still working, the next row of an open plan, the handoff's next item, the newest
|
|
135
|
+
// ended session, else nothing on record.
|
|
136
|
+
const nowStep = (data, { sessions, waitingSessions, working, open }) => {
|
|
137
|
+
const next = data.next ?? { kind: "none" };
|
|
138
|
+
const planOf = (path) => (data.roadmap?.plans ?? []).find((plan) => plan.plan === path);
|
|
139
|
+
const target = next.target ?? {};
|
|
140
|
+
if (next.kind === "resume-frame") return { kind: "resume", skill: target.skill ?? null, stage: target.stage ?? null, say: next.say };
|
|
141
|
+
if (next.kind === "approve-boundary") return { kind: "approve", action: target.action ?? null, say: "lit approve", alt: "lit deny" };
|
|
142
|
+
if (next.kind === "continue-work") return { kind: "continue", plan: planOf(target.plan)?.title ?? null, say: next.say };
|
|
143
|
+
if (next.kind === "start-plan") {
|
|
144
|
+
const plan = planOf(target.plan);
|
|
145
|
+
return { kind: "start", plan: plan?.title ?? null, item: plan?.current ? sentence(plan.current) : null, done: plan?.progress?.done ?? null, total: plan?.progress?.total ?? null, say: next.say };
|
|
146
|
+
}
|
|
147
|
+
const waiting = waitingSessions[0];
|
|
148
|
+
if (waiting) return { kind: "answer", title: sessionName(waiting), question: questionOf(waiting.result), say: null };
|
|
149
|
+
const paused = (data.workflows ?? []).find((frame) => frame.status === "paused");
|
|
150
|
+
if (paused && !next.wait?.lanes) return { kind: "resume-elsewhere", skill: paused.skill ?? null, stage: paused.stage ?? null, say: null };
|
|
151
|
+
if (next.wait?.lanes || working.length) return { kind: "wait", lane: working[0] ? sessionName(working[0]) : null, lanes: Math.max(next.wait?.lanes ?? 0, working.length), say: null };
|
|
152
|
+
// A plan in the worktree of a live session comes first, then this worktree's, then the newest.
|
|
153
|
+
const liveTrees = new Set(sessions.filter((session) => session.status !== "ended" && session.status !== "done").map((session) => session.worktree));
|
|
154
|
+
const plan = open.find((item) => item.current && liveTrees.has(item.worktree)) ?? open.find((item) => item.current && item.local) ?? open.find((item) => item.current);
|
|
155
|
+
if (plan) {
|
|
156
|
+
return {
|
|
157
|
+
kind: "plan", plan: plan.title ?? null, item: sentence(plan.current), done: plan.progress?.done ?? null, total: plan.progress?.total ?? null,
|
|
158
|
+
place: plan.local ? null : placeName(plan.worktree), say: `start-work ${plan.plan}`,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
const item = handoffNext(data);
|
|
162
|
+
if (item) return { kind: "handoff", item, say: `lit ${item}` };
|
|
163
|
+
const ended = sessions.find((session) => session.status === "ended" || session.status === "done");
|
|
164
|
+
if (ended) return { kind: "pickUp", title: sessionName(ended), say: null };
|
|
165
|
+
return { kind: "empty", say: null };
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const WORDS = {
|
|
169
|
+
en: {
|
|
170
|
+
heads: { now: "🎯 Do this now", glance: "📊 At a glance", milestones: "🏁 Milestones", done: "✅ Done lately", left: "⬜ Still to do", remind: "🔔 Don't forget" },
|
|
171
|
+
of: (shown, total) => `(${shown} of ${total})`,
|
|
172
|
+
type: "👉 Type:",
|
|
173
|
+
waitFor: "👉 Wait:",
|
|
174
|
+
yourWords: "what to do next, in your own words",
|
|
175
|
+
yourAnswer: "your answer, in that session's window",
|
|
176
|
+
glanceHead: "| ✅ Done | 🔄 In progress | ⏳ Waiting on you | ⬜ Left |",
|
|
177
|
+
overall: "Overall",
|
|
178
|
+
noRows: "no plan rows on record",
|
|
179
|
+
milestoneHead: "| Milestone | State | Progress | Last |",
|
|
180
|
+
state: { done: "✅ Done", inProgress: "🔄 In progress", notStarted: "⬜ Not started" },
|
|
181
|
+
noBar: "no total recorded",
|
|
182
|
+
noPlans: "No plans in this window",
|
|
183
|
+
noDone: "Nothing done yet",
|
|
184
|
+
noLeft: "Nothing left",
|
|
185
|
+
noReminders: "Nothing to remember",
|
|
186
|
+
more: (n) => `…and ${n} more`,
|
|
187
|
+
justNow: "just now",
|
|
188
|
+
minutes: (n) => `${n}m ago`,
|
|
189
|
+
today: (hm) => `today ${hm}`,
|
|
190
|
+
days: (n) => `${n}d ago`,
|
|
191
|
+
notRead: (list) => `Not read: ${list}.`,
|
|
192
|
+
older: "Older sessions were not read (read budget used up).",
|
|
193
|
+
sources: { transcripts: "session records", plans: "plans", git: "git" },
|
|
194
|
+
now: {
|
|
195
|
+
resume: ({ skill, stage }) => [`Resume the paused ${skill ?? "workflow"}`, `this session stopped${stage ? ` at ${stage}` : ""}`],
|
|
196
|
+
approve: ({ action }) => ["Approve or deny start-work's request", `it waits for ${action ? `${action} ` : ""}access and never goes on by itself`],
|
|
197
|
+
continue: ({ plan }) => [`Keep going with ${plan ?? "this session's run"}`, "this session's run is still open"],
|
|
198
|
+
start: ({ plan, item }) => [`Start ${plan ?? "the open plan"}${item ? `: ${item}` : ""}`, "it is the one open plan and nothing else is running"],
|
|
199
|
+
answer: ({ title, question }) => [`Answer the question in “${title ?? "that session"}”`, question ? `it asked: “${question}”` : "it is waiting for you"],
|
|
200
|
+
"resume-elsewhere": ({ skill, stage }) => [`Resume the paused ${skill ?? "workflow"} in its own session`, `it stopped${stage ? ` at ${stage}` : ""}`],
|
|
201
|
+
wait: ({ lanes }) => ["Let the running work finish first", `${lanes} ${lanes === 1 ? "lane is" : "lanes are"} still working`],
|
|
202
|
+
plan: ({ plan, item, done, total, place }) => [`Next in ${plan ?? "the open plan"}: ${item}`, `${done !== null && total !== null ? `${done} of ${total} done` : "rows are left"}${place ? `, in ${place}` : ""}`],
|
|
203
|
+
handoff: ({ item }) => [item, "the first open item under Next in the handoff"],
|
|
204
|
+
pickUp: ({ title }) => [`Pick up where “${title ?? "the last session"}” stopped`, "the last session here has ended"],
|
|
205
|
+
empty: () => ["Nothing on record to pick up", "no session, plan or handoff in this window"],
|
|
206
|
+
},
|
|
207
|
+
waitLane: (lane) => (lane ? `until “${lane}” finishes` : "until the other lanes finish"),
|
|
208
|
+
remind: {
|
|
209
|
+
waiting: ({ title, question }) => `⏳ “${title ?? "A session"}” ${question ? `asked: “${question}”` : "is waiting for you"} → answer it in that session's window`,
|
|
210
|
+
approve: ({ action }) => `⏳ start-work waits for your OK${action ? ` (${action} access)` : ""} → type \`lit approve\` or \`lit deny\``,
|
|
211
|
+
uncommitted: ({ count, place }) => `💾 ${count} uncommitted ${count === 1 ? "change" : "changes"}${place ? ` (${place})` : ""} → commit them, or decide to drop them`,
|
|
212
|
+
unpushed: ({ count, place }) => `📤 ${count} unpushed ${count === 1 ? "commit" : "commits"}${place ? ` (${place})` : ""} → push when you are ready`,
|
|
213
|
+
lanes: ({ count }) => `🏃 ${count} ${count === 1 ? "lane" : "lanes"} still working → don't type \`go\` until ${count === 1 ? "it finishes" : "they finish"}`,
|
|
214
|
+
stale: ({ title, days, place }) => `🕰️ Plan untouched for ${days} days: ${title}${place ? ` (${place})` : ""} → decide whether to pick it up or drop it`,
|
|
215
|
+
handoff: ({ item }) => `📌 Handoff next: ${item} → start it when you are ready`,
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
ko: {
|
|
219
|
+
heads: { now: "🎯 지금 할 일", glance: "📊 한눈에 보기", milestones: "🏁 마일스톤", done: "✅ 최근 끝낸 일", left: "⬜ 남은 일", remind: "🔔 잊지 말 것" },
|
|
220
|
+
of: (shown, total) => `(${total}개 중 ${shown}개)`,
|
|
221
|
+
type: "👉 입력:",
|
|
222
|
+
waitFor: "👉 기다리기:",
|
|
223
|
+
yourWords: "이어서 할 일을 직접 적기",
|
|
224
|
+
yourAnswer: "그 세션 창에서 답 쓰기",
|
|
225
|
+
glanceHead: "| ✅ 끝남 | 🔄 진행 중 | ⏳ 나를 기다림 | ⬜ 남음 |",
|
|
226
|
+
overall: "전체 진행",
|
|
227
|
+
noRows: "기록된 계획 항목 없음",
|
|
228
|
+
milestoneHead: "| 마일스톤 | 상태 | 진행 | 최근 |",
|
|
229
|
+
state: { done: "✅ 끝남", inProgress: "🔄 진행 중", notStarted: "⬜ 남음" },
|
|
230
|
+
noBar: "전체 개수 기록 없음",
|
|
231
|
+
noPlans: "이 기간에 계획이 없어요",
|
|
232
|
+
noDone: "아직 끝낸 일이 없어요",
|
|
233
|
+
noLeft: "남은 일이 없어요",
|
|
234
|
+
noReminders: "잊을 일이 없어요",
|
|
235
|
+
more: (n) => `…외 ${n}개`,
|
|
236
|
+
justNow: "방금",
|
|
237
|
+
minutes: (n) => `${n}분 전`,
|
|
238
|
+
today: (hm) => `오늘 ${hm}`,
|
|
239
|
+
days: (n) => `${n}일 전`,
|
|
240
|
+
notRead: (list) => `읽지 못함: ${list}.`,
|
|
241
|
+
older: "오래된 세션은 읽지 않았어요(읽기 예산 소진).",
|
|
242
|
+
sources: { transcripts: "세션 기록", plans: "계획", git: "git" },
|
|
243
|
+
now: {
|
|
244
|
+
resume: ({ skill, stage }) => [`멈춘 ${skill ?? "워크플로"} 이어가기`, `이 세션이 ${stage ? `${stage}에서 ` : ""}멈춰 있어요`],
|
|
245
|
+
approve: ({ action }) => ["start-work 요청을 승인하거나 거절하기", `${action ? `${action} ` : ""}권한을 기다리고, 저절로 넘어가지 않아요`],
|
|
246
|
+
continue: ({ plan }) => [`${plan ?? "이 세션의 작업"} 계속하기`, "이 세션의 실행이 아직 열려 있어요"],
|
|
247
|
+
start: ({ plan, item }) => [`${plan ?? "열린 계획"} 시작하기${item ? `: ${item}` : ""}`, "열린 계획이 하나뿐이고 다른 작업이 없어요"],
|
|
248
|
+
answer: ({ title, question }) => [`“${title ?? "그 세션"}” 질문에 답하기`, question ? `물어본 것: “${question}”` : "나를 기다리고 있어요"],
|
|
249
|
+
"resume-elsewhere": ({ skill, stage }) => [`멈춘 ${skill ?? "워크플로"}를 그 세션에서 이어가기`, `${stage ? `${stage}에서 ` : ""}멈춰 있어요`],
|
|
250
|
+
wait: ({ lanes }) => ["돌고 있는 작업이 끝나기를 먼저 기다리기", `레인 ${lanes}개가 아직 일하는 중이에요`],
|
|
251
|
+
plan: ({ plan, item, done, total, place }) => [`${plan ?? "열린 계획"} 다음 항목: ${item}`, `${done !== null && total !== null ? `${total}개 중 ${done}개 끝남` : "남은 항목이 있어요"}${place ? ` (${place})` : ""}`],
|
|
252
|
+
handoff: ({ item }) => [item, "핸드오프 Next의 첫 번째 남은 항목이에요"],
|
|
253
|
+
pickUp: ({ title }) => [`“${title ?? "마지막 세션"}”이 멈춘 곳에서 이어받기`, "이곳의 마지막 세션은 끝났어요"],
|
|
254
|
+
empty: () => ["이어 할 기록이 없어요", "이 기간에 세션·계획·핸드오프가 없어요"],
|
|
255
|
+
},
|
|
256
|
+
waitLane: (lane) => (lane ? `“${lane}” 끝날 때까지` : "다른 레인이 끝날 때까지"),
|
|
257
|
+
remind: {
|
|
258
|
+
waiting: ({ title, question }) => `⏳ “${title ?? "한 세션"}” ${question ? `질문: “${question}”` : "세션이 나를 기다림"} → 그 세션 창에서 답하기`,
|
|
259
|
+
approve: ({ action }) => `⏳ start-work 승인 대기${action ? `(${action} 권한)` : ""} → \`lit approve\` 또는 \`lit deny\` 입력`,
|
|
260
|
+
uncommitted: ({ count, place }) => `💾 커밋 안 된 변경 ${count}개${place ? ` (${place})` : ""} → 커밋할지, 버릴지 정하기`,
|
|
261
|
+
unpushed: ({ count, place }) => `📤 푸시 안 된 커밋 ${count}개${place ? ` (${place})` : ""} → 준비되면 푸시하기`,
|
|
262
|
+
lanes: ({ count }) => `🏃 아직 일하는 레인 ${count}개 → 끝날 때까지 \`go\` 치지 않기`,
|
|
263
|
+
stale: ({ title, days, place }) => `🕰️ ${days}일째 멈춘 계획: ${title}${place ? ` (${place})` : ""} → 이어 할지, 접을지 정하기`,
|
|
264
|
+
handoff: ({ item }) => `📌 핸드오프 다음 할 일: ${item} → 준비되면 시작하기`,
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
// `just now`, `10m ago`, `today 15:40`, `3d ago`, in the machine's local time.
|
|
270
|
+
const lastSeen = (ms, now, w) => {
|
|
271
|
+
if (!Number.isFinite(ms)) return "·";
|
|
272
|
+
const minutes = Math.max(0, Math.floor((now - ms) / 60_000));
|
|
273
|
+
if (minutes < 1) return w.justNow;
|
|
274
|
+
if (minutes < 60) return w.minutes(minutes);
|
|
275
|
+
const at = new Date(ms);
|
|
276
|
+
if (at.toDateString() === new Date(now).toDateString()) {
|
|
277
|
+
return w.today(`${String(at.getHours()).padStart(2, "0")}:${String(at.getMinutes()).padStart(2, "0")}`);
|
|
278
|
+
}
|
|
279
|
+
return w.days(Math.max(1, Math.floor((now - ms) / 86_400_000)));
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
// Every string inside a fact is data; it is escaped here, never interpreted.
|
|
283
|
+
const escapeFacts = (facts) => Object.fromEntries(Object.entries(facts).map(([key, value]) => [key, typeof value === "string" ? plain(value) : value]));
|
|
284
|
+
|
|
285
|
+
/** The board as Markdown. `lang` is `ko` or `en`; `now` is the clock the "Last" column reads. */
|
|
286
|
+
export const renderBoard = (data, { lang = "en", now = Date.parse(data.generatedAt) || Date.now() } = {}) => {
|
|
287
|
+
const w = WORDS[lang] ?? WORDS.en;
|
|
288
|
+
const board = buildBoard(data);
|
|
289
|
+
const out = [];
|
|
290
|
+
|
|
291
|
+
const step = board.now;
|
|
292
|
+
const [action, why] = w.now[step.kind](escapeFacts(step));
|
|
293
|
+
out.push(`## ${w.heads.now}`, `**${action}** — ${why}`);
|
|
294
|
+
if (step.kind === "wait") out.push(`${w.waitFor} ${w.waitLane(step.lane ? plain(step.lane) : null)}`);
|
|
295
|
+
else if (step.say) out.push(`${w.type} ${code(step.say)}${step.alt ? ` / ${code(step.alt)}` : ""}`);
|
|
296
|
+
else out.push(`${w.type} ${step.kind === "answer" ? w.yourAnswer : w.yourWords}`);
|
|
297
|
+
|
|
298
|
+
const { glance } = board;
|
|
299
|
+
out.push("", `## ${w.heads.glance}`, w.glanceHead, "|:--:|:--:|:--:|:--:|", `| ${glance.done} | ${glance.inProgress} | ${glance.waiting} | ${glance.remaining} |`, "", `${w.overall} ${glance.progress.bar ?? w.noRows}`);
|
|
300
|
+
|
|
301
|
+
const more = board.milestonesTotal > board.milestones.length ? ` ${w.of(board.milestones.length, board.milestonesTotal)}` : "";
|
|
302
|
+
out.push("", `## ${w.heads.milestones}${more}`);
|
|
303
|
+
if (board.milestones.length) {
|
|
304
|
+
out.push(w.milestoneHead, "|---|---|---|---|");
|
|
305
|
+
for (const row of board.milestones) {
|
|
306
|
+
const name = `${plain(row.title)}${row.place ? ` · ${plain(row.place)}` : ""}`;
|
|
307
|
+
out.push(`| ${name} | ${w.state[row.state]} | ${row.bar ?? w.noBar} | ${lastSeen(row.changedMs, now, w)} |`);
|
|
308
|
+
}
|
|
309
|
+
} else {
|
|
310
|
+
out.push(w.noPlans);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
out.push("", `## ${w.heads.done}`);
|
|
314
|
+
out.push(...(board.doneLately.length ? board.doneLately.map((text) => `- ${plain(text)}`) : [w.noDone]));
|
|
315
|
+
|
|
316
|
+
out.push("", `## ${w.heads.left}`);
|
|
317
|
+
if (board.remaining.length) {
|
|
318
|
+
out.push(...board.remaining.map((row, index) => `${index + 1}. ${plain(row.text)}${row.plan ? ` · ${plain(row.plan)}` : ""}`));
|
|
319
|
+
if (board.remainingMore) out.push(w.more(board.remainingMore));
|
|
320
|
+
} else {
|
|
321
|
+
out.push(w.noLeft);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
out.push("", `## ${w.heads.remind}`);
|
|
325
|
+
const reminders = board.reminders.slice(0, REMINDERS).map((item) => `- ${w.remind[item.kind](escapeFacts(item))}`);
|
|
326
|
+
out.push(...(reminders.length ? reminders : [w.noReminders]));
|
|
327
|
+
|
|
328
|
+
// A source that could not be read stays visible, once, under the board.
|
|
329
|
+
const unread = ["transcripts", "plans", "git"].filter((name) => data.sources?.[name] && data.sources[name] !== "ok").map((name) => w.sources[name]);
|
|
330
|
+
const notes = [unread.length ? w.notRead(unread.join(", ")) : null, data.budget?.exhausted ? w.older : null].filter(Boolean);
|
|
331
|
+
if (notes.length) out.push("", "---", `*${notes.join(" ")}*`);
|
|
332
|
+
return `${out.join("\n")}\n`;
|
|
333
|
+
};
|
|
@@ -12,8 +12,9 @@ import { closeSync, constants, fstatSync, lstatSync, openSync, readSync, readdir
|
|
|
12
12
|
import { homedir } from "node:os";
|
|
13
13
|
import { basename, join, resolve } from "node:path";
|
|
14
14
|
|
|
15
|
-
import { parsePlanTaskRows } from "./plan-task-rows.mjs";
|
|
15
|
+
import { planLinesOutsideFences, parsePlanTaskRows } from "./plan-task-rows.mjs";
|
|
16
16
|
import { resolveProjectStateRoot } from "./project-state-root.mjs";
|
|
17
|
+
import { buildBoard, renderBoard } from "./board.mjs";
|
|
17
18
|
import { renderBrief } from "./brief.mjs";
|
|
18
19
|
import { aggregateProgress, clipToWidth, displayWidth, progressOf } from "./gauge.mjs";
|
|
19
20
|
import { chooseNextStep } from "./next-step.mjs";
|
|
@@ -27,6 +28,9 @@ const DEFAULT_SINCE = "7d";
|
|
|
27
28
|
const DEFAULT_MAX = 12;
|
|
28
29
|
const NAME_MAX = 90;
|
|
29
30
|
const PLAN_LIMIT = 8;
|
|
31
|
+
const STALE_MS = 7 * 86_400_000;
|
|
32
|
+
const STALE_READS = 6;
|
|
33
|
+
const TITLE_MAX = 48;
|
|
30
34
|
|
|
31
35
|
/** `7d`, `12h`, `30m` in milliseconds, or null. */
|
|
32
36
|
export const parseSince = (text) => {
|
|
@@ -83,19 +87,29 @@ const mtimeOf = (path) => {
|
|
|
83
87
|
}
|
|
84
88
|
};
|
|
85
89
|
|
|
90
|
+
// A plan's name for a reader: its first `# ` heading, else its file name without the date and dashes.
|
|
91
|
+
const planTitle = (text, fileName, redact) => {
|
|
92
|
+
const heading = planLinesOutsideFences(text).map(({ line }) => /^#\s+(.+?)\s*#*\s*$/u.exec(line)?.[1]).find(Boolean);
|
|
93
|
+
const fallback = fileName.replace(/\.md$/u, "").replace(/^\d{4}-\d{2}-\d{2}[-_]?/u, "").replace(/[-_]+/gu, " ").trim();
|
|
94
|
+
return clipToWidth(redact(heading || fallback || fileName), TITLE_MAX);
|
|
95
|
+
};
|
|
96
|
+
|
|
86
97
|
// Every plan changed inside the window, open or finished; a finished one has no current item. A plan
|
|
87
|
-
// outside the window
|
|
88
|
-
// counted in `skipped` so the brief can say so.
|
|
98
|
+
// outside the window stays out of the roadmap, and one the read budget cannot cover is not read
|
|
99
|
+
// either: both are counted in `skipped` so the brief can say so. A few plans outside the window are
|
|
100
|
+
// still read for one fact, whether rows are left in them, so the board can say which plan stalled.
|
|
89
101
|
const plansIn = (root, budget, redact, local, sinceMs, now) => {
|
|
90
102
|
const list = entries(join(root, "plans"));
|
|
91
103
|
if (!list) return null;
|
|
92
104
|
let skipped = 0;
|
|
105
|
+
const outside = [];
|
|
93
106
|
const plans = list.filter((entry) => entry.isFile() && entry.name.endsWith(".md")).sort((a, b) => a.name.localeCompare(b.name)).flatMap((entry) => {
|
|
94
107
|
const path = join(root, "plans", entry.name);
|
|
95
108
|
const changedMs = mtimeOf(path);
|
|
96
109
|
if (changedMs === null || now - changedMs > sinceMs || budget.used >= budget.limit) {
|
|
97
110
|
skipped += 1;
|
|
98
111
|
if (changedMs !== null && now - changedMs <= sinceMs) budget.exhausted = true;
|
|
112
|
+
else if (changedMs !== null) outside.push({ path, name: entry.name, changedMs });
|
|
99
113
|
return [];
|
|
100
114
|
}
|
|
101
115
|
const text = readSmallFile(path, budget);
|
|
@@ -107,6 +121,7 @@ const plansIn = (root, budget, redact, local, sinceMs, now) => {
|
|
|
107
121
|
return [{
|
|
108
122
|
worktree: redact(root),
|
|
109
123
|
plan: `plans/${entry.name}`,
|
|
124
|
+
title: planTitle(text, entry.name, redact),
|
|
110
125
|
local,
|
|
111
126
|
changedMs,
|
|
112
127
|
complete: open.length === 0,
|
|
@@ -115,7 +130,16 @@ const plansIn = (root, budget, redact, local, sinceMs, now) => {
|
|
|
115
130
|
progress: progressOf(done, rows.length, open.map((row) => clipToWidth(redact(row.text), NAME_MAX))),
|
|
116
131
|
}];
|
|
117
132
|
});
|
|
118
|
-
|
|
133
|
+
// Newest first, so the plans that stalled most recently are the ones read.
|
|
134
|
+
const stale = outside.sort((a, b) => b.changedMs - a.changedMs).slice(0, STALE_READS).flatMap(({ path, name, changedMs }) => {
|
|
135
|
+
if (budget.used >= budget.limit) return [];
|
|
136
|
+
const text = readSmallFile(path, budget);
|
|
137
|
+
const rows = text === null ? [] : parsePlanTaskRows(text);
|
|
138
|
+
if (!rows.length || isTemplate(rows)) return [];
|
|
139
|
+
const open = rows.filter((row) => !row.checked).length;
|
|
140
|
+
return open ? [{ worktree: redact(root), plan: `plans/${name}`, title: planTitle(text, name, redact), local, changedMs, open }] : [];
|
|
141
|
+
});
|
|
142
|
+
return { plans, skipped, stale };
|
|
119
143
|
};
|
|
120
144
|
|
|
121
145
|
// The items under a `## Next` heading of a handoff, the fallback next step when no plan has one.
|
|
@@ -189,6 +213,26 @@ const commitsOf = (root, sinceMs, now, exec, redact) => {
|
|
|
189
213
|
}
|
|
190
214
|
};
|
|
191
215
|
|
|
216
|
+
// Changes nobody committed yet and commits not pushed to the upstream, per worktree. A count git
|
|
217
|
+
// cannot give (no repository, no upstream) is null, never zero.
|
|
218
|
+
const gitCount = (exec, root, args) => {
|
|
219
|
+
try {
|
|
220
|
+
return exec("git", args, { cwd: root, timeout: GIT_TIMEOUT_MS });
|
|
221
|
+
} catch {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
const worktreeStateOf = (root, exec, redact, local) => {
|
|
226
|
+
const status = gitCount(exec, root, ["status", "--porcelain=v1", "--untracked-files=normal"]);
|
|
227
|
+
const ahead = gitCount(exec, root, ["rev-list", "--count", "@{upstream}..HEAD"]);
|
|
228
|
+
return {
|
|
229
|
+
worktree: redact(root),
|
|
230
|
+
local,
|
|
231
|
+
uncommitted: status === null ? null : status.split("\n").filter((line) => line.trim()).length,
|
|
232
|
+
unpushed: ahead === null || !/^\d+\s*$/u.test(ahead) ? null : Number(ahead.trim()),
|
|
233
|
+
};
|
|
234
|
+
};
|
|
235
|
+
|
|
192
236
|
const herdrAgent = (agent, env, redact) => ({
|
|
193
237
|
status: typeof agent?.agent_status === "string" ? agent.agent_status : "unknown",
|
|
194
238
|
pane: typeof agent?.pane_id === "string" ? clipToWidth(redact(agent.pane_id), 40) : "unknown",
|
|
@@ -260,6 +304,7 @@ export const collectRewind = ({
|
|
|
260
304
|
const planReads = roots.map((root) => plansIn(root, budget, redact, isLocal(root), sinceMs, now));
|
|
261
305
|
const plans = planReads.every((read) => read === null) ? null : planReads.flatMap((read) => read?.plans ?? []);
|
|
262
306
|
const plansSkipped = planReads.reduce((sum, read) => sum + (read?.skipped ?? 0), 0);
|
|
307
|
+
const staleOutside = planReads.flatMap((read) => read?.stale ?? []);
|
|
263
308
|
const handoffs = roots.flatMap((root) => handoffsOf(root, budget, redact, isLocal(root)));
|
|
264
309
|
|
|
265
310
|
const storeDir = join(env.GROK_CONFIG_DIR || join(home, ".grok"), "sessions");
|
|
@@ -275,6 +320,7 @@ export const collectRewind = ({
|
|
|
275
320
|
}
|
|
276
321
|
|
|
277
322
|
const commits = collectEach((root) => commitsOf(root, sinceMs, now, exec, redact));
|
|
323
|
+
const worktreeState = roots.map((root) => worktreeStateOf(root, exec, redact, isLocal(root)));
|
|
278
324
|
const herdr = herdrOf(env, exec, redact);
|
|
279
325
|
|
|
280
326
|
// A session waits on the user when it asked something.
|
|
@@ -319,6 +365,12 @@ export const collectRewind = ({
|
|
|
319
365
|
plansOmitted: orderedPlans.length - shownPlans.length,
|
|
320
366
|
plansDone: orderedPlans.filter((plan) => plan.complete).length,
|
|
321
367
|
plansSkipped,
|
|
368
|
+
// Plans with rows left that nobody touched for a week, inside the window or outside it.
|
|
369
|
+
stalePlans: [
|
|
370
|
+
...orderedPlans.filter((plan) => !plan.complete && now - plan.changedMs >= STALE_MS)
|
|
371
|
+
.map(({ worktree, plan, title, local, changedMs, progress }) => ({ worktree, plan, title, local, changedMs, open: progress.total - progress.done })),
|
|
372
|
+
...staleOutside.filter((plan) => now - plan.changedMs >= STALE_MS),
|
|
373
|
+
].sort((a, b) => a.changedMs - b.changedMs).map(({ changedMs, ...plan }) => ({ ...plan, changedMs, days: Math.floor((now - changedMs) / 86_400_000) })),
|
|
322
374
|
litgoal: [],
|
|
323
375
|
progress: roadmapItems.length ? aggregateProgress(roadmapItems) : progressOf(null, null),
|
|
324
376
|
},
|
|
@@ -326,11 +378,15 @@ export const collectRewind = ({
|
|
|
326
378
|
startWork: [],
|
|
327
379
|
handoffs,
|
|
328
380
|
commits: (commits ?? []).slice(0, 20).map(({ atMs: _atMs, ...commit }) => commit),
|
|
381
|
+
worktreeState,
|
|
329
382
|
herdr,
|
|
330
383
|
};
|
|
331
384
|
// `go` re-collects the brief and continues this step; no record is written, because the model
|
|
332
385
|
// has no documented way to learn its session id and no hook could hand the record back to it.
|
|
333
386
|
data.next = chooseNextStep(data, sessionId);
|
|
387
|
+
// The KPI board's facts (buckets, counts, bars, reminders), computed here so the board is the
|
|
388
|
+
// same for every reader and the model only shows it.
|
|
389
|
+
data.board = buildBoard(data);
|
|
334
390
|
return data;
|
|
335
391
|
};
|
|
336
392
|
|
|
@@ -373,16 +429,18 @@ export const renderRewind = (data, width = 100) => {
|
|
|
373
429
|
};
|
|
374
430
|
|
|
375
431
|
/**
|
|
376
|
-
* `rewind [--brief [--lang ko|en] | --json] [--here] [--since 7d] [--max 12] [--session <id>] [--width N]`.
|
|
377
|
-
* `--brief` prints the
|
|
432
|
+
* `rewind [--brief [--detail] [--lang ko|en] | --json] [--here] [--since 7d] [--max 12] [--session <id>] [--width N]`.
|
|
433
|
+
* `--brief` prints the KPI board the lit-adhd skill shows; `--detail` adds the per-session brief
|
|
434
|
+
* under it; `--json` the data under both, with the board text in `board.text`.
|
|
378
435
|
*/
|
|
379
436
|
export const runRewindCli = (args, cwd = process.cwd(), { env = process.env, stdout = process.stdout, stderr = process.stderr } = {}) => {
|
|
380
437
|
const options = { cwd, env, here: false, since: DEFAULT_SINCE, max: DEFAULT_MAX, sessionId: null };
|
|
381
438
|
let json = false;
|
|
382
439
|
let brief = false;
|
|
440
|
+
let detail = false;
|
|
383
441
|
let lang = "en";
|
|
384
442
|
let width = Number(stdout.columns) || 100;
|
|
385
|
-
const usage = "Usage: rewind [--brief [--lang ko|en] | --json] [--here] [--since 7d] [--max 12] [--session <id>] [--width N]";
|
|
443
|
+
const usage = "Usage: rewind [--brief [--detail] [--lang ko|en] | --json] [--here] [--since 7d] [--max 12] [--session <id>] [--width N]";
|
|
386
444
|
if (args.some((arg) => arg === "--help" || arg === "-h")) {
|
|
387
445
|
stdout.write(`${usage}\n`);
|
|
388
446
|
return 0;
|
|
@@ -391,6 +449,7 @@ export const runRewindCli = (args, cwd = process.cwd(), { env = process.env, std
|
|
|
391
449
|
const arg = args[index];
|
|
392
450
|
if (arg === "--json") json = true;
|
|
393
451
|
else if (arg === "--brief") brief = true;
|
|
452
|
+
else if (arg === "--detail") detail = true;
|
|
394
453
|
else if (arg === "--lang" && ["ko", "en"].includes(args[index + 1])) lang = args[++index];
|
|
395
454
|
else if (arg === "--here") options.here = true;
|
|
396
455
|
else if (arg === "--since" && parseSince(args[index + 1])) options.since = args[++index];
|
|
@@ -403,6 +462,15 @@ export const runRewindCli = (args, cwd = process.cwd(), { env = process.env, std
|
|
|
403
462
|
}
|
|
404
463
|
}
|
|
405
464
|
const data = collectRewind(options);
|
|
406
|
-
|
|
465
|
+
const now = Date.parse(data.generatedAt);
|
|
466
|
+
if (json) {
|
|
467
|
+
data.board.text = renderBoard(data, { lang, now });
|
|
468
|
+
stdout.write(`${JSON.stringify(data, null, 2)}\n`);
|
|
469
|
+
} else if (brief) {
|
|
470
|
+
// The board is the answer; the per-session brief is the detail a reader asks for.
|
|
471
|
+
stdout.write(detail ? `${renderBoard(data, { lang, now })}\n---\n\n${renderBrief(data, { lang, now })}` : renderBoard(data, { lang, now }));
|
|
472
|
+
} else {
|
|
473
|
+
stdout.write(renderRewind(data, width));
|
|
474
|
+
}
|
|
407
475
|
return 0;
|
|
408
476
|
};
|