@litfamily/litgrok 1.0.34 → 1.0.36
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 +60 -1
- package/.grok/rules/00-litgrok.md +4 -6
- package/.grok/skills/browser-drive/scripts/capability-probe.mjs +1 -1
- package/.grok/skills/frontend-ui-ux/SKILL.md +55 -39
- package/.grok/skills/lit-diagram-drawer/SKILL.md +37 -90
- package/.grok/skills/lit-docx/SKILL.md +36 -74
- 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 +35 -87
- package/.grok/skills/lit-schematic/SKILL.md +35 -112
- package/.grok/skills/lit-scientific-visualization/SKILL.md +44 -221
- package/.grok/skills/lit-typographic-motion/SKILL.md +48 -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 +48 -24
- package/.grok/skills/visual-qa/SKILL.md +41 -28
- package/.grok-plugin/plugin.json +1 -1
- package/CHANGELOG.md +21 -1
- package/CONTRIBUTING.md +0 -1
- package/README.md +9 -9
- package/README_ko-KR.md +9 -9
- package/bin/extensions.mjs +686 -0
- package/bin/litgrok.mjs +367 -32
- 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
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
import { sourceMetrics } from './diagram-metrics.mjs';
|
|
2
|
-
|
|
3
|
-
const MAX_EDGE_LABEL_ANCHOR_DISTANCE=24;
|
|
4
|
-
const BOUNDARY_EDGE_PADDING=4;
|
|
5
|
-
const BOUNDARY_EDGE_MIN_OVERLAP=12;
|
|
6
|
-
const ARROWHEAD_CANVAS_FLOOR=12/1080;
|
|
7
|
-
const ARROWHEAD_STROKE_MULTIPLE=5;
|
|
8
|
-
const ARROWHEAD_TARGET_TOLERANCE=2;
|
|
9
|
-
|
|
10
|
-
const decode=(s)=>s.replaceAll('&','&').replaceAll('<','<').replaceAll('>','>').replaceAll('"','"').replaceAll(''',"'").replaceAll(''',"'");
|
|
11
|
-
const attributes=(s)=>Object.fromEntries([...s.matchAll(/([\w:-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g)].map((m)=>[m[1],decode(m[2]??m[3]??'')]));
|
|
12
|
-
const clean=(s)=>decode(s.replace(/<[^>]*>/g,' ').replace(/\s+/g,' ').trim());
|
|
13
|
-
const widthOf=(text,size)=>[...text].reduce((n,c)=>n+(/\s/.test(c)?.28:/[\u1100-\u11ff\u3130-\u318f\uac00-\ud7af]/.test(c)?.98:/[ilI.,:;!|]/.test(c)?.32:/[MW@#%]/.test(c)?.82:.56),0)*size;
|
|
14
|
-
const contamination=[
|
|
15
|
-
/\blitfamily\b/i, /\b(?:generator|generated by|template|prototype)\b/i,
|
|
16
|
-
/\bsource\s*:/i, /\bnotes?\s*:/i, /\bstatic\s+first\b/i,
|
|
17
|
-
/\baccessible\s+labels\b/i, /\bone\s+accent\b/i, /\bfocal\b/i,
|
|
18
|
-
/\b(?:light|dark|full)\s*[·|/]\s*static\b/i, /\bdesign\s+rules?\b/i,
|
|
19
|
-
/^\s*show\b/i,
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
function visibleSvgText(svg){
|
|
23
|
-
return [...svg.matchAll(/<text\b([^>]*)>([\s\S]*?)<\/text>/gi)].map((m)=>{
|
|
24
|
-
const a=attributes(m[1]),label=clean(m[2]),size=Number(a['font-size']||16),textAnchor=a['text-anchor']||'start',anchor={x:Number(a.x||0),y:Number(a.y||0)},w=widthOf(label,size),x=anchor.x-(textAnchor==='middle'?w/2:textAnchor==='end'?w:0),y=anchor.y-size*.82;
|
|
25
|
-
return {label,size,role:a['data-role']||'',nodeId:a['data-node-id']||'',anchor,edgeFor:a['data-edge-for']||'',boundaryFor:a['data-boundary-for']||a['data-group-for']||'',x,y,w,h:size*1.22};
|
|
26
|
-
}).filter((t)=>t.label);
|
|
27
|
-
}
|
|
28
|
-
function svgContent(source){return [...source.matchAll(/<svg\b[^>]*>[\s\S]*?<\/svg>/gi)].map((m)=>m[0]).join('\n');}
|
|
29
|
-
function parseRoutes(svg){
|
|
30
|
-
const routes=[];
|
|
31
|
-
for(const m of svg.matchAll(/<(line|path)\b([^>]*)>/gi)){
|
|
32
|
-
const a=attributes(m[2]); if(!a['data-from']||!a['data-to'])continue;
|
|
33
|
-
let segments=[];
|
|
34
|
-
if(m[1].toLowerCase()==='line'){
|
|
35
|
-
const v=['x1','y1','x2','y2'].map((k)=>Number(a[k])); if(v.every(Number.isFinite))segments=[[v[0],v[1],v[2],v[3]]];
|
|
36
|
-
}else if(a.d){
|
|
37
|
-
const parts=a.d.match(/[a-zA-Z]|[-+]?(?:\d*\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/gi)||[];let i=0,cmd='',x=0,y=0,px=0,py=0;
|
|
38
|
-
while(i<parts.length){if(/^[a-z]$/i.test(parts[i]))cmd=parts[i++];if(!cmd)break;const rel=cmd===cmd.toLowerCase(),up=cmd.toUpperCase();
|
|
39
|
-
if(up==='M'||up==='L'){if(i+1>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const nx=Number(parts[i++])+(rel?x:0),ny=Number(parts[i++])+(rel?y:0);if(up==='L')segments.push([x,y,nx,ny]);x=nx;y=ny;}
|
|
40
|
-
else if(up==='H'){if(i>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const nx=Number(parts[i++])+(rel?x:0);segments.push([x,y,nx,y]);x=nx;}
|
|
41
|
-
else if(up==='V'){if(i>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const ny=Number(parts[i++])+(rel?y:0);segments.push([x,y,x,ny]);y=ny;}
|
|
42
|
-
else if(up==='C'){if(i+5>=parts.length||/^[a-z]$/i.test(parts[i])){cmd='';continue;}const p=(n)=>[Number(parts[n])+(rel?x:0),Number(parts[n+1])+(rel?y:0)],start=[x,y],c1=p(i),c2=p(i+2),end=p(i+4);i+=6;let previous=start;for(let step=1;step<=16;step++){const t=step/16,u=1-t,next=[u*u*u*start[0]+3*u*u*t*c1[0]+3*u*t*t*c2[0]+t*t*t*end[0],u*u*u*start[1]+3*u*u*t*c1[1]+3*u*t*t*c2[1]+t*t*t*end[1]];segments.push([previous[0],previous[1],next[0],next[1]]);previous=next;}x=end[0];y=end[1];}
|
|
43
|
-
else {cmd='';while(i<parts.length&&!/^[a-z]$/i.test(parts[i]))i++;}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if(segments.length)routes.push({from:a['data-from'],to:a['data-to'],label:a['data-label']||'',segments,markerStart:a['marker-start']||'',markerEnd:a['marker-end']||'',strokeWidth:Number(a['stroke-width']||1)});
|
|
47
|
-
}
|
|
48
|
-
return routes;
|
|
49
|
-
}
|
|
50
|
-
function rectangles(svg){
|
|
51
|
-
const nodes=[];
|
|
52
|
-
for(const m of svg.matchAll(/<rect\b([^>]*)\/?\s*>/gi)){
|
|
53
|
-
const a=attributes(m[1]);if(!a['data-node-id'])continue;
|
|
54
|
-
const box={id:a['data-node-id'],fill:a.fill||'',type:a['data-node-type']||'',outcomes:(a['data-outcomes']||'').split('|').map((value)=>value.trim()).filter(Boolean),x:Number(a.x||0),y:Number(a.y||0),w:Number(a.width||0),h:Number(a.height||0)};
|
|
55
|
-
if(box.w>0&&box.h>0)nodes.push(box);
|
|
56
|
-
}
|
|
57
|
-
return nodes;
|
|
58
|
-
}
|
|
59
|
-
function segmentHitsBox(s,b,pad=0){
|
|
60
|
-
const [x1,y1,x2,y2]=s,loX=Math.min(x1,x2),hiX=Math.max(x1,x2),loY=Math.min(y1,y2),hiY=Math.max(y1,y2),left=b.x-pad,right=b.x+b.w+pad,top=b.y-pad,bottom=b.y+b.h+pad;
|
|
61
|
-
if(x1===x2)return x1>=left&&x1<=right&&hiY>=top&&loY<=bottom;
|
|
62
|
-
if(y1===y2)return y1>=top&&y1<=bottom&&hiX>=left&&loX<=right;
|
|
63
|
-
const steps=24;for(let i=0;i<=steps;i++){const t=i/steps,x=x1+(x2-x1)*t,y=y1+(y2-y1)*t;if(x>=left&&x<=right&&y>=top&&y<=bottom)return true;}return false;
|
|
64
|
-
}
|
|
65
|
-
function segmentHitsText(s,t,pad=1){
|
|
66
|
-
const b={x:t.x-pad,y:t.y-pad,w:t.w+pad*2,h:t.h+pad*2};return segmentHitsBox(s,b,0);
|
|
67
|
-
}
|
|
68
|
-
function textOverlapsNode(text,node,pad=1){return text.x<node.x+node.w+pad&&text.x+text.w>node.x-pad&&text.y<node.y+node.h+pad&&text.y+text.h>node.y-pad;}
|
|
69
|
-
function gap(a,b){const dx=Math.max(0,a.x-(b.x+b.w),b.x-(a.x+a.w)),dy=Math.max(0,a.y-(b.y+b.h),b.y-(a.y+a.h));return Math.hypot(dx,dy);}
|
|
70
|
-
|
|
71
|
-
const OFFICE_LIMITS={groupRatio:2,accentFamiliesHigh:6,hueBand:20,latinShare:.8,titleShare:.6,inset:4};
|
|
72
|
-
function officeQuality(svg,nodes,texts,outlines){
|
|
73
|
-
const issues=[];
|
|
74
|
-
if(outlines.length>=2){
|
|
75
|
-
const group=(n)=>outlines.find((o)=>n.x+n.w/2>=o.x&&n.x+n.w/2<=o.x+o.w&&n.y+n.h/2>=o.y&&n.y+n.h/2<=o.y+o.h)?.id||'none';
|
|
76
|
-
const intra=[],inter=[];
|
|
77
|
-
for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++)(group(nodes[i])===group(nodes[j])?intra:inter).push(gap(nodes[i],nodes[j]));
|
|
78
|
-
if(intra.length&&inter.length&&Math.min(...inter)<OFFICE_LIMITS.groupRatio*Math.max(...intra))issues.push('OF-201 CLUSTER_GAP_RATIO inter='+Math.min(...inter).toFixed(1)+' intra='+Math.max(...intra).toFixed(1));
|
|
79
|
-
}
|
|
80
|
-
const hues=[];
|
|
81
|
-
for(const n of nodes){const m=n.fill.match(/^#([\da-f]{6})$/i);if(!m)continue;const rgb=[0,2,4].map((i)=>parseInt(m[1].slice(i,i+2),16)/255),max=Math.max(...rgb),min=Math.min(...rgb),d=max-min,light=(max+min)/2,sat=d===0?0:d/(1-Math.abs(2*light-1));if(sat<.12||light<.12||light>.93)continue;let h=0;if(d){const k=rgb.indexOf(max);h=60*((k===0?(rgb[1]-rgb[2])/d:k===1?(rgb[2]-rgb[0])/d+2:(rgb[0]-rgb[1])/d+4)+6)%360;}if(!hues.some((v)=>Math.min(Math.abs(v-h),360-Math.abs(v-h))<=OFFICE_LIMITS.hueBand))hues.push(h);}
|
|
82
|
-
if(hues.length>=OFFICE_LIMITS.accentFamiliesHigh)issues.push('OF-202 ACCENT_COUNT '+hues.length+' HIGH; keep three to five families, each tied to a named role');
|
|
83
|
-
for(const t of texts){
|
|
84
|
-
const letters=[...t.label].filter((c)=>/[A-Za-z0-9]/.test(c)).length,share=letters/Math.max(1,t.label.length);
|
|
85
|
-
if(share>=OFFICE_LIMITS.latinShare&&t.label!==t.label.toUpperCase()){const all=t.label.split(/\s+/),words=all.filter((w)=>/^[A-Za-z]{4,}$/.test(w)),caps=words.filter((w)=>/^[A-Z][a-z]+$/.test(w));if(caps.length>=2&&caps.length/Math.max(1,words.length)>OFFICE_LIMITS.titleShare&&all.some((w)=>/^(Of|And|The|To|For|In)$/.test(w)))issues.push('OF-203 LABEL_CASE '+t.label);}
|
|
86
|
-
const box=t.nodeId?nodes.find((n)=>n.id===t.nodeId):t.boundaryFor?outlines.find((o)=>o.id===t.boundaryFor):null;
|
|
87
|
-
if(box&&t.w>box.w-2*OFFICE_LIMITS.inset)issues.push('OF-204 LABEL_OVERFLOW '+t.label+' width='+t.w.toFixed(1)+' box='+box.w);
|
|
88
|
-
}
|
|
89
|
-
return issues;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function boundaryOutlines(svg){
|
|
93
|
-
const outlines=[];
|
|
94
|
-
const add=(a)=>{
|
|
95
|
-
const markers=['data-trust-boundary','data-boundary','data-boundary-name','data-group-boundary','data-group-name','data-group-label','data-group-id'];
|
|
96
|
-
const classMarker=/\b(?:boundary|group)(?:[-_][\w-]+)?\b/i.test(a.class||'');
|
|
97
|
-
if(!markers.some((key)=>Object.hasOwn(a,key))&&!classMarker)return;
|
|
98
|
-
const labels=[a['data-trust-boundary'],a['data-boundary-name'],a['data-group-boundary'],a['data-group-name'],a['data-group-label']].filter((value)=>value&&value!=='true');
|
|
99
|
-
const x=Number(a.x||0),y=Number(a.y||0),w=Number(a.width||0),h=Number(a.height||0);
|
|
100
|
-
if(w>0&&h>0)outlines.push({id:a['data-group-id']||a.id||labels[0]||'outline',labels,x,y,w,h,strokeWidth:Number(a['stroke-width']||1)});
|
|
101
|
-
};
|
|
102
|
-
for(const match of svg.matchAll(/<rect\b([^>]*)\/?\s*>/gi))add(attributes(match[1]));
|
|
103
|
-
for(const match of svg.matchAll(/<g\b([^>]*)>([\s\S]*?)<\/g>/gi)){
|
|
104
|
-
const group=attributes(match[1]);
|
|
105
|
-
if(!['data-trust-boundary','data-boundary','data-boundary-name','data-group-boundary','data-group-name','data-group-label','data-group-id'].some((key)=>Object.hasOwn(group,key)))continue;
|
|
106
|
-
const rect=match[2].match(/<rect\b([^>]*)\/?\s*>/i);
|
|
107
|
-
if(rect)add({...attributes(rect[1]),...group});
|
|
108
|
-
}
|
|
109
|
-
return outlines;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
function pointSegmentDistance(point,segment){
|
|
113
|
-
const [x1,y1,x2,y2]=segment,dx=x2-x1,dy=y2-y1,length=dx*dx+dy*dy;
|
|
114
|
-
const t=length?Math.max(0,Math.min(1,((point.x-x1)*dx+(point.y-y1)*dy)/length)):0;
|
|
115
|
-
return Math.hypot(point.x-(x1+t*dx),point.y-(y1+t*dy));
|
|
116
|
-
}
|
|
117
|
-
function routeDistance(point,route){return Math.min(...route.segments.map((segment)=>pointSegmentDistance(point,segment)));}
|
|
118
|
-
function isBoundaryLabel(text,outlines){return text.role==='boundary'||text.boundaryFor||outlines.some((outline)=>outline.labels.includes(text.label)||outline.id===text.boundaryFor);}
|
|
119
|
-
function outlineEdges(outline){return [[outline.x,outline.y,outline.x+outline.w,outline.y],[outline.x+outline.w,outline.y,outline.x+outline.w,outline.y+outline.h],[outline.x+outline.w,outline.y+outline.h,outline.x,outline.y+outline.h],[outline.x,outline.y+outline.h,outline.x,outline.y]];}
|
|
120
|
-
function textHitsOutline(text,outline){return outlineEdges(outline).some((edge)=>segmentHitsText(edge,text,outline.strokeWidth/2+.5));}
|
|
121
|
-
function segmentAlongOutline(segment,outline){
|
|
122
|
-
const [x1,y1,x2,y2]=segment,loX=Math.min(x1,x2),hiX=Math.max(x1,x2),loY=Math.min(y1,y2),hiY=Math.max(y1,y2),right=outline.x+outline.w,bottom=outline.y+outline.h;
|
|
123
|
-
if(Math.abs(y1-y2)<=1){const overlap=Math.min(hiX,right)-Math.max(loX,outline.x);return overlap>BOUNDARY_EDGE_MIN_OVERLAP&&(Math.abs(y1-outline.y)<=BOUNDARY_EDGE_PADDING||Math.abs(y1-bottom)<=BOUNDARY_EDGE_PADDING);}
|
|
124
|
-
if(Math.abs(x1-x2)<=1){const overlap=Math.min(hiY,bottom)-Math.max(loY,outline.y);return overlap>BOUNDARY_EDGE_MIN_OVERLAP&&(Math.abs(x1-outline.x)<=BOUNDARY_EDGE_PADDING||Math.abs(x1-right)<=BOUNDARY_EDGE_PADDING);}
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
function markerPathPoints(d){
|
|
128
|
-
const parts=d.match(/[a-zA-Z]|[-+]?(?:\d*\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/gi)||[],points=[];let i=0,cmd='',x=0,y=0;
|
|
129
|
-
while(i<parts.length){if(/^[a-z]$/i.test(parts[i]))cmd=parts[i++];if(!cmd)break;const upper=cmd.toUpperCase(),relative=cmd===cmd.toLowerCase();
|
|
130
|
-
if(upper==='M'||upper==='L'){if(i+1>=parts.length||/^[a-z]$/i.test(parts[i]))break;let nx=Number(parts[i++]),ny=Number(parts[i++]);if(relative){nx+=x;ny+=y;}x=nx;y=ny;points.push([x,y]);}
|
|
131
|
-
else if(upper==='H'){if(i>=parts.length||/^[a-z]$/i.test(parts[i]))break;x=Number(parts[i++])+(relative?x:0);points.push([x,y]);}
|
|
132
|
-
else if(upper==='V'){if(i>=parts.length||/^[a-z]$/i.test(parts[i]))break;y=Number(parts[i++])+(relative?y:0);points.push([x,y]);}
|
|
133
|
-
else if(upper==='Z')cmd='';
|
|
134
|
-
else {while(i<parts.length&&!/^[a-z]$/i.test(parts[i]))i++;cmd='';}
|
|
135
|
-
}
|
|
136
|
-
return points;
|
|
137
|
-
}
|
|
138
|
-
function markerDefinitions(svg){
|
|
139
|
-
const markers=new Map();
|
|
140
|
-
for(const match of svg.matchAll(/<marker\b([^>]*)>([\s\S]*?)<\/marker>/gi)){
|
|
141
|
-
const a=attributes(match[1]),id=a.id;if(!id)continue;
|
|
142
|
-
const points=[];
|
|
143
|
-
for(const shape of match[2].matchAll(/<(path|polygon)\b([^>]*)>/gi)){
|
|
144
|
-
const attrsForShape=attributes(shape[2]);
|
|
145
|
-
if(shape[1].toLowerCase()==='polygon'){
|
|
146
|
-
const values=(attrsForShape.points||'').match(/[-+]?(?:\d*\.\d+|\d+\.?\d*)(?:e[-+]?\d+)?/gi)||[];
|
|
147
|
-
for(let i=0;i+1<values.length;i+=2)points.push([Number(values[i]),Number(values[i+1])]);
|
|
148
|
-
}else if(attrsForShape.d){
|
|
149
|
-
points.push(...markerPathPoints(attrsForShape.d));
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
markers.set(id,{refX:Number(a.refX||0),refY:Number(a.refY||0),units:a.markerUnits||'strokeWidth',width:Number(a.markerWidth||0),height:Number(a.markerHeight||0),points,closed:/\bz\b/i.test(match[2])||/<polygon\b/i.test(match[2])});
|
|
153
|
-
}
|
|
154
|
-
return markers;
|
|
155
|
-
}
|
|
156
|
-
function markerOverlapsTarget(route,target,markers){
|
|
157
|
-
const match=route.markerEnd.match(/url\(\s*["']?#([^\s)'"`]+)["']?\s*\)/i),marker=match&&markers.get(match[1]),segment=route.segments.at(-1);
|
|
158
|
-
if(!segment)return false;
|
|
159
|
-
const [x1,y1,x2,y2]=segment,length=Math.hypot(x2-x1,y2-y1)||1,ux=(x2-x1)/length,uy=(y2-y1)/length,nx=-uy,ny=ux;
|
|
160
|
-
if(!marker?.points.length){const reach=route.strokeWidth;return segmentHitsBox([x2+ux*reach,y2+uy*reach,x2+ux*reach,y2+uy*reach],target,-1);}
|
|
161
|
-
const scale=marker.units==='userSpaceOnUse'?1:route.strokeWidth;
|
|
162
|
-
const points=marker.points.map(([x,y])=>[x2+ux*(x-marker.refX)*scale+nx*(y-marker.refY)*scale,y2+uy*(x-marker.refX)*scale+ny*(y-marker.refY)*scale]);
|
|
163
|
-
if(points.some(([x,y])=>x>target.x+1&&x<target.x+target.w-1&&y>target.y+1&&y<target.y+target.h-1))return true;
|
|
164
|
-
const segments=points.slice(1).map((point,index)=>[points[index][0],points[index][1],point[0],point[1]]);
|
|
165
|
-
if(marker.closed&&points.length>2)segments.push([points.at(-1)[0],points.at(-1)[1],points[0][0],points[0][1]]);
|
|
166
|
-
return segments.some((line)=>segmentHitsBox(line,target,-1));
|
|
167
|
-
}
|
|
168
|
-
function markerFor(route,edge,markers){
|
|
169
|
-
const value=edge==='end'?route.markerEnd:route.markerStart,match=value.match(/url\(\s*["']?#([^\s)'"`]+)["']?\s*\)/i);
|
|
170
|
-
return match?markers.get(match[1]):null;
|
|
171
|
-
}
|
|
172
|
-
function markerScale(marker,route){return marker.units==='userSpaceOnUse'?1:route.strokeWidth;}
|
|
173
|
-
function markerHeadLength(marker){
|
|
174
|
-
if(!marker?.points.length)return 0;
|
|
175
|
-
const xs=marker.points.map(([x])=>x);
|
|
176
|
-
return Math.max(...xs)-Math.min(...xs);
|
|
177
|
-
}
|
|
178
|
-
function markerTip(route,marker,edge){
|
|
179
|
-
const segment=edge==='end'?route.segments.at(-1):route.segments[0];
|
|
180
|
-
if(!segment)return null;
|
|
181
|
-
const [x1,y1,x2,y2]=segment,dx=x2-x1,dy=y2-y1,length=Math.hypot(dx,dy)||1,ux=dx/length,uy=dy/length;
|
|
182
|
-
const anchor=edge==='end'?[x2,y2]:[x1,y1],direction=edge==='end'?1:-1;
|
|
183
|
-
const forward=marker?.points.length?Math.max(...marker.points.map(([x])=>direction*(x-marker.refX)))*markerScale(marker,route):0;
|
|
184
|
-
return [anchor[0]+direction*ux*forward,anchor[1]+direction*uy*forward];
|
|
185
|
-
}
|
|
186
|
-
function distanceToBoxBoundary(point,box){
|
|
187
|
-
const [x,y]=point,candidates=[];
|
|
188
|
-
if(y>=box.y-ARROWHEAD_TARGET_TOLERANCE&&y<=box.y+box.h+ARROWHEAD_TARGET_TOLERANCE)candidates.push(Math.abs(x-box.x),Math.abs(x-(box.x+box.w)));
|
|
189
|
-
if(x>=box.x-ARROWHEAD_TARGET_TOLERANCE&&x<=box.x+box.w+ARROWHEAD_TARGET_TOLERANCE)candidates.push(Math.abs(y-box.y),Math.abs(y-(box.y+box.h)));
|
|
190
|
-
if(candidates.length)return Math.min(...candidates);
|
|
191
|
-
return Math.hypot(Math.max(box.x-x,0,x-(box.x+box.w)),Math.max(box.y-y,0,y-(box.y+box.h)));
|
|
192
|
-
}
|
|
193
|
-
function decisionBranchQuality(nodes,routes){
|
|
194
|
-
const issues=[];
|
|
195
|
-
for(const node of nodes.filter((item)=>item.type==='decision')){
|
|
196
|
-
if(node.outcomes.length<2){issues.push('DECISION_OUTCOMES_MISSING '+node.id+' must name at least two outcomes');continue;}
|
|
197
|
-
const labels=new Set(routes.filter((route)=>route.from===node.id).map((route)=>route.label).filter(Boolean));
|
|
198
|
-
for(const outcome of node.outcomes)if(!labels.has(outcome))issues.push('DECISION_OUTCOME_MISSING '+node.id+' '+outcome);
|
|
199
|
-
for(const label of labels)if(!node.outcomes.includes(label))issues.push('DECISION_OUTCOME_UNDECLARED '+node.id+' '+label);
|
|
200
|
-
}
|
|
201
|
-
return issues;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
function routeLength(route){return route.segments.reduce((sum,[x1,y1,x2,y2])=>sum+Math.hypot(x2-x1,y2-y1),0);}
|
|
205
|
-
function routeBends(route){
|
|
206
|
-
const directions=route.segments.map(([x1,y1,x2,y2])=>{const dx=x2-x1,dy=y2-y1,length=Math.hypot(dx,dy);return length?{x:dx/length,y:dy/length}:null;}).filter(Boolean);
|
|
207
|
-
let bends=0;
|
|
208
|
-
for(let i=1;i<directions.length;i++)if(directions[i-1].x*directions[i].x+directions[i-1].y*directions[i].y<Math.SQRT1_2)bends++;
|
|
209
|
-
return bends;
|
|
210
|
-
}
|
|
211
|
-
function routeManhattanDistance(route){
|
|
212
|
-
const start=route.segments[0]?.slice(0,2),end=route.segments.at(-1)?.slice(2,4);
|
|
213
|
-
return start&&end?Math.abs(start[0]-end[0])+Math.abs(start[1]-end[1])||null:null;
|
|
214
|
-
}
|
|
215
|
-
function alignedRouteKind(route,nodes){
|
|
216
|
-
const from=nodes.find((node)=>node.id===route.from),to=nodes.find((node)=>node.id===route.to);
|
|
217
|
-
if(!from||!to)return null;
|
|
218
|
-
const sameRow=Math.abs(from.y+from.h/2-(to.y+to.h/2))<=1,sameColumn=Math.abs(from.x+from.w/2-(to.x+to.w/2))<=1;
|
|
219
|
-
const horizontal=route.segments.every(([x1,y1,x2,y2])=>Math.abs(y1-y2)<=1),vertical=route.segments.every(([x1,y1,x2,y2])=>Math.abs(x1-x2)<=1);
|
|
220
|
-
if(sameRow&&nodes.every((node)=>node===from||node===to||Math.abs(node.y+node.h/2-(from.y+from.h/2))>1||node.x+node.w/2<=Math.min(from.x+from.w/2,to.x+to.w/2)||node.x+node.w/2>=Math.max(from.x+from.w/2,to.x+to.w/2))&&!horizontal)return 'same-row';
|
|
221
|
-
if(sameColumn&&nodes.every((node)=>node===from||node===to||Math.abs(node.x+node.w/2-(from.x+from.w/2))>1||node.y+node.h/2<=Math.min(from.y+from.h/2,to.y+to.h/2)||node.y+node.h/2>=Math.max(from.y+from.h/2,to.y+to.h/2))&&!vertical)return 'same-column';
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
function routeCrossesBoundary(route,outline){
|
|
225
|
-
const points=route.segments.flatMap(([x1,y1,x2,y2])=>[[x1,y1],[x2,y2],[(x1+x2)/2,(y1+y2)/2]]);
|
|
226
|
-
const inside=points.some(([x,y])=>x>outline.x&&x<outline.x+outline.w&&y>outline.y&&y<outline.y+outline.h);
|
|
227
|
-
const outside=points.some(([x,y])=>x<outline.x||x>outline.x+outline.w||y<outline.y||y>outline.y+outline.h);
|
|
228
|
-
return inside&&outside;
|
|
229
|
-
}
|
|
230
|
-
function collinearOverlap(a,b){
|
|
231
|
-
for(const [ax1,ay1,ax2,ay2] of a.segments)for(const [bx1,by1,bx2,by2] of b.segments){
|
|
232
|
-
if(Math.abs(ay1-ay2)<=.5&&Math.abs(by1-by2)<=.5&&Math.abs(ay1-by1)<12){if(Math.min(Math.max(ax1,ax2),Math.max(bx1,bx2))-Math.max(Math.min(ax1,ax2),Math.min(bx1,bx2))>=12)return true;}
|
|
233
|
-
if(Math.abs(ax1-ax2)<=.5&&Math.abs(bx1-bx2)<=.5&&Math.abs(ax1-bx1)<12){if(Math.min(Math.max(ay1,ay2),Math.max(by1,by2))-Math.max(Math.min(ay1,ay2),Math.min(by1,by2))>=12)return true;}
|
|
234
|
-
}
|
|
235
|
-
return false;
|
|
236
|
-
}
|
|
237
|
-
function segmentIntersectionPoint(a,b){
|
|
238
|
-
const rx=a[2]-a[0],ry=a[3]-a[1],sx=b[2]-b[0],sy=b[3]-b[1],denominator=rx*sy-ry*sx;
|
|
239
|
-
if(Math.abs(denominator)<1e-8)return null;
|
|
240
|
-
const qx=b[0]-a[0],qy=b[1]-a[1],t=(qx*sy-qy*sx)/denominator,u=(qx*ry-qy*rx)/denominator;
|
|
241
|
-
if(t< -1e-8||t>1+1e-8||u< -1e-8||u>1+1e-8)return null;
|
|
242
|
-
return [a[0]+t*rx,a[1]+t*ry];
|
|
243
|
-
}
|
|
244
|
-
function routeEndpoints(route){
|
|
245
|
-
return [{id:route.from,point:route.segments[0].slice(0,2)},{id:route.to,point:route.segments.at(-1).slice(2,4)}];
|
|
246
|
-
}
|
|
247
|
-
function routeCrossingPoints(a,b){
|
|
248
|
-
const aEnds=routeEndpoints(a),bEnds=routeEndpoints(b),points=[];
|
|
249
|
-
for(const first of a.segments)for(const second of b.segments){
|
|
250
|
-
const point=segmentIntersectionPoint(first,second);
|
|
251
|
-
if(!point)continue;
|
|
252
|
-
const sharedNodeEndpoint=aEnds.some((left)=>bEnds.some((right)=>left.id===right.id&&Math.hypot(left.point[0]-right.point[0],left.point[1]-right.point[1])<=.5&&Math.hypot(left.point[0]-point[0],left.point[1]-point[1])<=.5));
|
|
253
|
-
if(sharedNodeEndpoint||points.some((prior)=>Math.hypot(prior[0]-point[0],prior[1]-point[1])<=.5))continue;
|
|
254
|
-
points.push(point);
|
|
255
|
-
}
|
|
256
|
-
return points;
|
|
257
|
-
}
|
|
258
|
-
function sequenceQuality(source,svg=svgContent(source),nodes=rectangles(svg),routes=parseRoutes(svg)){
|
|
259
|
-
if(!/\bdata-type\s*=\s*["']sequence(?:-oauth)?["']/i.test(source)&&!/\bid\s*=\s*["']diagram-sequence(?:-oauth)?-[^"']+["']/i.test(svg))return [];
|
|
260
|
-
const lifelines=new Map();
|
|
261
|
-
for(const match of svg.matchAll(/<line\b([^>]*)>/gi)){
|
|
262
|
-
const a=attributes(match[1]),name=a['data-lifeline-for'];
|
|
263
|
-
if(name&&a['stroke-dasharray']&&Number(a.x1)===Number(a.x2)&&Number(a.y2)>Number(a.y1))lifelines.set(name,{x:Number(a.x1),top:Number(a.y1),bottom:Number(a.y2)});
|
|
264
|
-
}
|
|
265
|
-
const issues=[],messages=routes.map((route)=>({route,start:route.segments[0].slice(0,2),end:route.segments.at(-1).slice(2,4),y:(route.segments[0][1]+route.segments.at(-1)[3])/2}));
|
|
266
|
-
const lastMessageY=Math.max(0,...messages.map((message)=>message.y));
|
|
267
|
-
for(const node of nodes){
|
|
268
|
-
const line=lifelines.get(node.id);
|
|
269
|
-
if(!line){issues.push('SEQUENCE_LIFELINE_MISSING '+node.id);continue;}
|
|
270
|
-
if(Math.abs(line.x-(node.x+node.w/2))>1||Math.abs(line.top-(node.y+node.h))>1)issues.push('SEQUENCE_LIFELINE_ALIGNMENT '+node.id);
|
|
271
|
-
if(line.bottom+1<lastMessageY)issues.push('SEQUENCE_LIFELINE_SHORT '+node.id+' ends before last message');
|
|
272
|
-
}
|
|
273
|
-
let previousY=-Infinity;
|
|
274
|
-
for(const message of messages){
|
|
275
|
-
const from=lifelines.get(message.route.from),to=lifelines.get(message.route.to);
|
|
276
|
-
if(!from||!to)continue;
|
|
277
|
-
if(Math.abs(message.start[0]-from.x)>1||Math.abs(message.end[0]-to.x)>1)issues.push('SEQUENCE_MESSAGE_OFF_LIFELINE '+message.route.from+'->'+message.route.to);
|
|
278
|
-
if(message.y<=previousY)issues.push('SEQUENCE_MESSAGE_ORDER '+message.route.from+'->'+message.route.to+' is not top-to-bottom');
|
|
279
|
-
previousY=message.y;
|
|
280
|
-
}
|
|
281
|
-
return issues;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function visualQuality(source,{enforceCanvas=false,scale=null}={}){
|
|
285
|
-
const svg=svgContent(source),texts=visibleSvgText(svg),nodes=rectangles(svg),routes=parseRoutes(svg),outlines=boundaryOutlines(svg),markers=markerDefinitions(svg),metrics=sourceMetrics(source),issues=[],sequenceDiagram=/\bdata-type\s*=\s*["']sequence(?:-oauth)?["']/i.test(source);
|
|
286
|
-
const contaminated=texts.filter((t)=>contamination.some((rule)=>rule.test(t.label))).map((t)=>t.label);
|
|
287
|
-
if(contaminated.length)issues.push('PROCESS_TEXT '+[...new Set(contaminated)].join(' | '));
|
|
288
|
-
for(const text of texts.filter((item)=>item.role==='edge'||item.edgeFor)){
|
|
289
|
-
const matches=routes.filter((route)=>route.from+'|'+route.to===text.edgeFor&&(!route.label||route.label===text.label));
|
|
290
|
-
if(!text.edgeFor||matches.length!==1){issues.push('EDGE_LABEL_UNBOUND '+(text.edgeFor||text.label));continue;}
|
|
291
|
-
const own=matches[0],distance=routeDistance(text.anchor,own),nearestOther=Math.min(Infinity,...routes.filter((route)=>route!==own).map((route)=>routeDistance(text.anchor,route)));
|
|
292
|
-
if(distance>MAX_EDGE_LABEL_ANCHOR_DISTANCE)issues.push('EDGE_LABEL_TOO_FAR '+text.label+' own='+distance.toFixed(1)+'px max='+MAX_EDGE_LABEL_ANCHOR_DISTANCE+'px');
|
|
293
|
-
if(Number.isFinite(nearestOther)&&distance>=nearestOther)issues.push('EDGE_LABEL_NEAREST_PATH '+text.label+' own='+distance.toFixed(1)+'px other='+nearestOther.toFixed(1)+'px');
|
|
294
|
-
for(const node of nodes)if(textOverlapsNode(text,node))issues.push('EDGE_LABEL_NODE_COLLISION '+text.label+' overlaps '+node.id);
|
|
295
|
-
}
|
|
296
|
-
for(const route of routes){
|
|
297
|
-
const facing=routeManhattanDistance(route),ratio=facing?routeLength(route)/facing:null,aligned=alignedRouteKind(route,nodes);
|
|
298
|
-
if(ratio>1.4)issues.push('ROUTE_DETOUR '+route.from+'->'+route.to+' ratio='+ratio.toFixed(2)+' max=1.40');
|
|
299
|
-
if(aligned)issues.push('ROUTE_ALIGNED_PATH '+route.from+'->'+route.to+' '+aligned+' neighbors require one straight segment');
|
|
300
|
-
const crossesBoundary=outlines.some((outline)=>routeCrossesBoundary(route,outline)),bendLimit=crossesBoundary?3:2,bends=routeBends(route);
|
|
301
|
-
if(bends>bendLimit)issues.push('ROUTE_BENDS '+route.from+'->'+route.to+' bends='+bends+' max='+bendLimit);
|
|
302
|
-
if(route.markerStart&&route.markerEnd)issues.push('ROUTE_OPPOSED_HEADS '+route.from+'->'+route.to);
|
|
303
|
-
for(const text of texts)for(const segment of route.segments)if(segmentHitsText(segment,text)){issues.push('EDGE_TEXT_COLLISION '+route.from+'->'+route.to+': '+text.label);break;}
|
|
304
|
-
for(const node of nodes)if(node.id!==route.from&&node.id!==route.to&&route.segments.some((s)=>segmentHitsBox(s,node,8)))issues.push('ROUTE_THROUGH_NODE '+route.from+'->'+route.to+' via '+node.id);
|
|
305
|
-
for(const outline of outlines)if(route.segments.some((segment)=>segmentAlongOutline(segment,outline))){issues.push('ROUTE_ALONG_BOUNDARY '+route.from+'->'+route.to+' along '+outline.id);break;}
|
|
306
|
-
const target=nodes.find((node)=>node.id===route.to);
|
|
307
|
-
for(const edge of ['start','end'])if(edge==='end'?route.markerEnd:route.markerStart){
|
|
308
|
-
const marker=markerFor(route,edge,markers),minimum=Math.max(ARROWHEAD_STROKE_MULTIPLE*route.strokeWidth,ARROWHEAD_CANVAS_FLOOR*(metrics.viewBox?.w||1080));
|
|
309
|
-
const length=markerHeadLength(marker)*markerScale(marker||{units:'userSpaceOnUse'},route);
|
|
310
|
-
if(!marker)issues.push('ARROWHEAD_GEOMETRY_MISSING '+route.from+'->'+route.to+' '+edge);
|
|
311
|
-
else if(length+0.01<minimum)issues.push('ARROWHEAD_SIZE_FLOOR '+route.from+'->'+route.to+' '+edge+'='+length.toFixed(1)+'px min='+minimum.toFixed(1)+'px (12/1080 canvas, 5x stroke)');
|
|
312
|
-
}
|
|
313
|
-
if(route.markerEnd&&target&&!sequenceDiagram){
|
|
314
|
-
const marker=markerFor(route,'end',markers),tip=markerTip(route,marker,'end');
|
|
315
|
-
if(tip&&distanceToBoxBoundary(tip,target)>ARROWHEAD_TARGET_TOLERANCE)issues.push('ARROWHEAD_TIP_MISSED_TARGET '+route.from+'->'+route.to+' gap='+distanceToBoxBoundary(tip,target).toFixed(1)+'px max='+ARROWHEAD_TARGET_TOLERANCE+'px');
|
|
316
|
-
}
|
|
317
|
-
if(route.markerEnd&&target&&markerOverlapsTarget(route,target,markers))issues.push('ARROWHEAD_TARGET_OVERLAP '+route.from+'->'+route.to+' marker intersects target '+target.id);
|
|
318
|
-
}
|
|
319
|
-
issues.push(...decisionBranchQuality(nodes,routes));
|
|
320
|
-
issues.push(...officeQuality(svg,nodes,texts,outlines));
|
|
321
|
-
for(let i=0;i<routes.length;i++)for(let j=i+1;j<routes.length;j++){
|
|
322
|
-
if(collinearOverlap(routes[i],routes[j]))issues.push('ROUTE_COLLINEAR_OVERLAP '+routes[i].from+'->'+routes[i].to+' / '+routes[j].from+'->'+routes[j].to+' shared within 12px');
|
|
323
|
-
for(const point of routeCrossingPoints(routes[i],routes[j]))issues.push('ROUTE_CROSSING '+routes[i].from+'->'+routes[i].to+' / '+routes[j].from+'->'+routes[j].to+' at '+point[0].toFixed(1)+','+point[1].toFixed(1));
|
|
324
|
-
}
|
|
325
|
-
issues.push(...sequenceQuality(source,svg,nodes,routes));
|
|
326
|
-
for(const text of texts)for(const outline of outlines)if(textHitsOutline(text,outline)){issues.push('OUTLINE_TEXT_COLLISION '+text.label+' crosses '+outline.id);break;}
|
|
327
|
-
const boundaryTexts=texts.filter((text)=>isBoundaryLabel(text,outlines));
|
|
328
|
-
const boundaryContrastFailures=boundaryTexts.filter((text)=>metrics.contrastFailures.some((failure)=>failure.text===text.label));
|
|
329
|
-
for(const text of boundaryContrastFailures)issues.push('BOUNDARY_CONTRAST_FLOOR '+text.label+' below 4.5:1');
|
|
330
|
-
for(let i=0;i<nodes.length;i++)for(let j=i+1;j<nodes.length;j++)if(gap(nodes[i],nodes[j])<12)issues.push('NODE_GAP '+nodes[i].id+'/'+nodes[j].id+' below 12px');
|
|
331
|
-
const fontFailures=[];
|
|
332
|
-
if(enforceCanvas){
|
|
333
|
-
const ratio=scale??(metrics.viewBox?Math.min(metrics.viewBox.w/1080,metrics.viewBox.h/640):1);
|
|
334
|
-
if(!texts.some((t)=>t.role==='title'))issues.push('TITLE_ROLE_MISSING visible title must use data-role="title"');
|
|
335
|
-
for(const t of texts){const boundary=isBoundaryLabel(t,outlines),minimum=t.role==='title'?28:t.role==='edge'||boundary?13:t.role==='node'?15:0;if(minimum&&t.size+0.01<minimum*ratio){const failure=(boundary?'boundary':t.role)+':'+t.label+'='+t.size+'px (min '+(minimum*ratio).toFixed(1)+'px)';if(boundary)issues.push('BOUNDARY_FONT_FLOOR '+failure);else fontFailures.push(failure);}}
|
|
336
|
-
if(fontFailures.length)issues.push('FONT_FLOOR '+fontFailures.join(' | '));
|
|
337
|
-
const points=nodes.flatMap((n)=>[[n.x,n.y],[n.x+n.w,n.y+n.h]]).concat(routes.flatMap((r)=>r.segments.flatMap((s)=>[[s[0],s[1]],[s[2],s[3]]])));
|
|
338
|
-
const box=points.reduce((b,p)=>({left:Math.min(b.left,p[0]),top:Math.min(b.top,p[1]),right:Math.max(b.right,p[0]),bottom:Math.max(b.bottom,p[1])}),{left:Infinity,top:Infinity,right:-Infinity,bottom:-Infinity});
|
|
339
|
-
if(nodes.length&&metrics.viewBox){const safeWidth=metrics.viewBox.w*.90,safeHeight=metrics.viewBox.h*.74,width=(box.right-box.left)/safeWidth,height=(box.bottom-box.top)/safeHeight;if(width<.75||height<.54)issues.push('CONTENT_FILL safe-area-width='+width.toFixed(3)+' safe-area-height='+height.toFixed(3)+' minimum=.75/.54');}
|
|
340
|
-
if(!nodes.length)issues.push('CONTENT_NODES_MISSING');
|
|
341
|
-
}
|
|
342
|
-
return {issues,contaminated,fonts:fontFailures,nodes:nodes.length,edges:routes.length,edgeLabelMaxAnchorDistance:MAX_EDGE_LABEL_ANCHOR_DISTANCE,arrowheadFloor:{canvas:ARROWHEAD_CANVAS_FLOOR,strokeMultiple:ARROWHEAD_STROKE_MULTIPLE,targetTolerance:ARROWHEAD_TARGET_TOLERANCE},boundaryTexts:boundaryTexts.length};
|
|
343
|
-
}
|
|
344
|
-
export { visualQuality, visibleSvgText, parseRoutes, rectangles, boundaryOutlines, sequenceQuality };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 wjgoarxiv
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
The publisher-docx engine and templates are user-authored work by wjgoarxiv, provided under the MIT License in this directory. This LitGrok port adapts its entry points and guidance to Grok Build.
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 본사 옥상 태양광 설비 1년 운영 결과
|
|
3
|
-
subtitle: 2025년 10월~2026년 9월 발전 실적, 전기요금 절감과 2027년 보완 계획
|
|
4
|
-
author: 시설관리팀 에너지파트
|
|
5
|
-
organization: 예시 주식회사
|
|
6
|
-
date: 2026-10-05
|
|
7
|
-
short_title: 옥상 태양광 1년 운영 결과
|
|
8
|
-
notice: "예시 데이터: 회사명, 설비 용량, 금액은 모두 가정입니다. 실제 수치로 바꿔 주세요"
|
|
9
|
-
tonality: Report
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
::: cover variant=masthead kicker="운영 결과 보고"
|
|
13
|
-
본사 옥상 태양광 설비를 가동한 첫 1년의 발전량, 자가소비 비율, 전기요금 절감액, 고장 이력을 정리하고 2027년 보완 공사와 예산 요청을 함께 담았다.
|
|
14
|
-
:::
|
|
15
|
-
|
|
16
|
-
# 요약
|
|
17
|
-
|
|
18
|
-
옥상 태양광 설비는 1년 동안 312MWh를 생산해 본사 연간 전력 사용량의 8.4%를 대체했다. 설계 단계에서 예측한 발전량 298MWh보다 4.7% 많다. 생산한 전력은 대부분 건물 안에서 바로 썼고, 휴일 낮에 남은 전력만 한전 계통으로 보냈다.
|
|
19
|
-
|
|
20
|
-
::: keyfigures
|
|
21
|
-
- **312MWh** 연간 발전량 (예시)
|
|
22
|
-
* 2025. 10.~2026. 9. 인버터 누적 기록
|
|
23
|
-
- **8.4%** 본사 전력 사용량 대비 (예시)
|
|
24
|
-
* 같은 기간 수전 계량기 기준
|
|
25
|
-
- **4,180만 원** 전기요금 절감액 (예시)
|
|
26
|
-
* 계시별 요금 적용, 부가세 제외
|
|
27
|
-
:::
|
|
28
|
-
|
|
29
|
-
절감액은 투자비 회수 계획의 연간 목표 3,900만 원을 넘었다. 다만 여름철 한낮에 모듈 온도가 올라 출력이 떨어지는 시간이 예상보다 길었고, 동쪽 구역 인버터 1대가 두 차례 멈춰 11일 동안 발전량 손실이 있었다. 2027년 상반기에 인버터 교체와 모듈 세척 주기 조정을 진행하며, 이에 필요한 예산 2,600만 원의 승인을 요청한다.
|
|
30
|
-
|
|
31
|
-
# 설비 개요
|
|
32
|
-
|
|
33
|
-
## 설치 규모와 구성
|
|
34
|
-
|
|
35
|
-
설비는 본관과 별관 옥상 두 곳에 나뉘어 있다. 본관에는 모듈 540장(설비 용량 248kW), 별관에는 모듈 160장(73kW)이 남향 15도 경사로 놓였다. 인버터는 본관 4대, 별관 1대이며, 각 인버터의 출력은 지하 2층 수전반에서 건물 부하와 합쳐진다.
|
|
36
|
-
|
|
37
|
-
표 1. 구역별 설비 구성 (예시)
|
|
38
|
-
|
|
39
|
-
| 구분 | 본관 옥상 | 별관 옥상 | 합계 |
|
|
40
|
-
| --- | ---: | ---: | ---: |
|
|
41
|
-
| 모듈 수 (장) | 540 | 160 | 700 |
|
|
42
|
-
| 설비 용량 (kW) | 248 | 73 | 321 |
|
|
43
|
-
| 인버터 (대) | 4 | 1 | 5 |
|
|
44
|
-
| 설치 면적 (㎡) | 1,620 | 480 | 2,100 |
|
|
45
|
-
|
|
46
|
-
자료: 시설관리팀 준공 도서(2025. 9.)
|
|
47
|
-
|
|
48
|
-
## 계량과 기록 방식
|
|
49
|
-
|
|
50
|
-
발전량은 인버터별 누적 계량값을 15분 간격으로 원격 수집한다. 건물 사용량은 한전 수전 계량기와 내부 부하 계량기를 함께 읽는다. 두 값의 차이로 자가소비량과 역송량을 계산하며, 월말에 한전 청구서와 대조해 오차가 1%를 넘으면 원인을 찾는다. 1년 동안 오차가 1%를 넘은 달은 2026년 2월 한 번뿐이었고, 원인은 계량기 통신 장애로 확인했다.
|
|
51
|
-
|
|
52
|
-
# 발전 실적
|
|
53
|
-
|
|
54
|
-
## 월별 발전량
|
|
55
|
-
|
|
56
|
-
발전량은 5월에 가장 많았고 12월에 가장 적었다. 일사량이 가장 많은 달은 6월이었지만, 장마가 일찍 시작된 데다 모듈 온도가 높아 5월 실적에 못 미쳤다. 겨울철에는 해가 낮아 별관 옥상 일부가 본관 그림자에 가렸다. 아래 표의 예측값은 설계 시뮬레이션의 월별 값을 분기로 합한 것이다.
|
|
57
|
-
|
|
58
|
-
표 2. 분기별 발전량과 예측 대비 실적 (예시)
|
|
59
|
-
|
|
60
|
-
| 분기 | 예측 (MWh) | 실적 (MWh) | 예측 대비 (%) |
|
|
61
|
-
| --- | ---: | ---: | ---: |
|
|
62
|
-
| 2025년 4분기 | 58 | 61 | 105.2 |
|
|
63
|
-
| 2026년 1분기 | 66 | 69 | 104.5 |
|
|
64
|
-
| 2026년 2분기 | 94 | 101 | 107.4 |
|
|
65
|
-
| 2026년 3분기 | 80 | 81 | 101.3 |
|
|
66
|
-
| 합계 | 298 | 312 | 104.7 |
|
|
67
|
-
|
|
68
|
-
자료: 인버터 원격 감시 기록
|
|
69
|
-
|
|
70
|
-
3분기 실적이 예측과 거의 같았던 것은 8월 인버터 정지의 영향이다. 정지가 없었다면 3분기 실적은 약 85MWh로 추정되며, 이 경우 연간 실적은 예측보다 6% 정도 많았을 것이다.
|
|
71
|
-
|
|
72
|
-
## 자가소비와 역송
|
|
73
|
-
|
|
74
|
-
생산 전력의 93%를 건물 안에서 바로 썼다. 평일 낮에는 사무 부하와 냉방 부하가 발전량보다 커서 남는 전력이 거의 없다. 역송은 주로 토요일과 공휴일 낮에 생겼고, 1년 동안 모두 22MWh였다. 역송 전력은 상계 거래로 처리해 다음 달 요금에서 차감했다.
|
|
75
|
-
|
|
76
|
-
## 효율 저하 요인
|
|
77
|
-
|
|
78
|
-
출력을 깎은 요인은 세 가지였다. 첫째는 여름철 모듈 온도다. 7월과 8월 한낮에 모듈 표면 온도가 65도를 넘은 시간이 하루 평균 3.2시간이었고, 이 시간대 출력은 정격의 78% 수준에 머물렀다. 둘째는 먼지와 새 배설물이다. 봄철 황사 이후 세척 전후의 출력 차이가 4% 안팎으로 측정됐다. 셋째는 겨울철 별관 그림자로, 12월과 1월 오전 10시 이전에는 별관 모듈 중 40장 정도가 그늘에 들었다.
|
|
79
|
-
|
|
80
|
-
# 비용과 절감 효과
|
|
81
|
-
|
|
82
|
-
## 전기요금 절감액
|
|
83
|
-
|
|
84
|
-
절감액은 자가소비량에 해당 시간대 요금 단가를 곱한 값과 상계 처리된 역송 금액을 더해 계산했다. 여름철 낮 시간대 단가가 높아 6~8월 세 달의 절감액이 연간 절감액의 36%를 차지했다.
|
|
85
|
-
|
|
86
|
-
표 3. 절감액과 운영비 (예시)
|
|
87
|
-
|
|
88
|
-
| 항목 | 금액 (만 원) | 비고 |
|
|
89
|
-
| --- | ---: | --- |
|
|
90
|
-
| 자가소비 절감액 | 3,890 | 계시별 단가 적용 |
|
|
91
|
-
| 역송 상계 금액 | 290 | 22MWh |
|
|
92
|
-
| 유지보수 계약비 | 480 | 연 1회 정밀 점검 포함 |
|
|
93
|
-
| 모듈 세척비 | 120 | 연 3회 |
|
|
94
|
-
| 순절감액 | 3,580 | 절감액에서 운영비를 뺀 값 |
|
|
95
|
-
|
|
96
|
-
자료: 재무팀 전기요금 정산 자료, 시설관리팀 계약 대장
|
|
97
|
-
|
|
98
|
-
## 투자비 회수 전망
|
|
99
|
-
|
|
100
|
-
설치 투자비는 5억 1,000만 원이었다. 첫해 순절감액 3,580만 원이 그대로 유지된다고 보면 회수에는 약 14년이 걸린다. 그러나 전기요금 단가는 2026년에만 두 차례 올랐고, 모듈 출력은 해마다 0.5% 정도씩 낮아진다. 두 요인을 함께 넣은 재무팀 추정으로는 회수 기간이 12~13년이다.
|
|
101
|
-
|
|
102
|
-
::: callout kind=note title="회수 기간 추정의 전제"
|
|
103
|
-
요금 단가는 연 3% 상승, 모듈 출력은 연 0.5% 저하, 유지보수비는 연 2% 상승을 가정했다. 단가 상승률이 연 1%에 그치면 회수 기간은 15년으로 늘어난다.
|
|
104
|
-
:::
|
|
105
|
-
|
|
106
|
-
# 운영상 문제와 대응
|
|
107
|
-
|
|
108
|
-
## 인버터 정지
|
|
109
|
-
|
|
110
|
-
동쪽 구역 3번 인버터가 2026년 3월과 8월 두 차례 과열 경보로 멈췄다. 3월에는 하루 만에 재가동했지만, 8월에는 냉각 팬 부품을 해외에서 들여오느라 10일이 걸렸다. 국내 재고가 없었다. 두 번의 정지로 잃은 발전량은 약 5MWh, 금액으로는 70만 원 정도다. 제조사는 같은 모델의 냉각 팬 결함을 인정하고 2027년 1분기 안에 무상 교체를 약속했다. 그러나 팬만 바꾸면 설치 위치의 환기 부족은 그대로 남는다.
|
|
111
|
-
|
|
112
|
-
## 세척 주기
|
|
113
|
-
|
|
114
|
-
계약상 세척은 연 3회(3월, 6월, 10월)였다. 문제는 시기다. 황사가 심했던 4월과 꽃가루가 많았던 5월 사이에는 세척 전후 출력 차이가 4%를 넘었다. 세척 시기를 황사 직후로 옮기고 여름 장마 전 한 번을 추가하면, 연간 발전량이 1.5% 정도 늘 것으로 본다. 세척 업체와는 2026년 12월 계약 갱신 때 횟수와 시기를 함께 바꾸기로 협의했고, 추가 1회 비용은 기존 단가인 회당 40만 원을 그대로 적용하기로 했으며, 황사 특보가 사흘 이상 이어진 주에는 업체가 먼저 일정을 제안하도록 계약서에 넣기로 했다.
|
|
115
|
-
|
|
116
|
-
## 안전 관리
|
|
117
|
-
|
|
118
|
-
옥상 출입은 시설관리팀 승인을 받은 인원만 가능하고, 출입 기록은 보안실 출입 통제 시스템에 남는다. 1년 동안 안전사고는 없었다. 외부 세척 업체 작업자도 작업 당일 현장 안전교육을 받고 추락 방지 장비를 점검받은 뒤에만 옥상에 올라갔으며, 교육 기록과 장비 점검표는 시설관리팀이 작업일마다 받아 보관했다. 다만 별관 옥상 난간 높이가 기준보다 10cm 낮아 2026년 6월에 임시 안전망을 설치했다.
|
|
119
|
-
|
|
120
|
-
# 2027년 보완 계획과 예산
|
|
121
|
-
|
|
122
|
-
## 보완 과제
|
|
123
|
-
|
|
124
|
-
보완 과제는 세 가지다. 3번 인버터를 환기가 되는 위치로 옮기면서 냉각 팬을 교체하고, 세척 주기를 연 4회로 늘리며, 별관 옥상 난간을 기준 높이로 높인다. 그늘 문제는 모듈 배치를 바꿔야 해결되므로 비용 대비 효과를 따져 2028년에 다시 검토한다.
|
|
125
|
-
|
|
126
|
-
표 4. 2027년 보완 예산 요청 (예시)
|
|
127
|
-
|
|
128
|
-
| 과제 | 시기 | 금액 (만 원) |
|
|
129
|
-
| --- | --- | ---: |
|
|
130
|
-
| 3번 인버터 이설과 환기 덕트 | 2027년 1분기 | 1,450 |
|
|
131
|
-
| 세척 1회 추가(연 4회) | 2027년 6월 | 40 |
|
|
132
|
-
| 별관 옥상 난간 보강 | 2027년 2분기 | 1,110 |
|
|
133
|
-
| 합계 | | 2,600 |
|
|
134
|
-
|
|
135
|
-
## 기대 효과
|
|
136
|
-
|
|
137
|
-
인버터 이설과 세척 주기 조정으로 연간 발전량이 2~3% 늘면, 절감액은 연 80만~120만 원 정도 늘어난다. 금액만 보면 크지 않다. 그러나 같은 고장이 되풀이되면 한 번에 10일 이상 발전이 멈출 수 있고, 난간 보강은 법정 안전 기준을 맞추기 위한 공사다. 예산이 승인되면 2027년 1월에 업체를 선정하고, 공사는 발전량이 적은 2월 안에 마친다.
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: 사내 메신저 전환 검토 보고
|
|
3
|
-
subtitle: 현행 계약 만료에 따른 대안 비교와 2027년 1분기 전환안
|
|
4
|
-
author: 정보전략팀
|
|
5
|
-
organization: 예시 공사
|
|
6
|
-
date: 2026-10-05
|
|
7
|
-
short_title: 사내 메신저 전환 검토
|
|
8
|
-
notice: "예시 데이터: 기관명, 인원, 금액은 모두 가정입니다. 실제 수치로 바꿔 주세요"
|
|
9
|
-
tonality: Brief
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
::: cover variant=masthead kicker="검토 보고"
|
|
13
|
-
:::
|
|
14
|
-
|
|
15
|
-
::: callout kind=key title="결정 요청"
|
|
16
|
-
현행 메신저 계약을 연장하지 않고 2027년 3월 말까지 그룹웨어 내장 메신저(안 2)로 전환하는 안, 그리고 전환 비용 3,200만 원(예시)을 2026년 4분기 정보화 예비비에서 집행하는 안의 승인을 요청한다.
|
|
17
|
-
:::
|
|
18
|
-
|
|
19
|
-
# 요약
|
|
20
|
-
|
|
21
|
-
안 2로 전환하면 3년간 1억 1,400만 원을 아낀다. 현행 메신저를 3년 더 쓰는 비용은 2억 400만 원이고, 그룹웨어 내장 메신저는 전환비를 포함해 9,000만 원이다(예시).
|
|
22
|
-
|
|
23
|
-
기능 손실은 크지 않다. 직원 1,240명의 최근 6개월 사용 기록을 보면 대화, 파일 전송, 화상 통화가 전체 사용의 96%를 차지하며, 세 기능 모두 내장 메신저에 있다.
|
|
24
|
-
|
|
25
|
-
보안 요건도 충족한다. 내장 메신저는 사내 서버에 대화를 저장하고, 2026년 8월 보안 진단에서 지적 사항 없이 통과했다.
|
|
26
|
-
|
|
27
|
-
위험은 전환 기간의 혼선이다. 대화 기록 이관과 외부 협력사 계정 재발급에 6주가 걸리므로, 2027년 1월 첫 주에 착수해야 3월 말 계약 만료 전에 끝난다.
|
|
28
|
-
|
|
29
|
-
# 검토 배경
|
|
30
|
-
|
|
31
|
-
- 현행 메신저 계약 만료일 2027. 3. 31., 연장 시 사용료 연 18% 인상 통보 받음
|
|
32
|
-
- 그룹웨어는 2025년 교체 때 메신저 기능을 포함해 계약, 현재 사용하지 않는 상태
|
|
33
|
-
- 두 메신저를 함께 쓰는 부서가 생겨 업무 요청 누락 사례가 분기마다 보고됨
|
|
34
|
-
- 2026년 7월 경영진 회의에서 메신저 일원화 검토를 지시
|
|
35
|
-
|
|
36
|
-
# 대안 비교
|
|
37
|
-
|
|
38
|
-
표 1. 대안별 3년 비용과 주요 특성 (예시)
|
|
39
|
-
|
|
40
|
-
| 구분 | 안 1 현행 연장 | 안 2 그룹웨어 내장 | 안 3 신규 도입 |
|
|
41
|
-
| --- | ---: | ---: | ---: |
|
|
42
|
-
| 3년 사용료 (만 원) | 20,400 | 5,800 | 13,500 |
|
|
43
|
-
| 전환비 (만 원) | 0 | 3,200 | 4,600 |
|
|
44
|
-
| 3년 합계 (만 원) | 20,400 | 9,000 | 18,100 |
|
|
45
|
-
| 대화 서버 위치 | 외부 | 사내 | 외부 |
|
|
46
|
-
| 전환 기간 | 없음 | 6주 | 10주 |
|
|
47
|
-
|
|
48
|
-
자료: 업체 견적(2026. 9.), 정보전략팀 산출
|
|
49
|
-
|
|
50
|
-
- 안 1은 전환 부담이 없으나 비용이 가장 크고, 인상분이 매년 반복될 가능성 있음
|
|
51
|
-
- 안 2는 비용이 가장 적고 대화가 사내 서버에 남음. 화면 공유 중 원격 제어 기능은 없으나 사용 비중 0.4%로 원격 지원 도구로 대체 가능
|
|
52
|
-
- 안 3은 기능이 가장 많으나 비용과 전환 기간 모두 안 2보다 불리함
|
|
53
|
-
|
|
54
|
-
# 전환 일정과 위험
|
|
55
|
-
|
|
56
|
-
## 추진 일정
|
|
57
|
-
|
|
58
|
-
- 2027년 1월 1주: 전환 공지, 부서별 담당자 지정
|
|
59
|
-
- 2027년 1월 2~4주: 최근 1년 대화 기록 이관, 협력사 계정 380개 재발급
|
|
60
|
-
- 2027년 2월: 두 메신저 병행 운영, 현행 메신저는 읽기 전용으로 전환
|
|
61
|
-
- 2027년 3월 2주: 현행 메신저 종료, 3월 말 계약 만료
|
|
62
|
-
|
|
63
|
-
## 위험 대응
|
|
64
|
-
|
|
65
|
-
- 대화 기록 이관 누락: 이관 전후 건수를 부서별로 대조하고, 원본은 계약 만료 후 1년간 보관
|
|
66
|
-
- 협력사 계정 재발급 지연: 협력사별 담당자 목록을 12월 중 먼저 확보
|
|
67
|
-
- 병행 기간의 요청 누락: 2월부터 업무 요청은 내장 메신저로만 받도록 부서장 회의에서 공지
|
|
68
|
-
|
|
69
|
-
# 소요 예산
|
|
70
|
-
|
|
71
|
-
표 2. 전환 비용 내역 (예시)
|
|
72
|
-
|
|
73
|
-
| 항목 | 금액 (만 원) |
|
|
74
|
-
| --- | ---: |
|
|
75
|
-
| 대화 기록 이관 용역 | 1,800 |
|
|
76
|
-
| 협력사 계정 발급과 인증 설정 | 700 |
|
|
77
|
-
| 사용자 교육과 안내 자료 | 400 |
|
|
78
|
-
| 예비비 | 300 |
|
|
79
|
-
| 합계 | 3,200 |
|
|
80
|
-
|
|
81
|
-
- 집행 재원: 2026년 4분기 정보화 예비비(잔액 5,100만 원)
|
|
82
|
-
- 2027년 이후 사용료는 그룹웨어 유지보수 계약에 포함
|