@1aboveio/skills 0.0.0-stage → 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/README.md +30 -2
- package/bin/cli.mjs +14 -0
- package/bin/select-core.mjs +172 -0
- package/package.json +146 -4
- package/skills/app-dev/airflow/LICENSE +3 -0
- package/skills/app-dev/airflow/SKILL.md +199 -0
- package/skills/app-dev/airflow/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/LICENSE +3 -0
- package/skills/app-dev/android-foundation/SKILL.md +192 -0
- package/skills/app-dev/android-foundation/assets/android-ci-job.yml +217 -0
- package/skills/app-dev/android-foundation/references/ci.md +87 -0
- package/skills/app-dev/android-foundation/references/gotchas.md +221 -0
- package/skills/app-dev/android-foundation/references/setup.md +164 -0
- package/skills/app-dev/android-foundation/release-check.mjs +93 -0
- package/skills/app-dev/android-foundation/scripts/device-run.sh +176 -0
- package/skills/app-dev/android-foundation/scripts/device-run.test.mjs +172 -0
- package/skills/app-dev/app-debug/LICENSE +3 -0
- package/skills/app-dev/app-debug/SKILL.md +110 -0
- package/skills/app-dev/app-debug/references/common-errors.md +128 -0
- package/skills/app-dev/app-debug/release-check.mjs +93 -0
- package/skills/app-dev/better-auth/LICENSE +3 -0
- package/skills/app-dev/better-auth/SKILL.md +598 -0
- package/skills/app-dev/better-auth/references/feishu-api.md +270 -0
- package/skills/app-dev/better-auth/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/LICENSE +3 -0
- package/skills/app-dev/data-catalog/SKILL.md +204 -0
- package/skills/app-dev/data-catalog/agents/openai.yaml +3 -0
- package/skills/app-dev/data-catalog/references/data-catalog-conventions.md +75 -0
- package/skills/app-dev/data-catalog/references/field-definitions.md +116 -0
- package/skills/app-dev/data-catalog/references/format.md +121 -0
- package/skills/app-dev/data-catalog/release-check.mjs +93 -0
- package/skills/app-dev/data-catalog/scripts/data-catalog.test.mjs +36 -0
- package/skills/app-dev/data-catalog/scripts/data_catalog.py +1392 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +117 -0
- package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +17 -0
- package/skills/app-dev/data-catalog/scripts/test_data_catalog.py +571 -0
- package/skills/app-dev/ios-foundation/LICENSE +3 -0
- package/skills/app-dev/ios-foundation/SKILL.md +184 -0
- package/skills/app-dev/ios-foundation/references/setup.md +243 -0
- package/skills/app-dev/ios-foundation/release-check.mjs +93 -0
- package/skills/app-dev/monorepo/LICENSE +3 -0
- package/skills/app-dev/monorepo/SKILL.md +462 -0
- package/skills/app-dev/monorepo/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/LICENSE +3 -0
- package/skills/app-dev/nextjs-fullstack/SKILL.md +211 -0
- package/skills/app-dev/nextjs-fullstack/conventions.md +318 -0
- package/skills/app-dev/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/app-dev/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/app-dev/nextjs-fullstack/release-check.mjs +93 -0
- package/skills/app-dev/nextjs-fullstack/server-actions.md +409 -0
- package/skills/app-dev/prisma-setup/LICENSE +3 -0
- package/skills/app-dev/prisma-setup/SKILL.md +181 -0
- package/skills/app-dev/prisma-setup/nextjs.md +258 -0
- package/skills/app-dev/prisma-setup/release-check.mjs +93 -0
- package/skills/app-dev/prisma-setup/turborepo.md +301 -0
- package/skills/app-dev/pyspark/LICENSE +3 -0
- package/skills/app-dev/pyspark/SKILL.md +127 -0
- package/skills/app-dev/pyspark/assets/templates/etl.py +748 -0
- package/skills/app-dev/pyspark/assets/templates/utils/__init__.py +1 -0
- package/skills/app-dev/pyspark/assets/templates/utils/hudi_metadata.py +14 -0
- package/skills/app-dev/pyspark/references/diagnosis-and-profiling.md +169 -0
- package/skills/app-dev/pyspark/references/etl-contract.md +129 -0
- package/skills/app-dev/pyspark/references/production-validation.md +131 -0
- package/skills/app-dev/pyspark/references/reconciliation.md +38 -0
- package/skills/app-dev/pyspark/references/transformation-design.md +190 -0
- package/skills/app-dev/pyspark/references/velocity-feature-calculation.md +193 -0
- package/skills/app-dev/pyspark/release-check.mjs +93 -0
- package/skills/app-dev/pyspark/scripts/spark_eventlog_summary.py +223 -0
- package/skills/app-dev/python-backend/LICENSE +3 -0
- package/skills/app-dev/python-backend/SKILL.md +325 -0
- package/skills/app-dev/python-backend/assets/uv-install.sh +48 -0
- package/skills/app-dev/python-backend/references/uv-installs.md +83 -0
- package/skills/app-dev/python-backend/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/LICENSE +3 -0
- package/skills/app-dev/shadcn/SKILL.md +120 -0
- package/skills/app-dev/shadcn/assets/shadcn-small.png +0 -0
- package/skills/app-dev/shadcn/assets/shadcn.png +0 -0
- package/skills/app-dev/shadcn/cli.md +411 -0
- package/skills/app-dev/shadcn/customization.md +224 -0
- package/skills/app-dev/shadcn/mcp.md +101 -0
- package/skills/app-dev/shadcn/release-check.mjs +93 -0
- package/skills/app-dev/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/app-dev/shadcn/rules/component-selection.md +67 -0
- package/skills/app-dev/shadcn/rules/composition.md +195 -0
- package/skills/app-dev/shadcn/rules/data-table.md +201 -0
- package/skills/app-dev/shadcn/rules/forms.md +255 -0
- package/skills/app-dev/shadcn/rules/icons.md +103 -0
- package/skills/app-dev/shadcn/rules/styling.md +167 -0
- package/skills/app-dev/zod-v4/LICENSE +3 -0
- package/skills/app-dev/zod-v4/SKILL.md +286 -0
- package/skills/app-dev/zod-v4/release-check.mjs +93 -0
- package/skills/cicd/cloud-build/LICENSE +3 -0
- package/skills/cicd/cloud-build/SKILL.md +707 -0
- package/skills/cicd/cloud-build/release-check.mjs +93 -0
- package/skills/cicd/cloud-debug/LICENSE +3 -0
- package/skills/cicd/cloud-debug/SKILL.md +315 -0
- package/skills/cicd/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd/cloud-debug/release-check.mjs +93 -0
- package/skills/cicd/cloud-deploy/LICENSE +3 -0
- package/skills/cicd/cloud-deploy/SKILL.md +230 -0
- package/skills/cicd/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd/cloud-deploy/release-check.mjs +93 -0
- package/skills/cicd/docker/LICENSE +3 -0
- package/skills/cicd/docker/SKILL.md +151 -0
- package/skills/cicd/docker/release-check.mjs +93 -0
- package/skills/cicd/github-actions/LICENSE +3 -0
- package/skills/cicd/github-actions/SKILL.md +111 -0
- package/skills/cicd/github-actions/references/audit-profile-optimize.md +150 -0
- package/skills/cicd/github-actions/references/ci-case-studies.md +141 -0
- package/skills/cicd/github-actions/references/conditional-ci.md +214 -0
- package/skills/cicd/github-actions/references/debugging.md +13 -0
- package/skills/cicd/github-actions/references/pipeline.md +87 -0
- package/skills/cicd/github-actions/references/post-deploy-and-publishing.md +33 -0
- package/skills/cicd/github-actions/references/runners.md +253 -0
- package/skills/cicd/github-actions/references/security.md +29 -0
- package/skills/cicd/github-actions/references/speed-and-audit.md +115 -0
- package/skills/cicd/github-actions/references/two-pass-reading.md +92 -0
- package/skills/cicd/github-actions/release-check.mjs +93 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit-core.mjs +612 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.mjs +4 -0
- package/skills/cicd/github-actions/scripts/ci-run-audit.test.mjs +637 -0
- package/skills/cicd/github-flow/LICENSE +3 -0
- package/skills/cicd/github-flow/SKILL.md +123 -0
- package/skills/cicd/github-flow/references/ci-conventions.md +14 -0
- package/skills/cicd/github-flow/release-check.mjs +93 -0
- package/skills/cicd/github-flow/scripts/flow-core.mjs +105 -0
- package/skills/cicd/github-flow/scripts/flow.mjs +81 -0
- package/skills/cicd/github-flow/scripts/flow.test.mjs +114 -0
- package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +117 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.mjs +49 -0
- package/skills/cicd/github-flow/scripts/persist-conventions.test.mjs +108 -0
- package/skills/cicd/google-cloud/LICENSE +3 -0
- package/skills/cicd/google-cloud/SKILL.md +119 -0
- package/skills/cicd/google-cloud/references/gcs.md +469 -0
- package/skills/cicd/google-cloud/references/iam.md +451 -0
- package/skills/cicd/google-cloud/references/project.md +349 -0
- package/skills/cicd/google-cloud/references/secrets.md +336 -0
- package/skills/cicd/google-cloud/references/vpc.md +312 -0
- package/skills/cicd/google-cloud/release-check.mjs +93 -0
- package/skills/cicd/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd/mergify/LICENSE +3 -0
- package/skills/cicd/mergify/SKILL.md +102 -0
- package/skills/cicd/mergify/assets/templates/mergify.yml +215 -0
- package/skills/cicd/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd/mergify/references/branch-protection.md +282 -0
- package/skills/cicd/mergify/references/configuration.md +274 -0
- package/skills/cicd/mergify/references/diagnosis.md +109 -0
- package/skills/cicd/mergify/references/stacks.md +84 -0
- package/skills/cicd/mergify/references/traps.md +119 -0
- package/skills/cicd/mergify/references/watch-contract.md +274 -0
- package/skills/cicd/mergify/release-check.mjs +93 -0
- package/skills/cicd/mergify/scripts/audit-core.mjs +208 -0
- package/skills/cicd/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd/mergify/scripts/audit.test.mjs +201 -0
- package/skills/cicd/mergify/scripts/entrypoints.test.mjs +106 -0
- package/skills/cicd/mergify/scripts/pr-620-mergify-comments.fixture.json +30 -0
- package/skills/cicd/mergify/scripts/stack-push-core.mjs +258 -0
- package/skills/cicd/mergify/scripts/stack-push.mjs +4 -0
- package/skills/cicd/mergify/scripts/stack-push.test.mjs +233 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery-core.mjs +1065 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd/mergify/scripts/watch-pr-delivery.test.mjs +1826 -0
- package/skills/cicd/podman/LICENSE +3 -0
- package/skills/cicd/podman/SKILL.md +71 -0
- package/skills/cicd/podman/agents/openai.yaml +4 -0
- package/skills/cicd/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd/podman/references/troubleshooting.md +98 -0
- package/skills/cicd/podman/release-check.mjs +93 -0
- package/skills/content/article-review/LICENSE +3 -0
- package/skills/content/article-review/SKILL.md +66 -0
- package/skills/content/article-review/references/report-format.md +68 -0
- package/skills/content/article-review/references/template-guide.md +79 -0
- package/skills/content/article-review/references/template-wechat-payments.md +125 -0
- package/skills/content/article-review/release-check.mjs +93 -0
- package/skills/content/article-to-image/LICENSE +3 -0
- package/skills/content/article-to-image/SKILL.md +91 -0
- package/skills/content/article-to-image/references/formats.md +53 -0
- package/skills/content/article-to-image/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/LICENSE +3 -0
- package/skills/content/flowchart-svg/SKILL.md +43 -0
- package/skills/content/flowchart-svg/release-check.mjs +93 -0
- package/skills/content/flowchart-svg/scripts/export_png.sh +8 -0
- package/skills/content/image-gen/LICENSE +3 -0
- package/skills/content/image-gen/SKILL.md +192 -0
- package/skills/content/image-gen/release-check.mjs +93 -0
- package/skills/content/image-gen/scripts/credentials.mjs +217 -0
- package/skills/content/image-gen/scripts/credentials.test.mjs +212 -0
- package/skills/content/image-gen/scripts/generate.mjs +240 -0
- package/skills/content/image-gen/scripts/options.mjs +293 -0
- package/skills/content/image-gen/scripts/options.test.mjs +245 -0
- package/skills/content/mermaid/LICENSE +3 -0
- package/skills/content/mermaid/SKILL.md +635 -0
- package/skills/content/mermaid/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/LICENSE +3 -0
- package/skills/content/wechat-article-writer/SKILL.md +92 -0
- package/skills/content/wechat-article-writer/references/style-selector.md +133 -0
- package/skills/content/wechat-article-writer/references/writing-rules.md +152 -0
- package/skills/content/wechat-article-writer/release-check.mjs +93 -0
- package/skills/content/wechat-article-writer/templates/wechat-comparison.md +52 -0
- package/skills/content/wechat-article-writer/templates/wechat-howto.md +51 -0
- package/skills/content/wechat-article-writer/templates/wechat-insight.md +50 -0
- package/skills/content/wechat-article-writer/templates/wechat-pitfall.md +52 -0
- package/skills/content/wechat-publisher/LICENSE +3 -0
- package/skills/content/wechat-publisher/SKILL.md +171 -0
- package/skills/content/wechat-publisher/references/api.md +105 -0
- package/skills/content/wechat-publisher/references/layout-rules.md +57 -0
- package/skills/content/wechat-publisher/references/wechat-safe-template.html +86 -0
- package/skills/content/wechat-publisher/release-check.mjs +93 -0
- package/skills/content/wechat-publisher/scripts/md_to_wechat_html.py +194 -0
- package/skills/content/wechat-publisher/scripts/publish.py +239 -0
- package/skills/content/wechat-search/LICENSE +3 -0
- package/skills/content/wechat-search/SKILL.md +211 -0
- package/skills/content/wechat-search/release-check.mjs +93 -0
- package/skills/content/wechat-search/scripts/start-chrome.sh +83 -0
- package/skills/content/xai-search/LICENSE +3 -0
- package/skills/content/xai-search/SKILL.md +79 -0
- package/skills/content/xai-search/release-check.mjs +93 -0
- package/skills/content/xai-search/scripts/xai_search.sh +187 -0
- package/skills/content/xai-search/tests/smoke_test.sh +36 -0
- package/skills/core/distill-writing/LICENSE +3 -0
- package/skills/core/distill-writing/SKILL.md +74 -0
- package/skills/core/distill-writing/references/extraction.md +95 -0
- package/skills/core/distill-writing/references/updating.md +46 -0
- package/skills/core/distill-writing/release-check.mjs +93 -0
- package/skills/core/doc-to-md/LICENSE +3 -0
- package/skills/core/doc-to-md/SKILL.md +78 -0
- package/skills/core/doc-to-md/release-check.mjs +93 -0
- package/skills/core/doc-to-md/scripts/convert.py +157 -0
- package/skills/core/editorial-review/LICENSE +3 -0
- package/skills/core/editorial-review/SKILL.md +79 -0
- package/skills/core/editorial-review/references/checklist.md +94 -0
- package/skills/core/editorial-review/release-check.mjs +93 -0
- package/skills/core/house-style/LICENSE +3 -0
- package/skills/core/house-style/SKILL.md +33 -0
- package/skills/core/house-style/references/defaults.md +66 -0
- package/skills/core/house-style/references/rules.md +267 -0
- package/skills/core/house-style/references/sources.md +27 -0
- package/skills/core/house-style/references/style-en.md +131 -0
- package/skills/core/house-style/references/style-zh.md +141 -0
- package/skills/core/house-style/references/terminology-zh.md +223 -0
- package/skills/core/house-style/release-check.mjs +93 -0
- package/skills/core/house-style/templates/brd.md +103 -0
- package/skills/core/house-style/templates/commercial-proposal.md +93 -0
- package/skills/core/house-style/templates/compliance-policy.md +109 -0
- package/skills/core/house-style/templates/gap-analysis.md +105 -0
- package/skills/core/house-style/templates/general.md +63 -0
- package/skills/core/house-style/templates/integration-guide.md +98 -0
- package/skills/core/house-style/templates/prd.md +81 -0
- package/skills/core/house-style/templates/risk-operations-procedure.md +94 -0
- package/skills/core/house-style/templates/technical-spec.md +96 -0
- package/skills/core/polish-cn/LICENSE +3 -0
- package/skills/core/polish-cn/SKILL.md +102 -0
- package/skills/core/polish-cn/references/brief.md +93 -0
- package/skills/core/polish-cn/references/models.md +76 -0
- package/skills/core/polish-cn/release-check.mjs +93 -0
- package/skills/core/polish-cn/scripts/polish-cn.test.mjs +244 -0
- package/skills/core/polish-cn/scripts/polish_blocks.py +489 -0
- package/skills/core/reg-parser/LICENSE +3 -0
- package/skills/core/reg-parser/SKILL.md +212 -0
- package/skills/core/reg-parser/references/checklist-schema.md +223 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.json +1306 -0
- package/skills/core/reg-parser/references/checklists/hk-amlo-checklist.md +469 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.json +634 -0
- package/skills/core/reg-parser/references/checklists/hk-fi-corporate-onboarding-cdd-checklist.md +233 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.json +2194 -0
- package/skills/core/reg-parser/references/checklists/hk-mso-guideline-checklist.md +771 -0
- package/skills/core/reg-parser/references/checklists/kyc-aml-checklist.md +258 -0
- package/skills/core/reg-parser/references/checklists/visa-vars-checklist.md +1058 -0
- package/skills/core/reg-parser/references/mandates/hk-amlo-cap615.md +389 -0
- package/skills/core/reg-parser/references/mandates/visa-vars.md +205 -0
- package/skills/core/reg-parser/release-check.mjs +93 -0
- package/skills/core/reg-parser/scripts/compare_checklist.py +230 -0
- package/skills/core/reg-parser/scripts/dump_checklist.py +361 -0
- package/skills/core/reg-parser/scripts/preprocess-mandate.sh +187 -0
- package/skills/core/reg-parser/scripts/reg-parser.test.mjs +165 -0
- package/skills/core/reg-parser/scripts/test_quarantine.sh +105 -0
- package/skills/core/reg-parser/scripts/validate_checklist.py +563 -0
- package/skills/core/reg-parser/scripts/validate_mandate.py +273 -0
- package/skills/core/terminology/LICENSE +3 -0
- package/skills/core/terminology/SKILL.md +62 -0
- package/skills/core/terminology/references/format.md +50 -0
- package/skills/core/terminology/references/init.md +32 -0
- package/skills/core/terminology/release-check.mjs +93 -0
- package/skills/core/write-doc/LICENSE +3 -0
- package/skills/core/write-doc/SKILL.md +141 -0
- package/skills/core/write-doc/references/bilingual.md +60 -0
- package/skills/core/write-doc/release-check.mjs +93 -0
- package/skills/engineering/better-review/LICENSE +3 -0
- package/skills/engineering/better-review/SKILL.md +249 -0
- package/skills/engineering/better-review/agents/openai.yaml +9 -0
- package/skills/engineering/better-review/references/domain-hazards.md +53 -0
- package/skills/engineering/better-review/references/passes.md +147 -0
- package/skills/engineering/better-review/references/result.md +151 -0
- package/skills/engineering/better-review/release-check.mjs +93 -0
- package/skills/engineering/better-review/scripts/pr-context.mjs +212 -0
- package/skills/engineering/better-review/scripts/pr-context.test.mjs +168 -0
- package/skills/engineering/better-review/scripts/rereview-scope.mjs +503 -0
- package/skills/engineering/better-review/scripts/rereview-scope.test.mjs +587 -0
- package/skills/engineering/better-review/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/better-review/scripts/scan-diff.test.mjs +414 -0
- package/skills/engineering/better-review/scripts/vendor-sync.test.mjs +96 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +98 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +24 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +73 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +144 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +25 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +290 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +104 -0
- package/skills/engineering/e2e-test/references/reviewing.md +41 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +51 -0
- package/skills/engineering/e2e-test/release-check.mjs +93 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.test.mjs +106 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.test.mjs +117 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.test.mjs +69 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.test.mjs +98 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +147 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.test.mjs +71 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.test.mjs +59 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +82 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.test.mjs +76 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +11 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +597 -0
- package/skills/engineering/engineering-runtime/engineering-runtime.test.mjs +68 -0
- package/skills/engineering/engineering-runtime/release-check.mjs +93 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.mjs +187 -0
- package/skills/engineering/engineering-runtime/scripts/invocation-policy.test.mjs +95 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +79 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.test.mjs +288 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.test.mjs +96 -0
- package/skills/engineering/engineering-runtime/scripts/review-completion.mjs +56 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +595 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +189 -0
- package/skills/engineering/engineering-runtime/scripts/yaml-mapping.mjs +18 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +129 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +92 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +85 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +19 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +57 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +39 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +44 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +110 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +35 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +64 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +27 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +56 -0
- package/skills/engineering/ensure-coverage/release-check.mjs +93 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +67 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +140 -0
- package/skills/engineering/ensure-coverage/scripts/README.md +99 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +182 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.test.mjs +96 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +105 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.test.mjs +47 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +137 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.test.mjs +86 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +674 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.test.mjs +447 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.test.mjs +552 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +282 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.test.mjs +289 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/golden-path/LICENSE +3 -0
- package/skills/engineering/golden-path/SKILL.md +230 -0
- package/skills/engineering/golden-path/agents/openai.yaml +3 -0
- package/skills/engineering/golden-path/assets/golden-paths.example.json +57 -0
- package/skills/engineering/golden-path/references/contract.md +239 -0
- package/skills/engineering/golden-path/references/migration.md +111 -0
- package/skills/engineering/golden-path/release-check.mjs +93 -0
- package/skills/engineering/golden-path/scripts/golden-path-core.mjs +1779 -0
- package/skills/engineering/golden-path/scripts/golden-path.mjs +6 -0
- package/skills/engineering/golden-path/scripts/golden-path.test.mjs +1457 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +19 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/discover-models.test.mjs +363 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/harness-runtime.test.mjs +967 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog-seed.test.mjs +829 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/model-catalog.test.mjs +366 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +408 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/harness-runtime/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +250 -0
- package/skills/engineering/resolve-issues/agents/openai.yaml +9 -0
- package/skills/engineering/resolve-issues/plugin-hooks.json +17 -0
- package/skills/engineering/resolve-issues/references/canary.md +28 -0
- package/skills/engineering/resolve-issues/references/ci.md +105 -0
- package/skills/engineering/resolve-issues/references/done.md +25 -0
- package/skills/engineering/resolve-issues/references/dropbox.md +90 -0
- package/skills/engineering/resolve-issues/references/expire.md +318 -0
- package/skills/engineering/resolve-issues/references/exploration.md +202 -0
- package/skills/engineering/resolve-issues/references/implementation.md +303 -0
- package/skills/engineering/resolve-issues/references/preflight.md +445 -0
- package/skills/engineering/resolve-issues/references/review.md +228 -0
- package/skills/engineering/resolve-issues/references/shared-modules.md +44 -0
- package/skills/engineering/resolve-issues/references/task-plan.md +264 -0
- package/skills/engineering/resolve-issues/release-check.mjs +93 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.mjs +364 -0
- package/skills/engineering/resolve-issues/scripts/cleanup-runs.test.mjs +280 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.mjs +473 -0
- package/skills/engineering/resolve-issues/scripts/dropbox.test.mjs +346 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/findings-reuse.test.mjs +88 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.mjs +384 -0
- package/skills/engineering/resolve-issues/scripts/github-reviews.test.mjs +264 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.mjs +135 -0
- package/skills/engineering/resolve-issues/scripts/install-hooks.test.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.mjs +162 -0
- package/skills/engineering/resolve-issues/scripts/issue-tree.test.mjs +107 -0
- package/skills/engineering/resolve-issues/scripts/manual-invocation.test.mjs +14 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-actions-capacity.test.mjs +149 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.mjs +856 -0
- package/skills/engineering/resolve-issues/scripts/next-actions.test.mjs +915 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.mjs +269 -0
- package/skills/engineering/resolve-issues/scripts/plan-sync.test.mjs +156 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.mjs +736 -0
- package/skills/engineering/resolve-issues/scripts/preflight-models.test.mjs +448 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.mjs +185 -0
- package/skills/engineering/resolve-issues/scripts/ready-check.test.mjs +217 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.mjs +98 -0
- package/skills/engineering/resolve-issues/scripts/rehydrate.test.mjs +91 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.mjs +509 -0
- package/skills/engineering/resolve-issues/scripts/review-verdict.test.mjs +1060 -0
- package/skills/engineering/resolve-issues/scripts/size-check.mjs +492 -0
- package/skills/engineering/resolve-issues/scripts/size-check.test.mjs +458 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +215 -0
- package/skills/engineering/resolve-release/agents/openai.yaml +8 -0
- package/skills/engineering/resolve-release/flows/cloud-run-canary.md +13 -0
- package/skills/engineering/resolve-release/flows/cloud-run.md +7 -0
- package/skills/engineering/resolve-release/flows/root-tag-npm.md +13 -0
- package/skills/engineering/resolve-release/flows/workspace-npm.md +22 -0
- package/skills/engineering/resolve-release/references/canary.md +51 -0
- package/skills/engineering/resolve-release/references/candidate.md +41 -0
- package/skills/engineering/resolve-release/references/cut.md +131 -0
- package/skills/engineering/resolve-release/references/dark-launch.md +66 -0
- package/skills/engineering/resolve-release/references/flows.md +150 -0
- package/skills/engineering/resolve-release/references/preflight.md +154 -0
- package/skills/engineering/resolve-release/references/prepared-metadata.md +260 -0
- package/skills/engineering/resolve-release/references/promotion.md +82 -0
- package/skills/engineering/resolve-release/references/publish.md +232 -0
- package/skills/engineering/resolve-release/references/workspace-npm.md +103 -0
- package/skills/engineering/resolve-release/release-check.mjs +93 -0
- package/skills/engineering/resolve-release/scripts/apply.mjs +212 -0
- package/skills/engineering/resolve-release/scripts/apply.test.mjs +99 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.mjs +134 -0
- package/skills/engineering/resolve-release/scripts/dark-flags.test.mjs +100 -0
- package/skills/engineering/resolve-release/scripts/flow.mjs +500 -0
- package/skills/engineering/resolve-release/scripts/flow.test.mjs +340 -0
- package/skills/engineering/resolve-release/scripts/green-head.mjs +231 -0
- package/skills/engineering/resolve-release/scripts/green-head.test.mjs +101 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.mjs +138 -0
- package/skills/engineering/resolve-release/scripts/npm-version-absence.test.mjs +426 -0
- package/skills/engineering/resolve-release/scripts/plan-npm.test.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/plan-toml-boundary.test.mjs +317 -0
- package/skills/engineering/resolve-release/scripts/plan-uv.test.mjs +291 -0
- package/skills/engineering/resolve-release/scripts/plan.mjs +806 -0
- package/skills/engineering/resolve-release/scripts/plan.test.mjs +428 -0
- package/skills/engineering/rush-issues/LICENSE +3 -0
- package/skills/engineering/rush-issues/SKILL.md +58 -0
- package/skills/engineering/rush-issues/agents/openai.yaml +8 -0
- package/skills/engineering/rush-issues/rehydrate.mjs +10 -0
- package/skills/engineering/rush-issues/release-check.mjs +93 -0
- package/skills/engineering/rush-release/LICENSE +3 -0
- package/skills/engineering/rush-release/SKILL.md +35 -0
- package/skills/engineering/rush-release/agents/openai.yaml +8 -0
- package/skills/engineering/rush-release/release-check.mjs +93 -0
- package/skills/engineering/test-quality/LICENSE +3 -0
- package/skills/engineering/test-quality/SKILL.md +79 -0
- package/skills/engineering/test-quality/references/audit.md +80 -0
- package/skills/engineering/test-quality/references/lint.md +24 -0
- package/skills/engineering/test-quality/references/principles.md +143 -0
- package/skills/engineering/test-quality/references/testing-conventions.md +9 -0
- package/skills/engineering/test-quality/release-check.mjs +93 -0
- package/skills/engineering/test-quality/scripts/lint-tests.mjs +574 -0
- package/skills/engineering/test-quality/scripts/lint-tests.test.mjs +591 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/test-quality/scripts/mock-policy-config.test.mjs +119 -0
- package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +117 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.mjs +17 -0
- package/skills/engineering/test-quality/scripts/persist-conventions.test.mjs +104 -0
- package/skills/risk-compliance/compliance-audit/LICENSE +3 -0
- package/skills/risk-compliance/compliance-audit/SKILL.md +439 -0
- package/skills/risk-compliance/compliance-audit/references/findings-schema.md +293 -0
- package/skills/risk-compliance/compliance-audit/references/normalization-rules.md +45 -0
- package/skills/risk-compliance/compliance-audit/references/vars-checklist.md +1068 -0
- package/skills/risk-compliance/compliance-audit/references/vars-findings-schema.md +398 -0
- package/skills/risk-compliance/compliance-audit/release-check.mjs +93 -0
- package/skills/risk-compliance/compliance-audit/scripts/compliance-audit.test.mjs +14 -0
- package/skills/risk-compliance/compliance-audit/scripts/export_tracker_xlsx.py +221 -0
- package/skills/risk-compliance/compliance-audit/scripts/reconcile_tracker.py +458 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_export_tracker_xlsx.py +97 -0
- package/skills/risk-compliance/compliance-audit/scripts/test_validate_tracker.py +157 -0
- package/skills/risk-compliance/compliance-audit/scripts/validate_tracker.py +829 -0
- package/skills/risk-compliance/contract-compare/LICENSE +3 -0
- package/skills/risk-compliance/contract-compare/SKILL.md +199 -0
- package/skills/risk-compliance/contract-compare/references/comparison-dimensions.md +209 -0
- package/skills/risk-compliance/contract-compare/release-check.mjs +93 -0
- package/skills/risk-compliance/contract-review/LICENSE +3 -0
- package/skills/risk-compliance/contract-review/SKILL.md +240 -0
- package/skills/risk-compliance/contract-review/references/review-criteria.md +223 -0
- package/skills/risk-compliance/contract-review/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/LICENSE +3 -0
- package/skills/risk-compliance/doc-authenticity/SKILL.md +160 -0
- package/skills/risk-compliance/doc-authenticity/agents/openai.yaml +8 -0
- package/skills/risk-compliance/doc-authenticity/manual-invocation.test.mjs +12 -0
- package/skills/risk-compliance/doc-authenticity/references/agreement.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/bank-statement.md +150 -0
- package/skills/risk-compliance/doc-authenticity/references/forensic-signals.md +157 -0
- package/skills/risk-compliance/doc-authenticity/references/image-signals.md +114 -0
- package/skills/risk-compliance/doc-authenticity/references/invoice.md +66 -0
- package/skills/risk-compliance/doc-authenticity/references/issuer-profiles.md +86 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict-and-report.md +95 -0
- package/skills/risk-compliance/doc-authenticity/references/verdict.schema.json +81 -0
- package/skills/risk-compliance/doc-authenticity/release-check.mjs +93 -0
- package/skills/risk-compliance/doc-authenticity/scripts/image_forensics.py +294 -0
- package/skills/risk-compliance/doc-authenticity/scripts/pdf_forensics.py +401 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_codes.py +224 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.py +308 -0
- package/skills/risk-compliance/doc-authenticity/scripts/validate_verdict.test.mjs +212 -0
- package/skills/risk-compliance/fraud-analysis/LICENSE +3 -0
- package/skills/risk-compliance/fraud-analysis/SKILL.md +114 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/authorized-payment-scam.md +41 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/first-party-fraud.md +44 -0
- package/skills/risk-compliance/fraud-analysis/references/archetypes/third-party-fraud.md +27 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/bank-transfer.md +24 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/card-payment.md +30 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payment-collection.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/contexts/payout.md +20 -0
- package/skills/risk-compliance/fraud-analysis/references/feature-engineering.md +158 -0
- package/skills/risk-compliance/fraud-analysis/references/mechanisms/account-takeover.md +36 -0
- package/skills/risk-compliance/fraud-analysis/references/report-rationale.md +45 -0
- package/skills/risk-compliance/fraud-analysis/references/report-template.md +190 -0
- package/skills/risk-compliance/fraud-analysis/references/review-checklist.md +175 -0
- package/skills/risk-compliance/fraud-analysis/references/taxonomy.md +79 -0
- package/skills/risk-compliance/fraud-analysis/references/terminology.md +108 -0
- package/skills/risk-compliance/fraud-analysis/references/workflow.md +175 -0
- package/skills/risk-compliance/fraud-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/payment-analysis/LICENSE +3 -0
- package/skills/risk-compliance/payment-analysis/SKILL.md +180 -0
- package/skills/risk-compliance/payment-analysis/references/auth-rate-actions.md +30 -0
- package/skills/risk-compliance/payment-analysis/references/chargebacks.md +208 -0
- package/skills/risk-compliance/payment-analysis/references/chinese-polish.md +51 -0
- package/skills/risk-compliance/payment-analysis/references/event-layers.md +127 -0
- package/skills/risk-compliance/payment-analysis/references/fx.md +59 -0
- package/skills/risk-compliance/payment-analysis/references/journey.md +79 -0
- package/skills/risk-compliance/payment-analysis/references/metrics.md +67 -0
- package/skills/risk-compliance/payment-analysis/references/report-template.md +119 -0
- package/skills/risk-compliance/payment-analysis/references/terminology.md +95 -0
- package/skills/risk-compliance/payment-analysis/references/visualization.md +56 -0
- package/skills/risk-compliance/payment-analysis/release-check.mjs +93 -0
- package/skills/risk-compliance/report-writing/LICENSE +3 -0
- package/skills/risk-compliance/report-writing/SKILL.md +220 -0
- package/skills/risk-compliance/report-writing/references/audit-report-template.md +121 -0
- package/skills/risk-compliance/report-writing/references/external-assessment-template.md +167 -0
- package/skills/risk-compliance/report-writing/references/management-report-template.md +145 -0
- package/skills/risk-compliance/report-writing/references/vars-report-template.md +224 -0
- package/skills/risk-compliance/report-writing/release-check.mjs +93 -0
- package/skills/risk-compliance/similar-domain/LICENSE +3 -0
- package/skills/risk-compliance/similar-domain/SKILL.md +203 -0
- package/skills/risk-compliance/similar-domain/references/entities.md +67 -0
- package/skills/risk-compliance/similar-domain/references/fingerprints.md +134 -0
- package/skills/risk-compliance/similar-domain/references/pivots.md +82 -0
- package/skills/risk-compliance/similar-domain/references/report-template.md +93 -0
- package/skills/risk-compliance/similar-domain/references/scoring.md +130 -0
- package/skills/risk-compliance/similar-domain/references/terminology.md +41 -0
- package/skills/risk-compliance/similar-domain/references/workflow.md +85 -0
- package/skills/risk-compliance/similar-domain/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/LICENSE +3 -0
- package/skills/risk-compliance/tld-detection/SKILL.md +245 -0
- package/skills/risk-compliance/tld-detection/agents/openai.yaml +9 -0
- package/skills/risk-compliance/tld-detection/references/chinese-polish.md +55 -0
- package/skills/risk-compliance/tld-detection/references/clean.md +51 -0
- package/skills/risk-compliance/tld-detection/references/clustering.md +235 -0
- package/skills/risk-compliance/tld-detection/references/decision.md +189 -0
- package/skills/risk-compliance/tld-detection/references/fx-conversion.md +232 -0
- package/skills/risk-compliance/tld-detection/references/report-template.md +272 -0
- package/skills/risk-compliance/tld-detection/references/streams.md +141 -0
- package/skills/risk-compliance/tld-detection/references/terminology.md +95 -0
- package/skills/risk-compliance/tld-detection/references/workflow.md +95 -0
- package/skills/risk-compliance/tld-detection/release-check.mjs +93 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.py +390 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_ladders.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.py +650 -0
- package/skills/risk-compliance/tld-detection/scripts/detect_streams.test.mjs +14 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_ladders.py +134 -0
- package/skills/risk-compliance/tld-detection/tests/test_detect_streams.py +520 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
{
|
|
2
|
+
"seededAt": "2026-09-30",
|
|
3
|
+
"models": [
|
|
4
|
+
{
|
|
5
|
+
"canonical": "fable",
|
|
6
|
+
"family": "anthropic",
|
|
7
|
+
"ids": {
|
|
8
|
+
"claude-code": "fable"
|
|
9
|
+
},
|
|
10
|
+
"tiers": {
|
|
11
|
+
"claude-code": {
|
|
12
|
+
"high": "frontier"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"note": "claude-fable-5, Mythos-class; current-gen frontier — reviewer material. Seeded from the claude-code catalog only; no codex/pi entry exists at this id."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"canonical": "opus",
|
|
19
|
+
"family": "anthropic",
|
|
20
|
+
"ids": {
|
|
21
|
+
"claude-code": "opus"
|
|
22
|
+
},
|
|
23
|
+
"tiers": {
|
|
24
|
+
"claude-code": {
|
|
25
|
+
"high": "balanced-coder"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"note": "Opus 4.8 — balanced-coder at high. BENCHMARK (rule 6), official DeepSWE v1.1: 51.8%±4.6 at high (113 tasks, board updated 2026-08-13). The measured high point overlaps the 53.8%±2.3 balanced-coder reference from Grok 4.5, so it is not tiered from Opus's separate 59.0%±1.8 max run. Seeded from the claude-code catalog only."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"canonical": "sonnet",
|
|
32
|
+
"family": "anthropic",
|
|
33
|
+
"ids": {
|
|
34
|
+
"claude-code": "sonnet",
|
|
35
|
+
"pi": "anthropic/claude-sonnet-5"
|
|
36
|
+
},
|
|
37
|
+
"tiers": {
|
|
38
|
+
"claude-code": {
|
|
39
|
+
"high": "balanced-coder"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"note": "Confirmed alias: sonnet (claude-code) = anthropic/claude-sonnet-5. Balanced-coder at high: official DeepSWE v1.1 measured 48.2%±4.5 at high (113 tasks, board updated 2026-08-13), overlapping the balanced-coder reference band. No pi catalog entry exists yet at that id, so no pi tier is seeded here — the alias only lets a future pi discovery of anthropic/claude-sonnet-5 resolve to this canonical entry."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"canonical": "gpt-6-astra",
|
|
46
|
+
"family": "openai",
|
|
47
|
+
"ids": {
|
|
48
|
+
"claude-code": "gpt-6-astra",
|
|
49
|
+
"codex": "gpt-6-astra",
|
|
50
|
+
"pi": "openai/gpt-6-astra"
|
|
51
|
+
},
|
|
52
|
+
"tiers": {
|
|
53
|
+
"claude-code": {
|
|
54
|
+
"high": "frontier"
|
|
55
|
+
},
|
|
56
|
+
"codex": {
|
|
57
|
+
"high": "frontier"
|
|
58
|
+
},
|
|
59
|
+
"pi": {
|
|
60
|
+
"high": "frontier"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"note": "Agrees across all three harnesses: current-gen frontier at high. BENCHMARK (rule 6), official DeepSWE v1.1: 73.2%±3.4 at high (113 tasks, four runs, board updated 2026-09-03). The measured high point overlaps the frontier reference band and is banked instead of Astra's separate 74.1%±2.8 xhigh best result; xhigh/max are not default candidates because DeepSWE measured high. Canonical API model id is gpt-6-astra; gpt-6-astro is not an alias. Availability remains subject to per-run harness discovery (rule 3)."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"canonical": "gpt-6.1-sol",
|
|
67
|
+
"family": "openai",
|
|
68
|
+
"ids": {
|
|
69
|
+
"claude-code": "gpt-6.1-sol",
|
|
70
|
+
"codex": "gpt-6.1-sol",
|
|
71
|
+
"pi": "openai/gpt-6.1-sol"
|
|
72
|
+
},
|
|
73
|
+
"tiers": {
|
|
74
|
+
"claude-code": {
|
|
75
|
+
"high": "frontier"
|
|
76
|
+
},
|
|
77
|
+
"codex": {
|
|
78
|
+
"high": "frontier"
|
|
79
|
+
},
|
|
80
|
+
"pi": {
|
|
81
|
+
"high": "frontier"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"note": "Agrees across all three harnesses: frontier at high. ADDED 2026-09-30 (released 2026-09-29 at DevDay, $2/$10 per MTok, 1.05M context; the successor to gpt-6-sol, which Codex now labels previous generation). Availability verified 2026-09-30: codex-cli 0.159.2 lists gpt-6.1-sol (\"Latest workhorse model for coding and everyday work\"), and Pi enables openai/gpt-6.1-sol. BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 from OpenAI's launch: 75.2% at high (~$1.50/task against ~$7.70 for gpt-6-astra); the same chart shows low 64, medium 73, xhigh 71, max 71. No confidence interval published. NOT on the official Datacurve board (issue datacurve-ai/deep-swe#102 open, no run). Banked at high because high is the vendor's best and measured point; medium (73) is a policy point for the explorer, not banked. 75.2 sits in the frontier band with gpt-6-astra@high 73.2%±3.4 and gpt-5.6-sol@high 69.4%±1.4, well above gpt-6-sol's 65.3. Re-tier from the official board when Datacurve runs it."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"canonical": "gpt-6-sol",
|
|
88
|
+
"family": "openai",
|
|
89
|
+
"ids": {
|
|
90
|
+
"claude-code": "gpt-6-sol",
|
|
91
|
+
"codex": "gpt-6-sol",
|
|
92
|
+
"pi": "openai/gpt-6-sol"
|
|
93
|
+
},
|
|
94
|
+
"tiers": {
|
|
95
|
+
"claude-code": {
|
|
96
|
+
"high": "deep-reasoner"
|
|
97
|
+
},
|
|
98
|
+
"codex": {
|
|
99
|
+
"high": "deep-reasoner"
|
|
100
|
+
},
|
|
101
|
+
"pi": {
|
|
102
|
+
"high": "deep-reasoner"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"note": "SUPERSEDED 2026-09-30 by gpt-6.1-sol in every team ladder (Codex now lists gpt-6-sol as \"Previous generation workhorse model\"); kept while discovery still yields it. Agrees across all three harnesses: deep-reasoner at high. ADDED 2026-09-23 (released 2026-09-22, $2/$10 per MTok, positioned by OpenAI as the model built to power complex coding and agentic workflows). BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 from OpenAI's launch chart: 65.3% at high ($0.64/task); the same chart shows low 37.2, medium 56.6, xhigh 66.6, max 68.8. No confidence interval published. NOT on the official Datacurve board (last updated 2026-09-22, which lists only Astra among GPT-6). Banked at high because the vendor measured high; the xhigh/max points are not banked. 65.3 sits inside the deep-reasoner band with gpt-5.5@high 64.4%±3.1 and grok-4.6@high 65.2%±1.5, clearly above the balanced-coder cluster (terra 53.8, grok-4.5 53.8) and below the frontier cluster (gpt-5.6-sol 69.4%±1.4, gpt-6-astra 73.2%±3.4). Not the successor to gpt-5.6-sol's frontier seat: at max it scores 68.8 against 5.6-sol's 72.7. The natural deep-reasoner slot holder now that gpt-5.5 retires from Codex on 2026-10-14. Re-tier from the official board when Datacurve runs it."
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"canonical": "gpt-6-luna",
|
|
109
|
+
"family": "openai",
|
|
110
|
+
"ids": {
|
|
111
|
+
"claude-code": "gpt-6-luna",
|
|
112
|
+
"codex": "gpt-6-luna",
|
|
113
|
+
"pi": "openai/gpt-6-luna"
|
|
114
|
+
},
|
|
115
|
+
"tiers": {
|
|
116
|
+
"claude-code": {
|
|
117
|
+
"high": "balanced-coder",
|
|
118
|
+
"max": "balanced-coder"
|
|
119
|
+
},
|
|
120
|
+
"codex": {
|
|
121
|
+
"high": "balanced-coder",
|
|
122
|
+
"max": "balanced-coder"
|
|
123
|
+
},
|
|
124
|
+
"pi": {
|
|
125
|
+
"high": "balanced-coder",
|
|
126
|
+
"max": "balanced-coder"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"note": "Agrees across all three harnesses: balanced-coder at max. ADDED 2026-09-23 (released 2026-09-22, $0.10/$0.50 per MTok, OpenAI's most efficient model for focused, high-volume tasks). BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 from OpenAI's launch chart: 66.6% at max ($0.22/task); the chart also shows low 2.4 and medium 44.5. OpenAI published no high or xhigh point, so high is UNCLAIMED (rule 6: do not read a max score down to high) and the only banked point is max, the model's pushed point, not a throttled seat. No confidence interval; not on the official Datacurve board (2026-09-22). Like-for-like against the max/xhigh cluster it sits with its predecessor gpt-5.6-luna@max 67%±4, which was balanced-coder at max after the 2026-08-08 reband, so it takes the same band rather than the deep-reasoner band deepseek-v4-pro@max 62.7 holds; that inconsistency between the two precedents is recorded here, not resolved. CHANGED 2026-09-23: a high point is now banked as balanced-coder by HUMAN CLASSIFICATION, not benchmark-backed (rule 6 still forbids reading 66.6 down to high; the vendor chart brackets high between medium 44.5 and max 66.6 and the human placed it in the balanced band). Reason: the rush routine ladder runs Luna at high because max is too slow — Pi smoke 2026-09-23 on one small tool task: high 30s vs max 62s vs gpt-5.6-terra@high 29s, at ~1/20 Terra's cost, with a correct answer. A measured high point (official board or vendor) replaces this judgment and may re-tier it either way."
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"canonical": "gpt-5.6-sol",
|
|
133
|
+
"family": "openai",
|
|
134
|
+
"ids": {
|
|
135
|
+
"claude-code": "gpt-5.6-sol",
|
|
136
|
+
"codex": "gpt-5.6-sol",
|
|
137
|
+
"pi": "openai/gpt-5.6-sol"
|
|
138
|
+
},
|
|
139
|
+
"tiers": {
|
|
140
|
+
"claude-code": {
|
|
141
|
+
"high": "frontier"
|
|
142
|
+
},
|
|
143
|
+
"codex": {
|
|
144
|
+
"high": "frontier"
|
|
145
|
+
},
|
|
146
|
+
"pi": {
|
|
147
|
+
"high": "frontier"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"note": "Agrees across all three harnesses: frontier at high. REVISITED 2026-09-16 after GPT-6 Astra: official DeepSWE v1.1 remains 69.4%±1.4 at high (113 tasks, four runs, board updated 2026-09-03). Sol-high's 68.0–70.8 confidence interval overlaps Astra-high's 69.8–76.7 interval and remains above the deep-reasoner references, so the newer OpenAI flagship does not justify a demotion. The separate 70.7%±0.8 xhigh and 72.7%±2.8 max runs are not banked because DeepSWE measured high."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"canonical": "gpt-5.5",
|
|
154
|
+
"family": "openai",
|
|
155
|
+
"ids": {
|
|
156
|
+
"claude-code": "gpt-5.5",
|
|
157
|
+
"codex": "gpt-5.5",
|
|
158
|
+
"pi": "openai/gpt-5.5"
|
|
159
|
+
},
|
|
160
|
+
"tiers": {
|
|
161
|
+
"claude-code": {
|
|
162
|
+
"high": "deep-reasoner"
|
|
163
|
+
},
|
|
164
|
+
"codex": {
|
|
165
|
+
"high": "deep-reasoner"
|
|
166
|
+
},
|
|
167
|
+
"pi": {
|
|
168
|
+
"high": "deep-reasoner"
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"note": "Agrees across all three harnesses: deep-reasoner at high. BENCHMARK (rule 6), official DeepSWE v1.1: 64.4%±3.1 at high (113 tasks, board updated 2026-08-13). The separate xhigh point is not banked because DeepSWE measured high."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"canonical": "gpt-5.6-terra",
|
|
175
|
+
"family": "openai",
|
|
176
|
+
"ids": {
|
|
177
|
+
"claude-code": "gpt-5.6-terra",
|
|
178
|
+
"codex": "gpt-5.6-terra",
|
|
179
|
+
"pi": "openai/gpt-5.6-terra"
|
|
180
|
+
},
|
|
181
|
+
"tiers": {
|
|
182
|
+
"claude-code": {
|
|
183
|
+
"high": "balanced-coder"
|
|
184
|
+
},
|
|
185
|
+
"codex": {
|
|
186
|
+
"high": "balanced-coder"
|
|
187
|
+
},
|
|
188
|
+
"pi": {
|
|
189
|
+
"high": "balanced-coder"
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"note": "Agrees across all three harnesses: balanced-coder at high. BENCHMARK (rule 6), official DeepSWE v1.1: 53.8%±4.3 at high (113 tasks, board updated 2026-08-13). Its separate xhigh/max runs are not banked because DeepSWE measured high. Codex and pi previously held a max point (deep-reasoner); it was dropped 2026-07-20 in all three catalogs when the team standardized on effort=high, and this seed followed."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"canonical": "gpt-5.6-luna",
|
|
196
|
+
"family": "openai",
|
|
197
|
+
"ids": {
|
|
198
|
+
"claude-code": "gpt-5.6-luna",
|
|
199
|
+
"codex": "gpt-5.6-luna",
|
|
200
|
+
"pi": "openai/gpt-5.6-luna"
|
|
201
|
+
},
|
|
202
|
+
"tiers": {
|
|
203
|
+
"claude-code": {
|
|
204
|
+
"high": "scoped-coder"
|
|
205
|
+
},
|
|
206
|
+
"codex": {
|
|
207
|
+
"high": "scoped-coder"
|
|
208
|
+
},
|
|
209
|
+
"pi": {
|
|
210
|
+
"high": "scoped-coder"
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"note": "Agrees across all three harnesses: scoped-coder at high. BENCHMARK (rule 6), official DeepSWE v1.1: 44.2%±2.9 at high (113 tasks, board updated 2026-08-13). Its xhigh/max runs are not banked because DeepSWE measured high; a more expensive point that reaches another band is not a default operating point."
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"canonical": "grok-4.5",
|
|
217
|
+
"family": "xai",
|
|
218
|
+
"ids": {
|
|
219
|
+
"claude-code": "grok-4.5",
|
|
220
|
+
"pi": "xai/grok-4.5"
|
|
221
|
+
},
|
|
222
|
+
"tiers": {
|
|
223
|
+
"claude-code": {
|
|
224
|
+
"high": "balanced-coder"
|
|
225
|
+
},
|
|
226
|
+
"pi": {
|
|
227
|
+
"high": "balanced-coder"
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"note": "Balanced-coder in both harnesses at high. BENCHMARK (rule 6), official DeepSWE v1.1: 53.8%±2.3 at high (113 tasks, board updated 2026-08-13). Was seeded deep-reasoner under pi; demoted 2026-07-22 on human re-classification — the two harnesses agree, so this is no longer a harness-dependent entry. Not yet confirmed available in claude-code's own discovery (rule 3 applies regardless of this seed entry). Sibling grok-4.6 is a separate entry and does not re-tier 4.5."
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"canonical": "grok-4.6",
|
|
234
|
+
"family": "xai",
|
|
235
|
+
"ids": {
|
|
236
|
+
"claude-code": "grok-4.6",
|
|
237
|
+
"pi": "xai/grok-4.6"
|
|
238
|
+
},
|
|
239
|
+
"tiers": {
|
|
240
|
+
"claude-code": {
|
|
241
|
+
"high": "deep-reasoner"
|
|
242
|
+
},
|
|
243
|
+
"pi": {
|
|
244
|
+
"high": "deep-reasoner"
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
"note": "Agrees across both harnesses it is seeded from: deep-reasoner at high. BENCHMARK (rule 6), official DeepSWE v1.1: 65.2%±1.5 at high (113 tasks, board updated 2026-08-13). It overlaps gpt-5.5's 64.4%±3.1 high point (deep-reasoner) and is clearly above Grok 4.5's 53.8%±2.3 high point (balanced-coder); the shared deep-reasoner band is the claim, not that it beats gpt-5.5. Its separate xhigh point is not banked because DeepSWE measured high. CONFIRMED 2026-09-23 against the board's all-efforts view (verified Datacurve run sampled 2026-08-26): high 65.19%±1.53; the board's Best view shows medium 67.5%±2.3 and xhigh 66.7%±2.2, neither banked — the effort choice stays high per rule 6. Successor grok-4.7 is a separate entry (vendor 71.0 at high, frontier) and does not re-tier 4.6. Codex holds no Grok entry. Availability is still per-harness discovery (rule 3)."
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"canonical": "grok-4.7",
|
|
251
|
+
"family": "xai",
|
|
252
|
+
"ids": {
|
|
253
|
+
"claude-code": "grok-4.7",
|
|
254
|
+
"pi": "xai/grok-4.7"
|
|
255
|
+
},
|
|
256
|
+
"tiers": {
|
|
257
|
+
"claude-code": {
|
|
258
|
+
"high": "frontier"
|
|
259
|
+
},
|
|
260
|
+
"pi": {
|
|
261
|
+
"high": "frontier"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
"note": "Agrees across both harnesses it is seeded from: frontier at high. ADDED 2026-09-23 (released 2026-09-21; API id grok-4.7; $2/$0.50/$6 per MTok under 200k context, same list price as grok-4.6; efforts low/medium/high/xhigh; 500k context). BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 from SpaceXAI's launch chart: 71.0% at high (asterisked \"high effort\"; the same chart lists grok-4.6 at 65.2, which equals the official board's high point, so the chart is like-for-like at high). No confidence interval, and NOT on the official Datacurve board (last updated 2026-09-22, which lists grok-4.6 only). Like-for-like at high on the official board: gpt-6-astra 73.2%±3.4 and gpt-5.6-sol 69.4%±1.4 (frontier); gpt-5.5 64.4%±3.1, grok-4.6 65.2%±1.5, gpt-6-sol vendor 65.3 (deep-reasoner). 71.0 sits above 5.6-sol's high point and inside Astra's interval, so the frontier band is the claim, not a rank over Astra; if the official run lands at or below ~68 it belongs in deep-reasoner — re-tier when Datacurve publishes it. Its xhigh points on other xAI charts (CursorBench, Terminal-Bench) are not DeepSWE and are not banked. Codex holds no Grok entry. Availability is still per-harness discovery (rule 3); Pi lists xai/grok-4.7 as of 2026-09-23."
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"canonical": "mimo-v2.5-pro",
|
|
268
|
+
"family": "xiaomi",
|
|
269
|
+
"ids": {
|
|
270
|
+
"claude-code": "mimo-v2.5-pro",
|
|
271
|
+
"pi": "xiaomi/mimo-v2.5-pro"
|
|
272
|
+
},
|
|
273
|
+
"tiers": {
|
|
274
|
+
"claude-code": {
|
|
275
|
+
"high": "scoped-coder"
|
|
276
|
+
},
|
|
277
|
+
"pi": {
|
|
278
|
+
"high": "scoped-coder"
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"note": "Agrees across both harnesses it is seeded from: scoped-coder at high. Downgraded under pi from balanced-coder on 2026-08-02 by maintainer instruction, which ended a recorded harness disagreement — it had been the worked example of one (scoped-coder under claude-code, balanced-coder under pi: a mid-size model's ability to hold a long agentic trajectory being a property of the harness loop as much as the weights). That example is now historical; kimi-k2.7-code now agrees across both harnesses too. Not benchmark-backed (rule 6): no published point at high for this model, so both bands are human judgment. As scoped-coder in every harness it carries, this model is now slot-ineligible everywhere — recorded deliberately so it stops being re-asked, not hidden; promotion is a normal re-confirmation if it earns one."
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"canonical": "mimo-v2.6-pro",
|
|
285
|
+
"family": "xiaomi",
|
|
286
|
+
"ids": {
|
|
287
|
+
"claude-code": "mimo-v2.6-pro",
|
|
288
|
+
"pi": "xiaomi/mimo-v2.6-pro"
|
|
289
|
+
},
|
|
290
|
+
"tiers": {
|
|
291
|
+
"claude-code": {
|
|
292
|
+
"high": "frontier"
|
|
293
|
+
},
|
|
294
|
+
"pi": {
|
|
295
|
+
"high": "frontier"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"note": "Agrees across both harnesses it is seeded from: frontier at high. ADDED 2026-09-23 (released 2026-09-21/22; API id mimo-v2.6-pro; open weights, trillion-parameter; $0.435/$0.87 per MTok, 1M context, 128K output). The API exposes deep thinking as an on/off switch only (`thinking: {type: enabled}`, on by default) — there are no graded reasoning efforts, so `high` here is the harness-default label for the single thinking-on operating point; xhigh/max would name the same point and are not separate candidates. BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 71.9 from Xiaomi's release table (Xiaomi's own run of the public mini-swe-agent harness; its RL dashboard showed 72.57 avg@3 for the pre-release checkpoint). No confidence interval, and NOT on the official Datacurve board (last updated 2026-09-22, no MiMo entry). Like-for-like against the official board's high points: gpt-6-astra 73.2%±3.4 and gpt-5.6-sol 69.4%±1.4 (frontier); gpt-5.5 64.4%±3.1, grok-4.6 65.2%±1.5, gpt-6-sol vendor 65.3 (deep-reasoner). 71.9 sits above 5.6-sol's high point and inside Astra's interval, so the frontier band is the claim, not a rank over Astra; if the official run lands at or below ~68 it belongs in deep-reasoner — re-tier when Datacurve publishes it. Separate entry from mimo-v2.5-pro (scoped-coder by human judgment, no benchmark point); DeepSWE is a long-horizon agentic benchmark, so this score speaks directly to the trajectory-holding concern behind that downgrade, but only as a vendor number. Codex holds no MiMo entry. Availability is still per-harness discovery (rule 3); Pi lists xiaomi/mimo-v2.6-pro as of 2026-09-23."
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"canonical": "deepseek-v4-pro",
|
|
302
|
+
"family": "deepseek",
|
|
303
|
+
"ids": {
|
|
304
|
+
"claude-code": "deepseek-v4-pro",
|
|
305
|
+
"pi": "deepseek/deepseek-v4-pro"
|
|
306
|
+
},
|
|
307
|
+
"tiers": {
|
|
308
|
+
"claude-code": {
|
|
309
|
+
"max": "deep-reasoner"
|
|
310
|
+
},
|
|
311
|
+
"pi": {
|
|
312
|
+
"max": "deep-reasoner"
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
"note": "Agrees across both harnesses it is seeded from: deep-reasoner at max. CHANGED 2026-08-13: 0813 GA replaced the 2026-08-01 preview classification (claude-code high:scoped-coder, pi high:balanced-coder — that disagreement is now historical). BENCHMARK (rule 6), vendor-reported DeepSWE v1.1 62.7 — DeepSeek V4 Pro 0813 Agent comparison table, 2026-08-12/13. BenchLM cites the same 62.7 as DeepSeek V4 Pro (Max); no CI, and DeepSeek did not publish a high-effort DeepSWE number for 0813. Banked at MAX because that is the only published operating point, so it is the model's pushed point, not a throttled seat (same posture as kimi-k3). Do NOT read 62.7 down onto high — measured max→high drops on this board have run 1 to 23 points, and a high point is unclaimed until someone measures it. Like-for-like against the official board's max/xhigh cluster: luna@max 67±4 (balanced-coder at max after the 2026-08-08 reband), gpt-5.5@xhigh 67±6 (deep-reasoner), opus-4.8@max 59±2 (deep-reasoner). 62.7 sits with that deep-reasoner band and above flash's official max 53±4 / vendor 54.4, so the name ordering now tracks the evidence (flash is now also banked at max: 53%±4 official / 54.4 vendor, balanced-coder). Not on the official DeepSWE v1.1 board (last updated 2026-08-07, 21 models) — vendor number, not an independent Datacurve run. No high point is claimed; do not restore the preview high bands from this score."
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"canonical": "deepseek-v4-flash",
|
|
319
|
+
"family": "deepseek",
|
|
320
|
+
"ids": {
|
|
321
|
+
"claude-code": "deepseek-v4-flash",
|
|
322
|
+
"codex": "deepseek-v4-flash",
|
|
323
|
+
"pi": "deepseek/deepseek-v4-flash"
|
|
324
|
+
},
|
|
325
|
+
"tiers": {
|
|
326
|
+
"claude-code": {
|
|
327
|
+
"max": "balanced-coder"
|
|
328
|
+
},
|
|
329
|
+
"codex": {
|
|
330
|
+
"max": "balanced-coder"
|
|
331
|
+
},
|
|
332
|
+
"pi": {
|
|
333
|
+
"max": "balanced-coder"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"note": "Agrees across all three harnesses: balanced-coder at max. CHANGED 2026-08-13: the 2026-08-01 high:balanced-coder point was a mis-cited effort — DeepSWE v1.1 lists this model as deepseek-v4-flash [max] 53%±4 ($0.10, 108k out, 153 steps; board updated 2026-08-07), and DeepSeek's own 54.4 is the same max-effort run (V4-Flash-0731, DeepSeek Harness minimal, reasoning_effort=max). There is no published high-effort DeepSWE number, so high is unclaimed (rule 6: do not read a max score down to high). Like-for-like against the official max/xhigh cluster: grok-4.5 is 54%±2 at HIGH, not a peer at this effort; luna@max 67±4 is also balanced-coder at max after the 2026-08-08 reband; muse-spark-1.1@xhigh 53±3 sits on the same score. Sibling deepseek-v4-pro is deep-reasoner @max off vendor 62.7 — same effort, name ordering now tracks the evidence. The 55.4 figure previously cited as @high was the vendor max point, not a high measurement."
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"canonical": "kimi-k2.7-code",
|
|
340
|
+
"family": "moonshot",
|
|
341
|
+
"ids": {
|
|
342
|
+
"claude-code": "kimi-k2.7-code",
|
|
343
|
+
"pi": "kimi-coding/kimi-for-coding"
|
|
344
|
+
},
|
|
345
|
+
"tiers": {
|
|
346
|
+
"claude-code": {
|
|
347
|
+
"high": "scoped-coder"
|
|
348
|
+
},
|
|
349
|
+
"pi": {
|
|
350
|
+
"high": "scoped-coder"
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"note": "Agrees across Claude Code and Pi: scoped-coder at high."
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"canonical": "gemini-3.5-flash",
|
|
357
|
+
"family": "google",
|
|
358
|
+
"ids": {
|
|
359
|
+
"claude-code": "gemini-3.5-flash"
|
|
360
|
+
},
|
|
361
|
+
"tiers": {
|
|
362
|
+
"claude-code": {
|
|
363
|
+
"high": "scoped-coder"
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
"note": "Seeded from the claude-code catalog only; no confirmed high-effort point exists (the only benchmark observation was at medium)."
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"canonical": "kimi-k3",
|
|
370
|
+
"family": "moonshot",
|
|
371
|
+
"ids": {
|
|
372
|
+
"claude-code": "kimi-k3"
|
|
373
|
+
},
|
|
374
|
+
"tiers": {
|
|
375
|
+
"claude-code": {
|
|
376
|
+
"max": "frontier"
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
"note": "Seeded from the claude-code catalog only. Pi's catalog separately holds `kimi-coding/k3` (deep-reasoner @high) — plausibly the same underlying model, but the id does not plainly normalize (stripping the `kimi-coding/` prefix gives `k3`, not `kimi-k3`) and no human confirmed the pair, so the two stay as separate seed entries rather than a guessed alias. Flagged for human confirmation, not merged."
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"canonical": "kimi-coding/kimi-for-coding-highspeed",
|
|
383
|
+
"family": "moonshot",
|
|
384
|
+
"ids": {
|
|
385
|
+
"pi": "kimi-coding/kimi-for-coding-highspeed"
|
|
386
|
+
},
|
|
387
|
+
"tiers": {
|
|
388
|
+
"pi": {
|
|
389
|
+
"high": "balanced-coder"
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
"note": "Seeded from the pi catalog only."
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"canonical": "kimi-coding/k3",
|
|
396
|
+
"family": "moonshot",
|
|
397
|
+
"ids": {
|
|
398
|
+
"pi": "kimi-coding/k3"
|
|
399
|
+
},
|
|
400
|
+
"tiers": {
|
|
401
|
+
"pi": {
|
|
402
|
+
"high": "deep-reasoner"
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
"note": "Seeded from the pi catalog only. See `kimi-k3`'s note — not merged with claude-code's `kimi-k3` pending human confirmation of the alias."
|
|
406
|
+
}
|
|
407
|
+
]
|
|
408
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Model catalog (skill-owned baseline, per-harness overrides)
|
|
2
|
+
|
|
3
|
+
resolve-issues preflight must classify every discovered model (family · tier) before it can recommend a pick for each slot. The installed `harness-runtime` package provides the shared catalog baseline at `references/model-catalog-seed.json`; the per-harness JSON files below hold only **explicit, human-confirmed overrides**. A skill install or update replaces the shipped baseline, so its newer classifications apply on the next pre-flight wherever no local override exists. It never copies that baseline into a user file or silently changes an override. Training-data knowledge is not a discovery source, and neither is this file's *absence* of a model: only discovered or explicitly human-named models are eligible ([resolve-issues shared modules](../../resolve-issues/references/shared-modules.md)).
|
|
4
|
+
|
|
5
|
+
**Read and write through [`model-catalog.mjs`](../model-catalog.mjs)** rather than hand-editing the JSON — it single-sources the prune predicate and the write paths. Run `model-catalog.mjs help`; the script is the source of truth for the precedence composition, the write-guards, and the shapes. At pre-flight step 2 **prefer `tiers --seen <ids>`**: it composes all three evidence arms (banked → cross-harness → team seed) with the precedence applied *inside* the command. A precedence or filtering rule stated only in prose is applied by an agent mid-gate from memory, and the failure is silent — exactly how rules 5 and 7 went wrong before 2026-07-20.
|
|
6
|
+
|
|
7
|
+
## Location — skill baseline plus one override catalog per harness
|
|
8
|
+
|
|
9
|
+
The skill-owned baseline resolves relative to the installed runtime, so the native Skills CLI refreshes it along with the rest of `harness-runtime`: `~/.agents/skills/harness-runtime/references/model-catalog-seed.json` in the supported global installation. A local override catalog belongs to one harness, at that harness's own user-config location: **Claude Code** `~/.claude/model-catalog.json`, **Codex** `~/.codex/model-catalog.json`, **Pi** `~/.pi/agent/model-catalog.json`, another harness its user-config dir (via `--file`).
|
|
10
|
+
|
|
11
|
+
**Never merge harnesses into one override file.** The same model carries a different id per harness (`sonnet` in Claude Code is `anthropic/claude-sonnet-5` in Pi) — a shared file conflates id namespaces and lets staleness pruning judge entries a run's discovery was never going to see. Per-harness files make every `id` unambiguous and pruning naturally scoped to the harness actually looking. `--harness` guards writes against the file's own `harness` stamp — a sync or bank aimed at a file stamped for a different harness is refused, not merged. Absence is normal and desirable: with no override, the installed skill baseline supplies the classification; a discovered model absent from both falls through to discovery-source evidence.
|
|
12
|
+
|
|
13
|
+
## Schema — the fields that carry judgment
|
|
14
|
+
|
|
15
|
+
The script validates the shape; what follows is the *why* behind the load-bearing fields (see the header comment / `model-catalog.mjs --help` for the full field list).
|
|
16
|
+
|
|
17
|
+
- `tiers` — **the entry's capability: a map from effort to the tier the model reaches there.** Bands, top to bottom:
|
|
18
|
+
- **`frontier`** — the current top end; home role: reviewer.
|
|
19
|
+
- **`deep-reasoner`** — a **capability band, not a chronology**: a deep reasoner below the current top end (a previous generation's frontier is the typical member, but a newly released model that lands in the band belongs here too). The implementer to recommend for a risk-heavy/complex run.
|
|
20
|
+
- **`balanced-coder`** — fast, capable, non-specialist; deep enough for routine work, not the hardest. The implementer to recommend for a routine run.
|
|
21
|
+
- **`scoped-coder`** — **executes a change someone else scoped; does not hold a task together across a long agentic trajectory.** It has **no home role and is never proposed for a slot** — that is what it is for. Banking a model as `scoped-coder` records the answer once and keeps a below-floor model out of every slot's candidate list, so it stops getting tagged `unconfirmed — please classify` every run. The exclusion is mechanized (`slotEligible`, wired to `SLOT_ELIGIBLE_TIERS`). **Marked, never filtered** — the classification is a real, useful answer, so what must not happen is it *reaching a slot list*, not the model being hidden. (Until 2026-07-20 `SLOT_ELIGIBLE_TIERS` was a constant nothing read, so the shipped seed handed a fresh install its five scoped-coder entries as team-endorsed slot options. Five is the count at that commit, verified against the file's history, and it is written as history on purpose: the live count moves whenever an entry is re-banded — it has already changed twice since — so quoting today's number here just plants the next stale fact. Count the current seed if you need the current count.) Promotion is a normal re-confirmation if the model later earns it — the band is a classification, not a blacklist.
|
|
22
|
+
|
|
23
|
+
A model with **two useful operating points** banks both, and pre-flight offers each as its own slot candidate (`example-coder-2 @ high (balanced-coder)` · `example-coder-2 @ max (deep-reasoner)`) — so one model can be the routine implementer *and*, pushed, the deep reasoner. **The two-point examples in this file use a deliberately fictional id.** They named a real model until 2026-07-20, when that model's second point was dropped in every catalog and the docs kept illustrating a two-point entry with a model that no longer had one — an example naming a real model goes stale every time that model is reclassified, and a reader checking their own catalog against it finds a contradiction and can't tell which side is wrong. Efforts are `high | xhigh | max`; **`high` is the floor**, because a point records what a model *reaches when pushed*, never a throttled-down cheap seat — a cheaper operating point is a cheaper **model** (pre-flight step 2). An effort with no banked point is **not claimed**: `tierAt` returns null rather than guessing.
|
|
24
|
+
|
|
25
|
+
This is `tier = f(model, effort)` — the shape removed on 2026-07-13, restored on **2026-07-19** with the cost that killed it removed. That removal was right about the *per-slot, per-run* effort question, which bought a confirmation per slot for no benefit; it stays gone. Points are banked **once, at classification**, so pre-flight reads them instead of asking.
|
|
26
|
+
|
|
27
|
+
**Renamed / reshaped 2026-07-19 — every tier name now describes what a model *is*:** `prior-frontier` → `deep-reasoner` (the old name encoded a *chronology*) and `mid-tier` → `balanced-coder` (encoded an *ordinal position*, and an inaccurate one — with three bands it is the bottom, not the middle); the single-point `tier` (+ optional `effort`) fields became the `tiers` map. All three legacy forms are **accepted, not rejected**: `bank` normalizes them and the `sync` at every pre-flight read migrates entries in place and reports them, so an older catalog heals itself on first use.
|
|
28
|
+
|
|
29
|
+
## Skill-owned baseline (`references/model-catalog-seed.json`) — read-only, ships with the skill
|
|
30
|
+
|
|
31
|
+
The three local catalogs above are **override-level** — a teammate installing the skill fresh starts every one empty and immediately reads the skill-owned baseline. The baseline carries the team's accumulated judgment in one file, checked in beside `model-catalog.mjs` under `references/` (not a user-config location — there is exactly one baseline shared by every harness, unlike the per-harness override catalogs). Its fields mirror the per-user schema with two differences that carry judgment:
|
|
32
|
+
|
|
33
|
+
- `ids` — the map from harness name to **that harness's own id for this model**, resolved once by a human at authoring time (never by live normalization at read time). **Do not add an id pairing beyond what plain `provider/`-prefix normalization gives or what a human has explicitly confirmed** — a wrong alias produces a confident bad slot pick, worse than no pre-fill; when unsure, ship the model as separate per-harness entries instead of guessing a pairing (the seed's `kimi-k3` / `kimi-coding/k3` entries are the worked example: same provider, plausibly the same model, kept separate because the id doesn't plainly normalize and no human confirmed it).
|
|
34
|
+
- `tiers` — **per-harness**, never collapsed to one value: a model's tier is a function of the harness loop as much as the weights (a mid-size model can hold a long agentic trajectory in one harness's loop and not another's), so an entry that disagrees across harnesses states each harness's tier honestly. Of the models this repo seeded from, 0 shared across the three catalogs genuinely disagree per harness (count the seed if you need today's number — models leave this set as they are re-banded). `deepseek-v4-pro` was the last one (claude-code high:scoped-coder vs pi high:balanced-coder) and left on 2026-08-13 when 0813 GA collapsed it to an agreeing max:deep-reasoner point; each entry records what it replaced and is pinned in the seed test, so a drift back has to be deliberate. Collapsing that would silently overrule a real, harness-specific measurement.
|
|
35
|
+
|
|
36
|
+
`seededAt` is checked-in data and will age; pre-flight surfaces `team seed is N days old` once `seededAt` is more than **~90 days** old as a nudge to an owner, not a hard gate — a stale entry only ever costs the human a correction, never a silent wrong pick, because the seed only ever pre-fills a *proposal*. (No script computes seed age — pre-flight reads `seededAt` and applies the nudge; this is the concrete home for that ~90-day threshold.)
|
|
37
|
+
|
|
38
|
+
## Lifecycle rules
|
|
39
|
+
|
|
40
|
+
1. **Read at pre-flight step 2, before classifying.** A discovered model with a catalog entry keeps its banked `family`/`tiers` — pre-fill the proposal from it, don't re-ask. One exception is surfaced, not silent: a `frontier` entry whose provider has since shipped a newer top-line model (that discovery also yielded) may have aged into `deep-reasoner` — propose the demotion for confirmation. Everything else falls through to discovery-source evidence, and failing that `unconfirmed — please classify`.
|
|
41
|
+
2. **Bank at confirmation (pre-flight step 4).** The human's confirmation is the only thing that writes a *classification* (`family`/`tiers`/`note`) — never bank a machine guess. A banked point above `high` in particular is a claim the human has *seen* the model reach that tier when pushed; absent that, bank only `high`. The two maintenance writes rule 4 makes at read time record observation, not judgment, and are the only machine writes allowed.
|
|
42
|
+
3. **Never an availability source.** A cataloged model this run's discovery did not yield is **not proposable** (pre-flight step 1's rule stands). The catalog answers "what is this model," never "what models exist here."
|
|
43
|
+
4. **Auto-prune by staleness, not by single absence.** `sync` deletes every entry unseen for more than 60 days (never silently). One missed run doesn't prune (quota, region, temporary removal); more than 60 days unseen means the model left this user's runtime, and a pruned model that later resurfaces just gets re-classified — one question, the price of a self-cleaning catalog.
|
|
44
|
+
- **Prune watches `lastSeenAt`; classification-staleness watches `confirmedAt` — two axes, not one.** A model discovered every day never prunes, yet its *tier* can be frozen for weeks: grok-4.5 stayed `deep-reasoner` (confirmed 2026-07-19) long after the seed demoted it to `balanced-coder`, because `lastSeenAt` kept bumping and nothing watched the age of the *judgment*. `tiers --seen` flags any discovered entry whose `confirmedAt` is older than `CLASSIFY_STALE_AFTER_DAYS` (30) as `staleClassifications` — **surfaced for re-confirmation, never auto-changed** (unlike prune, which acts). Staleness of judgment is a nudge; staleness of observation is a delete.
|
|
45
|
+
5. **Another harness's catalog is tiering *evidence*, never more.** When a model is new to *this* harness's catalog, an entry in another catalog whose id **plainly matches** after normalizing the `provider/` prefix (`openai/gpt-5.6-sol` ↔ `gpt-5.6-sol`) supplies its banked `family`/`tiers` as the pre-fill, cited as such — the human still confirms this run, and the confirmation banks into *this* harness's file. Plainly means mechanically: harness-local aliases (`sonnet`) don't normalize and get no cross-harness pre-fill. One thing never transfers: **availability** (rule 3 applies doubly).
|
|
46
|
+
6. **A public benchmark is tiering evidence, never availability — and only at a matching operating point.** A leaderboard (SWE-bench, DeepSWE, …) is discovery-source evidence for `tiers`, the same class as provider docs or pricing under rule 1: it pre-fills a proposal, the human still confirms, and it never says the model is runnable here. Two rules keep it usable:
|
|
47
|
+
- **Compare like-for-like points.** A leaderboard's headline column is usually each model's *best* effort, while the catalog banks `high`. They are not interchangeable: measured max→high drops have run **1 to 23 points** across models in a single benchmark version, so a max score implies almost nothing about the high point, and a model whose only published number is below `high` cannot be tiered from it at all. Band a point against peers *at the same effort*, or not at all.
|
|
48
|
+
- **Default to `high` when DeepSWE measured it.** The skill-owned baseline banks the `high` point alone when the board has one; a better `xhigh` or `max` result does not add a second default candidate. When the board has no `high` run, bank the published `xhigh` or `max` point as the model's only measured operating point, and say why in its note. This keeps an effort choice from silently becoming a score-chasing policy while preserving an evidence-backed option for models without a `high` run.
|
|
49
|
+
- **Cite the source and version in the `note`** (`DeepSWE v1.1 @high 54%±2`), and say plainly when a classification is *not* benchmark-backed. Confidence intervals are part of the evidence, not decoration — where they overlap, the benchmark is not separating those models, and banding on the point estimate is fitting noise.
|
|
50
|
+
7. **The skill-owned baseline is the shared default, never an availability source and never a silent override write — the load-bearing invariant.** When a discovered model has no banked entry (rule 1) and no cross-harness hit (rule 5), `seed-proposals --seen <ids>` supplies its per-harness `tiers` as the pre-fill, cited as such. The human may explicitly confirm a local override, which banks a normal entry (fresh `confirmedAt`) into the human's *own* per-harness file; the baseline itself never accumulates. Four things must hold:
|
|
51
|
+
- **Rule 3 applies to the seed, and this is the one that fails *open* if missed:** a model the seed carries but this run's discovery did not yield stays unproposable — `seed-proposals` mechanizes this by taking the discovered-id set as an argument and silently excluding everything outside it, never trusting a caller to filter afterward.
|
|
52
|
+
- **Read-only.** `bank` and `sync` refuse the seed file as a write target (by path and by shape — anything carrying `seededAt` is refused wherever it sits), and rule 4's staleness pruning does **not** apply: the seed records judgment, not observation.
|
|
53
|
+
- **Precedence, full order:** own banked entry → own other-harness catalog → **team seed** → discovery-source evidence (rule 6's benchmarks) → `unconfirmed — please classify`. A user's own measurement always beats the shipped default, and `seed-proposals` **enforces the order itself** rather than trusting a caller to apply it — a precedence rule a caller applies by hand is a rule that silently stops holding.
|
|
54
|
+
- **A banked entry outranks the seed per *model*, never per *effort*.** A banked entry is a **complete statement** of that model's operating points in this harness, so a model with any banked point takes no seed pre-fill at all. A per-effort merge would read a human's *deliberate deletion* of a point (banking `example-coder-2` at `{high}` after deciding its `max` point wasn't real) as *silence* and hand the point back from the seed forever. Deletion has to be expressible; per-model suppression makes it stick. `resolveModelTiers` takes whole `tiers` maps for exactly this reason — its predecessor took one scalar tier per source, so the per-model rule survived only as a comment telling callers not to merge point-by-point, and a signature that invites the bug its comment forbids is a trap.
|
|
55
|
+
|
|
56
|
+
`seed-proposals` returns `{proposals, suppressed}`; `suppressed` names each model the catalog outranked, flagging `disagrees: true` where the seed differs from what the human banked. Surface a disagreement as a **nudge to a seed owner** — never a proposal, never a reason to re-ask a settled classification. This is the only place seed staleness becomes visible (the seed can't be diffed against user-level catalogs in CI, since those live outside the repo); what CI *does* hold is the seed's internal shape.
|
|
57
|
+
- **A disagreement is date-aware — which side is stale depends on which is newer.** The default nudge ("your catalog wins; refresh the seed if yours is the better answer") assumes the *seed* went stale relative to the user's measurement. That is backwards when the seed is the fresher answer: `suppressed` also carries `seededAt`, `bankedConfirmedAt`, and `seedNewer` (`disagrees && seededAt > bankedConfirmedAt`). When `seedNewer` is set, the citation flips to **RE-CONFIRM** — the seed may carry a reclassification the banked entry predates, exactly the grok-4.5 case (seed demoted 2026-07-22, banked confirmed 2026-07-19). This changes the *signal*, not the *resolution*: the banked entry still wins the tier (rule 7 precedence, and the human is the only thing that re-banks) — it just stops the loop from silently trusting a classification the seed already superseded.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { dirname, join } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
|
|
8
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
9
|
+
const WEEK_MS = 7 * DAY_MS;
|
|
10
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
|
|
12
|
+
function readJson(path, fallback = {}) {
|
|
13
|
+
try { return JSON.parse(readFileSync(path, 'utf8')); } catch { return fallback; }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function frontmatterValue(text, key) {
|
|
17
|
+
const frontmatter = /^---\n([\s\S]*?)\n---/.exec(text)?.[1] ?? '';
|
|
18
|
+
const match = new RegExp('^' + key + ':\\s*([^\\n]+)$', 'm').exec(frontmatter);
|
|
19
|
+
return match?.[1].trim().replace(/^['"]|['"]$/g, '') ?? null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function repositoryOf(source) {
|
|
23
|
+
const value = String(source ?? '').trim();
|
|
24
|
+
const match = /^(?:git@github\.com:|https:\/\/github\.com\/)?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+?)(?:\.git)?$/.exec(value);
|
|
25
|
+
return match?.[1] ?? null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function stableVersion(value) {
|
|
29
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(String(value ?? '').trim());
|
|
30
|
+
return match ? match.slice(1).map(Number) : null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function newer(left, right) {
|
|
34
|
+
for (let index = 0; index < 3; index += 1) {
|
|
35
|
+
if (left[index] !== right[index]) return left[index] > right[index];
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function writeCache(path, value) {
|
|
41
|
+
try {
|
|
42
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
43
|
+
writeFileSync(path, JSON.stringify(value));
|
|
44
|
+
} catch { /* A read-only cache must not block skill use. */ }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function main(now = Date.now()) {
|
|
48
|
+
if (process.env.ONEABOVEIO_NO_UPDATE_CHECK) return;
|
|
49
|
+
const skill = readFileSync(join(here, 'SKILL.md'), 'utf8');
|
|
50
|
+
const name = frontmatterValue(skill, 'name');
|
|
51
|
+
const localVersion = stableVersion(frontmatterValue(skill, 'release-version'));
|
|
52
|
+
if (!name || !localVersion) return;
|
|
53
|
+
|
|
54
|
+
const lock = readJson(join(process.env.HOME || homedir(), '.agents', '.skill-lock.json'));
|
|
55
|
+
const entry = lock.skills?.[name];
|
|
56
|
+
const repository = repositoryOf(entry?.sourceUrl || entry?.source);
|
|
57
|
+
if (!repository) return;
|
|
58
|
+
|
|
59
|
+
const cacheRoot = process.env.XDG_CACHE_HOME || join(process.env.HOME || homedir(), '.cache');
|
|
60
|
+
const cachePath = join(cacheRoot, '1aboveio-skills', 'release-check.json');
|
|
61
|
+
const all = readJson(cachePath);
|
|
62
|
+
const cache = all[repository] && typeof all[repository] === 'object' ? all[repository] : {};
|
|
63
|
+
|
|
64
|
+
if (!cache.lastCheck || now - cache.lastCheck >= DAY_MS) {
|
|
65
|
+
const result = spawnSync('gh', ['api', 'repos/' + repository + '/releases/latest', '--jq', '.tag_name'], {
|
|
66
|
+
encoding: 'utf8',
|
|
67
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
68
|
+
timeout: 1500,
|
|
69
|
+
});
|
|
70
|
+
cache.lastCheck = now;
|
|
71
|
+
if (result.status === 0 && stableVersion(result.stdout)) cache.latestTag = result.stdout.trim();
|
|
72
|
+
else delete cache.latestTag;
|
|
73
|
+
all[repository] = cache;
|
|
74
|
+
writeCache(cachePath, all);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const latestVersion = stableVersion(cache.latestTag);
|
|
78
|
+
if (!latestVersion || !newer(latestVersion, localVersion)) return;
|
|
79
|
+
if (cache.notifiedTag === cache.latestTag && cache.notifiedAt && now - cache.notifiedAt < WEEK_MS) return;
|
|
80
|
+
|
|
81
|
+
cache.notifiedTag = cache.latestTag;
|
|
82
|
+
cache.notifiedAt = now;
|
|
83
|
+
all[repository] = cache;
|
|
84
|
+
writeCache(cachePath, all);
|
|
85
|
+
const command = `npx skills@1.5.23 add '${repository}#${cache.latestTag}' --global --agent universal claude-code --skill ${name} --yes`;
|
|
86
|
+
process.stdout.write(
|
|
87
|
+
`UPDATE_AVAILABLE: A newer 1AboveIO skills release (${cache.latestTag}) is available; this skill is `
|
|
88
|
+
+ `v${localVersion.join('.')}. Ask once whether to refresh ${name}. On approval run \`${command}\`. `
|
|
89
|
+
+ 'The refreshed instructions apply next session. Either way, continue the current task and do not ask again this session.\n',
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
try { main(); } catch { /* Update checks are advisory and always fail silent. */ }
|