@r1z4x/tezgah 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/CHANGELOG.md +738 -0
- package/LICENSE +21 -0
- package/MANIFEST +753 -0
- package/README.de.md +169 -0
- package/README.es.md +168 -0
- package/README.fr.md +166 -0
- package/README.md +161 -0
- package/README.tr.md +163 -0
- package/agents/tezgah-reviewer.md +70 -0
- package/bin/codegen +337 -0
- package/bin/consult +797 -0
- package/bin/tezgah-adhd +50 -0
- package/bin/tezgah-agents +45 -0
- package/bin/tezgah-capture +66 -0
- package/bin/tezgah-context +96 -0
- package/bin/tezgah-decisions +213 -0
- package/bin/tezgah-design +953 -0
- package/bin/tezgah-docs +1199 -0
- package/bin/tezgah-doctor +497 -0
- package/bin/tezgah-dsh +37 -0
- package/bin/tezgah-dsh.cmd +70 -0
- package/bin/tezgah-gate +75 -0
- package/bin/tezgah-import-ai-research +439 -0
- package/bin/tezgah-index +32 -0
- package/bin/tezgah-lessons +148 -0
- package/bin/tezgah-mcp +322 -0
- package/bin/tezgah-migrate +324 -0
- package/bin/tezgah-pony +50 -0
- package/bin/tezgah-research +772 -0
- package/bin/tezgah-rollback +93 -0
- package/bin/tezgah-route +124 -0
- package/bin/tezgah-setup +5798 -0
- package/bin/tezgah-status +383 -0
- package/bin/tezgah-task +607 -0
- package/bin/tezgah-taste +423 -0
- package/bin/tezgah-triage +485 -0
- package/bin/tezgah.js +36 -0
- package/commands/adhd.md +21 -0
- package/commands/ponytail.md +21 -0
- package/docs/README.md +112 -0
- package/docs/architecture.md +226 -0
- package/docs/citations-baseline.json +59 -0
- package/docs/clarity-baseline.json +116 -0
- package/docs/contract.md +416 -0
- package/docs/environment.md +141 -0
- package/docs/evidence.md +831 -0
- package/docs/feature-audit.md +139 -0
- package/docs/gate.md +407 -0
- package/docs/glossary.md +201 -0
- package/docs/hosts.md +400 -0
- package/docs/index.json +471 -0
- package/docs/judge.md +193 -0
- package/docs/layers.md +189 -0
- package/docs/models.md +160 -0
- package/docs/operations.md +666 -0
- package/docs/research.md +809 -0
- package/docs/results/paired-outcome-2026-10.jsonl +254 -0
- package/docs/results/paired-outcome-2026-10.md +204 -0
- package/docs/skills.md +236 -0
- package/docs/status-line.md +315 -0
- package/docs/testing.md +287 -0
- package/docs/vision.md +117 -0
- package/hooks/hooks.json +33 -0
- package/hooks/projects-auto-init.py +98 -0
- package/hooks/projects-posttooluse.py +149 -0
- package/hooks/projects-pretooluse.py +40 -0
- package/hooks/projects-stop.py +60 -0
- package/hooks/tezgah_agents.py +817 -0
- package/hooks/tezgah_apps.py +266 -0
- package/hooks/tezgah_attest.py +255 -0
- package/hooks/tezgah_clarity.py +171 -0
- package/hooks/tezgah_components.py +140 -0
- package/hooks/tezgah_context.py +2953 -0
- package/hooks/tezgah_embed.py +765 -0
- package/hooks/tezgah_gate.py +2736 -0
- package/hooks/tezgah_guard.py +177 -0
- package/hooks/tezgah_index.py +124 -0
- package/hooks/tezgah_integrity.py +5141 -0
- package/hooks/tezgah_judge.py +487 -0
- package/hooks/tezgah_lang.py +230 -0
- package/hooks/tezgah_lessons.py +210 -0
- package/hooks/tezgah_models.py +855 -0
- package/hooks/tezgah_paths.py +1132 -0
- package/hooks/tezgah_policy.py +1039 -0
- package/hooks/tezgah_rank.py +77 -0
- package/hooks/tezgah_replay.py +1109 -0
- package/hooks/tezgah_research.py +5176 -0
- package/hooks/tezgah_shapes.py +305 -0
- package/hooks/tezgah_skill_pick.py +227 -0
- package/hooks/tezgah_snapshot.py +490 -0
- package/hooks/tezgah_stopspec.py +320 -0
- package/hooks/tezgah_task.py +458 -0
- package/hooks/tezgah_taste.py +201 -0
- package/hooks/tezgah_untrusted.py +112 -0
- package/hooks/tezgah_update.py +430 -0
- package/hosts/codex/hook.py +268 -0
- package/hosts/codex/hooks.json +26 -0
- package/hosts/cursor/hook.py +461 -0
- package/hosts/cursor/hooks.json +44 -0
- package/hosts/dsh/hooks.json +21 -0
- package/hosts/dsh/statusline/lib/client.js +138 -0
- package/hosts/dsh/statusline/lib/index.js +104 -0
- package/hosts/dsh/statusline/package.json +28 -0
- package/hosts/omp/hook.py +277 -0
- package/hosts/omp/tezgah-hook.ts.in +701 -0
- package/hosts/opencode/plugins/tezgah.js +2742 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +151 -0
- package/output-styles/tezgah.md +142 -0
- package/package.json +32 -0
- package/packaging/build.sh +342 -0
- package/packaging/install.ps1 +166 -0
- package/packaging/install.sh +56 -0
- package/packaging/upgrade.sh +142 -0
- package/skills/ai-research/0-autoresearch-skill/SKILL.md +411 -0
- package/skills/ai-research/0-autoresearch-skill/references/agent-continuity.md +95 -0
- package/skills/ai-research/0-autoresearch-skill/references/progress-reporting.md +166 -0
- package/skills/ai-research/0-autoresearch-skill/references/skill-routing.md +219 -0
- package/skills/ai-research/0-autoresearch-skill/templates/findings.md +44 -0
- package/skills/ai-research/0-autoresearch-skill/templates/research-log.md +41 -0
- package/skills/ai-research/01-model-architecture/litgpt/SKILL.md +469 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/custom-models.md +569 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/distributed-training.md +452 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/supported-models.md +337 -0
- package/skills/ai-research/01-model-architecture/litgpt/references/training-recipes.md +620 -0
- package/skills/ai-research/01-model-architecture/mamba/SKILL.md +260 -0
- package/skills/ai-research/01-model-architecture/mamba/references/architecture-details.md +207 -0
- package/skills/ai-research/01-model-architecture/mamba/references/benchmarks.md +256 -0
- package/skills/ai-research/01-model-architecture/mamba/references/training-guide.md +389 -0
- package/skills/ai-research/01-model-architecture/nanogpt/SKILL.md +290 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/architecture.md +383 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/data.md +477 -0
- package/skills/ai-research/01-model-architecture/nanogpt/references/training.md +565 -0
- package/skills/ai-research/01-model-architecture/rwkv/SKILL.md +260 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/architecture-details.md +345 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/rwkv7.md +387 -0
- package/skills/ai-research/01-model-architecture/rwkv/references/state-management.md +370 -0
- package/skills/ai-research/01-model-architecture/torchtitan/SKILL.md +358 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/checkpoint.md +182 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/custom-models.md +259 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/float8.md +134 -0
- package/skills/ai-research/01-model-architecture/torchtitan/references/fsdp.md +127 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/SKILL.md +516 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/algorithms.md +654 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/integration.md +638 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/pipeline.md +724 -0
- package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/training.md +566 -0
- package/skills/ai-research/02-tokenization/sentencepiece/SKILL.md +235 -0
- package/skills/ai-research/02-tokenization/sentencepiece/references/algorithms.md +201 -0
- package/skills/ai-research/02-tokenization/sentencepiece/references/training.md +305 -0
- package/skills/ai-research/03-fine-tuning/axolotl/SKILL.md +158 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/api.md +5549 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/dataset-formats.md +1030 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/index.md +16 -0
- package/skills/ai-research/03-fine-tuning/axolotl/references/other.md +3564 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/SKILL.md +80 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/_images.md +24 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/advanced.md +1056 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/getting_started.md +350 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/index.md +20 -0
- package/skills/ai-research/03-fine-tuning/llama-factory/references/other.md +32 -0
- package/skills/ai-research/03-fine-tuning/peft/SKILL.md +431 -0
- package/skills/ai-research/03-fine-tuning/peft/references/advanced-usage.md +515 -0
- package/skills/ai-research/03-fine-tuning/peft/references/troubleshooting.md +481 -0
- package/skills/ai-research/03-fine-tuning/unsloth/SKILL.md +80 -0
- package/skills/ai-research/03-fine-tuning/unsloth/references/index.md +8 -0
- package/skills/ai-research/03-fine-tuning/unsloth/references/llms.md +83 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/SKILL.md +436 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/README.md +79 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/api.md +345 -0
- package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/tutorials.md +301 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/SKILL.md +473 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/README.md +74 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/api.md +384 -0
- package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/tutorials.md +377 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/SKILL.md +386 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/README.md +71 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/api.md +334 -0
- package/skills/ai-research/04-mechanistic-interpretability/saelens/references/tutorials.md +319 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/SKILL.md +346 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/README.md +55 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/api.md +363 -0
- package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/tutorials.md +340 -0
- package/skills/ai-research/05-data-processing/nemo-curator/SKILL.md +383 -0
- package/skills/ai-research/05-data-processing/nemo-curator/references/deduplication.md +88 -0
- package/skills/ai-research/05-data-processing/nemo-curator/references/filtering.md +103 -0
- package/skills/ai-research/05-data-processing/ray-data/SKILL.md +326 -0
- package/skills/ai-research/05-data-processing/ray-data/references/integration.md +83 -0
- package/skills/ai-research/05-data-processing/ray-data/references/transformations.md +84 -0
- package/skills/ai-research/06-post-training/grpo-rl-training/README.md +98 -0
- package/skills/ai-research/06-post-training/grpo-rl-training/SKILL.md +572 -0
- package/skills/ai-research/06-post-training/miles/SKILL.md +315 -0
- package/skills/ai-research/06-post-training/miles/references/api-reference.md +142 -0
- package/skills/ai-research/06-post-training/miles/references/troubleshooting.md +353 -0
- package/skills/ai-research/06-post-training/openrlhf/SKILL.md +249 -0
- package/skills/ai-research/06-post-training/openrlhf/references/algorithm-comparison.md +405 -0
- package/skills/ai-research/06-post-training/openrlhf/references/custom-rewards.md +531 -0
- package/skills/ai-research/06-post-training/openrlhf/references/hybrid-engine.md +288 -0
- package/skills/ai-research/06-post-training/openrlhf/references/multi-node-training.md +455 -0
- package/skills/ai-research/06-post-training/simpo/SKILL.md +219 -0
- package/skills/ai-research/06-post-training/simpo/references/datasets.md +479 -0
- package/skills/ai-research/06-post-training/simpo/references/hyperparameters.md +453 -0
- package/skills/ai-research/06-post-training/simpo/references/loss-functions.md +351 -0
- package/skills/ai-research/06-post-training/slime/SKILL.md +464 -0
- package/skills/ai-research/06-post-training/slime/references/api-reference.md +393 -0
- package/skills/ai-research/06-post-training/slime/references/troubleshooting.md +387 -0
- package/skills/ai-research/06-post-training/torchforge/SKILL.md +433 -0
- package/skills/ai-research/06-post-training/torchforge/references/api-reference.md +328 -0
- package/skills/ai-research/06-post-training/torchforge/references/troubleshooting.md +410 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/SKILL.md +455 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/dpo-variants.md +228 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/online-rl.md +83 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/reward-modeling.md +123 -0
- package/skills/ai-research/06-post-training/trl-fine-tuning/references/sft-training.md +169 -0
- package/skills/ai-research/06-post-training/verl/SKILL.md +391 -0
- package/skills/ai-research/06-post-training/verl/references/api-reference.md +302 -0
- package/skills/ai-research/06-post-training/verl/references/troubleshooting.md +392 -0
- package/skills/ai-research/07-safety-alignment/constitutional-ai/SKILL.md +290 -0
- package/skills/ai-research/07-safety-alignment/llamaguard/SKILL.md +337 -0
- package/skills/ai-research/07-safety-alignment/nemo-guardrails/SKILL.md +297 -0
- package/skills/ai-research/07-safety-alignment/prompt-guard/SKILL.md +312 -0
- package/skills/ai-research/08-distributed-training/accelerate/SKILL.md +332 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/custom-plugins.md +454 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/megatron-integration.md +490 -0
- package/skills/ai-research/08-distributed-training/accelerate/references/performance.md +526 -0
- package/skills/ai-research/08-distributed-training/deepspeed/SKILL.md +141 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/08.md +18 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/09.md +174 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/2020.md +379 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/2023.md +280 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/assets.md +180 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/index.md +36 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/mii.md +119 -0
- package/skills/ai-research/08-distributed-training/deepspeed/references/other.md +1192 -0
- package/skills/ai-research/08-distributed-training/megatron-core/SKILL.md +366 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/benchmarks.md +250 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/parallelism-guide.md +405 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/production-examples.md +474 -0
- package/skills/ai-research/08-distributed-training/megatron-core/references/training-recipes.md +548 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/SKILL.md +231 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_async_recipe.md +14 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_overview.md +19 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_recipe.md +18 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_ddp_notes.md +10 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_device_mesh_tutorial.md +22 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_examples_fsdp2.md +15 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp1_api.md +9 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp2_tutorial.md +45 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fully_shard_api.md +49 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_tp_tutorial.md +22 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/ray_train_fsdp2_example.md +13 -0
- package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/torchtitan_fsdp_notes.md +14 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/SKILL.md +346 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/callbacks.md +437 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/distributed.md +491 -0
- package/skills/ai-research/08-distributed-training/pytorch-lightning/references/hyperparameter-tuning.md +557 -0
- package/skills/ai-research/08-distributed-training/ray-train/SKILL.md +406 -0
- package/skills/ai-research/08-distributed-training/ray-train/references/multi-node.md +629 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/SKILL.md +545 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/references/advanced-usage.md +612 -0
- package/skills/ai-research/09-infrastructure/lambda-labs/references/troubleshooting.md +531 -0
- package/skills/ai-research/09-infrastructure/modal/SKILL.md +341 -0
- package/skills/ai-research/09-infrastructure/modal/references/advanced-usage.md +504 -0
- package/skills/ai-research/09-infrastructure/modal/references/troubleshooting.md +495 -0
- package/skills/ai-research/09-infrastructure/skypilot/SKILL.md +509 -0
- package/skills/ai-research/09-infrastructure/skypilot/references/advanced-usage.md +492 -0
- package/skills/ai-research/09-infrastructure/skypilot/references/troubleshooting.md +571 -0
- package/skills/ai-research/10-optimization/awq/SKILL.md +310 -0
- package/skills/ai-research/10-optimization/awq/references/advanced-usage.md +325 -0
- package/skills/ai-research/10-optimization/awq/references/troubleshooting.md +345 -0
- package/skills/ai-research/10-optimization/bitsandbytes/SKILL.md +411 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/memory-optimization.md +522 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/qlora-training.md +522 -0
- package/skills/ai-research/10-optimization/bitsandbytes/references/quantization-formats.md +448 -0
- package/skills/ai-research/10-optimization/flash-attention/SKILL.md +367 -0
- package/skills/ai-research/10-optimization/flash-attention/references/benchmarks.md +216 -0
- package/skills/ai-research/10-optimization/flash-attention/references/transformers-integration.md +294 -0
- package/skills/ai-research/10-optimization/gguf/SKILL.md +427 -0
- package/skills/ai-research/10-optimization/gguf/references/advanced-usage.md +505 -0
- package/skills/ai-research/10-optimization/gguf/references/troubleshooting.md +443 -0
- package/skills/ai-research/10-optimization/gptq/SKILL.md +450 -0
- package/skills/ai-research/10-optimization/gptq/references/calibration.md +338 -0
- package/skills/ai-research/10-optimization/gptq/references/integration.md +130 -0
- package/skills/ai-research/10-optimization/gptq/references/troubleshooting.md +96 -0
- package/skills/ai-research/10-optimization/hqq/SKILL.md +445 -0
- package/skills/ai-research/10-optimization/hqq/references/advanced-usage.md +529 -0
- package/skills/ai-research/10-optimization/hqq/references/troubleshooting.md +504 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/SKILL.md +319 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/architecture.md +320 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/biomedical.md +498 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/domain-specific.md +626 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/experiment-loop.md +129 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/optimizers.md +330 -0
- package/skills/ai-research/10-optimization/ml-training-recipes/references/scaling-and-selection.md +428 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/SKILL.md +405 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/benchmarks.md +394 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/custom-tasks.md +425 -0
- package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/issues.md +395 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/SKILL.md +490 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/api-evaluation.md +491 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/benchmark-guide.md +489 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/custom-tasks.md +603 -0
- package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/distributed-eval.md +520 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/SKILL.md +494 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/adapter-system.md +341 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/configuration.md +448 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/custom-benchmarks.md +316 -0
- package/skills/ai-research/11-evaluation/nemo-evaluator/references/execution-backends.md +362 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/SKILL.md +258 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/optimization.md +90 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/quantization.md +214 -0
- package/skills/ai-research/12-inference-serving/llama-cpp/references/server.md +126 -0
- package/skills/ai-research/12-inference-serving/sglang/SKILL.md +442 -0
- package/skills/ai-research/12-inference-serving/sglang/references/deployment.md +491 -0
- package/skills/ai-research/12-inference-serving/sglang/references/radix-attention.md +414 -0
- package/skills/ai-research/12-inference-serving/sglang/references/structured-generation.md +542 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/SKILL.md +187 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/multi-gpu.md +299 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/optimization.md +243 -0
- package/skills/ai-research/12-inference-serving/tensorrt-llm/references/serving.md +471 -0
- package/skills/ai-research/12-inference-serving/vllm/SKILL.md +364 -0
- package/skills/ai-research/12-inference-serving/vllm/references/optimization.md +227 -0
- package/skills/ai-research/12-inference-serving/vllm/references/quantization.md +285 -0
- package/skills/ai-research/12-inference-serving/vllm/references/server-deployment.md +256 -0
- package/skills/ai-research/12-inference-serving/vllm/references/troubleshooting.md +448 -0
- package/skills/ai-research/13-mlops/mlflow/SKILL.md +704 -0
- package/skills/ai-research/13-mlops/mlflow/references/deployment.md +745 -0
- package/skills/ai-research/13-mlops/mlflow/references/model-registry.md +771 -0
- package/skills/ai-research/13-mlops/mlflow/references/tracking.md +681 -0
- package/skills/ai-research/13-mlops/swanlab/SKILL.md +406 -0
- package/skills/ai-research/13-mlops/swanlab/references/integrations.md +305 -0
- package/skills/ai-research/13-mlops/swanlab/references/visualization.md +234 -0
- package/skills/ai-research/13-mlops/tensorboard/SKILL.md +629 -0
- package/skills/ai-research/13-mlops/tensorboard/references/integrations.md +639 -0
- package/skills/ai-research/13-mlops/tensorboard/references/profiling.md +546 -0
- package/skills/ai-research/13-mlops/tensorboard/references/visualization.md +621 -0
- package/skills/ai-research/13-mlops/weights-and-biases/SKILL.md +590 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/artifacts.md +585 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/integrations.md +701 -0
- package/skills/ai-research/13-mlops/weights-and-biases/references/sweeps.md +848 -0
- package/skills/ai-research/14-agents/a-evolve/SKILL.md +383 -0
- package/skills/ai-research/14-agents/a-evolve/references/README.md +831 -0
- package/skills/ai-research/14-agents/a-evolve/references/api.md +594 -0
- package/skills/ai-research/14-agents/a-evolve/references/architecture.md +417 -0
- package/skills/ai-research/14-agents/a-evolve/references/design-patterns.md +462 -0
- package/skills/ai-research/14-agents/a-evolve/references/examples.md +352 -0
- package/skills/ai-research/14-agents/a-evolve/references/issues.md +591 -0
- package/skills/ai-research/14-agents/a-evolve/references/releases.md +112 -0
- package/skills/ai-research/14-agents/a-evolve/references/tutorials.md +819 -0
- package/skills/ai-research/14-agents/autogpt/SKILL.md +403 -0
- package/skills/ai-research/14-agents/autogpt/references/advanced-usage.md +536 -0
- package/skills/ai-research/14-agents/autogpt/references/troubleshooting.md +421 -0
- package/skills/ai-research/14-agents/crewai/SKILL.md +498 -0
- package/skills/ai-research/14-agents/crewai/references/flows.md +439 -0
- package/skills/ai-research/14-agents/crewai/references/tools.md +430 -0
- package/skills/ai-research/14-agents/crewai/references/troubleshooting.md +481 -0
- package/skills/ai-research/14-agents/langchain/SKILL.md +480 -0
- package/skills/ai-research/14-agents/langchain/references/agents.md +500 -0
- package/skills/ai-research/14-agents/langchain/references/integration.md +563 -0
- package/skills/ai-research/14-agents/langchain/references/rag.md +601 -0
- package/skills/ai-research/14-agents/llamaindex/SKILL.md +569 -0
- package/skills/ai-research/14-agents/llamaindex/references/agents.md +84 -0
- package/skills/ai-research/14-agents/llamaindex/references/data_connectors.md +109 -0
- package/skills/ai-research/14-agents/llamaindex/references/query_engines.md +407 -0
- package/skills/ai-research/15-rag/chroma/SKILL.md +406 -0
- package/skills/ai-research/15-rag/chroma/references/integration.md +39 -0
- package/skills/ai-research/15-rag/faiss/SKILL.md +221 -0
- package/skills/ai-research/15-rag/faiss/references/index_types.md +281 -0
- package/skills/ai-research/15-rag/pinecone/SKILL.md +358 -0
- package/skills/ai-research/15-rag/pinecone/references/deployment.md +182 -0
- package/skills/ai-research/15-rag/qdrant/SKILL.md +493 -0
- package/skills/ai-research/15-rag/qdrant/references/advanced-usage.md +649 -0
- package/skills/ai-research/15-rag/qdrant/references/troubleshooting.md +632 -0
- package/skills/ai-research/15-rag/sentence-transformers/SKILL.md +255 -0
- package/skills/ai-research/15-rag/sentence-transformers/references/models.md +124 -0
- package/skills/ai-research/16-prompt-engineering/dspy/SKILL.md +590 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/examples.md +664 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/modules.md +476 -0
- package/skills/ai-research/16-prompt-engineering/dspy/references/optimizers.md +567 -0
- package/skills/ai-research/16-prompt-engineering/guidance/SKILL.md +572 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/backends.md +555 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/constraints.md +675 -0
- package/skills/ai-research/16-prompt-engineering/guidance/references/examples.md +768 -0
- package/skills/ai-research/16-prompt-engineering/instructor/SKILL.md +740 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/examples.md +108 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/providers.md +71 -0
- package/skills/ai-research/16-prompt-engineering/instructor/references/validation.md +607 -0
- package/skills/ai-research/16-prompt-engineering/outlines/SKILL.md +652 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/backends.md +616 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/examples.md +774 -0
- package/skills/ai-research/16-prompt-engineering/outlines/references/json_generation.md +653 -0
- package/skills/ai-research/17-observability/langsmith/SKILL.md +422 -0
- package/skills/ai-research/17-observability/langsmith/references/advanced-usage.md +549 -0
- package/skills/ai-research/17-observability/langsmith/references/troubleshooting.md +538 -0
- package/skills/ai-research/17-observability/phoenix/SKILL.md +475 -0
- package/skills/ai-research/17-observability/phoenix/references/advanced-usage.md +620 -0
- package/skills/ai-research/17-observability/phoenix/references/troubleshooting.md +539 -0
- package/skills/ai-research/18-multimodal/audiocraft/SKILL.md +564 -0
- package/skills/ai-research/18-multimodal/audiocraft/references/advanced-usage.md +667 -0
- package/skills/ai-research/18-multimodal/audiocraft/references/troubleshooting.md +505 -0
- package/skills/ai-research/18-multimodal/blip-2/SKILL.md +564 -0
- package/skills/ai-research/18-multimodal/blip-2/references/advanced-usage.md +681 -0
- package/skills/ai-research/18-multimodal/blip-2/references/troubleshooting.md +527 -0
- package/skills/ai-research/18-multimodal/clip/SKILL.md +253 -0
- package/skills/ai-research/18-multimodal/clip/references/applications.md +208 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/SKILL.md +402 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/references/libero-commands.md +175 -0
- package/skills/ai-research/18-multimodal/cosmos-policy/references/robocasa-commands.md +147 -0
- package/skills/ai-research/18-multimodal/llava/SKILL.md +304 -0
- package/skills/ai-research/18-multimodal/llava/references/training.md +198 -0
- package/skills/ai-research/18-multimodal/openpi/SKILL.md +480 -0
- package/skills/ai-research/18-multimodal/openpi/references/checkpoints-and-env-map.md +86 -0
- package/skills/ai-research/18-multimodal/openpi/references/config-recipes.md +50 -0
- package/skills/ai-research/18-multimodal/openpi/references/pytorch-gotchas.md +49 -0
- package/skills/ai-research/18-multimodal/openpi/references/remote-client-pattern.md +48 -0
- package/skills/ai-research/18-multimodal/openpi/references/training-debugging.md +46 -0
- package/skills/ai-research/18-multimodal/openvla-oft/SKILL.md +441 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/aloha-workflow.md +141 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/config-troubleshooting.md +97 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/libero-workflow.md +115 -0
- package/skills/ai-research/18-multimodal/openvla-oft/references/paper-and-checkpoints.md +84 -0
- package/skills/ai-research/18-multimodal/segment-anything/SKILL.md +500 -0
- package/skills/ai-research/18-multimodal/segment-anything/references/advanced-usage.md +590 -0
- package/skills/ai-research/18-multimodal/segment-anything/references/troubleshooting.md +485 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/SKILL.md +519 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/references/advanced-usage.md +717 -0
- package/skills/ai-research/18-multimodal/stable-diffusion/references/troubleshooting.md +556 -0
- package/skills/ai-research/18-multimodal/whisper/SKILL.md +317 -0
- package/skills/ai-research/18-multimodal/whisper/references/languages.md +190 -0
- package/skills/ai-research/19-emerging-techniques/knowledge-distillation/SKILL.md +458 -0
- package/skills/ai-research/19-emerging-techniques/knowledge-distillation/references/minillm.md +335 -0
- package/skills/ai-research/19-emerging-techniques/long-context/SKILL.md +536 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/extension_methods.md +469 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/fine_tuning.md +612 -0
- package/skills/ai-research/19-emerging-techniques/long-context/references/rope.md +403 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/SKILL.md +497 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/coefficient-tuning.md +415 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/evaluation.md +463 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/examples.md +429 -0
- package/skills/ai-research/19-emerging-techniques/model-merging/references/methods.md +353 -0
- package/skills/ai-research/19-emerging-techniques/model-pruning/SKILL.md +495 -0
- package/skills/ai-research/19-emerging-techniques/model-pruning/references/wanda.md +348 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/SKILL.md +526 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/architectures.md +433 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/inference.md +349 -0
- package/skills/ai-research/19-emerging-techniques/moe-training/references/training.md +426 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/SKILL.md +467 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/lookahead.md +310 -0
- package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/medusa.md +351 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/SKILL.md +479 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/data-visualization.md +509 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/diagram-generation.md +395 -0
- package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/style-guide.md +305 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/SKILL.md +982 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/checklists.md +348 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/citation-workflow.md +563 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/reviewer-guidelines.md +349 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/sources.md +165 -0
- package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/writing-guide.md +477 -0
- package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/SKILL.md +298 -0
- package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/references/slide-templates.md +505 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/SKILL.md +270 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/checklist.md +279 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/reviewer-guidelines.md +116 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/section-blueprints.md +400 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/systems-conferences.md +261 -0
- package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/writing-patterns.md +231 -0
- package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/SKILL.md +384 -0
- package/skills/ai-research/21-research-ideation/creative-thinking-for-research/SKILL.md +366 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/SKILL.md +245 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/ara-schema.md +439 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/exploration-tree-spec.md +125 -0
- package/skills/ai-research/22-agent-native-research-artifact/compiler/references/validation-checklist.md +149 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/SKILL.md +324 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/event-taxonomy.md +124 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/provenance-tags.md +190 -0
- package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/session-protocol.md +162 -0
- package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/SKILL.md +322 -0
- package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/references/review-dimensions.md +182 -0
- package/skills/ai-research/SKILL.md +101 -0
- package/skills/ai-research/SOURCE +38 -0
- package/skills/ai-research/index/1-frame.md +18 -0
- package/skills/ai-research/index/2-data.md +21 -0
- package/skills/ai-research/index/3-train.md +48 -0
- package/skills/ai-research/index/4-measure.md +25 -0
- package/skills/ai-research/index/5-run.md +23 -0
- package/skills/ai-research/index/6-write.md +35 -0
- package/skills/ai-research/library.json +3456 -0
- package/skills/analyze-app/EVALS.md +82 -0
- package/skills/analyze-app/SKILL.md +188 -0
- package/skills/design-contract/EVALS.md +80 -0
- package/skills/design-contract/SKILL.md +171 -0
- package/skills/design-library/EVALS.md +85 -0
- package/skills/design-library/INDEX.md +59 -0
- package/skills/design-library/SKILL.md +58 -0
- package/skills/design-library/SOURCE +131 -0
- package/skills/design-library/adaptive-interfaces/skills/colour-independence/SKILL.md +90 -0
- package/skills/design-library/adaptive-interfaces/skills/flexible-typography/SKILL.md +83 -0
- package/skills/design-library/adaptive-interfaces/skills/information-density/SKILL.md +87 -0
- package/skills/design-library/adaptive-interfaces/skills/preference-audit/SKILL.md +70 -0
- package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/SKILL.md +86 -0
- package/skills/design-library/adaptive-interfaces/skills/responsive-review/SKILL.md +76 -0
- package/skills/design-library/adaptive-interfaces/skills/simplified-views/SKILL.md +97 -0
- package/skills/design-library/adaptive-interfaces/skills/specify/SKILL.md +63 -0
- package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/SKILL.md +100 -0
- package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/SKILL.md +61 -0
- package/skills/design-library/cognitive-accessibility/skills/assess-load/SKILL.md +48 -0
- package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/SKILL.md +60 -0
- package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/SKILL.md +61 -0
- package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/SKILL.md +71 -0
- package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/SKILL.md +67 -0
- package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/SKILL.md +60 -0
- package/skills/design-library/cognitive-accessibility/skills/plain-language-design/SKILL.md +78 -0
- package/skills/design-library/cognitive-accessibility/skills/review/SKILL.md +56 -0
- package/skills/design-library/cognitive-accessibility/skills/simplify/SKILL.md +39 -0
- package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/SKILL.md +64 -0
- package/skills/design-library/design-research/skills/behavioural-analytics/SKILL.md +33 -0
- package/skills/design-library/design-research/skills/qual-quant-triangulation/SKILL.md +33 -0
- package/skills/design-library/inclusive-interaction/skills/audit/SKILL.md +50 -0
- package/skills/design-library/inclusive-interaction/skills/design-flow/SKILL.md +58 -0
- package/skills/design-library/inclusive-interaction/skills/feedback-and-status/SKILL.md +76 -0
- package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/SKILL.md +70 -0
- package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/SKILL.md +99 -0
- package/skills/design-library/inclusive-interaction/skills/keyboard-review/SKILL.md +54 -0
- package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/SKILL.md +79 -0
- package/skills/design-library/inclusive-interaction/skills/multi-modal-input/SKILL.md +70 -0
- package/skills/design-library/inclusive-interaction/skills/touch-target-design/SKILL.md +71 -0
- package/skills/design-library/inclusive-interaction/skills/voice-interaction/SKILL.md +68 -0
- package/skills/design-library/visual-critique/skills/critique-affordance/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-brand-consistency/SKILL.md +42 -0
- package/skills/design-library/visual-critique/skills/critique-color/SKILL.md +44 -0
- package/skills/design-library/visual-critique/skills/critique-composition/SKILL.md +46 -0
- package/skills/design-library/visual-critique/skills/critique-information-density/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-typography/SKILL.md +45 -0
- package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/SKILL.md +40 -0
- package/skills/feature-audit/EVALS.md +83 -0
- package/skills/feature-audit/SKILL.md +326 -0
- package/skills/harness/EVALS.md +81 -0
- package/skills/harness/SKILL.md +88 -0
- package/skills/i-have-adhd/EVALS.md +80 -0
- package/skills/i-have-adhd/SKILL.md +183 -0
- package/skills/no-ai-slop/EVALS.md +89 -0
- package/skills/no-ai-slop/SKILL.md +209 -0
- package/skills/no-ai-slop/eval.md +52 -0
- package/skills/plan-add/EVALS.md +79 -0
- package/skills/plan-add/SKILL.md +179 -0
- package/skills/plan-add/render_table.py +72 -0
- package/skills/plan-status/EVALS.md +78 -0
- package/skills/plan-status/SKILL.md +52 -0
- package/skills/plan-sync/EVALS.md +80 -0
- package/skills/plan-sync/SKILL.md +69 -0
- package/skills/pm-frameworks/SKILL.md +33 -0
- package/skills/pm-frameworks/SOURCE +39 -0
- package/skills/pm-frameworks/intended-vs-implemented/SKILL.md +42 -0
- package/skills/pm-frameworks/opportunity-solution-tree/SKILL.md +64 -0
- package/skills/ponytail/EVALS.md +80 -0
- package/skills/ponytail/SKILL.md +124 -0
- package/skills/product-analysis/EVALS.md +103 -0
- package/skills/product-analysis/SKILL.md +361 -0
- package/skills/research/EVALS.md +104 -0
- package/skills/research/SKILL.md +570 -0
- package/skills/rl-env/SKILL.md +53 -0
- package/skills/rl-env/SOURCE +41 -0
- package/skills/rl-env/generate-nemo-gym-env/SKILL.md +169 -0
- package/skills/rl-env/generate-nemo-gym-env/references/architecture.md +114 -0
- package/skills/rl-env/generate-openenv-env/SKILL.md +183 -0
- package/skills/rl-env/generate-openenv-env/references/architecture.md +82 -0
- package/skills/rl-env/generate-ors-env/SKILL.md +209 -0
- package/skills/rl-env/generate-ors-env/references/architecture.md +113 -0
- package/skills/rl-env/generate-verifiers-env/SKILL.md +188 -0
- package/skills/rl-env/generate-verifiers-env/references/architecture.md +119 -0
- package/skills/rl-env/rl-env-from-description/SKILL.md +124 -0
- package/skills/rl-env/rl-env-from-description/references/interview.md +75 -0
- package/skills/rl-env/rl-env-from-description/references/nemo_gym.md +41 -0
- package/skills/rl-env/rl-env-from-description/references/openenv.md +35 -0
- package/skills/rl-env/rl-env-from-description/references/ors.md +50 -0
- package/skills/rl-env/rl-env-from-description/references/verifiers.md +39 -0
- package/skills/tezgah-contract/EVALS.md +78 -0
- package/skills/tezgah-contract/SKILL.md +792 -0
- package/statusline.py +129 -0
- package/workflows/graph-impact.js +153 -0
- package/workflows/graph-map.js +158 -0
- package/workflows/graph-review.js +170 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""tezgah-import-ai-research - vendor the AI-research-SKILLs library into tezgah.
|
|
3
|
+
|
|
4
|
+
Dev-time only: `bin/tezgah-setup` never links this into ~/.config/tezgah/bin. The
|
|
5
|
+
generated tree is committed and reviewed like any other file, and `--check`
|
|
6
|
+
re-derives every digest from `library.json`, so CI verifies it without the
|
|
7
|
+
upstream clone being present.
|
|
8
|
+
|
|
9
|
+
bin/tezgah-import-ai-research --source <path-to-AI-research-SKILLs-clone> --rev 773a529
|
|
10
|
+
bin/tezgah-import-ai-research --check
|
|
11
|
+
|
|
12
|
+
A vendored path is its provenance, so the upstream layout is kept verbatim:
|
|
13
|
+
`<category>/<skill>/SKILL.md` beside its `references/`. What is dropped, and why,
|
|
14
|
+
is DROP_FILES and DROP_DIRS; everything that is not markdown is dropped by the
|
|
15
|
+
`*.md` filter, so no PDF, LaTeX class, image or `.gitkeep` reaches the repo. A
|
|
16
|
+
vendored file with no YAML frontmatter gets one attribution comment; upstream's
|
|
17
|
+
own frontmatter (author, license) is left untouched, because MIT attribution is
|
|
18
|
+
the point of keeping it.
|
|
19
|
+
|
|
20
|
+
`skills/ai-research/SKILL.md` is hand-written and is not in the manifest: it is
|
|
21
|
+
the entry point, not vendored content. `library.json` is the manifest itself.
|
|
22
|
+
|
|
23
|
+
Exit codes: 0 ok, 1 drift or an upstream surprise, 2 misuse.
|
|
24
|
+
"""
|
|
25
|
+
import argparse
|
|
26
|
+
import hashlib
|
|
27
|
+
import json
|
|
28
|
+
import os
|
|
29
|
+
import re
|
|
30
|
+
import shutil
|
|
31
|
+
import subprocess
|
|
32
|
+
import sys
|
|
33
|
+
|
|
34
|
+
HERE = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|
35
|
+
OUT = os.path.join(HERE, "skills", "ai-research")
|
|
36
|
+
UPSTREAM = "https://github.com/orchestra-research/AI-research-SKILLs"
|
|
37
|
+
UPSTREAM_NAME = "AI-research-SKILLs"
|
|
38
|
+
LICENCE = "MIT"
|
|
39
|
+
# A changing upstream must be reviewed, not absorbed: a re-run that finds a
|
|
40
|
+
# different shape stops here until the drop list and the stage map are looked at.
|
|
41
|
+
EXPECTED_CATEGORIES, EXPECTED_SKILLS = 23, 98
|
|
42
|
+
|
|
43
|
+
# Three machine-scraped reference dumps. They are concatenated official docs with
|
|
44
|
+
# `URL:` headers, not guides, and the entry's own SKILL.md already distils them.
|
|
45
|
+
DROP_FILES = (
|
|
46
|
+
"03-fine-tuning/unsloth/references/llms-full.md",
|
|
47
|
+
"03-fine-tuning/unsloth/references/llms-txt.md",
|
|
48
|
+
"08-distributed-training/deepspeed/references/tutorials.md",
|
|
49
|
+
)
|
|
50
|
+
# LaTeX class/bst/bib trees plus example PDFs, re-downloadable from each venue.
|
|
51
|
+
DROP_DIRS = (
|
|
52
|
+
"20-ml-paper-writing/ml-paper-writing/templates",
|
|
53
|
+
"20-ml-paper-writing/systems-paper-writing/templates",
|
|
54
|
+
)
|
|
55
|
+
# Bodies that name an API the upstream library has since moved. Recorded, not
|
|
56
|
+
# edited: the vendored text stays verbatim, the index line carries the warning.
|
|
57
|
+
STALE_API = {
|
|
58
|
+
"01-model-architecture/rwkv": "pins pytorch-lightning==1.9.5",
|
|
59
|
+
"10-optimization/awq": "upstream says AutoAWQ is deprecated",
|
|
60
|
+
"14-agents/langchain": "uses removed chain/memory APIs",
|
|
61
|
+
"16-prompt-engineering/dspy": "pre-2.5 module names",
|
|
62
|
+
"16-prompt-engineering/guidance": "models.Anthropic shape",
|
|
63
|
+
"16-prompt-engineering/outlines": "outlines.models.* moved in 1.0",
|
|
64
|
+
}
|
|
65
|
+
# The research-line stage each category answers to. A session reads one file.
|
|
66
|
+
STAGES = (
|
|
67
|
+
("1-frame", "Frame the question and run the loop",
|
|
68
|
+
("0-autoresearch-skill", "21-research-ideation",
|
|
69
|
+
"22-agent-native-research-artifact")),
|
|
70
|
+
("2-data", "Data, retrieval and tokenization",
|
|
71
|
+
("02-tokenization", "05-data-processing", "15-rag")),
|
|
72
|
+
("3-train", "Model, training, post-training and optimization",
|
|
73
|
+
("01-model-architecture", "03-fine-tuning", "06-post-training",
|
|
74
|
+
"08-distributed-training", "10-optimization", "19-emerging-techniques")),
|
|
75
|
+
("4-measure", "Measurement, safety and interpretability",
|
|
76
|
+
("04-mechanistic-interpretability", "07-safety-alignment", "11-evaluation",
|
|
77
|
+
"17-observability")),
|
|
78
|
+
("5-run", "Compute, serving and tracking",
|
|
79
|
+
("09-infrastructure", "12-inference-serving", "13-mlops")),
|
|
80
|
+
("6-write", "Agents, structured output, media and writing",
|
|
81
|
+
("14-agents", "16-prompt-engineering", "18-multimodal",
|
|
82
|
+
"20-ml-paper-writing")),
|
|
83
|
+
)
|
|
84
|
+
GENERATED_MARKS = ("automatically generated from official documentation",
|
|
85
|
+
"Quick reference patterns will be added")
|
|
86
|
+
ATTRIBUTION = "<!-- vendored from orchestra-research/%s@%s %s; %s (c) Orchestra Research -->"
|
|
87
|
+
|
|
88
|
+
CATEGORY_RE = re.compile(r"^(0-|[0-9]{2}-)")
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def sha256(path):
|
|
92
|
+
h = hashlib.sha256()
|
|
93
|
+
with open(path, "rb") as fh:
|
|
94
|
+
for block in iter(lambda: fh.read(65536), b""):
|
|
95
|
+
h.update(block)
|
|
96
|
+
return h.hexdigest()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def frontmatter(text):
|
|
100
|
+
"""The scalar fields of a leading YAML block, values unwrapped onto one line."""
|
|
101
|
+
m = re.match(r"---\n(.*?)\n---\n", text, re.S)
|
|
102
|
+
if not m:
|
|
103
|
+
return {}
|
|
104
|
+
fields = {}
|
|
105
|
+
for line in m.group(1).split("\n"):
|
|
106
|
+
hit = re.match(r"^([a-z_]+):\s*(.*)$", line)
|
|
107
|
+
if hit and hit.group(2):
|
|
108
|
+
fields[hit.group(1)] = hit.group(2).strip()
|
|
109
|
+
return fields
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def one_line(text, limit=200):
|
|
113
|
+
flat = re.sub(r"\s+", " ", text).replace("|", "/").strip()
|
|
114
|
+
if len(flat) <= limit:
|
|
115
|
+
return flat
|
|
116
|
+
cut = flat[:limit].rsplit(" ", 1)[0]
|
|
117
|
+
return cut.rstrip(",;:") + " ..."
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def first_sentence(text, limit=180):
|
|
121
|
+
flat = re.sub(r"\s+", " ", text).replace("|", "/").strip()
|
|
122
|
+
hit = re.search(r"^(.{20,}?[.!?])(\s|$)", flat)
|
|
123
|
+
return one_line(hit.group(1) if hit else flat, limit)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def git(source, *args):
|
|
127
|
+
proc = subprocess.run(("git", "-C", source) + args, capture_output=True, text=True)
|
|
128
|
+
if proc.returncode != 0:
|
|
129
|
+
raise SystemExit("tezgah-import-ai-research: git %s failed: %s"
|
|
130
|
+
% (" ".join(args), proc.stderr.strip() or proc.returncode))
|
|
131
|
+
return proc.stdout.strip()
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def discover(source):
|
|
135
|
+
"""[(category, skill, abs_dir)] for every skill the upstream tree ships.
|
|
136
|
+
|
|
137
|
+
One category (`0-autoresearch-skill`) is one skill: its SKILL.md sits directly
|
|
138
|
+
in the category directory instead of in a named child."""
|
|
139
|
+
out = []
|
|
140
|
+
for category in sorted(os.listdir(source)):
|
|
141
|
+
cpath = os.path.join(source, category)
|
|
142
|
+
if not CATEGORY_RE.match(category) or not os.path.isdir(cpath):
|
|
143
|
+
continue
|
|
144
|
+
if os.path.isfile(os.path.join(cpath, "SKILL.md")):
|
|
145
|
+
out.append((category, category, cpath))
|
|
146
|
+
continue
|
|
147
|
+
for skill in sorted(os.listdir(cpath)):
|
|
148
|
+
path = os.path.join(cpath, skill)
|
|
149
|
+
if os.path.isfile(os.path.join(path, "SKILL.md")):
|
|
150
|
+
out.append((category, skill, path))
|
|
151
|
+
return out
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def rel_of(category, skill):
|
|
155
|
+
return category if skill == category else "%s/%s" % (category, skill)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def kept_files(source, rel):
|
|
159
|
+
"""The files this vendoring keeps from one skill dir, as relative paths."""
|
|
160
|
+
base = os.path.join(source, rel)
|
|
161
|
+
drops = {p for p in DROP_FILES if p.startswith(rel + "/")}
|
|
162
|
+
keep = []
|
|
163
|
+
for root, dirs, files in os.walk(base):
|
|
164
|
+
dirs.sort()
|
|
165
|
+
for name in sorted(files):
|
|
166
|
+
full = os.path.join(root, name)
|
|
167
|
+
relfile = os.path.relpath(full, source)
|
|
168
|
+
if not name.endswith(".md") or relfile in drops:
|
|
169
|
+
continue
|
|
170
|
+
if any(relfile.startswith(d + "/") for d in DROP_DIRS):
|
|
171
|
+
continue
|
|
172
|
+
keep.append(relfile)
|
|
173
|
+
return keep
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def dangling(text, rel, kept, library):
|
|
177
|
+
"""Links to a reference the vendored library does not ship - recorded, never
|
|
178
|
+
hidden. A prefixed mention (`20-ml-paper-writing`'s `references/x.md`) counts
|
|
179
|
+
as resolved when that file ships anywhere in the library."""
|
|
180
|
+
out = []
|
|
181
|
+
for ref in sorted(set(re.findall(r"references/[\w.-]+\.md", text))):
|
|
182
|
+
if "%s/%s" % (rel, ref) in kept:
|
|
183
|
+
continue
|
|
184
|
+
if any(path.endswith("/" + ref) for path in library):
|
|
185
|
+
continue
|
|
186
|
+
out.append(ref)
|
|
187
|
+
return out
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def build(source, rev):
|
|
191
|
+
"""(manifest, {relative path: text}) - the whole vendored tree, in memory."""
|
|
192
|
+
skills = discover(source)
|
|
193
|
+
categories = sorted({c for c, _, _ in skills})
|
|
194
|
+
if (len(categories), len(skills)) != (EXPECTED_CATEGORIES, EXPECTED_SKILLS):
|
|
195
|
+
raise SystemExit(
|
|
196
|
+
"tezgah-import-ai-research: upstream@%s has %d categories / %d skills, "
|
|
197
|
+
"expected %d / %d - review the drop list and the stage map before "
|
|
198
|
+
"vendoring a new shape" % (rev, len(categories), len(skills),
|
|
199
|
+
EXPECTED_CATEGORIES, EXPECTED_SKILLS))
|
|
200
|
+
dirty = [p for p in git(source, "status", "--porcelain", "--untracked-files=all").splitlines()
|
|
201
|
+
if p.split(maxsplit=1)[-1].endswith(".md")]
|
|
202
|
+
if dirty:
|
|
203
|
+
raise SystemExit("tezgah-import-ai-research: the source tree has uncommitted "
|
|
204
|
+
"markdown (%s) - vendor a clean revision" % ", ".join(dirty[:3]))
|
|
205
|
+
|
|
206
|
+
kept_by_skill = {rel_of(c, s): kept_files(source, rel_of(c, s)) for c, s, _ in skills}
|
|
207
|
+
library = [p for paths in kept_by_skill.values() for p in paths]
|
|
208
|
+
|
|
209
|
+
files, rows = {}, []
|
|
210
|
+
for category, skill, path in skills:
|
|
211
|
+
rel = rel_of(category, skill)
|
|
212
|
+
with open(os.path.join(path, "SKILL.md"), encoding="utf-8") as fh:
|
|
213
|
+
text = fh.read()
|
|
214
|
+
fields = frontmatter(text)
|
|
215
|
+
kept = kept_by_skill[rel]
|
|
216
|
+
body_texts = {}
|
|
217
|
+
for relfile in kept:
|
|
218
|
+
with open(os.path.join(source, relfile), encoding="utf-8") as fh:
|
|
219
|
+
raw = fh.read()
|
|
220
|
+
if not frontmatter(raw):
|
|
221
|
+
raw = ATTRIBUTION % (UPSTREAM_NAME, rev, relfile, LICENCE) + "\n" + raw
|
|
222
|
+
body_texts[relfile] = raw
|
|
223
|
+
entry = {
|
|
224
|
+
"category": category,
|
|
225
|
+
"dir": skill,
|
|
226
|
+
"name": fields.get("name", skill),
|
|
227
|
+
"purpose": first_sentence(fields.get("description", "")),
|
|
228
|
+
"files": [],
|
|
229
|
+
"generated": any(mark in text for mark in GENERATED_MARKS),
|
|
230
|
+
"stale_api": STALE_API.get(rel, ""),
|
|
231
|
+
"dangling_links": dangling(text, rel, set(kept), library),
|
|
232
|
+
"orphan_refs": sorted({f for f in kept if f.endswith(".md")
|
|
233
|
+
and "references/" in f
|
|
234
|
+
and os.path.basename(f) not in text}),
|
|
235
|
+
"upstream_path": rel,
|
|
236
|
+
}
|
|
237
|
+
for relfile, body in sorted(body_texts.items()):
|
|
238
|
+
files[relfile] = body
|
|
239
|
+
entry["files"].append({"path": relfile, "bytes": len(body.encode()),
|
|
240
|
+
"sha256": hashlib.sha256(body.encode()).hexdigest()})
|
|
241
|
+
entry["bytes"] = sum(f["bytes"] for f in entry["files"])
|
|
242
|
+
rows.append(entry)
|
|
243
|
+
|
|
244
|
+
generated = {}
|
|
245
|
+
for stage, title, cats in STAGES:
|
|
246
|
+
header = [
|
|
247
|
+
"<!-- generated by bin/tezgah-import-ai-research; do not edit -->",
|
|
248
|
+
"",
|
|
249
|
+
"# %s. %s" % (stage, title),
|
|
250
|
+
"",
|
|
251
|
+
"Vendored from [%s](%s) at `%s` (%s). Read the row you need, then the"
|
|
252
|
+
% (UPSTREAM_NAME, UPSTREAM, rev, LICENCE),
|
|
253
|
+
"file it names; the body sits beside it. Flags: **generated** - upstream",
|
|
254
|
+
"built the body from scraped docs, so it is thin; **stale-api** - the body",
|
|
255
|
+
"names an API the library has since moved; **dead-links: N** - the body",
|
|
256
|
+
"links N reference files upstream does not ship.",
|
|
257
|
+
"",
|
|
258
|
+
"| entry | file | what it covers | flags |",
|
|
259
|
+
"|---|---|---|---|",
|
|
260
|
+
]
|
|
261
|
+
lines = list(header)
|
|
262
|
+
for category, skill, _ in skills:
|
|
263
|
+
if category not in cats:
|
|
264
|
+
continue
|
|
265
|
+
entry = next(r for r in rows if r["category"] == category and r["dir"] == skill)
|
|
266
|
+
flags = []
|
|
267
|
+
if entry["generated"]:
|
|
268
|
+
flags.append("generated")
|
|
269
|
+
if entry["stale_api"]:
|
|
270
|
+
flags.append("stale-api")
|
|
271
|
+
if entry["dangling_links"]:
|
|
272
|
+
flags.append("dead-links: %d" % len(entry["dangling_links"]))
|
|
273
|
+
lines.append("| `%s` | `%s/SKILL.md` | %s | %s |"
|
|
274
|
+
% (entry["dir"], entry["upstream_path"], entry["purpose"],
|
|
275
|
+
", ".join(flags)))
|
|
276
|
+
generated["index/%s.md" % stage] = "\n".join(lines) + "\n"
|
|
277
|
+
|
|
278
|
+
counts = {"categories": len(categories), "skills": len(rows),
|
|
279
|
+
"files": len(files), "bytes": sum(r["bytes"] for r in rows)}
|
|
280
|
+
mapped = {c for _stage, _title, group in STAGES for c in group}
|
|
281
|
+
orphaned = sorted({r["category"] for r in rows} - mapped)
|
|
282
|
+
if orphaned:
|
|
283
|
+
raise SystemExit("tezgah-import-ai-research: %s is not in the stage map - an "
|
|
284
|
+
"entry no index file lists is an entry no session finds; add "
|
|
285
|
+
"it to STAGES before vendoring" % ", ".join(orphaned))
|
|
286
|
+
manifest = {
|
|
287
|
+
"upstream": {"name": UPSTREAM_NAME, "url": UPSTREAM, "rev": rev,
|
|
288
|
+
"date": git(source, "log", "-1", "--format=%cs", rev),
|
|
289
|
+
"license": LICENCE},
|
|
290
|
+
"counts": counts,
|
|
291
|
+
"drop": {"files": list(DROP_FILES), "dirs": list(DROP_DIRS)},
|
|
292
|
+
"stale_api": dict(STALE_API),
|
|
293
|
+
"stages": {stage: sorted(r["upstream_path"] for r in rows if r["category"] in cats)
|
|
294
|
+
for stage, _, cats in STAGES},
|
|
295
|
+
"skills": sorted(rows, key=lambda r: r["upstream_path"]),
|
|
296
|
+
"generated": sorted(generated),
|
|
297
|
+
}
|
|
298
|
+
for path, text in generated.items():
|
|
299
|
+
manifest.setdefault("index", []).append(
|
|
300
|
+
{"path": path, "bytes": len(text.encode()),
|
|
301
|
+
"sha256": hashlib.sha256(text.encode()).hexdigest()})
|
|
302
|
+
return manifest, files, generated
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def source_text(manifest, rev):
|
|
306
|
+
up = manifest["upstream"]
|
|
307
|
+
return (
|
|
308
|
+
"# Source\n\n"
|
|
309
|
+
"Vendored from %s at `%s` (%s), %s licence. Every body keeps its upstream\n"
|
|
310
|
+
"frontmatter, `author` line included: 96 name Orchestra Research, and two\n"
|
|
311
|
+
"(`10-optimization/ml-training-recipes`, `14-agents/a-evolve`) name the\n"
|
|
312
|
+
"contributing author of that entry. Checkout for a re-vendor:\n"
|
|
313
|
+
"`git clone %s && git -C %s checkout %s`.\n\n"
|
|
314
|
+
"## What is vendored\n\n"
|
|
315
|
+
"Every skill's `SKILL.md` and every markdown file beside it, in the upstream\n"
|
|
316
|
+
"layout, because a vendored path is its provenance. %d skills across %d\n"
|
|
317
|
+
"categories, %d files, %d bytes.\n\n"
|
|
318
|
+
"## What is not, and why\n\n"
|
|
319
|
+
"Files: %s - machine-scraped reference dumps, which the entry's own\n"
|
|
320
|
+
"`SKILL.md` already distils.\n\n"
|
|
321
|
+
"Directories: %s - LaTeX class/bst/bib trees and example PDFs,\n"
|
|
322
|
+
"re-downloadable from each venue.\n\n"
|
|
323
|
+
"Everything else that is not markdown (PDFs, images, `.gitkeep`, scripts)\n"
|
|
324
|
+
"is dropped by the importer's `*.md` filter, and `demos/`, `docs/`,\n"
|
|
325
|
+
"`packages/`, `video-promo/` are upstream's repo furniture, not content.\n\n"
|
|
326
|
+
"## The only modification\n\n"
|
|
327
|
+
"A markdown file that carries no YAML frontmatter gets one attribution\n"
|
|
328
|
+
"comment on its first line. `SKILL.md` files are byte-for-byte upstream,\n"
|
|
329
|
+
"frontmatter included. `skills/ai-research/SKILL.md` is tezgah's own and is\n"
|
|
330
|
+
"not part of the manifest.\n\n"
|
|
331
|
+
"## Re-vendoring\n\n"
|
|
332
|
+
"`bin/tezgah-import-ai-research --source <clone> --rev <sha>`, then commit\n"
|
|
333
|
+
"the diff. `--check` verifies the committed tree against `library.json`\n"
|
|
334
|
+
"without the clone, and is what CI runs.\n"
|
|
335
|
+
% (up["url"], up["rev"], up["date"], up["license"], UPSTREAM, "<clone>", rev,
|
|
336
|
+
manifest["counts"]["skills"], manifest["counts"]["categories"],
|
|
337
|
+
manifest["counts"]["files"], manifest["counts"]["bytes"],
|
|
338
|
+
", ".join("`%s`" % f for f in DROP_FILES),
|
|
339
|
+
", ".join("`%s`" % d for d in DROP_DIRS)))
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
def cmd_import(source, rev, out):
|
|
343
|
+
manifest, files, generated = build(source, rev)
|
|
344
|
+
texts = dict(files)
|
|
345
|
+
texts.update(generated)
|
|
346
|
+
texts["SOURCE"] = source_text(manifest, rev)
|
|
347
|
+
library = json.dumps(manifest, indent=1, sort_keys=True) + "\n"
|
|
348
|
+
|
|
349
|
+
# SKILL.md is tezgah's own prose, not generated: the import refreshes what it
|
|
350
|
+
# builds and must not take the entry point with it.
|
|
351
|
+
entry = os.path.join(out, "SKILL.md")
|
|
352
|
+
kept = None
|
|
353
|
+
if os.path.isfile(entry):
|
|
354
|
+
with open(entry, encoding="utf-8") as fh:
|
|
355
|
+
kept = fh.read()
|
|
356
|
+
|
|
357
|
+
shutil.rmtree(out, ignore_errors=True)
|
|
358
|
+
for rel, text in sorted(texts.items()):
|
|
359
|
+
path = os.path.join(out, rel)
|
|
360
|
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
361
|
+
with open(path, "w", encoding="utf-8") as fh:
|
|
362
|
+
fh.write(text)
|
|
363
|
+
with open(os.path.join(out, "library.json"), "w", encoding="utf-8") as fh:
|
|
364
|
+
fh.write(library)
|
|
365
|
+
if kept is not None:
|
|
366
|
+
with open(entry, "w", encoding="utf-8") as fh:
|
|
367
|
+
fh.write(kept)
|
|
368
|
+
else:
|
|
369
|
+
print("tezgah-import-ai-research: %s has no SKILL.md - the entry point is "
|
|
370
|
+
"hand-written; write it before committing" % out)
|
|
371
|
+
print("wrote %s: %d skills, %d files, %.1f MB"
|
|
372
|
+
% (out, manifest["counts"]["skills"], manifest["counts"]["files"],
|
|
373
|
+
manifest["counts"]["bytes"] / 1e6))
|
|
374
|
+
return 0
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def cmd_check(out):
|
|
378
|
+
"""Verify the committed tree against the manifest. Needs no clone."""
|
|
379
|
+
manifest_path = os.path.join(out, "library.json")
|
|
380
|
+
if not os.path.isfile(manifest_path):
|
|
381
|
+
print("tezgah-import-ai-research: no manifest at %s" % manifest_path,
|
|
382
|
+
file=sys.stderr)
|
|
383
|
+
return 1
|
|
384
|
+
with open(manifest_path, encoding="utf-8") as fh:
|
|
385
|
+
manifest = json.load(fh)
|
|
386
|
+
expected = {f["path"]: f["sha256"] for s in manifest["skills"] for f in s["files"]}
|
|
387
|
+
expected.update({f["path"]: f["sha256"] for f in manifest.get("index", [])})
|
|
388
|
+
problems = []
|
|
389
|
+
for rel, digest in sorted(expected.items()):
|
|
390
|
+
path = os.path.join(out, rel)
|
|
391
|
+
if not os.path.isfile(path):
|
|
392
|
+
problems.append("missing %s" % rel)
|
|
393
|
+
elif sha256(path) != digest:
|
|
394
|
+
problems.append("changed %s" % rel)
|
|
395
|
+
for root, dirs, names in os.walk(out):
|
|
396
|
+
dirs.sort()
|
|
397
|
+
for name in sorted(names):
|
|
398
|
+
rel = os.path.relpath(os.path.join(root, name), out)
|
|
399
|
+
# library.json is the manifest itself, SKILL.md is tezgah's own entry
|
|
400
|
+
# point, and SOURCE is prose derived from the manifest (a test pins
|
|
401
|
+
# that it names the manifest's revision); none is vendored upstream
|
|
402
|
+
# content, so none carries a digest.
|
|
403
|
+
if rel in ("library.json", "SKILL.md", "SOURCE") or rel in expected:
|
|
404
|
+
continue
|
|
405
|
+
problems.append("unlisted %s" % rel)
|
|
406
|
+
if problems:
|
|
407
|
+
for line in problems[:10]:
|
|
408
|
+
print("tezgah-import-ai-research: %s" % line, file=sys.stderr)
|
|
409
|
+
if len(problems) > 10:
|
|
410
|
+
print("tezgah-import-ai-research: ... %d more" % (len(problems) - 10),
|
|
411
|
+
file=sys.stderr)
|
|
412
|
+
return 1
|
|
413
|
+
print("ok: %d skills, %d vendored files match library.json"
|
|
414
|
+
% (manifest["counts"]["skills"], len(expected)))
|
|
415
|
+
return 0
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def main(argv):
|
|
419
|
+
parser = argparse.ArgumentParser(add_help=True, description=__doc__.split("\n")[0])
|
|
420
|
+
parser.add_argument("--source", help="a checkout of the upstream library")
|
|
421
|
+
parser.add_argument("--rev", help="the commit to vendor; must be a clean checkout")
|
|
422
|
+
parser.add_argument("--out", default=OUT, help="target directory")
|
|
423
|
+
parser.add_argument("--check", action="store_true",
|
|
424
|
+
help="verify an existing tree against its manifest")
|
|
425
|
+
args = parser.parse_args(argv[1:])
|
|
426
|
+
if args.check:
|
|
427
|
+
if args.source or args.rev:
|
|
428
|
+
parser.error("--check takes no --source/--rev")
|
|
429
|
+
return cmd_check(args.out)
|
|
430
|
+
if not args.source or not args.rev:
|
|
431
|
+
parser.error("--source and --rev are required")
|
|
432
|
+
head = git(args.source, "rev-parse", "HEAD")
|
|
433
|
+
if not head.startswith(args.rev):
|
|
434
|
+
parser.error("--rev %s is not HEAD of %s (%s)" % (args.rev, args.source, head[:9]))
|
|
435
|
+
return cmd_import(args.source, head, args.out)
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
if __name__ == "__main__":
|
|
439
|
+
sys.exit(main(sys.argv))
|
package/bin/tezgah-index
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""tezgah-index [PATH] - start the repo's detached graph auto-index.
|
|
3
|
+
|
|
4
|
+
Every host except opencode triggers the auto-index from its SessionStart hook.
|
|
5
|
+
opencode has no session-lifecycle hook that can run the Python contract, so its
|
|
6
|
+
plugin calls this on the first message of a session. Same single Python source,
|
|
7
|
+
so roots, the .no-graph opt-out and the HEAD stamp behave identically everywhere.
|
|
8
|
+
"""
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
HERE = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|
13
|
+
sys.path.insert(0, os.path.join(HERE, "hooks"))
|
|
14
|
+
from tezgah_context import autoindex, repo_root, under # noqa: E402
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def main():
|
|
18
|
+
args = sys.argv[1:]
|
|
19
|
+
# Without this, `--help` is taken as PATH and the index path runs instead of
|
|
20
|
+
# a usage path, printing the index status and spawning the auto-index.
|
|
21
|
+
if "-h" in args or "--help" in args:
|
|
22
|
+
print(__doc__.strip())
|
|
23
|
+
return 0
|
|
24
|
+
cwd = os.path.realpath(args[0] if args else os.getcwd())
|
|
25
|
+
if not under(cwd):
|
|
26
|
+
return 0
|
|
27
|
+
print(autoindex(repo_root(cwd)))
|
|
28
|
+
return 0
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
sys.exit(main())
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""tezgah-lessons [--root DIR] [--fixture PATH] - propose a tidy of .tezgah/lessons.md.
|
|
3
|
+
|
|
4
|
+
Read-only: it prints proposals and never writes the ledger, which is the user's
|
|
5
|
+
to edit. Lines are numbered the way the injector reads them (the Nth lesson,
|
|
6
|
+
blank lines and `#` headings skipped). Three kinds of proposal:
|
|
7
|
+
|
|
8
|
+
rewrite N a line whose rule is not up front (no ` - ` within its first 120
|
|
9
|
+
characters), with a rule-first text for it: its first `: ` or `; `
|
|
10
|
+
turned into ` - ` when that falls inside the bound, else its last
|
|
11
|
+
clause moved in front.
|
|
12
|
+
merge A, B lines that say one lesson (word-Jaccard >= 0.2 over the ranker's
|
|
13
|
+
words, function words out), to be written as one line.
|
|
14
|
+
retire N a line an enforcer already carries (RETIRE), with the
|
|
15
|
+
`|| enforced_by:` suffix that takes it out of the injected block.
|
|
16
|
+
|
|
17
|
+
--fixture reads {"lessons_prompts": [{"q": ..., "gt": [N, ...]}]} and prints the
|
|
18
|
+
lessons ranking's recall@5 before and after the proposed merges, the ground
|
|
19
|
+
truth remapped to the merged numbering. Exit codes: 0 proposals printed, 1 the
|
|
20
|
+
merges would lower that recall, 2 usage.
|
|
21
|
+
"""
|
|
22
|
+
import argparse
|
|
23
|
+
import json
|
|
24
|
+
import os
|
|
25
|
+
import re
|
|
26
|
+
import sys
|
|
27
|
+
|
|
28
|
+
HERE = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|
29
|
+
sys.path.insert(0, os.path.join(HERE, "hooks"))
|
|
30
|
+
import tezgah_context as tc # noqa: E402
|
|
31
|
+
import tezgah_lessons # noqa: E402
|
|
32
|
+
import tezgah_rank # noqa: E402
|
|
33
|
+
|
|
34
|
+
# Word-Jaccard at which two lines are one lesson: the duplicate-append measure of
|
|
35
|
+
# the lessons roadmap (a new line at or above 0.2 to an existing one is a
|
|
36
|
+
# repeat), over every word the ranker sees.
|
|
37
|
+
MERGE_JACCARD = 0.2
|
|
38
|
+
# The lines an enforcer already carries, by a phrase of their text: the gate's
|
|
39
|
+
# `piped` refusal, and the research CLI's refusal pinned by its test.
|
|
40
|
+
RETIRE = (("A piped check is not evidence", "piped"),
|
|
41
|
+
("At most one line is open at a time", "tests.test_research.Unfinished"))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def clusters(lines):
|
|
45
|
+
"""Groups (0-based, ascending) of two or more lines that say one lesson:
|
|
46
|
+
single-link over MERGE_JACCARD."""
|
|
47
|
+
sets = [set(tezgah_rank.words(ln)) for ln in lines]
|
|
48
|
+
group = list(range(len(lines)))
|
|
49
|
+
|
|
50
|
+
def find(i):
|
|
51
|
+
while group[i] != i:
|
|
52
|
+
i = group[i]
|
|
53
|
+
return i
|
|
54
|
+
for i in range(len(lines)):
|
|
55
|
+
for j in range(i + 1, len(lines)):
|
|
56
|
+
union = sets[i] | sets[j]
|
|
57
|
+
if union and len(sets[i] & sets[j]) / len(union) >= MERGE_JACCARD:
|
|
58
|
+
group[find(j)] = find(i)
|
|
59
|
+
out = {}
|
|
60
|
+
for i in range(len(lines)):
|
|
61
|
+
out.setdefault(find(i), []).append(i)
|
|
62
|
+
return sorted(g for g in out.values() if len(g) > 1)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _prose(line):
|
|
66
|
+
"""`line` with code spans and parentheses blanked, so a clause boundary is
|
|
67
|
+
never looked for inside `a: b` or `(x; y)`."""
|
|
68
|
+
return re.sub(r"`[^`]*`|\([^()]*\)", lambda m: "_" * len(m.group()), line)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def rewrite(line):
|
|
72
|
+
"""A rule-first text for `line`, or None when it already opens with its rule
|
|
73
|
+
or offers no clause boundary to move."""
|
|
74
|
+
sep, bound = tc.LESSON_SEPARATOR, tc.LESSON_SEPARATOR_BY
|
|
75
|
+
if 0 <= line.find(sep) < bound:
|
|
76
|
+
return None
|
|
77
|
+
prose = _prose(line)
|
|
78
|
+
first = [i for i in (prose.find(": "), prose.find("; ")) if 0 <= i < bound]
|
|
79
|
+
if first:
|
|
80
|
+
i = min(first)
|
|
81
|
+
return line[:i] + sep + line[i + 2:]
|
|
82
|
+
at, mark = max((prose.rfind(b), b) for b in (": ", "; ", ". ", sep))
|
|
83
|
+
tail = line[at + len(mark):].rstrip(" .")
|
|
84
|
+
if at <= 0 or not tail:
|
|
85
|
+
return None
|
|
86
|
+
return tail[0].upper() + tail[1:] + sep + line[:at].rstrip(" .")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def recall(lines, prompts):
|
|
90
|
+
"""Mean recall@5 of the lessons ranking over `prompts` (gt 0-based)."""
|
|
91
|
+
hits = [len(set(gt) & set(tezgah_rank.rank(q, lines, 5, tc.LESSON_MAX_DF)))
|
|
92
|
+
/ len(gt) for q, gt in prompts if gt]
|
|
93
|
+
return sum(hits) / len(hits) if hits else 0.0
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def merged(lines, groups):
|
|
97
|
+
"""(lines, where): the ledger with each group joined at its first member,
|
|
98
|
+
and each old index's new one."""
|
|
99
|
+
head = {g[0]: g for g in groups}
|
|
100
|
+
gone = {i for g in groups for i in g[1:]}
|
|
101
|
+
out, where = [], {}
|
|
102
|
+
for i, ln in enumerate(lines):
|
|
103
|
+
if i in gone:
|
|
104
|
+
continue
|
|
105
|
+
where[i] = len(out)
|
|
106
|
+
out.append(" ".join(lines[j] for j in head[i]) if i in head else ln)
|
|
107
|
+
for g in groups:
|
|
108
|
+
for i in g[1:]:
|
|
109
|
+
where[i] = where[g[0]]
|
|
110
|
+
return out, where
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def main(argv):
|
|
114
|
+
ap = argparse.ArgumentParser(prog="tezgah-lessons", description=__doc__.split("\n")[0])
|
|
115
|
+
ap.add_argument("--root", default=os.getcwd())
|
|
116
|
+
ap.add_argument("--fixture")
|
|
117
|
+
args = ap.parse_args(argv)
|
|
118
|
+
lines = tezgah_lessons.lines(args.root)
|
|
119
|
+
print("Proposals for %s (nothing is written; apply what you agree with by hand):"
|
|
120
|
+
% os.path.join(args.root, ".tezgah", "lessons.md"))
|
|
121
|
+
for n, ln in enumerate(lines, 1):
|
|
122
|
+
text = rewrite(ln)
|
|
123
|
+
if text:
|
|
124
|
+
print("rewrite %d: %s" % (n, text))
|
|
125
|
+
groups = clusters(lines)
|
|
126
|
+
for g in groups:
|
|
127
|
+
print("merge %s: one lesson, write it as one rule-first line"
|
|
128
|
+
% ", ".join(str(i + 1) for i in g))
|
|
129
|
+
for n, ln in enumerate(lines, 1):
|
|
130
|
+
for needle, by in RETIRE:
|
|
131
|
+
if needle in ln:
|
|
132
|
+
print("retire %d: append `|| enforced_by: %s`" % (n, by))
|
|
133
|
+
if not args.fixture:
|
|
134
|
+
return 0
|
|
135
|
+
with open(args.fixture, encoding="utf-8") as fh:
|
|
136
|
+
prompts = [(p["q"], [g - 1 for g in p["gt"]])
|
|
137
|
+
for p in json.load(fh)["lessons_prompts"]]
|
|
138
|
+
after_lines, where = merged(lines, groups)
|
|
139
|
+
before = recall(lines, prompts)
|
|
140
|
+
after = recall(after_lines, [(q, sorted({where[g] for g in gt if g in where}))
|
|
141
|
+
for q, gt in prompts])
|
|
142
|
+
print("recall@5 %.3f before, %.3f after the merges: %s"
|
|
143
|
+
% (before, after, "holds" if after >= before else "DROPS"))
|
|
144
|
+
return 0 if after >= before else 1
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
if __name__ == "__main__":
|
|
148
|
+
sys.exit(main(sys.argv[1:]))
|