@litfamily/litopencode 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +8 -0
- package/ATTRIBUTION.md +56 -0
- package/CHANGELOG.md +267 -0
- package/CODE_OF_CONDUCT.md +30 -0
- package/CONTRIBUTING.md +82 -0
- package/LICENSE +21 -0
- package/README-Ko-KR.md +252 -0
- package/README.md +252 -0
- package/SECURITY.md +36 -0
- package/SUPPORT.md +37 -0
- package/bin/litopencode +3 -0
- package/bin/litopencode.cjs +10 -0
- package/dist/activation-managed-prompts.d.ts +2 -0
- package/dist/activation-managed-prompts.js +51 -0
- package/dist/activation-primary-prompts.d.ts +2 -0
- package/dist/activation-primary-prompts.js +176 -0
- package/dist/activation-probe.d.ts +3 -0
- package/dist/activation-probe.js +19 -0
- package/dist/activation-prompt-utils.d.ts +6 -0
- package/dist/activation-prompt-utils.js +36 -0
- package/dist/activation-routing.d.ts +5 -0
- package/dist/activation-routing.js +340 -0
- package/dist/activation-workflow-prompts.d.ts +26 -0
- package/dist/activation-workflow-prompts.js +295 -0
- package/dist/activation.d.ts +24 -0
- package/dist/activation.js +152 -0
- package/dist/agents/defaults.d.ts +15 -0
- package/dist/agents/defaults.js +112 -0
- package/dist/agents/registry.d.ts +65 -0
- package/dist/agents/registry.js +319 -0
- package/dist/agents/specialists.d.ts +49 -0
- package/dist/agents/specialists.js +307 -0
- package/dist/agents/types.d.ts +55 -0
- package/dist/agents/types.js +4 -0
- package/dist/agents.d.ts +4 -0
- package/dist/agents.js +3 -0
- package/dist/benchmark.d.ts +94 -0
- package/dist/benchmark.js +172 -0
- package/dist/bounded-authority-hooks.d.ts +19 -0
- package/dist/bounded-authority-hooks.js +157 -0
- package/dist/bounded-authority.d.ts +184 -0
- package/dist/bounded-authority.js +825 -0
- package/dist/cache-metrics.d.ts +54 -0
- package/dist/cache-metrics.js +81 -0
- package/dist/cli/args.d.ts +5 -0
- package/dist/cli/args.js +415 -0
- package/dist/cli/auto-update.d.ts +117 -0
- package/dist/cli/auto-update.js +604 -0
- package/dist/cli/command-alias-ownership.d.ts +2 -0
- package/dist/cli/command-alias-ownership.js +14 -0
- package/dist/cli/command-aliases.d.ts +12 -0
- package/dist/cli/command-aliases.js +112 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.js +175 -0
- package/dist/cli/host-capabilities.d.ts +12 -0
- package/dist/cli/host-capabilities.js +25 -0
- package/dist/cli/host-limits.d.ts +21 -0
- package/dist/cli/host-limits.js +83 -0
- package/dist/cli/install-config.d.ts +13 -0
- package/dist/cli/install-config.js +201 -0
- package/dist/cli/install-report.d.ts +2 -0
- package/dist/cli/install-report.js +180 -0
- package/dist/cli/install-tui.d.ts +12 -0
- package/dist/cli/install-tui.js +174 -0
- package/dist/cli/install.d.ts +2 -0
- package/dist/cli/install.js +264 -0
- package/dist/cli/json.d.ts +4 -0
- package/dist/cli/json.js +31 -0
- package/dist/cli/loop.d.ts +3 -0
- package/dist/cli/loop.js +135 -0
- package/dist/cli/lsp-capability.d.ts +17 -0
- package/dist/cli/lsp-capability.js +92 -0
- package/dist/cli/managed-skill-assets.d.ts +23 -0
- package/dist/cli/managed-skill-assets.js +117 -0
- package/dist/cli/model-catalog.d.ts +21 -0
- package/dist/cli/model-catalog.js +107 -0
- package/dist/cli/model-policy.d.ts +3 -0
- package/dist/cli/model-policy.js +143 -0
- package/dist/cli/model-routing.d.ts +5 -0
- package/dist/cli/model-routing.js +208 -0
- package/dist/cli/native-canonical-backup.d.ts +9 -0
- package/dist/cli/native-canonical-backup.js +96 -0
- package/dist/cli/native-canonical-cache.d.ts +9 -0
- package/dist/cli/native-canonical-cache.js +37 -0
- package/dist/cli/native-skill-install.d.ts +2 -0
- package/dist/cli/native-skill-install.js +128 -0
- package/dist/cli/native-skill-integrity.d.ts +25 -0
- package/dist/cli/native-skill-integrity.js +178 -0
- package/dist/cli/native-skill-tree.d.ts +12 -0
- package/dist/cli/native-skill-tree.js +104 -0
- package/dist/cli/native-skills.d.ts +22 -0
- package/dist/cli/native-skills.js +105 -0
- package/dist/cli/plugin-mutation.d.ts +4 -0
- package/dist/cli/plugin-mutation.js +89 -0
- package/dist/cli/scientific-visualization-dependencies.d.ts +18 -0
- package/dist/cli/scientific-visualization-dependencies.js +91 -0
- package/dist/cli/skill-loop.d.ts +3 -0
- package/dist/cli/skill-loop.js +649 -0
- package/dist/cli/types.d.ts +188 -0
- package/dist/cli/types.js +1 -0
- package/dist/cli/update-check.d.ts +2 -0
- package/dist/cli/update-check.js +15 -0
- package/dist/cli/update-notifier.d.ts +70 -0
- package/dist/cli/update-notifier.js +717 -0
- package/dist/cli/vendor-path-migration.d.ts +9 -0
- package/dist/cli/vendor-path-migration.js +96 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +250 -0
- package/dist/commands.d.ts +331 -0
- package/dist/commands.js +600 -0
- package/dist/config-parser.d.ts +5 -0
- package/dist/config-parser.js +274 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.js +157 -0
- package/dist/deliverable-hedge-guard.d.ts +26 -0
- package/dist/deliverable-hedge-guard.js +302 -0
- package/dist/durable-plan.d.ts +23 -0
- package/dist/durable-plan.js +349 -0
- package/dist/features.d.ts +828 -0
- package/dist/features.js +1109 -0
- package/dist/hooks.d.ts +17 -0
- package/dist/hooks.js +83 -0
- package/dist/ignition.d.ts +14 -0
- package/dist/ignition.js +33 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +30 -0
- package/dist/inert-data.d.ts +2 -0
- package/dist/inert-data.js +13 -0
- package/dist/knowledge.d.ts +98 -0
- package/dist/knowledge.js +961 -0
- package/dist/ledger.d.ts +181 -0
- package/dist/ledger.js +1179 -0
- package/dist/lit-fetch-classify.d.ts +8 -0
- package/dist/lit-fetch-classify.js +107 -0
- package/dist/lit-fetch-content.d.ts +2 -0
- package/dist/lit-fetch-content.js +43 -0
- package/dist/lit-fetch-http.d.ts +10 -0
- package/dist/lit-fetch-http.js +82 -0
- package/dist/lit-fetch-result.d.ts +2 -0
- package/dist/lit-fetch-result.js +65 -0
- package/dist/lit-fetch-ssrf.d.ts +9 -0
- package/dist/lit-fetch-ssrf.js +77 -0
- package/dist/lit-fetch-url.d.ts +3 -0
- package/dist/lit-fetch-url.js +28 -0
- package/dist/lit-fetch.d.ts +69 -0
- package/dist/lit-fetch.js +84 -0
- package/dist/lit-mark.d.ts +17 -0
- package/dist/lit-mark.js +129 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.js +21 -0
- package/dist/model-route-policy.d.ts +25 -0
- package/dist/model-route-policy.js +129 -0
- package/dist/reader-facing-output.d.ts +3 -0
- package/dist/reader-facing-output.js +28 -0
- package/dist/rules/discovery.d.ts +36 -0
- package/dist/rules/discovery.js +270 -0
- package/dist/rules/engine.d.ts +43 -0
- package/dist/rules/engine.js +236 -0
- package/dist/rules/frontmatter.d.ts +16 -0
- package/dist/rules/frontmatter.js +179 -0
- package/dist/rules/glob.d.ts +12 -0
- package/dist/rules/glob.js +233 -0
- package/dist/rules/hooks.d.ts +25 -0
- package/dist/rules/hooks.js +75 -0
- package/dist/rules/output-style.d.ts +1 -0
- package/dist/rules/output-style.js +20 -0
- package/dist/scientific-visualization-banner.d.ts +1 -0
- package/dist/scientific-visualization-banner.js +2 -0
- package/dist/search-workflow-ideas.d.ts +67 -0
- package/dist/search-workflow-ideas.js +128 -0
- package/dist/secret-shapes.d.ts +9 -0
- package/dist/secret-shapes.js +63 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +129 -0
- package/dist/session-lineage.d.ts +8 -0
- package/dist/session-lineage.js +12 -0
- package/dist/skill-loop/apply.d.ts +19 -0
- package/dist/skill-loop/apply.js +483 -0
- package/dist/skill-loop/config.d.ts +50 -0
- package/dist/skill-loop/config.js +215 -0
- package/dist/skill-loop/curator.d.ts +18 -0
- package/dist/skill-loop/curator.js +232 -0
- package/dist/skill-loop/ledger.d.ts +39 -0
- package/dist/skill-loop/ledger.js +344 -0
- package/dist/skill-loop/proposals.d.ts +48 -0
- package/dist/skill-loop/proposals.js +290 -0
- package/dist/skill-loop/storage.d.ts +72 -0
- package/dist/skill-loop/storage.js +817 -0
- package/dist/skill-loop/time.d.ts +2 -0
- package/dist/skill-loop/time.js +23 -0
- package/dist/skill-loop/transaction.d.ts +62 -0
- package/dist/skill-loop/transaction.js +836 -0
- package/dist/skill-loop/usage.d.ts +31 -0
- package/dist/skill-loop/usage.js +146 -0
- package/dist/skill-observer.d.ts +22 -0
- package/dist/skill-observer.js +1154 -0
- package/dist/skill-renames.d.ts +5 -0
- package/dist/skill-renames.js +8 -0
- package/dist/skills.d.ts +307 -0
- package/dist/skills.js +450 -0
- package/dist/stable-identity.d.ts +14 -0
- package/dist/stable-identity.js +15 -0
- package/dist/state.d.ts +25 -0
- package/dist/state.js +38 -0
- package/dist/strict-json.d.ts +2 -0
- package/dist/strict-json.js +94 -0
- package/dist/tool-guards.d.ts +34 -0
- package/dist/tool-guards.js +210 -0
- package/dist/tool-kit.d.ts +32 -0
- package/dist/tool-kit.js +75 -0
- package/dist/tools.d.ts +43 -0
- package/dist/tools.js +381 -0
- package/dist/uiux-visual-catalog.d.ts +50 -0
- package/dist/uiux-visual-catalog.js +103 -0
- package/dist/user-facing-markdown.d.ts +5 -0
- package/dist/user-facing-markdown.js +93 -0
- package/dist/workflow-families.d.ts +16 -0
- package/dist/workflow-families.js +95 -0
- package/docs/assets/cover.webp +0 -0
- package/docs/assets/litopencode-continuity-1600.webp +0 -0
- package/docs/assets/litopencode-ignition-1600.webp +0 -0
- package/docs/assets/readme/badge-license.svg +1 -0
- package/docs/assets/readme/badge-version.svg +1 -0
- package/docs/assets/readme/litopencode-clay-icon.png +0 -0
- package/docs/assets/readme/litopencode-wordmark.svg +5 -0
- package/docs/lit-mark.md +46 -0
- package/docs/migration.md +162 -0
- package/docs/privacy.md +82 -0
- package/docs/reference-Ko-KR.md +309 -0
- package/docs/reference.md +444 -0
- package/output-styles/asd-ste100-ko.md +41 -0
- package/output-styles/asd-ste100.md +40 -0
- package/output-styles/eli5-ko.md +13 -0
- package/output-styles/eli5.md +11 -0
- package/package.json +57 -0
- package/qa/fixtures/litfamily-harness-speed-v1.json +38 -0
- package/qa/harness-speed-contract.mjs +209 -0
- package/qa/harness-speed-v2-contract.mjs +213 -0
- package/qa/harness-speed-verdict.mjs +105 -0
- package/skills/agent-roster/SKILL.md +262 -0
- package/skills/autoconference/LICENSE +21 -0
- package/skills/autoconference/PROVENANCE.md +20 -0
- package/skills/autoconference/SKILL.md +125 -0
- package/skills/autoconference/assets/conference_template.md +76 -0
- package/skills/autoconference/assets/report_template.md +53 -0
- package/skills/autoconference/assets/synthesis_template.md +39 -0
- package/skills/autoconference/modes/analyze.md +255 -0
- package/skills/autoconference/modes/core.md +112 -0
- package/skills/autoconference/modes/debate.md +373 -0
- package/skills/autoconference/modes/plan.md +310 -0
- package/skills/autoconference/modes/resume.md +48 -0
- package/skills/autoconference/modes/ship.md +57 -0
- package/skills/autoconference/modes/survey.md +109 -0
- package/skills/autoconference/references/agent-prompts.md +134 -0
- package/skills/autoconference/references/conference-protocol.md +102 -0
- package/skills/autoconference/references/convergence-guide.md +167 -0
- package/skills/autoconference/references/core-principles.md +83 -0
- package/skills/autoconference/references/crash-recovery.md +104 -0
- package/skills/autoconference/references/results-logging.md +198 -0
- package/skills/autoconference/references/upstream-family-contract.md +130 -0
- package/skills/autoconference/references/visualization-guide.md +105 -0
- package/skills/autoconference/scripts/check_conference.sh +371 -0
- package/skills/autoconference/scripts/init_conference.py +625 -0
- package/skills/autoconference/scripts/style_presets.py +104 -0
- package/skills/autoresearch/LICENSE +21 -0
- package/skills/autoresearch/PROVENANCE.md +20 -0
- package/skills/autoresearch/SKILL.md +131 -0
- package/skills/autoresearch/assets/report_template.md +50 -0
- package/skills/autoresearch/assets/research_template.md +38 -0
- package/skills/autoresearch/assets/results_template.tsv +1 -0
- package/skills/autoresearch/modes/core.md +216 -0
- package/skills/autoresearch/modes/debug.md +235 -0
- package/skills/autoresearch/modes/fix.md +173 -0
- package/skills/autoresearch/modes/learn.md +91 -0
- package/skills/autoresearch/modes/plan.md +291 -0
- package/skills/autoresearch/modes/predict.md +266 -0
- package/skills/autoresearch/modes/reason.md +170 -0
- package/skills/autoresearch/modes/scenario.md +164 -0
- package/skills/autoresearch/modes/security.md +282 -0
- package/skills/autoresearch/modes/ship.md +49 -0
- package/skills/autoresearch/references/core-principles.md +80 -0
- package/skills/autoresearch/references/evaluator-contract.md +126 -0
- package/skills/autoresearch/references/investigation-techniques.md +205 -0
- package/skills/autoresearch/references/owasp-checklist.md +161 -0
- package/skills/autoresearch/references/persona-templates.md +232 -0
- package/skills/autoresearch/references/results-logging.md +96 -0
- package/skills/autoresearch/references/scenario-dimensions.md +178 -0
- package/skills/autoresearch/references/stride-model.md +196 -0
- package/skills/autoresearch/references/stuck-detection.md +107 -0
- package/skills/autoresearch/references/type-checklists.md +163 -0
- package/skills/autoresearch/references/upstream-family-contract.md +125 -0
- package/skills/autoresearch/references/visualization-guide.md +95 -0
- package/skills/autoresearch/scripts/check_progress.sh +272 -0
- package/skills/autoresearch/scripts/init_research.py +330 -0
- package/skills/autoresearch/scripts/run_with_deadline.py +164 -0
- package/skills/autoresearch/scripts/style_presets.py +104 -0
- package/skills/browser-drive/SKILL.md +133 -0
- package/skills/browser-drive/references/snapshot-act-loop.md +37 -0
- package/skills/browser-drive/scripts/capability-probe.mjs +262 -0
- package/skills/comment-checker/SKILL.md +171 -0
- package/skills/debugging/SKILL.md +202 -0
- package/skills/debugging/references/README.md +15 -0
- package/skills/debugging/references/escalation.md +43 -0
- package/skills/debugging/references/runtimes/README.md +17 -0
- package/skills/debugging/references/runtimes/bundled-js-binary.md +44 -0
- package/skills/debugging/references/runtimes/go.md +37 -0
- package/skills/debugging/references/runtimes/native-binary.md +44 -0
- package/skills/debugging/references/runtimes/node.md +43 -0
- package/skills/debugging/references/runtimes/python.md +41 -0
- package/skills/debugging/references/runtimes/rust.md +37 -0
- package/skills/debugging/references/tools.md +72 -0
- package/skills/deep-interview/SKILL.md +201 -0
- package/skills/doctor-installer/SKILL.md +252 -0
- package/skills/durable-litgoal/SKILL.md +248 -0
- package/skills/frontend-ui-ux/SKILL.md +70 -0
- package/skills/frontend-ui-ux/data/LICENSE +21 -0
- package/skills/frontend-ui-ux/data/PROVENANCE.json +1088 -0
- package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +14 -0
- package/skills/frontend-ui-ux/data/design-intelligence.json +1 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/ATTRIBUTION.md +217 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/LICENSE +21 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/LICENSE-Apache-2.0.txt +201 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +867 -0
- package/skills/frontend-ui-ux/references/adaptive-layout.md +85 -0
- package/skills/frontend-ui-ux/references/brand-and-imagery.md +79 -0
- package/skills/frontend-ui-ux/references/complete-contract.md +282 -0
- package/skills/frontend-ui-ux/references/composition.md +87 -0
- package/skills/frontend-ui-ux/references/creative-directions.md +83 -0
- package/skills/frontend-ui-ux/references/design/README.md +248 -0
- package/skills/frontend-ui-ux/references/design/_INDEX.md +191 -0
- package/skills/frontend-ui-ux/references/design/airbnb.md +393 -0
- package/skills/frontend-ui-ux/references/design/airtable.md +92 -0
- package/skills/frontend-ui-ux/references/design/apple.md +250 -0
- package/skills/frontend-ui-ux/references/design/aside.md +209 -0
- package/skills/frontend-ui-ux/references/design/binance.md +348 -0
- package/skills/frontend-ui-ux/references/design/bmw.md +183 -0
- package/skills/frontend-ui-ux/references/design/brutalist-skill.md +92 -0
- package/skills/frontend-ui-ux/references/design/bugatti.md +271 -0
- package/skills/frontend-ui-ux/references/design/cal.md +262 -0
- package/skills/frontend-ui-ux/references/design/claude.md +315 -0
- package/skills/frontend-ui-ux/references/design/clay.md +307 -0
- package/skills/frontend-ui-ux/references/design/clickhouse.md +284 -0
- package/skills/frontend-ui-ux/references/design/clone-from-url.md +65 -0
- package/skills/frontend-ui-ux/references/design/cohere.md +269 -0
- package/skills/frontend-ui-ux/references/design/coinbase.md +132 -0
- package/skills/frontend-ui-ux/references/design/composio.md +310 -0
- package/skills/frontend-ui-ux/references/design/cursor.md +312 -0
- package/skills/frontend-ui-ux/references/design/design-system-architecture.md +244 -0
- package/skills/frontend-ui-ux/references/design/elevenlabs.md +268 -0
- package/skills/frontend-ui-ux/references/design/expo.md +284 -0
- package/skills/frontend-ui-ux/references/design/ferrari.md +317 -0
- package/skills/frontend-ui-ux/references/design/figma.md +223 -0
- package/skills/frontend-ui-ux/references/design/framer.md +249 -0
- package/skills/frontend-ui-ux/references/design/gpt-tasteskill.md +74 -0
- package/skills/frontend-ui-ux/references/design/hashicorp.md +281 -0
- package/skills/frontend-ui-ux/references/design/ibm.md +335 -0
- package/skills/frontend-ui-ux/references/design/image-to-code-skill.md +1228 -0
- package/skills/frontend-ui-ux/references/design/imagegen-brandkit.md +798 -0
- package/skills/frontend-ui-ux/references/design/imagegen-frontend-mobile.md +1465 -0
- package/skills/frontend-ui-ux/references/design/imagegen-frontend-web.md +987 -0
- package/skills/frontend-ui-ux/references/design/intercom.md +149 -0
- package/skills/frontend-ui-ux/references/design/kraken.md +128 -0
- package/skills/frontend-ui-ux/references/design/lamborghini.md +291 -0
- package/skills/frontend-ui-ux/references/design/layout-skill.md +107 -0
- package/skills/frontend-ui-ux/references/design/lazyweb.md +77 -0
- package/skills/frontend-ui-ux/references/design/linear.app.md +370 -0
- package/skills/frontend-ui-ux/references/design/lovable.md +301 -0
- package/skills/frontend-ui-ux/references/design/mastercard.md +368 -0
- package/skills/frontend-ui-ux/references/design/meta.md +369 -0
- package/skills/frontend-ui-ux/references/design/minimalist-skill.md +85 -0
- package/skills/frontend-ui-ux/references/design/minimax.md +260 -0
- package/skills/frontend-ui-ux/references/design/mintlify.md +329 -0
- package/skills/frontend-ui-ux/references/design/miro.md +111 -0
- package/skills/frontend-ui-ux/references/design/mistral.ai.md +264 -0
- package/skills/frontend-ui-ux/references/design/mongodb.md +269 -0
- package/skills/frontend-ui-ux/references/design/nike.md +366 -0
- package/skills/frontend-ui-ux/references/design/notion.md +312 -0
- package/skills/frontend-ui-ux/references/design/nvidia.md +296 -0
- package/skills/frontend-ui-ux/references/design/ollama.md +270 -0
- package/skills/frontend-ui-ux/references/design/opencode.ai.md +284 -0
- package/skills/frontend-ui-ux/references/design/output-skill.md +49 -0
- package/skills/frontend-ui-ux/references/design/pinterest.md +233 -0
- package/skills/frontend-ui-ux/references/design/playstation.md +367 -0
- package/skills/frontend-ui-ux/references/design/posthog.md +259 -0
- package/skills/frontend-ui-ux/references/design/raycast.md +271 -0
- package/skills/frontend-ui-ux/references/design/react-dev-tooling-skill.md +230 -0
- package/skills/frontend-ui-ux/references/design/redesign-skill.md +178 -0
- package/skills/frontend-ui-ux/references/design/renault.md +314 -0
- package/skills/frontend-ui-ux/references/design/replicate.md +264 -0
- package/skills/frontend-ui-ux/references/design/resend.md +306 -0
- package/skills/frontend-ui-ux/references/design/revolut.md +188 -0
- package/skills/frontend-ui-ux/references/design/runwayml.md +247 -0
- package/skills/frontend-ui-ux/references/design/sanity.md +360 -0
- package/skills/frontend-ui-ux/references/design/sentry.md +265 -0
- package/skills/frontend-ui-ux/references/design/shopify.md +353 -0
- package/skills/frontend-ui-ux/references/design/soft-skill.md +98 -0
- package/skills/frontend-ui-ux/references/design/spacex.md +197 -0
- package/skills/frontend-ui-ux/references/design/spotify.md +249 -0
- package/skills/frontend-ui-ux/references/design/starbucks.md +583 -0
- package/skills/frontend-ui-ux/references/design/stitch-design-example.md +121 -0
- package/skills/frontend-ui-ux/references/design/stitch-skill.md +184 -0
- package/skills/frontend-ui-ux/references/design/stripe.md +325 -0
- package/skills/frontend-ui-ux/references/design/supabase.md +258 -0
- package/skills/frontend-ui-ux/references/design/superhuman.md +255 -0
- package/skills/frontend-ui-ux/references/design/taste-skill.md +1206 -0
- package/skills/frontend-ui-ux/references/design/tesla.md +289 -0
- package/skills/frontend-ui-ux/references/design/theverge.md +342 -0
- package/skills/frontend-ui-ux/references/design/together.ai.md +266 -0
- package/skills/frontend-ui-ux/references/design/uber.md +298 -0
- package/skills/frontend-ui-ux/references/design/vercel.md +313 -0
- package/skills/frontend-ui-ux/references/design/vodafone.md +426 -0
- package/skills/frontend-ui-ux/references/design/voltagent.md +326 -0
- package/skills/frontend-ui-ux/references/design/warp.md +256 -0
- package/skills/frontend-ui-ux/references/design/webflow.md +95 -0
- package/skills/frontend-ui-ux/references/design/wired.md +281 -0
- package/skills/frontend-ui-ux/references/design/wise.md +176 -0
- package/skills/frontend-ui-ux/references/design/x.ai.md +260 -0
- package/skills/frontend-ui-ux/references/design/zapier.md +331 -0
- package/skills/frontend-ui-ux/references/designpowers/EVIDENCE.md +97 -0
- package/skills/frontend-ui-ux/references/designpowers/README.md +48 -0
- package/skills/frontend-ui-ux/references/designpowers/UPSTREAM.md +80 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-a-direction.md +64 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-b-execution.md +65 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-c-review.md +65 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-d-memory.md +83 -0
- package/skills/frontend-ui-ux/references/designpowers/orchestration.md +80 -0
- package/skills/frontend-ui-ux/references/designpowers/routing.md +79 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/LICENSE +21 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/accessible-content/reference.md +101 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/adaptive-interfaces/reference.md +109 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/cognitive-accessibility/reference.md +107 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debate/reference.md +199 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debt-tracker/reference.md +174 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-handoff/reference.md +125 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-md/reference.md +106 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-retrospective/reference.md +266 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-review/reference.md +123 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-system-alignment/reference.md +120 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/designpowers-critique/reference.md +164 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/heuristic-evaluation/reference.md +85 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/inclusive-personas/reference.md +98 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/inspiration-scouting/reference.md +165 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/interaction-design/reference.md +122 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/motion-choreography/reference.md +81 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/research-planning/reference.md +96 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/responsive-patterns/reference.md +77 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/synthetic-user-testing/reference.md +192 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-feedback/reference.md +165 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-report/reference.md +78 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/token-architecture/reference.md +75 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/ui-composition/reference.md +117 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/usability-testing/reference.md +78 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/verification-before-shipping/reference.md +125 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/voice-and-tone/reference.md +79 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/writing-design-plans/reference.md +119 -0
- package/skills/frontend-ui-ux/references/evidence-review.md +103 -0
- package/skills/frontend-ui-ux/references/implementation-platforms.md +94 -0
- package/skills/frontend-ui-ux/references/inclusive-interface.md +85 -0
- package/skills/frontend-ui-ux/references/interaction-motion.md +93 -0
- package/skills/frontend-ui-ux/references/operating-lanes.md +80 -0
- package/skills/frontend-ui-ux/references/perfection/README.md +160 -0
- package/skills/frontend-ui-ux/references/perfection/react-perf-tooling.md +127 -0
- package/skills/frontend-ui-ux/references/performance-delivery.md +77 -0
- package/skills/frontend-ui-ux/references/product-direction.md +84 -0
- package/skills/frontend-ui-ux/references/redesign-playbook.md +88 -0
- package/skills/frontend-ui-ux/references/system-foundations.md +86 -0
- package/skills/frontend-ui-ux/references/taste-direction.md +55 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/README.md +659 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/charts.csv +26 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/colors.csv +162 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/icons.csv +106 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/landing.csv +35 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/products.csv +162 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/react-performance.csv +45 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/astro.csv +54 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/flutter.csv +53 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/jetpack-compose.csv +53 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nextjs.csv +53 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxt-ui.csv +51 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxtjs.csv +59 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react-native.csv +52 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react.csv +54 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/shadcn.csv +61 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/svelte.csv +54 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/swiftui.csv +51 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/vue.csv +50 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/styles.csv +85 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/typography.csv +74 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/ui-reasoning.csv +162 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/ux-guidelines.csv +100 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/web-interface.csv +31 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/scripts/core.py +262 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/scripts/design_system.py +1148 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/scripts/search.py +114 -0
- package/skills/frontend-ui-ux/references/visual-language.md +84 -0
- package/skills/frontend-ui-ux/references/visual-reconstruction.md +87 -0
- package/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.json +570 -0
- package/skills/frontend-ui-ux/schemas/design-contract-v1beta1.json +32 -0
- package/skills/frontend-ui-ux/schemas/design-contract-v1beta2.json +34 -0
- package/skills/frontend-ui-ux/scripts/bounded-json.mjs +45 -0
- package/skills/frontend-ui-ux/scripts/canonical-json.mjs +26 -0
- package/skills/frontend-ui-ux/scripts/contract-error.mjs +15 -0
- package/skills/frontend-ui-ux/scripts/csv.mjs +64 -0
- package/skills/frontend-ui-ux/scripts/dataset.mjs +65 -0
- package/skills/frontend-ui-ux/scripts/design-contract.mjs +609 -0
- package/skills/frontend-ui-ux/scripts/import-design-intelligence.mjs +193 -0
- package/skills/frontend-ui-ux/scripts/retrieval.mjs +92 -0
- package/skills/frontend-ui-ux/scripts/stable-file-read.mjs +237 -0
- package/skills/frontend-ui-ux/scripts/stdin-json.mjs +16 -0
- package/skills/frontend-ui-ux/scripts/strict-json.mjs +102 -0
- package/skills/frontend-ui-ux/scripts/uiux.mjs +86 -0
- package/skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs +266 -0
- package/skills/lit-burnoff/SKILL.md +227 -0
- package/skills/lit-burnoff-file/SKILL.md +175 -0
- package/skills/lit-code/SKILL.md +266 -0
- package/skills/lit-code/references/README.md +18 -0
- package/skills/lit-code/references/go/README.md +12 -0
- package/skills/lit-code/references/go/concurrency.md +42 -0
- package/skills/lit-code/references/go/error-handling.md +47 -0
- package/skills/lit-code/references/go/testing.md +55 -0
- package/skills/lit-code/references/go/tooling.md +35 -0
- package/skills/lit-code/references/go/type-patterns.md +50 -0
- package/skills/lit-code/references/python/README.md +12 -0
- package/skills/lit-code/references/python/async.md +50 -0
- package/skills/lit-code/references/python/error-handling.md +44 -0
- package/skills/lit-code/references/python/testing.md +50 -0
- package/skills/lit-code/references/python/tooling.md +38 -0
- package/skills/lit-code/references/python/type-patterns.md +46 -0
- package/skills/lit-code/references/rust/README.md +12 -0
- package/skills/lit-code/references/rust/concurrency.md +45 -0
- package/skills/lit-code/references/rust/error-handling.md +43 -0
- package/skills/lit-code/references/rust/tooling.md +36 -0
- package/skills/lit-code/references/rust/type-patterns.md +46 -0
- package/skills/lit-code/references/rust/unsafe.md +47 -0
- package/skills/lit-code/references/typescript/README.md +11 -0
- package/skills/lit-code/references/typescript/error-handling.md +56 -0
- package/skills/lit-code/references/typescript/testing.md +42 -0
- package/skills/lit-code/references/typescript/tsconfig-strict.md +40 -0
- package/skills/lit-code/references/typescript/type-patterns.md +60 -0
- package/skills/lit-commit/SKILL.md +222 -0
- package/skills/lit-comprehend/SKILL.md +278 -0
- package/skills/lit-comprehend/assets/explainer-scaffold.html +104 -0
- package/skills/lit-comprehend/references/artifact-template.md +114 -0
- package/skills/lit-comprehend/references/micro-worlds.md +115 -0
- package/skills/lit-comprehend/scripts/verify-explainer.ts +339 -0
- package/skills/lit-crucible/SKILL.md +212 -0
- package/skills/lit-fetch/SKILL.md +242 -0
- package/skills/lit-handoff/SKILL.md +199 -0
- package/skills/lit-init/SKILL.md +214 -0
- package/skills/lit-korean/SKILL.md +231 -0
- package/skills/lit-plan/SKILL.md +351 -0
- package/skills/lit-plan/scripts/scaffold-plan.mjs +275 -0
- package/skills/lit-recap/SKILL.md +233 -0
- package/skills/lit-scientific-visualization/SKILL.md +175 -0
- package/skills/litresearch/SKILL.md +436 -0
- package/skills/litwork/SKILL.md +227 -0
- package/skills/lsp/SKILL.md +186 -0
- package/skills/lsp-setup/SKILL.md +187 -0
- package/skills/lsp-setup/references/README.md +40 -0
- package/skills/lsp-setup/references/bash.md +31 -0
- package/skills/lsp-setup/references/c-cpp.md +43 -0
- package/skills/lsp-setup/references/csharp.md +29 -0
- package/skills/lsp-setup/references/dart.md +25 -0
- package/skills/lsp-setup/references/elixir.md +30 -0
- package/skills/lsp-setup/references/go.md +33 -0
- package/skills/lsp-setup/references/haskell.md +27 -0
- package/skills/lsp-setup/references/java.md +28 -0
- package/skills/lsp-setup/references/julia.md +28 -0
- package/skills/lsp-setup/references/kotlin.md +25 -0
- package/skills/lsp-setup/references/lua.md +26 -0
- package/skills/lsp-setup/references/php.md +30 -0
- package/skills/lsp-setup/references/python.md +33 -0
- package/skills/lsp-setup/references/ruby.md +34 -0
- package/skills/lsp-setup/references/rust.md +34 -0
- package/skills/lsp-setup/references/swift.md +26 -0
- package/skills/lsp-setup/references/terraform.md +26 -0
- package/skills/lsp-setup/references/typescript.md +35 -0
- package/skills/lsp-setup/references/yaml.md +27 -0
- package/skills/lsp-setup/references/zig.md +28 -0
- package/skills/managed-skill-manifest.json +1386 -0
- package/skills/native-goal-verdict/SKILL.md +216 -0
- package/skills/refactor/SKILL.md +221 -0
- package/skills/reference-benchmark-claims/SKILL.md +204 -0
- package/skills/release-guardrails/SKILL.md +245 -0
- package/skills/review-work/SKILL.md +301 -0
- package/skills/rules/SKILL.md +196 -0
- package/skills/search-workflow-ideas/SKILL.md +223 -0
- package/skills/skill-observer/SKILL.md +148 -0
- package/skills/skill-observer/references/review-contract.md +95 -0
- package/skills/skill-rename-aliases.json +10 -0
- package/skills/start-work/SKILL.md +334 -0
- package/skills/structural-search/SKILL.md +234 -0
- package/skills/tool-guards/SKILL.md +223 -0
- package/skills/visual-qa/SKILL.md +61 -0
- package/skills/visual-qa/references/capture-playbook.md +105 -0
- package/skills/visual-qa/references/complete-contract.md +411 -0
- package/skills/visual-qa/schemas/evidence-manifest-v1alpha1.json +201 -0
- package/skills/visual-qa/schemas/evidence-manifest-v1beta1.json +141 -0
- package/skills/visual-qa/schemas/review-receipt-v1alpha1.json +113 -0
- package/skills/visual-qa/scripts/artifact.mjs +123 -0
- package/skills/visual-qa/scripts/bounded-json.mjs +47 -0
- package/skills/visual-qa/scripts/canonical-json.mjs +28 -0
- package/skills/visual-qa/scripts/capabilities.mjs +66 -0
- package/skills/visual-qa/scripts/contract-text.mjs +15 -0
- package/skills/visual-qa/scripts/design-contract.mjs +611 -0
- package/skills/visual-qa/scripts/evidence-evaluate.mjs +521 -0
- package/skills/visual-qa/scripts/evidence.mjs +271 -0
- package/skills/visual-qa/scripts/png-decode.mjs +146 -0
- package/skills/visual-qa/scripts/png.mjs +154 -0
- package/skills/visual-qa/scripts/review.mjs +188 -0
- package/skills/visual-qa/scripts/stdin-json.mjs +16 -0
- package/skills/visual-qa/scripts/strict-json.mjs +102 -0
- package/skills/visual-qa/scripts/tui.mjs +149 -0
- package/skills/visual-qa/scripts/visual-qa.mjs +90 -0
- package/skills/wikify/LICENSE +21 -0
- package/skills/wikify/PROVENANCE.md +18 -0
- package/skills/wikify/SKILL.md +176 -0
- package/skills/wikify/assets/home-template.md +44 -0
- package/skills/wikify/assets/maintenance-report-template.md +46 -0
- package/skills/wikify/assets/paper-source-note-template.md +137 -0
- package/skills/wikify/assets/source-note-template.md +45 -0
- package/skills/wikify/assets/wiki-rules-template.md +117 -0
- package/skills/wikify/modes/ingest.md +57 -0
- package/skills/wikify/modes/init.md +44 -0
- package/skills/wikify/modes/lint.md +60 -0
- package/skills/wikify/modes/query.md +38 -0
- package/skills/wikify/modes/save.md +45 -0
- package/skills/wikify/references-upstream-contract.md +758 -0
- package/skills/workflow-loop/SKILL.md +387 -0
- package/tools/check-pack-payload.mjs +410 -0
- package/tools/check-payload-substance.mjs +738 -0
- package/tools/check-version-lockstep.mjs +238 -0
- package/tools/gen-canonical-frontend-manifest.mjs +66 -0
- package/tools/gen-managed-skill-manifest.mjs +135 -0
- package/tools/harness-speed-local.mjs +261 -0
- package/tools/payload-reference-exemptions.json +49 -0
- package/tools/payload-substance-allowlist.json +46 -0
- package/tools/payload-substance-parity.json +571 -0
- package/tools/qa-real-surface-fixtures.mjs +428 -0
- package/tools/qa-real-surface-harness.mjs +173 -0
- package/tools/run-behavior-replacement-probes.mjs +296 -0
- package/tools/run-build.mjs +101 -0
- package/tools/run-harness-speed-local.mjs +52 -0
- package/tools/run-harness-speed-v2.mjs +36 -0
- package/tools/run-installed-resource-tamper-probe.mjs +62 -0
- package/tools/run-negative-gate-matrix.mjs +516 -0
- package/tools/run-rules-glob-differential.mjs +232 -0
- package/tools/run-typecheck.mjs +25 -0
- package/tools/run-uiux-visual-qa-scenarios.mjs +234 -0
- package/tools/run-wikify-surface-probe.mjs +170 -0
- package/tools/scan-legacy-tokens.mjs +431 -0
- package/tools/version-manifests.json +60 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +13 -0
- package/vendor/NOTICE.md +21 -0
- package/vendor/handoff/SKILL.md +199 -0
- package/vendor/handoff/evals/evals.json +154 -0
- package/vendor/handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
- package/vendor/handoff/templates/HANDOFF.md +121 -0
- package/vendor/licenses/022_handoff-MIT.txt +21 -0
- package/vendor/licenses/045_scientific-visualization-MIT.txt +21 -0
- package/vendor/provenance/022_handoff.md +19 -0
- package/vendor/provenance/045_scientific-visualization.md +36 -0
- package/vendor/scientific-visualization/SKILL.md +283 -0
- package/vendor/scientific-visualization/assets/color_palettes.py +197 -0
- package/vendor/scientific-visualization/assets/nature.mplstyle +75 -0
- package/vendor/scientific-visualization/assets/presentation.mplstyle +74 -0
- package/vendor/scientific-visualization/assets/publication.mplstyle +78 -0
- package/vendor/scientific-visualization/evals/evals.json +158 -0
- package/vendor/scientific-visualization/references/color_palettes.md +380 -0
- package/vendor/scientific-visualization/references/journal_requirements.md +359 -0
- package/vendor/scientific-visualization/references/matplotlib_examples.md +608 -0
- package/vendor/scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
- package/vendor/scientific-visualization/references/publication_guidelines.md +217 -0
- package/vendor/scientific-visualization/references/seaborn_for_publications.md +293 -0
- package/vendor/scientific-visualization/scripts/figure_export.py +238 -0
- package/vendor/scientific-visualization/scripts/style_presets.py +467 -0
- package/vendor/scientific-visualization/tests/test_figure_export.py +51 -0
- package/vendor/scientific-visualization/tests/test_style_presets.py +114 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { verifyCanonicalFrontendCorpus } from "../skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs";
|
|
7
|
+
import { revalidateStableRegularFile } from "../skills/frontend-ui-ux/scripts/stable-file-read.mjs";
|
|
8
|
+
|
|
9
|
+
const LEGACY_TOKEN_PARTS = [
|
|
10
|
+
["om", "o"],
|
|
11
|
+
["oh-my-open", "agent"],
|
|
12
|
+
["oh-my-open", "code"],
|
|
13
|
+
["sisyphus", "labs"],
|
|
14
|
+
["lazy", "codex"],
|
|
15
|
+
["lazy", "claude"],
|
|
16
|
+
["code-yeong", "yu"],
|
|
17
|
+
["u", "lw"],
|
|
18
|
+
["ultra", "work"],
|
|
19
|
+
["ultra", "goal"]
|
|
20
|
+
];
|
|
21
|
+
const LEGACY_TOKENS = LEGACY_TOKEN_PARTS.map((parts) => parts.join(""));
|
|
22
|
+
const TOKEN_PATTERN = new RegExp(
|
|
23
|
+
`(?<![A-Za-z0-9_])(${LEGACY_TOKENS.map(escapeRegex).join("|")})(?![A-Za-z0-9_])`,
|
|
24
|
+
"giu"
|
|
25
|
+
);
|
|
26
|
+
const SKIPPED_DIRS = new Set([".git", ".litcodex", ".litopencode", "node_modules", "# REFERENCE"]);
|
|
27
|
+
const SKIPPED_FILES = new Set(["tools/scan-legacy-tokens.mjs", "tools/legacy-token-allowlist.json"]);
|
|
28
|
+
const SKIPPED_EXTENSIONS = [".tgz", ".zip", ".tar", ".gz", ".bz2", ".xz", ".7z"];
|
|
29
|
+
const CANONICAL_REFERENCES_PATH = "skills/frontend-ui-ux/references";
|
|
30
|
+
|
|
31
|
+
class AllowlistError extends Error {
|
|
32
|
+
constructor(message) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.name = "AllowlistError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
class ExternalTermError extends Error {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = "ExternalTermError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
class CanonicalCorpusError extends Error {
|
|
46
|
+
constructor(message) {
|
|
47
|
+
super(message);
|
|
48
|
+
this.name = "CanonicalCorpusError";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function escapeRegex(value) {
|
|
53
|
+
return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function parseArgs(argv) {
|
|
57
|
+
const options = {
|
|
58
|
+
root: process.cwd(),
|
|
59
|
+
allowlist: "tools/legacy-token-allowlist.json",
|
|
60
|
+
externalTerms: undefined,
|
|
61
|
+
json: false
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
65
|
+
const arg = argv[index];
|
|
66
|
+
const next = argv[index + 1];
|
|
67
|
+
if (arg === "--root" && next !== undefined) {
|
|
68
|
+
options.root = next;
|
|
69
|
+
index += 1;
|
|
70
|
+
} else if (arg === "--allowlist" && next !== undefined) {
|
|
71
|
+
options.allowlist = next;
|
|
72
|
+
index += 1;
|
|
73
|
+
} else if (arg === "--external-terms" && next !== undefined) {
|
|
74
|
+
options.externalTerms = next;
|
|
75
|
+
index += 1;
|
|
76
|
+
} else if (arg === "--json") {
|
|
77
|
+
options.json = true;
|
|
78
|
+
} else {
|
|
79
|
+
throw new AllowlistError(`unknown or incomplete argument: ${arg}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return options;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function requireExternalString(entry, field, index) {
|
|
87
|
+
const value = entry[field];
|
|
88
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
89
|
+
throw new ExternalTermError(`terms[${index}].${field} must be a non-empty string`);
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function readExternalTerms(termsPath) {
|
|
95
|
+
let parsed;
|
|
96
|
+
try {
|
|
97
|
+
parsed = JSON.parse(await fs.readFile(termsPath, "utf8"));
|
|
98
|
+
} catch {
|
|
99
|
+
throw new ExternalTermError("external terms file must be valid JSON");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed) || parsed.version !== 1 || !Array.isArray(parsed.terms)) {
|
|
103
|
+
throw new ExternalTermError("external terms must be an object with version 1 and a terms array");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const ids = new Set();
|
|
107
|
+
return parsed.terms.map((entry, index) => {
|
|
108
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
109
|
+
throw new ExternalTermError(`terms[${index}] must be an object`);
|
|
110
|
+
}
|
|
111
|
+
const id = requireExternalString(entry, "id", index);
|
|
112
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/u.test(id)) {
|
|
113
|
+
throw new ExternalTermError(`terms[${index}].id must be an opaque identifier`);
|
|
114
|
+
}
|
|
115
|
+
if (ids.has(id)) {
|
|
116
|
+
throw new ExternalTermError(`terms[${index}].id must be unique`);
|
|
117
|
+
}
|
|
118
|
+
ids.add(id);
|
|
119
|
+
const value = requireExternalString(entry, "value", index);
|
|
120
|
+
const matchMode = requireExternalString(entry, "matchMode", index);
|
|
121
|
+
if (matchMode !== "substring" && matchMode !== "bounded") {
|
|
122
|
+
throw new ExternalTermError(`terms[${index}].matchMode must be substring or bounded`);
|
|
123
|
+
}
|
|
124
|
+
return { id, value, matchMode };
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function normalizeRelativePath(value) {
|
|
129
|
+
return value.split(path.sep).join("/");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function isSkippedFile(relativePath, extraSkippedFiles) {
|
|
133
|
+
if (SKIPPED_FILES.has(relativePath) || extraSkippedFiles.has(relativePath)) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
if (relativePath === "pack-report.json" || relativePath.endsWith(".pack-report.json")) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
return SKIPPED_EXTENSIONS.some((extension) => relativePath.endsWith(extension));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function requireString(entry, field, index) {
|
|
143
|
+
const value = entry[field];
|
|
144
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
145
|
+
throw new AllowlistError(`entries[${index}].${field} must be a non-empty string`);
|
|
146
|
+
}
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async function readAllowlist(allowlistPath) {
|
|
151
|
+
let parsed;
|
|
152
|
+
try {
|
|
153
|
+
parsed = JSON.parse(await fs.readFile(allowlistPath, "utf8"));
|
|
154
|
+
} catch (error) {
|
|
155
|
+
if (error && error.code === "ENOENT") {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
throw new AllowlistError(`cannot read or parse allowlist: ${error.message}`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (!parsed || typeof parsed !== "object" || !Array.isArray(parsed.entries)) {
|
|
162
|
+
throw new AllowlistError("allowlist must be an object with an entries array");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (parsed.entries.length > 0) {
|
|
166
|
+
throw new AllowlistError("allowlist entries are disabled; remove denied terms instead of exempting them");
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return parsed.entries.map((entry, index) => {
|
|
170
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
171
|
+
throw new AllowlistError(`entries[${index}] must be an object`);
|
|
172
|
+
}
|
|
173
|
+
const token = requireString(entry, "token", index).toLowerCase();
|
|
174
|
+
if (!LEGACY_TOKENS.includes(token)) {
|
|
175
|
+
throw new AllowlistError(`entries[${index}].token must be one of: ${LEGACY_TOKENS.join(", ")}`);
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
path: normalizeRelativePath(requireString(entry, "path", index)),
|
|
179
|
+
token,
|
|
180
|
+
reason: requireString(entry, "reason", index),
|
|
181
|
+
removalCondition: requireString(entry, "removalCondition", index),
|
|
182
|
+
match: requireString(entry, "match", index)
|
|
183
|
+
};
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function isAllowed(match, allowlist) {
|
|
188
|
+
return allowlist.some((entry) => (
|
|
189
|
+
entry.path === match.path
|
|
190
|
+
&& entry.token === match.token
|
|
191
|
+
&& entry.match === match.line
|
|
192
|
+
));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async function collectFiles(root, extraSkippedFiles, skippedDirectories = new Set(), current = root) {
|
|
196
|
+
const entries = await fs.readdir(current, { withFileTypes: true });
|
|
197
|
+
const files = [];
|
|
198
|
+
for (const entry of entries) {
|
|
199
|
+
if (entry.isDirectory() && SKIPPED_DIRS.has(entry.name)) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const fullPath = path.join(current, entry.name);
|
|
203
|
+
const relativePath = normalizeRelativePath(path.relative(root, fullPath));
|
|
204
|
+
if (entry.isDirectory()) {
|
|
205
|
+
if (!skippedDirectories.has(relativePath)) {
|
|
206
|
+
files.push(...await collectFiles(root, extraSkippedFiles, skippedDirectories, fullPath));
|
|
207
|
+
}
|
|
208
|
+
} else if (entry.isFile() && !isSkippedFile(relativePath, extraSkippedFiles)) {
|
|
209
|
+
files.push({ fullPath, relativePath });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return files;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async function canonicalCapture(root) {
|
|
216
|
+
const referencesRoot = path.join(root, ...CANONICAL_REFERENCES_PATH.split("/"));
|
|
217
|
+
const manifestPath = path.join(referencesRoot, "_canonical-corpus", "manifest.json");
|
|
218
|
+
try {
|
|
219
|
+
await fs.lstat(manifestPath);
|
|
220
|
+
} catch (error) {
|
|
221
|
+
if (error instanceof Error && error.code === "ENOENT") return new Map();
|
|
222
|
+
throw new CanonicalCorpusError(`cannot inspect canonical corpus manifest: ${error instanceof Error ? error.message : String(error)}`);
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const report = await verifyCanonicalFrontendCorpus(referencesRoot);
|
|
226
|
+
return new Map(report.protectedPaths.map((relativePath) => {
|
|
227
|
+
const record = report.capturedFiles.get(relativePath);
|
|
228
|
+
if (!Buffer.isBuffer(record?.bytes) || !record.snapshot) throw new Error(`verified capture missing for ${relativePath}`);
|
|
229
|
+
return [`${CANONICAL_REFERENCES_PATH}/${relativePath}`, record];
|
|
230
|
+
}));
|
|
231
|
+
} catch (error) {
|
|
232
|
+
throw new CanonicalCorpusError(error instanceof Error ? error.message : String(error));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function scanText(relativePath, text) {
|
|
237
|
+
if (text.includes("\u0000")) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const matches = [];
|
|
242
|
+
const lines = text.split(/\r?\n/);
|
|
243
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {
|
|
244
|
+
const line = lines[lineIndex];
|
|
245
|
+
for (const tokenMatch of line.matchAll(TOKEN_PATTERN)) {
|
|
246
|
+
matches.push({
|
|
247
|
+
path: relativePath,
|
|
248
|
+
lineNumber: lineIndex + 1,
|
|
249
|
+
token: tokenMatch[1].toLowerCase(),
|
|
250
|
+
line
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return matches;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function redactExternalPath(relativePath, terms) {
|
|
258
|
+
return terms.reduce((current, term) => current.replace(new RegExp(escapeRegex(term.value), "giu"), `[${term.id}]`), relativePath);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function scanExternalText(relativePath, text, terms) {
|
|
262
|
+
if (text.includes("\u0000")) {
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const redactedPath = redactExternalPath(relativePath, terms);
|
|
267
|
+
const matches = [];
|
|
268
|
+
const lines = text.split(/\r?\n/);
|
|
269
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {
|
|
270
|
+
const line = lines[lineIndex];
|
|
271
|
+
for (const term of terms) {
|
|
272
|
+
const pattern = term.matchMode === "bounded"
|
|
273
|
+
? new RegExp(`(?<![A-Za-z0-9_])${escapeRegex(term.value)}(?![A-Za-z0-9_])`, "giu")
|
|
274
|
+
: new RegExp(escapeRegex(term.value), "giu");
|
|
275
|
+
for (const match of line.matchAll(pattern)) {
|
|
276
|
+
matches.push({
|
|
277
|
+
path: redactedPath,
|
|
278
|
+
lineNumber: lineIndex + 1,
|
|
279
|
+
column: (match.index ?? 0) + 1,
|
|
280
|
+
termId: term.id
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return matches;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
function scanCaptured(capturedFiles, scanner) {
|
|
289
|
+
let canonicalBytesScanned = 0;
|
|
290
|
+
let canonicalProtectedMatches = 0;
|
|
291
|
+
for (const [relativePath, record] of capturedFiles) {
|
|
292
|
+
canonicalBytesScanned += record.bytes.byteLength;
|
|
293
|
+
canonicalProtectedMatches += scanner(relativePath, record.bytes.toString("utf8")).length;
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
canonicalFilesScanned: capturedFiles.size,
|
|
297
|
+
canonicalBytesScanned,
|
|
298
|
+
canonicalProtectedMatches
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
async function revalidateCapturedFiles(capturedFiles) {
|
|
303
|
+
for (const [relativePath, record] of capturedFiles) {
|
|
304
|
+
try {
|
|
305
|
+
await revalidateStableRegularFile(record.snapshot);
|
|
306
|
+
} catch (error) {
|
|
307
|
+
throw new CanonicalCorpusError(
|
|
308
|
+
`canonical snapshot revalidation failed for ${relativePath}: ${error instanceof Error ? error.message : String(error)}`
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
async function scan(root, allowlist, extraSkippedFiles, capturedFiles) {
|
|
315
|
+
const skippedDirectories = capturedFiles.size > 0 ? new Set([CANONICAL_REFERENCES_PATH]) : new Set();
|
|
316
|
+
const files = await collectFiles(root, extraSkippedFiles, skippedDirectories);
|
|
317
|
+
const matches = [];
|
|
318
|
+
for (const file of files) {
|
|
319
|
+
const text = await fs.readFile(file.fullPath, "utf8");
|
|
320
|
+
matches.push(...scanText(file.relativePath, text));
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
const unallowlisted = matches.filter((match) => !isAllowed(match, allowlist));
|
|
324
|
+
return {
|
|
325
|
+
allowedCount: matches.length - unallowlisted.length,
|
|
326
|
+
unallowlisted,
|
|
327
|
+
...scanCaptured(capturedFiles, scanText)
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
async function scanExternal(root, terms, extraSkippedFiles, capturedFiles) {
|
|
332
|
+
const skippedDirectories = capturedFiles.size > 0 ? new Set([CANONICAL_REFERENCES_PATH]) : new Set();
|
|
333
|
+
const files = await collectFiles(root, extraSkippedFiles, skippedDirectories);
|
|
334
|
+
const unallowlisted = [];
|
|
335
|
+
for (const file of files) {
|
|
336
|
+
const text = await fs.readFile(file.fullPath, "utf8");
|
|
337
|
+
unallowlisted.push(...scanExternalText(file.relativePath, text, terms));
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
ok: unallowlisted.length === 0,
|
|
341
|
+
unallowlisted,
|
|
342
|
+
...scanCaptured(capturedFiles, (relativePath, text) => scanExternalText(relativePath, text, terms))
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export async function scanLegacyTokens(options, hooks = {}) {
|
|
347
|
+
const root = path.resolve(options.root);
|
|
348
|
+
const capturedFiles = await canonicalCapture(root);
|
|
349
|
+
let mode;
|
|
350
|
+
let result;
|
|
351
|
+
if (options.externalTermsPath !== undefined) {
|
|
352
|
+
const terms = await readExternalTerms(options.externalTermsPath);
|
|
353
|
+
const termsRelativePath = normalizeRelativePath(path.relative(root, options.externalTermsPath));
|
|
354
|
+
result = await scanExternal(root, terms, new Set([termsRelativePath]), capturedFiles);
|
|
355
|
+
mode = "external";
|
|
356
|
+
} else {
|
|
357
|
+
const allowlist = await readAllowlist(options.allowlistPath);
|
|
358
|
+
const allowlistRelativePath = normalizeRelativePath(path.relative(root, options.allowlistPath));
|
|
359
|
+
result = await scan(root, allowlist, new Set([allowlistRelativePath]), capturedFiles);
|
|
360
|
+
mode = "legacy";
|
|
361
|
+
}
|
|
362
|
+
if (typeof hooks.afterCanonicalScan === "function") await hooks.afterCanonicalScan();
|
|
363
|
+
await revalidateCapturedFiles(capturedFiles);
|
|
364
|
+
return { mode, result };
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function printMatches(matches) {
|
|
368
|
+
for (const match of matches) {
|
|
369
|
+
console.log(`${match.path}:${match.lineNumber}: ${match.line}`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
async function main() {
|
|
374
|
+
try {
|
|
375
|
+
const options = parseArgs(process.argv.slice(2));
|
|
376
|
+
const root = path.resolve(options.root);
|
|
377
|
+
const externalTermsPath = options.externalTerms === undefined
|
|
378
|
+
? undefined
|
|
379
|
+
: path.isAbsolute(options.externalTerms)
|
|
380
|
+
? options.externalTerms
|
|
381
|
+
: path.resolve(root, options.externalTerms);
|
|
382
|
+
const allowlistPath = path.isAbsolute(options.allowlist)
|
|
383
|
+
? options.allowlist
|
|
384
|
+
: path.resolve(root, options.allowlist);
|
|
385
|
+
const execution = await scanLegacyTokens({ root, externalTermsPath, allowlistPath });
|
|
386
|
+
const result = execution.result;
|
|
387
|
+
if (options.externalTerms !== undefined) {
|
|
388
|
+
if (options.json) {
|
|
389
|
+
console.log(JSON.stringify(result));
|
|
390
|
+
} else if (result.unallowlisted.length > 0) {
|
|
391
|
+
console.log(`external-term scan failed: ${result.unallowlisted.length} unallowlisted match(es)`);
|
|
392
|
+
for (const match of result.unallowlisted) {
|
|
393
|
+
console.log(`${match.path}:${match.lineNumber} [${match.termId}]`);
|
|
394
|
+
}
|
|
395
|
+
} else {
|
|
396
|
+
console.log("external-term scan passed: no matches");
|
|
397
|
+
}
|
|
398
|
+
process.exitCode = result.unallowlisted.length > 0 ? 1 : 0;
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
if (options.json) {
|
|
402
|
+
console.log(JSON.stringify({ ok: result.unallowlisted.length === 0, ...result }));
|
|
403
|
+
process.exitCode = result.unallowlisted.length > 0 ? 1 : 0;
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (result.unallowlisted.length > 0) {
|
|
408
|
+
console.log(`legacy-token scan failed: ${result.unallowlisted.length} unallowlisted match(es)`);
|
|
409
|
+
printMatches(result.unallowlisted);
|
|
410
|
+
process.exitCode = 1;
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
const suffix = result.allowedCount === 1 ? "match" : "matches";
|
|
415
|
+
console.log(`legacy-token scan passed: allowed ${result.allowedCount} ${suffix}`);
|
|
416
|
+
} catch (error) {
|
|
417
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
418
|
+
const prefix = error instanceof CanonicalCorpusError
|
|
419
|
+
? "canonical corpus scanner error"
|
|
420
|
+
: error instanceof ExternalTermError
|
|
421
|
+
? "external-term scanner error"
|
|
422
|
+
: "legacy-token allowlist error";
|
|
423
|
+
console.error(`${prefix}: ${message}`);
|
|
424
|
+
process.exitCode = 2;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
if (
|
|
429
|
+
process.argv[1]
|
|
430
|
+
&& await fs.realpath(process.argv[1]) === await fs.realpath(fileURLToPath(import.meta.url))
|
|
431
|
+
) await main();
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "litopencode.version-lockstep/v1",
|
|
3
|
+
"note": "Every tracked file carrying the release version is classified here. Pinned sites move with a release; history retains prior headings; derived sites are regenerated by npm.",
|
|
4
|
+
"manifests": [
|
|
5
|
+
{
|
|
6
|
+
"path": "CHANGELOG.md",
|
|
7
|
+
"kind": "history",
|
|
8
|
+
"occurrences": 1,
|
|
9
|
+
"why": "Release history retains prior headings; the current release heading must be present without rewriting older entries."
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"path": "README-Ko-KR.md",
|
|
13
|
+
"kind": "pinned",
|
|
14
|
+
"occurrences": 1,
|
|
15
|
+
"why": "The landing page identifies the current checkout version; the repository-owned cover is version-free."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "README.md",
|
|
19
|
+
"kind": "pinned",
|
|
20
|
+
"occurrences": 1,
|
|
21
|
+
"why": "The landing page identifies the current checkout version; the repository-owned cover is version-free."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "docs/assets/readme/badge-version.svg",
|
|
25
|
+
"kind": "pinned",
|
|
26
|
+
"occurrences": 3,
|
|
27
|
+
"why": "The local candidate badge repeats the checkout version in its accessible label, title, and visible text; it does not claim registry availability."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "docs/release-checklist.md",
|
|
31
|
+
"kind": "pinned",
|
|
32
|
+
"occurrences": 1,
|
|
33
|
+
"why": "The release checklist heading identifies the package release under review."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "package-lock.json",
|
|
37
|
+
"kind": "derived",
|
|
38
|
+
"occurrences": 2,
|
|
39
|
+
"why": "The root and package entry are generated by npm and are already checked against package.json."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": "package.json",
|
|
43
|
+
"kind": "pinned",
|
|
44
|
+
"occurrences": 1,
|
|
45
|
+
"why": "This package manifest is the source of truth used by the lockstep guard."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"path": "test/pack-payload.test.mjs",
|
|
49
|
+
"kind": "pinned",
|
|
50
|
+
"occurrences": 1,
|
|
51
|
+
"why": "Pre-existing generic pack-boundary fixture happens to match the release version. Retain its fixture version; remove this inventory entry when it no longer matches the current release."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"path": "test/package-identity.test.mjs",
|
|
55
|
+
"kind": "pinned",
|
|
56
|
+
"occurrences": 1,
|
|
57
|
+
"why": "The exact approved local release version assertion advances with package.json; historical migration fixtures retain their original versions."
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"allowImportingTsExtensions": true,
|
|
9
|
+
"verbatimModuleSyntax": true,
|
|
10
|
+
"skipLibCheck": true
|
|
11
|
+
},
|
|
12
|
+
"include": ["src/**/*.ts"]
|
|
13
|
+
}
|
package/vendor/NOTICE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Scientific visualization notice
|
|
2
|
+
|
|
3
|
+
The LitOpenCode adapter, the complete authored source payload under
|
|
4
|
+
`vendor/scientific-visualization/`, and the
|
|
5
|
+
distribution metadata in this directory are included under the adjacent MIT license with
|
|
6
|
+
the author's explicit authorization.
|
|
7
|
+
|
|
8
|
+
The `vendor/scientific-visualization/references/mdanalysis_martini_visualization.md` reference contains CP/SDS
|
|
9
|
+
selection examples derived from the author's own coarse-grained emulsion workflow. They
|
|
10
|
+
are illustrative labels and selections, not third-party trajectory data, parameter files,
|
|
11
|
+
or a claim that the same residue naming applies to another simulation.
|
|
12
|
+
|
|
13
|
+
The palette guidance identifies established public color schemes by their customary
|
|
14
|
+
names: Okabe-Ito, Bang Wong, and Paul Tol. The exact authored payload retains its existing
|
|
15
|
+
attribution and resource links. Those names identify the palette sources and do not imply
|
|
16
|
+
endorsement of LitOpenCode. Publisher and journal names in the reference corpus likewise
|
|
17
|
+
identify target formatting surfaces; always verify their current official instructions.
|
|
18
|
+
|
|
19
|
+
Matplotlib, NumPy, seaborn, pandas, Plotly, SciPy, colorspacious, MDAnalysis, kaleido, and
|
|
20
|
+
other named tools are separate projects with their own licenses. They are not bundled as
|
|
21
|
+
npm dependencies by this skill payload.
|