@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,274 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
export class LitOpenCodeConfigError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "LitOpenCodeConfigError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
const logLevels = new Set(["silent", "error", "info", "debug"]);
|
|
9
|
+
const permissionModes = new Set(["safe", "balanced", "yolo"]);
|
|
10
|
+
const outputStyleIds = new Set(["off", "asd-ste100", "asd-ste100-ko", "eli5", "eli5-ko"]);
|
|
11
|
+
const reasoningEfforts = new Set(["none", "minimal", "low", "medium", "high", "xhigh", "max"]);
|
|
12
|
+
const textVerbosities = new Set(["low", "medium", "high"]);
|
|
13
|
+
const toolIds = new Set(["read", "write", "edit", "bash", "webfetch", "grep"]);
|
|
14
|
+
const permissions = new Set(["ask", "allow", "deny"]);
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function optionalString(value, filePath, field) {
|
|
19
|
+
if (value === undefined || value === null)
|
|
20
|
+
return undefined;
|
|
21
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
22
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be a non-empty string.`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function optionalBoolean(value, filePath, field) {
|
|
27
|
+
if (value === undefined || value === null)
|
|
28
|
+
return undefined;
|
|
29
|
+
if (typeof value !== "boolean") {
|
|
30
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be boolean.`);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function optionalNumber(value, filePath, field) {
|
|
35
|
+
if (value === undefined || value === null)
|
|
36
|
+
return undefined;
|
|
37
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
38
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be a finite number.`);
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function boundedInteger(value, filePath, field, minimum, maximum) {
|
|
43
|
+
if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
|
|
44
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be an integer between ${minimum} and ${maximum}.`);
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
function parseBoundedAuthority(value, filePath) {
|
|
49
|
+
if (value === undefined || value === null)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (!isRecord(value)) {
|
|
52
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: boundedAuthority must be an object.`);
|
|
53
|
+
}
|
|
54
|
+
const supported = new Set(["maxEvents", "maxHistory", "maxReceipts", "maxContextBytes"]);
|
|
55
|
+
for (const key of Object.keys(value)) {
|
|
56
|
+
if (!supported.has(key)) {
|
|
57
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: boundedAuthority.${key} is not a supported setting.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const parsed = {};
|
|
61
|
+
if (value.maxEvents !== undefined)
|
|
62
|
+
parsed.maxEvents = boundedInteger(value.maxEvents, filePath, "boundedAuthority.maxEvents", 2, 512);
|
|
63
|
+
if (value.maxHistory !== undefined)
|
|
64
|
+
parsed.maxHistory = boundedInteger(value.maxHistory, filePath, "boundedAuthority.maxHistory", 1, 256);
|
|
65
|
+
if (value.maxReceipts !== undefined)
|
|
66
|
+
parsed.maxReceipts = boundedInteger(value.maxReceipts, filePath, "boundedAuthority.maxReceipts", 4, 512);
|
|
67
|
+
if (value.maxContextBytes !== undefined) {
|
|
68
|
+
parsed.maxContextBytes = boundedInteger(value.maxContextBytes, filePath, "boundedAuthority.maxContextBytes", 1024, 1_048_576);
|
|
69
|
+
}
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
function parseKnowledge(value, filePath) {
|
|
73
|
+
if (value === undefined || value === null)
|
|
74
|
+
return undefined;
|
|
75
|
+
if (!isRecord(value)) {
|
|
76
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: knowledge must be an object.`);
|
|
77
|
+
}
|
|
78
|
+
for (const key of Object.keys(value)) {
|
|
79
|
+
if (key !== "capture") {
|
|
80
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: knowledge.${key} is not a supported setting.`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const capture = optionalBoolean(value.capture, filePath, "knowledge.capture");
|
|
84
|
+
return capture === undefined ? {} : { capture };
|
|
85
|
+
}
|
|
86
|
+
function optionalReasoningEffort(value, filePath, field) {
|
|
87
|
+
if (value === undefined || value === null)
|
|
88
|
+
return undefined;
|
|
89
|
+
if (typeof value !== "string" || !reasoningEfforts.has(value)) {
|
|
90
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be one of none, minimal, low, medium, high, xhigh, max.`);
|
|
91
|
+
}
|
|
92
|
+
return value;
|
|
93
|
+
}
|
|
94
|
+
function optionalTextVerbosity(value, filePath, field) {
|
|
95
|
+
if (value === undefined || value === null)
|
|
96
|
+
return undefined;
|
|
97
|
+
if (typeof value !== "string" || !textVerbosities.has(value)) {
|
|
98
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be one of low, medium, high.`);
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
function parseTools(value, filePath, field) {
|
|
103
|
+
if (value === undefined || value === null)
|
|
104
|
+
return undefined;
|
|
105
|
+
if (!isRecord(value)) {
|
|
106
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be an object.`);
|
|
107
|
+
}
|
|
108
|
+
const tools = {};
|
|
109
|
+
for (const [tool, enabled] of Object.entries(value)) {
|
|
110
|
+
if (!toolIds.has(tool)) {
|
|
111
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field}.${tool} is not a supported tool id.`);
|
|
112
|
+
}
|
|
113
|
+
if (typeof enabled !== "boolean") {
|
|
114
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field}.${tool} must be boolean.`);
|
|
115
|
+
}
|
|
116
|
+
tools[tool] = enabled;
|
|
117
|
+
}
|
|
118
|
+
return tools;
|
|
119
|
+
}
|
|
120
|
+
function parsePermission(value, filePath, field) {
|
|
121
|
+
if (value === undefined || value === null)
|
|
122
|
+
return undefined;
|
|
123
|
+
if (!isRecord(value)) {
|
|
124
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be an object.`);
|
|
125
|
+
}
|
|
126
|
+
const parsed = {};
|
|
127
|
+
for (const key of ["edit", "bash", "webfetch"]) {
|
|
128
|
+
const permission = value[key];
|
|
129
|
+
if (permission === undefined || permission === null)
|
|
130
|
+
continue;
|
|
131
|
+
if (typeof permission !== "string" || !permissions.has(permission)) {
|
|
132
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field}.${key} must be one of ask, allow, deny.`);
|
|
133
|
+
}
|
|
134
|
+
parsed[key] = permission;
|
|
135
|
+
}
|
|
136
|
+
return Object.keys(parsed).length > 0 ? parsed : undefined;
|
|
137
|
+
}
|
|
138
|
+
function assertJsonValue(value, filePath, field) {
|
|
139
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
140
|
+
return;
|
|
141
|
+
if (typeof value === "number") {
|
|
142
|
+
if (!Number.isFinite(value)) {
|
|
143
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be finite JSON.`);
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (Array.isArray(value)) {
|
|
148
|
+
for (const [index, item] of value.entries())
|
|
149
|
+
assertJsonValue(item, filePath, `${field}[${index}]`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (isRecord(value)) {
|
|
153
|
+
for (const [key, item] of Object.entries(value))
|
|
154
|
+
assertJsonValue(item, filePath, `${field}.${key}`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be JSON-compatible.`);
|
|
158
|
+
}
|
|
159
|
+
function parseProviderOptions(value, filePath, field) {
|
|
160
|
+
if (value === undefined || value === null)
|
|
161
|
+
return undefined;
|
|
162
|
+
if (!isRecord(value)) {
|
|
163
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be an object.`);
|
|
164
|
+
}
|
|
165
|
+
assertJsonValue(value, filePath, field);
|
|
166
|
+
return value;
|
|
167
|
+
}
|
|
168
|
+
function removeUndefined(value) {
|
|
169
|
+
for (const key of Object.keys(value)) {
|
|
170
|
+
if (value[key] === undefined)
|
|
171
|
+
delete value[key];
|
|
172
|
+
}
|
|
173
|
+
return value;
|
|
174
|
+
}
|
|
175
|
+
function parseAgentModelConfig(value, filePath, field) {
|
|
176
|
+
if (!isRecord(value)) {
|
|
177
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be an object.`);
|
|
178
|
+
}
|
|
179
|
+
return removeUndefined({
|
|
180
|
+
provider: optionalString(value.provider, filePath, `${field}.provider`),
|
|
181
|
+
model: optionalString(value.model, filePath, `${field}.model`),
|
|
182
|
+
variant: optionalString(value.variant, filePath, `${field}.variant`),
|
|
183
|
+
category: optionalString(value.category, filePath, `${field}.category`),
|
|
184
|
+
reasoningEffort: optionalReasoningEffort(value.reasoningEffort, filePath, `${field}.reasoningEffort`),
|
|
185
|
+
textVerbosity: optionalTextVerbosity(value.textVerbosity, filePath, `${field}.textVerbosity`),
|
|
186
|
+
thinking: optionalBoolean(value.thinking, filePath, `${field}.thinking`),
|
|
187
|
+
temperature: optionalNumber(value.temperature, filePath, `${field}.temperature`),
|
|
188
|
+
topP: optionalNumber(value.topP ?? value.top_p, filePath, `${field}.topP`),
|
|
189
|
+
maxTokens: optionalNumber(value.maxTokens, filePath, `${field}.maxTokens`),
|
|
190
|
+
promptAppend: optionalString(value.promptAppend ?? value.prompt_append, filePath, `${field}.promptAppend`),
|
|
191
|
+
tools: parseTools(value.tools, filePath, `${field}.tools`),
|
|
192
|
+
permission: parsePermission(value.permission, filePath, `${field}.permission`),
|
|
193
|
+
providerOptions: parseProviderOptions(value.providerOptions, filePath, `${field}.providerOptions`)
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
function parseCategoryConfig(value, filePath, field) {
|
|
197
|
+
const parsed = parseAgentModelConfig(value, filePath, field);
|
|
198
|
+
const { category: _category, ...categoryConfig } = parsed;
|
|
199
|
+
return categoryConfig;
|
|
200
|
+
}
|
|
201
|
+
function parseNamedMap(value, filePath, field, parseItem) {
|
|
202
|
+
if (value === undefined || value === null)
|
|
203
|
+
return {};
|
|
204
|
+
if (!isRecord(value)) {
|
|
205
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} must be an object.`);
|
|
206
|
+
}
|
|
207
|
+
const parsed = {};
|
|
208
|
+
for (const [key, item] of Object.entries(value)) {
|
|
209
|
+
if (key.trim().length === 0) {
|
|
210
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${field} keys must be non-empty.`);
|
|
211
|
+
}
|
|
212
|
+
parsed[key] = parseItem(item, filePath, `${field}.${key}`);
|
|
213
|
+
}
|
|
214
|
+
return parsed;
|
|
215
|
+
}
|
|
216
|
+
function parseConfig(value, filePath) {
|
|
217
|
+
if (!isRecord(value)) {
|
|
218
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: expected a JSON object.`);
|
|
219
|
+
}
|
|
220
|
+
const config = {};
|
|
221
|
+
if ("enabled" in value) {
|
|
222
|
+
if (typeof value.enabled !== "boolean") {
|
|
223
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: enabled must be boolean.`);
|
|
224
|
+
}
|
|
225
|
+
config.enabled = value.enabled;
|
|
226
|
+
}
|
|
227
|
+
if ("logLevel" in value) {
|
|
228
|
+
if (typeof value.logLevel !== "string" || !logLevels.has(value.logLevel)) {
|
|
229
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: logLevel must be one of silent, error, info, debug.`);
|
|
230
|
+
}
|
|
231
|
+
config.logLevel = value.logLevel;
|
|
232
|
+
}
|
|
233
|
+
if ("permissionMode" in value) {
|
|
234
|
+
if (typeof value.permissionMode !== "string" || !permissionModes.has(value.permissionMode)) {
|
|
235
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: permissionMode must be one of safe, balanced, yolo.`);
|
|
236
|
+
}
|
|
237
|
+
config.permissionMode = value.permissionMode;
|
|
238
|
+
}
|
|
239
|
+
if ("outputStyle" in value) {
|
|
240
|
+
if (typeof value.outputStyle !== "string" || !outputStyleIds.has(value.outputStyle)) {
|
|
241
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: outputStyle must be one of off, asd-ste100, asd-ste100-ko, eli5, eli5-ko.`);
|
|
242
|
+
}
|
|
243
|
+
config.outputStyle = value.outputStyle;
|
|
244
|
+
}
|
|
245
|
+
if ("boundedAuthority" in value) {
|
|
246
|
+
config.boundedAuthority = parseBoundedAuthority(value.boundedAuthority, filePath);
|
|
247
|
+
}
|
|
248
|
+
if ("knowledge" in value) {
|
|
249
|
+
config.knowledge = parseKnowledge(value.knowledge, filePath);
|
|
250
|
+
}
|
|
251
|
+
config.categories = parseNamedMap(value.categories, filePath, "categories", parseCategoryConfig);
|
|
252
|
+
config.agents = parseNamedMap(value.agents, filePath, "agents", parseAgentModelConfig);
|
|
253
|
+
return config;
|
|
254
|
+
}
|
|
255
|
+
export async function readLitOpenCodeConfigFile(filePath) {
|
|
256
|
+
let raw;
|
|
257
|
+
try {
|
|
258
|
+
raw = await fs.readFile(filePath, "utf8");
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT")
|
|
262
|
+
return undefined;
|
|
263
|
+
throw error;
|
|
264
|
+
}
|
|
265
|
+
let parsed;
|
|
266
|
+
try {
|
|
267
|
+
parsed = JSON.parse(raw);
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
const reason = error instanceof Error ? error.message : "invalid JSON";
|
|
271
|
+
throw new LitOpenCodeConfigError(`Malformed LitOpenCode config at ${filePath}: ${reason}`);
|
|
272
|
+
}
|
|
273
|
+
return parseConfig(parsed, filePath);
|
|
274
|
+
}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type RuntimePaths } from "./state.ts";
|
|
2
|
+
import type { AgentPermission, AgentToolId } from "./agents/types.ts";
|
|
3
|
+
export { LitOpenCodeConfigError, readLitOpenCodeConfigFile } from "./config-parser.ts";
|
|
4
|
+
export type LogLevel = "silent" | "error" | "info" | "debug";
|
|
5
|
+
export type LitOpenCodeConfigSource = "defaults" | "global" | "project" | "merged";
|
|
6
|
+
export type LitOpenCodePermissionMode = "safe" | "balanced" | "yolo";
|
|
7
|
+
export type ReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
8
|
+
export type TextVerbosity = "low" | "medium" | "high";
|
|
9
|
+
export type BoundedAuthorityConfig = {
|
|
10
|
+
readonly maxEvents: number;
|
|
11
|
+
readonly maxHistory: number;
|
|
12
|
+
readonly maxReceipts: number;
|
|
13
|
+
readonly maxContextBytes: number;
|
|
14
|
+
};
|
|
15
|
+
export type KnowledgeConfig = {
|
|
16
|
+
readonly capture: boolean;
|
|
17
|
+
};
|
|
18
|
+
export type JsonScalar = string | number | boolean | null;
|
|
19
|
+
export type JsonObject = {
|
|
20
|
+
readonly [key: string]: JsonValue;
|
|
21
|
+
};
|
|
22
|
+
export type JsonValue = JsonScalar | readonly JsonValue[] | JsonObject;
|
|
23
|
+
export type LitOpenCodeAgentModelConfig = {
|
|
24
|
+
readonly provider?: string;
|
|
25
|
+
readonly model?: string;
|
|
26
|
+
readonly variant?: string;
|
|
27
|
+
readonly category?: string;
|
|
28
|
+
readonly reasoningEffort?: ReasoningEffort;
|
|
29
|
+
readonly textVerbosity?: TextVerbosity;
|
|
30
|
+
readonly thinking?: boolean;
|
|
31
|
+
readonly temperature?: number;
|
|
32
|
+
readonly topP?: number;
|
|
33
|
+
readonly maxTokens?: number;
|
|
34
|
+
readonly promptAppend?: string;
|
|
35
|
+
readonly tools?: Partial<Record<AgentToolId, boolean>>;
|
|
36
|
+
readonly permission?: {
|
|
37
|
+
readonly edit?: AgentPermission;
|
|
38
|
+
readonly bash?: AgentPermission;
|
|
39
|
+
readonly webfetch?: AgentPermission;
|
|
40
|
+
};
|
|
41
|
+
readonly providerOptions?: JsonObject;
|
|
42
|
+
};
|
|
43
|
+
export type LitOpenCodeCategoryConfig = Omit<LitOpenCodeAgentModelConfig, "category">;
|
|
44
|
+
export type LitOpenCodeConfig = {
|
|
45
|
+
enabled: boolean;
|
|
46
|
+
logLevel: LogLevel;
|
|
47
|
+
permissionMode: LitOpenCodePermissionMode;
|
|
48
|
+
outputStyle: string;
|
|
49
|
+
boundedAuthority: BoundedAuthorityConfig;
|
|
50
|
+
knowledge: KnowledgeConfig;
|
|
51
|
+
agents: Record<string, LitOpenCodeAgentModelConfig>;
|
|
52
|
+
categories: Record<string, LitOpenCodeCategoryConfig>;
|
|
53
|
+
};
|
|
54
|
+
export type LoadedConfig = {
|
|
55
|
+
config: LitOpenCodeConfig;
|
|
56
|
+
paths: RuntimePaths;
|
|
57
|
+
source: LitOpenCodeConfigSource;
|
|
58
|
+
sources: readonly string[];
|
|
59
|
+
};
|
|
60
|
+
type AuthoredConfigSections = {
|
|
61
|
+
readonly categories: ReadonlySet<string>;
|
|
62
|
+
readonly agents: ReadonlySet<string>;
|
|
63
|
+
};
|
|
64
|
+
export declare function configSectionWasAuthored(config: LitOpenCodeConfig, section: keyof AuthoredConfigSections, id: string): boolean;
|
|
65
|
+
export declare const defaultConfig: LitOpenCodeConfig;
|
|
66
|
+
export declare const litOpenCodeConfigSchema = "https://litopencode.dev/config.schema.json";
|
|
67
|
+
export declare function mergeAgentModelConfig(base: LitOpenCodeAgentModelConfig | undefined, override: LitOpenCodeAgentModelConfig | undefined): LitOpenCodeAgentModelConfig;
|
|
68
|
+
export declare function mergeConfigs(base: LitOpenCodeConfig, override: Partial<LitOpenCodeConfig>): LitOpenCodeConfig;
|
|
69
|
+
export declare function defaultGlobalConfigFile(): LitOpenCodeConfig;
|
|
70
|
+
export declare function defaultGlobalConfigJson(): Record<string, unknown>;
|
|
71
|
+
export declare function effectiveAgentConfig(config: LitOpenCodeConfig, agentId: string): LitOpenCodeAgentModelConfig;
|
|
72
|
+
export declare function loadConfig(projectRoot: string): Promise<LoadedConfig>;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { createRuntimePaths } from "./state.js";
|
|
2
|
+
import { readLitOpenCodeConfigFile } from "./config-parser.js";
|
|
3
|
+
export { LitOpenCodeConfigError, readLitOpenCodeConfigFile } from "./config-parser.js";
|
|
4
|
+
// The runtime receives a merged config, so keep source ownership alongside
|
|
5
|
+
// (rather than inside) the JSON-shaped config. This never serializes into a
|
|
6
|
+
// user file and lets the host hook distinguish a fresh default from an
|
|
7
|
+
// explicit value that happens to equal that default.
|
|
8
|
+
const authoredConfigSections = new WeakMap();
|
|
9
|
+
export function configSectionWasAuthored(config, section, id) {
|
|
10
|
+
return authoredConfigSections.get(config)?.[section].has(id) ?? false;
|
|
11
|
+
}
|
|
12
|
+
export const defaultConfig = Object.freeze({
|
|
13
|
+
enabled: true,
|
|
14
|
+
logLevel: "info",
|
|
15
|
+
permissionMode: "safe",
|
|
16
|
+
outputStyle: "off",
|
|
17
|
+
boundedAuthority: Object.freeze({
|
|
18
|
+
maxEvents: 64,
|
|
19
|
+
maxHistory: 32,
|
|
20
|
+
maxReceipts: 64,
|
|
21
|
+
maxContextBytes: 65_536
|
|
22
|
+
}),
|
|
23
|
+
knowledge: Object.freeze({ capture: true }),
|
|
24
|
+
categories: Object.freeze({
|
|
25
|
+
planning: Object.freeze({
|
|
26
|
+
provider: "openai",
|
|
27
|
+
model: "gpt-6-astra",
|
|
28
|
+
variant: "xhigh",
|
|
29
|
+
textVerbosity: "medium"
|
|
30
|
+
}),
|
|
31
|
+
execution: Object.freeze({
|
|
32
|
+
provider: "openai",
|
|
33
|
+
model: "gpt-5.6-luna",
|
|
34
|
+
variant: "max",
|
|
35
|
+
textVerbosity: "medium"
|
|
36
|
+
}),
|
|
37
|
+
review: Object.freeze({
|
|
38
|
+
provider: "openai",
|
|
39
|
+
model: "gpt-6-astra",
|
|
40
|
+
variant: "xhigh",
|
|
41
|
+
textVerbosity: "medium"
|
|
42
|
+
}),
|
|
43
|
+
research: Object.freeze({
|
|
44
|
+
provider: "openai",
|
|
45
|
+
model: "gpt-5.6-luna",
|
|
46
|
+
variant: "max",
|
|
47
|
+
textVerbosity: "medium"
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
agents: Object.freeze({
|
|
51
|
+
"lit-loop": Object.freeze({ category: "execution" }),
|
|
52
|
+
"lit-plan": Object.freeze({ category: "planning" }),
|
|
53
|
+
"lit-implement": Object.freeze({ category: "execution" }),
|
|
54
|
+
"lit-architect": Object.freeze({ category: "planning" }),
|
|
55
|
+
"lit-forge": Object.freeze({ category: "execution" }),
|
|
56
|
+
"lit-oracle": Object.freeze({ category: "review" }),
|
|
57
|
+
"lit-prover": Object.freeze({ category: "review" }),
|
|
58
|
+
"lit-sentinel": Object.freeze({ category: "review" }),
|
|
59
|
+
"lit-librarian": Object.freeze({ category: "research" }),
|
|
60
|
+
"lit-explorer": Object.freeze({ category: "research" }),
|
|
61
|
+
"lit-archive-researcher": Object.freeze({ category: "review" }),
|
|
62
|
+
"lit-verdict-oracle": Object.freeze({ category: "review" }),
|
|
63
|
+
"lit-strategy-planner": Object.freeze({ category: "planning" }),
|
|
64
|
+
"lit-forge-worker": Object.freeze({ category: "execution" }),
|
|
65
|
+
"lit-systems-architect": Object.freeze({ category: "planning" }),
|
|
66
|
+
"lit-critical-reviewer": Object.freeze({ category: "review" }),
|
|
67
|
+
"lit-context-cartographer": Object.freeze({ category: "review" }),
|
|
68
|
+
"lit-persistence-runner": Object.freeze({ category: "execution" })
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
export const litOpenCodeConfigSchema = "https://litopencode.dev/config.schema.json";
|
|
72
|
+
function cloneDefaultConfig() {
|
|
73
|
+
return mergeConfigs(defaultConfig, {});
|
|
74
|
+
}
|
|
75
|
+
export function mergeAgentModelConfig(base, override) {
|
|
76
|
+
const tools = { ...(base?.tools ?? {}), ...(override?.tools ?? {}) };
|
|
77
|
+
const permission = { ...(base?.permission ?? {}), ...(override?.permission ?? {}) };
|
|
78
|
+
const providerOptions = { ...(base?.providerOptions ?? {}), ...(override?.providerOptions ?? {}) };
|
|
79
|
+
return {
|
|
80
|
+
...(base ?? {}),
|
|
81
|
+
...(override ?? {}),
|
|
82
|
+
...(Object.keys(tools).length > 0 ? { tools } : {}),
|
|
83
|
+
...(Object.keys(permission).length > 0 ? { permission } : {}),
|
|
84
|
+
...(Object.keys(providerOptions).length > 0 ? { providerOptions } : {})
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function mergeConfigs(base, override) {
|
|
88
|
+
const categories = { ...base.categories };
|
|
89
|
+
for (const [id, category] of Object.entries(override.categories ?? {})) {
|
|
90
|
+
categories[id] = mergeAgentModelConfig(categories[id], category);
|
|
91
|
+
}
|
|
92
|
+
const agents = { ...base.agents };
|
|
93
|
+
for (const [id, agent] of Object.entries(override.agents ?? {})) {
|
|
94
|
+
agents[id] = mergeAgentModelConfig(agents[id], agent);
|
|
95
|
+
}
|
|
96
|
+
const merged = {
|
|
97
|
+
enabled: override.enabled ?? base.enabled,
|
|
98
|
+
logLevel: override.logLevel ?? base.logLevel,
|
|
99
|
+
permissionMode: override.permissionMode ?? base.permissionMode,
|
|
100
|
+
outputStyle: override.outputStyle ?? base.outputStyle,
|
|
101
|
+
boundedAuthority: {
|
|
102
|
+
...base.boundedAuthority,
|
|
103
|
+
...(override.boundedAuthority ?? {})
|
|
104
|
+
},
|
|
105
|
+
knowledge: {
|
|
106
|
+
...base.knowledge,
|
|
107
|
+
...(override.knowledge ?? {})
|
|
108
|
+
},
|
|
109
|
+
categories,
|
|
110
|
+
agents
|
|
111
|
+
};
|
|
112
|
+
const baseAuthored = authoredConfigSections.get(base);
|
|
113
|
+
authoredConfigSections.set(merged, {
|
|
114
|
+
categories: new Set([
|
|
115
|
+
...(baseAuthored?.categories ?? []),
|
|
116
|
+
...Object.keys(override.categories ?? {})
|
|
117
|
+
]),
|
|
118
|
+
agents: new Set([
|
|
119
|
+
...(baseAuthored?.agents ?? []),
|
|
120
|
+
...Object.keys(override.agents ?? {})
|
|
121
|
+
])
|
|
122
|
+
});
|
|
123
|
+
return merged;
|
|
124
|
+
}
|
|
125
|
+
export function defaultGlobalConfigFile() {
|
|
126
|
+
return cloneDefaultConfig();
|
|
127
|
+
}
|
|
128
|
+
export function defaultGlobalConfigJson() {
|
|
129
|
+
return {
|
|
130
|
+
"$schema": litOpenCodeConfigSchema,
|
|
131
|
+
...defaultGlobalConfigFile()
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export function effectiveAgentConfig(config, agentId) {
|
|
135
|
+
const agentConfig = config.agents[agentId] ?? {};
|
|
136
|
+
const categoryConfig = agentConfig.category ? config.categories[agentConfig.category] : undefined;
|
|
137
|
+
return mergeAgentModelConfig(categoryConfig, agentConfig);
|
|
138
|
+
}
|
|
139
|
+
export async function loadConfig(projectRoot) {
|
|
140
|
+
const paths = createRuntimePaths(projectRoot);
|
|
141
|
+
const globalConfig = await readLitOpenCodeConfigFile(paths.globalConfigFile);
|
|
142
|
+
const projectConfig = await readLitOpenCodeConfigFile(paths.configFile);
|
|
143
|
+
const sources = [];
|
|
144
|
+
let source = "defaults";
|
|
145
|
+
let config = cloneDefaultConfig();
|
|
146
|
+
if (globalConfig !== undefined) {
|
|
147
|
+
config = mergeConfigs(config, globalConfig);
|
|
148
|
+
sources.push(paths.globalConfigFile);
|
|
149
|
+
source = "global";
|
|
150
|
+
}
|
|
151
|
+
if (projectConfig !== undefined) {
|
|
152
|
+
config = mergeConfigs(config, projectConfig);
|
|
153
|
+
sources.push(paths.configFile);
|
|
154
|
+
source = source === "global" ? "merged" : "project";
|
|
155
|
+
}
|
|
156
|
+
return { config, paths, source, sources };
|
|
157
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ToolGuardAfterOutput, type ToolGuardRequest } from "./tool-guards.ts";
|
|
2
|
+
export declare const artifactGenres: readonly ["client_deliverable", "internal_analysis", "audit_report", "working_note", "no_artifact"];
|
|
3
|
+
export type ArtifactGenre = (typeof artifactGenres)[number];
|
|
4
|
+
export type LimitationsChannel = "reply" | "designated_section" | "methodology_paragraph" | "inline";
|
|
5
|
+
export type OutputChannelContract = {
|
|
6
|
+
readonly artifactGenre: ArtifactGenre;
|
|
7
|
+
readonly limitationsChannel: LimitationsChannel;
|
|
8
|
+
};
|
|
9
|
+
export type HedgeClass = "deferred" | "absent-evidence" | "scope-limit" | "negated-action" | "self-protection" | "process-meta";
|
|
10
|
+
export type DeliverableHedgeFinding = {
|
|
11
|
+
readonly className: HedgeClass;
|
|
12
|
+
readonly line: number;
|
|
13
|
+
};
|
|
14
|
+
export declare function readOutputChannelContract(skillId: string, root?: string): Promise<OutputChannelContract>;
|
|
15
|
+
export type DeliverableHedgeSessionState = {
|
|
16
|
+
readonly activate: (sessionID: string, routeId: string) => Promise<void>;
|
|
17
|
+
readonly clear: (sessionID: string) => void;
|
|
18
|
+
readonly dispose: () => void;
|
|
19
|
+
readonly contractFor: (sessionID: string) => {
|
|
20
|
+
readonly skillId: string;
|
|
21
|
+
readonly contract: OutputChannelContract;
|
|
22
|
+
} | undefined;
|
|
23
|
+
};
|
|
24
|
+
export declare function createDeliverableHedgeSessionState(root?: string): DeliverableHedgeSessionState;
|
|
25
|
+
export declare function inspectDeliverableHedges(text: string, genre: ArtifactGenre): readonly DeliverableHedgeFinding[];
|
|
26
|
+
export declare function applyDeliverableHedgeAfterHook(state: DeliverableHedgeSessionState, input: ToolGuardRequest, output: ToolGuardAfterOutput): Promise<void>;
|