@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.
Files changed (582) hide show
  1. package/CHANGELOG.md +738 -0
  2. package/LICENSE +21 -0
  3. package/MANIFEST +753 -0
  4. package/README.de.md +169 -0
  5. package/README.es.md +168 -0
  6. package/README.fr.md +166 -0
  7. package/README.md +161 -0
  8. package/README.tr.md +163 -0
  9. package/agents/tezgah-reviewer.md +70 -0
  10. package/bin/codegen +337 -0
  11. package/bin/consult +797 -0
  12. package/bin/tezgah-adhd +50 -0
  13. package/bin/tezgah-agents +45 -0
  14. package/bin/tezgah-capture +66 -0
  15. package/bin/tezgah-context +96 -0
  16. package/bin/tezgah-decisions +213 -0
  17. package/bin/tezgah-design +953 -0
  18. package/bin/tezgah-docs +1199 -0
  19. package/bin/tezgah-doctor +497 -0
  20. package/bin/tezgah-dsh +37 -0
  21. package/bin/tezgah-dsh.cmd +70 -0
  22. package/bin/tezgah-gate +75 -0
  23. package/bin/tezgah-import-ai-research +439 -0
  24. package/bin/tezgah-index +32 -0
  25. package/bin/tezgah-lessons +148 -0
  26. package/bin/tezgah-mcp +322 -0
  27. package/bin/tezgah-migrate +324 -0
  28. package/bin/tezgah-pony +50 -0
  29. package/bin/tezgah-research +772 -0
  30. package/bin/tezgah-rollback +93 -0
  31. package/bin/tezgah-route +124 -0
  32. package/bin/tezgah-setup +5798 -0
  33. package/bin/tezgah-status +383 -0
  34. package/bin/tezgah-task +607 -0
  35. package/bin/tezgah-taste +423 -0
  36. package/bin/tezgah-triage +485 -0
  37. package/bin/tezgah.js +36 -0
  38. package/commands/adhd.md +21 -0
  39. package/commands/ponytail.md +21 -0
  40. package/docs/README.md +112 -0
  41. package/docs/architecture.md +226 -0
  42. package/docs/citations-baseline.json +59 -0
  43. package/docs/clarity-baseline.json +116 -0
  44. package/docs/contract.md +416 -0
  45. package/docs/environment.md +141 -0
  46. package/docs/evidence.md +831 -0
  47. package/docs/feature-audit.md +139 -0
  48. package/docs/gate.md +407 -0
  49. package/docs/glossary.md +201 -0
  50. package/docs/hosts.md +400 -0
  51. package/docs/index.json +471 -0
  52. package/docs/judge.md +193 -0
  53. package/docs/layers.md +189 -0
  54. package/docs/models.md +160 -0
  55. package/docs/operations.md +666 -0
  56. package/docs/research.md +809 -0
  57. package/docs/results/paired-outcome-2026-10.jsonl +254 -0
  58. package/docs/results/paired-outcome-2026-10.md +204 -0
  59. package/docs/skills.md +236 -0
  60. package/docs/status-line.md +315 -0
  61. package/docs/testing.md +287 -0
  62. package/docs/vision.md +117 -0
  63. package/hooks/hooks.json +33 -0
  64. package/hooks/projects-auto-init.py +98 -0
  65. package/hooks/projects-posttooluse.py +149 -0
  66. package/hooks/projects-pretooluse.py +40 -0
  67. package/hooks/projects-stop.py +60 -0
  68. package/hooks/tezgah_agents.py +817 -0
  69. package/hooks/tezgah_apps.py +266 -0
  70. package/hooks/tezgah_attest.py +255 -0
  71. package/hooks/tezgah_clarity.py +171 -0
  72. package/hooks/tezgah_components.py +140 -0
  73. package/hooks/tezgah_context.py +2953 -0
  74. package/hooks/tezgah_embed.py +765 -0
  75. package/hooks/tezgah_gate.py +2736 -0
  76. package/hooks/tezgah_guard.py +177 -0
  77. package/hooks/tezgah_index.py +124 -0
  78. package/hooks/tezgah_integrity.py +5141 -0
  79. package/hooks/tezgah_judge.py +487 -0
  80. package/hooks/tezgah_lang.py +230 -0
  81. package/hooks/tezgah_lessons.py +210 -0
  82. package/hooks/tezgah_models.py +855 -0
  83. package/hooks/tezgah_paths.py +1132 -0
  84. package/hooks/tezgah_policy.py +1039 -0
  85. package/hooks/tezgah_rank.py +77 -0
  86. package/hooks/tezgah_replay.py +1109 -0
  87. package/hooks/tezgah_research.py +5176 -0
  88. package/hooks/tezgah_shapes.py +305 -0
  89. package/hooks/tezgah_skill_pick.py +227 -0
  90. package/hooks/tezgah_snapshot.py +490 -0
  91. package/hooks/tezgah_stopspec.py +320 -0
  92. package/hooks/tezgah_task.py +458 -0
  93. package/hooks/tezgah_taste.py +201 -0
  94. package/hooks/tezgah_untrusted.py +112 -0
  95. package/hooks/tezgah_update.py +430 -0
  96. package/hosts/codex/hook.py +268 -0
  97. package/hosts/codex/hooks.json +26 -0
  98. package/hosts/cursor/hook.py +461 -0
  99. package/hosts/cursor/hooks.json +44 -0
  100. package/hosts/dsh/hooks.json +21 -0
  101. package/hosts/dsh/statusline/lib/client.js +138 -0
  102. package/hosts/dsh/statusline/lib/index.js +104 -0
  103. package/hosts/dsh/statusline/package.json +28 -0
  104. package/hosts/omp/hook.py +277 -0
  105. package/hosts/omp/tezgah-hook.ts.in +701 -0
  106. package/hosts/opencode/plugins/tezgah.js +2742 -0
  107. package/hosts/opencode/tui/tezgah-tui.tsx +151 -0
  108. package/output-styles/tezgah.md +142 -0
  109. package/package.json +32 -0
  110. package/packaging/build.sh +342 -0
  111. package/packaging/install.ps1 +166 -0
  112. package/packaging/install.sh +56 -0
  113. package/packaging/upgrade.sh +142 -0
  114. package/skills/ai-research/0-autoresearch-skill/SKILL.md +411 -0
  115. package/skills/ai-research/0-autoresearch-skill/references/agent-continuity.md +95 -0
  116. package/skills/ai-research/0-autoresearch-skill/references/progress-reporting.md +166 -0
  117. package/skills/ai-research/0-autoresearch-skill/references/skill-routing.md +219 -0
  118. package/skills/ai-research/0-autoresearch-skill/templates/findings.md +44 -0
  119. package/skills/ai-research/0-autoresearch-skill/templates/research-log.md +41 -0
  120. package/skills/ai-research/01-model-architecture/litgpt/SKILL.md +469 -0
  121. package/skills/ai-research/01-model-architecture/litgpt/references/custom-models.md +569 -0
  122. package/skills/ai-research/01-model-architecture/litgpt/references/distributed-training.md +452 -0
  123. package/skills/ai-research/01-model-architecture/litgpt/references/supported-models.md +337 -0
  124. package/skills/ai-research/01-model-architecture/litgpt/references/training-recipes.md +620 -0
  125. package/skills/ai-research/01-model-architecture/mamba/SKILL.md +260 -0
  126. package/skills/ai-research/01-model-architecture/mamba/references/architecture-details.md +207 -0
  127. package/skills/ai-research/01-model-architecture/mamba/references/benchmarks.md +256 -0
  128. package/skills/ai-research/01-model-architecture/mamba/references/training-guide.md +389 -0
  129. package/skills/ai-research/01-model-architecture/nanogpt/SKILL.md +290 -0
  130. package/skills/ai-research/01-model-architecture/nanogpt/references/architecture.md +383 -0
  131. package/skills/ai-research/01-model-architecture/nanogpt/references/data.md +477 -0
  132. package/skills/ai-research/01-model-architecture/nanogpt/references/training.md +565 -0
  133. package/skills/ai-research/01-model-architecture/rwkv/SKILL.md +260 -0
  134. package/skills/ai-research/01-model-architecture/rwkv/references/architecture-details.md +345 -0
  135. package/skills/ai-research/01-model-architecture/rwkv/references/rwkv7.md +387 -0
  136. package/skills/ai-research/01-model-architecture/rwkv/references/state-management.md +370 -0
  137. package/skills/ai-research/01-model-architecture/torchtitan/SKILL.md +358 -0
  138. package/skills/ai-research/01-model-architecture/torchtitan/references/checkpoint.md +182 -0
  139. package/skills/ai-research/01-model-architecture/torchtitan/references/custom-models.md +259 -0
  140. package/skills/ai-research/01-model-architecture/torchtitan/references/float8.md +134 -0
  141. package/skills/ai-research/01-model-architecture/torchtitan/references/fsdp.md +127 -0
  142. package/skills/ai-research/02-tokenization/huggingface-tokenizers/SKILL.md +516 -0
  143. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/algorithms.md +654 -0
  144. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/integration.md +638 -0
  145. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/pipeline.md +724 -0
  146. package/skills/ai-research/02-tokenization/huggingface-tokenizers/references/training.md +566 -0
  147. package/skills/ai-research/02-tokenization/sentencepiece/SKILL.md +235 -0
  148. package/skills/ai-research/02-tokenization/sentencepiece/references/algorithms.md +201 -0
  149. package/skills/ai-research/02-tokenization/sentencepiece/references/training.md +305 -0
  150. package/skills/ai-research/03-fine-tuning/axolotl/SKILL.md +158 -0
  151. package/skills/ai-research/03-fine-tuning/axolotl/references/api.md +5549 -0
  152. package/skills/ai-research/03-fine-tuning/axolotl/references/dataset-formats.md +1030 -0
  153. package/skills/ai-research/03-fine-tuning/axolotl/references/index.md +16 -0
  154. package/skills/ai-research/03-fine-tuning/axolotl/references/other.md +3564 -0
  155. package/skills/ai-research/03-fine-tuning/llama-factory/SKILL.md +80 -0
  156. package/skills/ai-research/03-fine-tuning/llama-factory/references/_images.md +24 -0
  157. package/skills/ai-research/03-fine-tuning/llama-factory/references/advanced.md +1056 -0
  158. package/skills/ai-research/03-fine-tuning/llama-factory/references/getting_started.md +350 -0
  159. package/skills/ai-research/03-fine-tuning/llama-factory/references/index.md +20 -0
  160. package/skills/ai-research/03-fine-tuning/llama-factory/references/other.md +32 -0
  161. package/skills/ai-research/03-fine-tuning/peft/SKILL.md +431 -0
  162. package/skills/ai-research/03-fine-tuning/peft/references/advanced-usage.md +515 -0
  163. package/skills/ai-research/03-fine-tuning/peft/references/troubleshooting.md +481 -0
  164. package/skills/ai-research/03-fine-tuning/unsloth/SKILL.md +80 -0
  165. package/skills/ai-research/03-fine-tuning/unsloth/references/index.md +8 -0
  166. package/skills/ai-research/03-fine-tuning/unsloth/references/llms.md +83 -0
  167. package/skills/ai-research/04-mechanistic-interpretability/nnsight/SKILL.md +436 -0
  168. package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/README.md +79 -0
  169. package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/api.md +345 -0
  170. package/skills/ai-research/04-mechanistic-interpretability/nnsight/references/tutorials.md +301 -0
  171. package/skills/ai-research/04-mechanistic-interpretability/pyvene/SKILL.md +473 -0
  172. package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/README.md +74 -0
  173. package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/api.md +384 -0
  174. package/skills/ai-research/04-mechanistic-interpretability/pyvene/references/tutorials.md +377 -0
  175. package/skills/ai-research/04-mechanistic-interpretability/saelens/SKILL.md +386 -0
  176. package/skills/ai-research/04-mechanistic-interpretability/saelens/references/README.md +71 -0
  177. package/skills/ai-research/04-mechanistic-interpretability/saelens/references/api.md +334 -0
  178. package/skills/ai-research/04-mechanistic-interpretability/saelens/references/tutorials.md +319 -0
  179. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/SKILL.md +346 -0
  180. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/README.md +55 -0
  181. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/api.md +363 -0
  182. package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/references/tutorials.md +340 -0
  183. package/skills/ai-research/05-data-processing/nemo-curator/SKILL.md +383 -0
  184. package/skills/ai-research/05-data-processing/nemo-curator/references/deduplication.md +88 -0
  185. package/skills/ai-research/05-data-processing/nemo-curator/references/filtering.md +103 -0
  186. package/skills/ai-research/05-data-processing/ray-data/SKILL.md +326 -0
  187. package/skills/ai-research/05-data-processing/ray-data/references/integration.md +83 -0
  188. package/skills/ai-research/05-data-processing/ray-data/references/transformations.md +84 -0
  189. package/skills/ai-research/06-post-training/grpo-rl-training/README.md +98 -0
  190. package/skills/ai-research/06-post-training/grpo-rl-training/SKILL.md +572 -0
  191. package/skills/ai-research/06-post-training/miles/SKILL.md +315 -0
  192. package/skills/ai-research/06-post-training/miles/references/api-reference.md +142 -0
  193. package/skills/ai-research/06-post-training/miles/references/troubleshooting.md +353 -0
  194. package/skills/ai-research/06-post-training/openrlhf/SKILL.md +249 -0
  195. package/skills/ai-research/06-post-training/openrlhf/references/algorithm-comparison.md +405 -0
  196. package/skills/ai-research/06-post-training/openrlhf/references/custom-rewards.md +531 -0
  197. package/skills/ai-research/06-post-training/openrlhf/references/hybrid-engine.md +288 -0
  198. package/skills/ai-research/06-post-training/openrlhf/references/multi-node-training.md +455 -0
  199. package/skills/ai-research/06-post-training/simpo/SKILL.md +219 -0
  200. package/skills/ai-research/06-post-training/simpo/references/datasets.md +479 -0
  201. package/skills/ai-research/06-post-training/simpo/references/hyperparameters.md +453 -0
  202. package/skills/ai-research/06-post-training/simpo/references/loss-functions.md +351 -0
  203. package/skills/ai-research/06-post-training/slime/SKILL.md +464 -0
  204. package/skills/ai-research/06-post-training/slime/references/api-reference.md +393 -0
  205. package/skills/ai-research/06-post-training/slime/references/troubleshooting.md +387 -0
  206. package/skills/ai-research/06-post-training/torchforge/SKILL.md +433 -0
  207. package/skills/ai-research/06-post-training/torchforge/references/api-reference.md +328 -0
  208. package/skills/ai-research/06-post-training/torchforge/references/troubleshooting.md +410 -0
  209. package/skills/ai-research/06-post-training/trl-fine-tuning/SKILL.md +455 -0
  210. package/skills/ai-research/06-post-training/trl-fine-tuning/references/dpo-variants.md +228 -0
  211. package/skills/ai-research/06-post-training/trl-fine-tuning/references/online-rl.md +83 -0
  212. package/skills/ai-research/06-post-training/trl-fine-tuning/references/reward-modeling.md +123 -0
  213. package/skills/ai-research/06-post-training/trl-fine-tuning/references/sft-training.md +169 -0
  214. package/skills/ai-research/06-post-training/verl/SKILL.md +391 -0
  215. package/skills/ai-research/06-post-training/verl/references/api-reference.md +302 -0
  216. package/skills/ai-research/06-post-training/verl/references/troubleshooting.md +392 -0
  217. package/skills/ai-research/07-safety-alignment/constitutional-ai/SKILL.md +290 -0
  218. package/skills/ai-research/07-safety-alignment/llamaguard/SKILL.md +337 -0
  219. package/skills/ai-research/07-safety-alignment/nemo-guardrails/SKILL.md +297 -0
  220. package/skills/ai-research/07-safety-alignment/prompt-guard/SKILL.md +312 -0
  221. package/skills/ai-research/08-distributed-training/accelerate/SKILL.md +332 -0
  222. package/skills/ai-research/08-distributed-training/accelerate/references/custom-plugins.md +454 -0
  223. package/skills/ai-research/08-distributed-training/accelerate/references/megatron-integration.md +490 -0
  224. package/skills/ai-research/08-distributed-training/accelerate/references/performance.md +526 -0
  225. package/skills/ai-research/08-distributed-training/deepspeed/SKILL.md +141 -0
  226. package/skills/ai-research/08-distributed-training/deepspeed/references/08.md +18 -0
  227. package/skills/ai-research/08-distributed-training/deepspeed/references/09.md +174 -0
  228. package/skills/ai-research/08-distributed-training/deepspeed/references/2020.md +379 -0
  229. package/skills/ai-research/08-distributed-training/deepspeed/references/2023.md +280 -0
  230. package/skills/ai-research/08-distributed-training/deepspeed/references/assets.md +180 -0
  231. package/skills/ai-research/08-distributed-training/deepspeed/references/index.md +36 -0
  232. package/skills/ai-research/08-distributed-training/deepspeed/references/mii.md +119 -0
  233. package/skills/ai-research/08-distributed-training/deepspeed/references/other.md +1192 -0
  234. package/skills/ai-research/08-distributed-training/megatron-core/SKILL.md +366 -0
  235. package/skills/ai-research/08-distributed-training/megatron-core/references/benchmarks.md +250 -0
  236. package/skills/ai-research/08-distributed-training/megatron-core/references/parallelism-guide.md +405 -0
  237. package/skills/ai-research/08-distributed-training/megatron-core/references/production-examples.md +474 -0
  238. package/skills/ai-research/08-distributed-training/megatron-core/references/training-recipes.md +548 -0
  239. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/SKILL.md +231 -0
  240. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_async_recipe.md +14 -0
  241. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_overview.md +19 -0
  242. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_dcp_recipe.md +18 -0
  243. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_ddp_notes.md +10 -0
  244. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_device_mesh_tutorial.md +22 -0
  245. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_examples_fsdp2.md +15 -0
  246. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp1_api.md +9 -0
  247. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fsdp2_tutorial.md +45 -0
  248. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_fully_shard_api.md +49 -0
  249. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/pytorch_tp_tutorial.md +22 -0
  250. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/ray_train_fsdp2_example.md +13 -0
  251. package/skills/ai-research/08-distributed-training/pytorch-fsdp2/references/torchtitan_fsdp_notes.md +14 -0
  252. package/skills/ai-research/08-distributed-training/pytorch-lightning/SKILL.md +346 -0
  253. package/skills/ai-research/08-distributed-training/pytorch-lightning/references/callbacks.md +437 -0
  254. package/skills/ai-research/08-distributed-training/pytorch-lightning/references/distributed.md +491 -0
  255. package/skills/ai-research/08-distributed-training/pytorch-lightning/references/hyperparameter-tuning.md +557 -0
  256. package/skills/ai-research/08-distributed-training/ray-train/SKILL.md +406 -0
  257. package/skills/ai-research/08-distributed-training/ray-train/references/multi-node.md +629 -0
  258. package/skills/ai-research/09-infrastructure/lambda-labs/SKILL.md +545 -0
  259. package/skills/ai-research/09-infrastructure/lambda-labs/references/advanced-usage.md +612 -0
  260. package/skills/ai-research/09-infrastructure/lambda-labs/references/troubleshooting.md +531 -0
  261. package/skills/ai-research/09-infrastructure/modal/SKILL.md +341 -0
  262. package/skills/ai-research/09-infrastructure/modal/references/advanced-usage.md +504 -0
  263. package/skills/ai-research/09-infrastructure/modal/references/troubleshooting.md +495 -0
  264. package/skills/ai-research/09-infrastructure/skypilot/SKILL.md +509 -0
  265. package/skills/ai-research/09-infrastructure/skypilot/references/advanced-usage.md +492 -0
  266. package/skills/ai-research/09-infrastructure/skypilot/references/troubleshooting.md +571 -0
  267. package/skills/ai-research/10-optimization/awq/SKILL.md +310 -0
  268. package/skills/ai-research/10-optimization/awq/references/advanced-usage.md +325 -0
  269. package/skills/ai-research/10-optimization/awq/references/troubleshooting.md +345 -0
  270. package/skills/ai-research/10-optimization/bitsandbytes/SKILL.md +411 -0
  271. package/skills/ai-research/10-optimization/bitsandbytes/references/memory-optimization.md +522 -0
  272. package/skills/ai-research/10-optimization/bitsandbytes/references/qlora-training.md +522 -0
  273. package/skills/ai-research/10-optimization/bitsandbytes/references/quantization-formats.md +448 -0
  274. package/skills/ai-research/10-optimization/flash-attention/SKILL.md +367 -0
  275. package/skills/ai-research/10-optimization/flash-attention/references/benchmarks.md +216 -0
  276. package/skills/ai-research/10-optimization/flash-attention/references/transformers-integration.md +294 -0
  277. package/skills/ai-research/10-optimization/gguf/SKILL.md +427 -0
  278. package/skills/ai-research/10-optimization/gguf/references/advanced-usage.md +505 -0
  279. package/skills/ai-research/10-optimization/gguf/references/troubleshooting.md +443 -0
  280. package/skills/ai-research/10-optimization/gptq/SKILL.md +450 -0
  281. package/skills/ai-research/10-optimization/gptq/references/calibration.md +338 -0
  282. package/skills/ai-research/10-optimization/gptq/references/integration.md +130 -0
  283. package/skills/ai-research/10-optimization/gptq/references/troubleshooting.md +96 -0
  284. package/skills/ai-research/10-optimization/hqq/SKILL.md +445 -0
  285. package/skills/ai-research/10-optimization/hqq/references/advanced-usage.md +529 -0
  286. package/skills/ai-research/10-optimization/hqq/references/troubleshooting.md +504 -0
  287. package/skills/ai-research/10-optimization/ml-training-recipes/SKILL.md +319 -0
  288. package/skills/ai-research/10-optimization/ml-training-recipes/references/architecture.md +320 -0
  289. package/skills/ai-research/10-optimization/ml-training-recipes/references/biomedical.md +498 -0
  290. package/skills/ai-research/10-optimization/ml-training-recipes/references/domain-specific.md +626 -0
  291. package/skills/ai-research/10-optimization/ml-training-recipes/references/experiment-loop.md +129 -0
  292. package/skills/ai-research/10-optimization/ml-training-recipes/references/optimizers.md +330 -0
  293. package/skills/ai-research/10-optimization/ml-training-recipes/references/scaling-and-selection.md +428 -0
  294. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/SKILL.md +405 -0
  295. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/benchmarks.md +394 -0
  296. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/custom-tasks.md +425 -0
  297. package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/references/issues.md +395 -0
  298. package/skills/ai-research/11-evaluation/lm-evaluation-harness/SKILL.md +490 -0
  299. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/api-evaluation.md +491 -0
  300. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/benchmark-guide.md +489 -0
  301. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/custom-tasks.md +603 -0
  302. package/skills/ai-research/11-evaluation/lm-evaluation-harness/references/distributed-eval.md +520 -0
  303. package/skills/ai-research/11-evaluation/nemo-evaluator/SKILL.md +494 -0
  304. package/skills/ai-research/11-evaluation/nemo-evaluator/references/adapter-system.md +341 -0
  305. package/skills/ai-research/11-evaluation/nemo-evaluator/references/configuration.md +448 -0
  306. package/skills/ai-research/11-evaluation/nemo-evaluator/references/custom-benchmarks.md +316 -0
  307. package/skills/ai-research/11-evaluation/nemo-evaluator/references/execution-backends.md +362 -0
  308. package/skills/ai-research/12-inference-serving/llama-cpp/SKILL.md +258 -0
  309. package/skills/ai-research/12-inference-serving/llama-cpp/references/optimization.md +90 -0
  310. package/skills/ai-research/12-inference-serving/llama-cpp/references/quantization.md +214 -0
  311. package/skills/ai-research/12-inference-serving/llama-cpp/references/server.md +126 -0
  312. package/skills/ai-research/12-inference-serving/sglang/SKILL.md +442 -0
  313. package/skills/ai-research/12-inference-serving/sglang/references/deployment.md +491 -0
  314. package/skills/ai-research/12-inference-serving/sglang/references/radix-attention.md +414 -0
  315. package/skills/ai-research/12-inference-serving/sglang/references/structured-generation.md +542 -0
  316. package/skills/ai-research/12-inference-serving/tensorrt-llm/SKILL.md +187 -0
  317. package/skills/ai-research/12-inference-serving/tensorrt-llm/references/multi-gpu.md +299 -0
  318. package/skills/ai-research/12-inference-serving/tensorrt-llm/references/optimization.md +243 -0
  319. package/skills/ai-research/12-inference-serving/tensorrt-llm/references/serving.md +471 -0
  320. package/skills/ai-research/12-inference-serving/vllm/SKILL.md +364 -0
  321. package/skills/ai-research/12-inference-serving/vllm/references/optimization.md +227 -0
  322. package/skills/ai-research/12-inference-serving/vllm/references/quantization.md +285 -0
  323. package/skills/ai-research/12-inference-serving/vllm/references/server-deployment.md +256 -0
  324. package/skills/ai-research/12-inference-serving/vllm/references/troubleshooting.md +448 -0
  325. package/skills/ai-research/13-mlops/mlflow/SKILL.md +704 -0
  326. package/skills/ai-research/13-mlops/mlflow/references/deployment.md +745 -0
  327. package/skills/ai-research/13-mlops/mlflow/references/model-registry.md +771 -0
  328. package/skills/ai-research/13-mlops/mlflow/references/tracking.md +681 -0
  329. package/skills/ai-research/13-mlops/swanlab/SKILL.md +406 -0
  330. package/skills/ai-research/13-mlops/swanlab/references/integrations.md +305 -0
  331. package/skills/ai-research/13-mlops/swanlab/references/visualization.md +234 -0
  332. package/skills/ai-research/13-mlops/tensorboard/SKILL.md +629 -0
  333. package/skills/ai-research/13-mlops/tensorboard/references/integrations.md +639 -0
  334. package/skills/ai-research/13-mlops/tensorboard/references/profiling.md +546 -0
  335. package/skills/ai-research/13-mlops/tensorboard/references/visualization.md +621 -0
  336. package/skills/ai-research/13-mlops/weights-and-biases/SKILL.md +590 -0
  337. package/skills/ai-research/13-mlops/weights-and-biases/references/artifacts.md +585 -0
  338. package/skills/ai-research/13-mlops/weights-and-biases/references/integrations.md +701 -0
  339. package/skills/ai-research/13-mlops/weights-and-biases/references/sweeps.md +848 -0
  340. package/skills/ai-research/14-agents/a-evolve/SKILL.md +383 -0
  341. package/skills/ai-research/14-agents/a-evolve/references/README.md +831 -0
  342. package/skills/ai-research/14-agents/a-evolve/references/api.md +594 -0
  343. package/skills/ai-research/14-agents/a-evolve/references/architecture.md +417 -0
  344. package/skills/ai-research/14-agents/a-evolve/references/design-patterns.md +462 -0
  345. package/skills/ai-research/14-agents/a-evolve/references/examples.md +352 -0
  346. package/skills/ai-research/14-agents/a-evolve/references/issues.md +591 -0
  347. package/skills/ai-research/14-agents/a-evolve/references/releases.md +112 -0
  348. package/skills/ai-research/14-agents/a-evolve/references/tutorials.md +819 -0
  349. package/skills/ai-research/14-agents/autogpt/SKILL.md +403 -0
  350. package/skills/ai-research/14-agents/autogpt/references/advanced-usage.md +536 -0
  351. package/skills/ai-research/14-agents/autogpt/references/troubleshooting.md +421 -0
  352. package/skills/ai-research/14-agents/crewai/SKILL.md +498 -0
  353. package/skills/ai-research/14-agents/crewai/references/flows.md +439 -0
  354. package/skills/ai-research/14-agents/crewai/references/tools.md +430 -0
  355. package/skills/ai-research/14-agents/crewai/references/troubleshooting.md +481 -0
  356. package/skills/ai-research/14-agents/langchain/SKILL.md +480 -0
  357. package/skills/ai-research/14-agents/langchain/references/agents.md +500 -0
  358. package/skills/ai-research/14-agents/langchain/references/integration.md +563 -0
  359. package/skills/ai-research/14-agents/langchain/references/rag.md +601 -0
  360. package/skills/ai-research/14-agents/llamaindex/SKILL.md +569 -0
  361. package/skills/ai-research/14-agents/llamaindex/references/agents.md +84 -0
  362. package/skills/ai-research/14-agents/llamaindex/references/data_connectors.md +109 -0
  363. package/skills/ai-research/14-agents/llamaindex/references/query_engines.md +407 -0
  364. package/skills/ai-research/15-rag/chroma/SKILL.md +406 -0
  365. package/skills/ai-research/15-rag/chroma/references/integration.md +39 -0
  366. package/skills/ai-research/15-rag/faiss/SKILL.md +221 -0
  367. package/skills/ai-research/15-rag/faiss/references/index_types.md +281 -0
  368. package/skills/ai-research/15-rag/pinecone/SKILL.md +358 -0
  369. package/skills/ai-research/15-rag/pinecone/references/deployment.md +182 -0
  370. package/skills/ai-research/15-rag/qdrant/SKILL.md +493 -0
  371. package/skills/ai-research/15-rag/qdrant/references/advanced-usage.md +649 -0
  372. package/skills/ai-research/15-rag/qdrant/references/troubleshooting.md +632 -0
  373. package/skills/ai-research/15-rag/sentence-transformers/SKILL.md +255 -0
  374. package/skills/ai-research/15-rag/sentence-transformers/references/models.md +124 -0
  375. package/skills/ai-research/16-prompt-engineering/dspy/SKILL.md +590 -0
  376. package/skills/ai-research/16-prompt-engineering/dspy/references/examples.md +664 -0
  377. package/skills/ai-research/16-prompt-engineering/dspy/references/modules.md +476 -0
  378. package/skills/ai-research/16-prompt-engineering/dspy/references/optimizers.md +567 -0
  379. package/skills/ai-research/16-prompt-engineering/guidance/SKILL.md +572 -0
  380. package/skills/ai-research/16-prompt-engineering/guidance/references/backends.md +555 -0
  381. package/skills/ai-research/16-prompt-engineering/guidance/references/constraints.md +675 -0
  382. package/skills/ai-research/16-prompt-engineering/guidance/references/examples.md +768 -0
  383. package/skills/ai-research/16-prompt-engineering/instructor/SKILL.md +740 -0
  384. package/skills/ai-research/16-prompt-engineering/instructor/references/examples.md +108 -0
  385. package/skills/ai-research/16-prompt-engineering/instructor/references/providers.md +71 -0
  386. package/skills/ai-research/16-prompt-engineering/instructor/references/validation.md +607 -0
  387. package/skills/ai-research/16-prompt-engineering/outlines/SKILL.md +652 -0
  388. package/skills/ai-research/16-prompt-engineering/outlines/references/backends.md +616 -0
  389. package/skills/ai-research/16-prompt-engineering/outlines/references/examples.md +774 -0
  390. package/skills/ai-research/16-prompt-engineering/outlines/references/json_generation.md +653 -0
  391. package/skills/ai-research/17-observability/langsmith/SKILL.md +422 -0
  392. package/skills/ai-research/17-observability/langsmith/references/advanced-usage.md +549 -0
  393. package/skills/ai-research/17-observability/langsmith/references/troubleshooting.md +538 -0
  394. package/skills/ai-research/17-observability/phoenix/SKILL.md +475 -0
  395. package/skills/ai-research/17-observability/phoenix/references/advanced-usage.md +620 -0
  396. package/skills/ai-research/17-observability/phoenix/references/troubleshooting.md +539 -0
  397. package/skills/ai-research/18-multimodal/audiocraft/SKILL.md +564 -0
  398. package/skills/ai-research/18-multimodal/audiocraft/references/advanced-usage.md +667 -0
  399. package/skills/ai-research/18-multimodal/audiocraft/references/troubleshooting.md +505 -0
  400. package/skills/ai-research/18-multimodal/blip-2/SKILL.md +564 -0
  401. package/skills/ai-research/18-multimodal/blip-2/references/advanced-usage.md +681 -0
  402. package/skills/ai-research/18-multimodal/blip-2/references/troubleshooting.md +527 -0
  403. package/skills/ai-research/18-multimodal/clip/SKILL.md +253 -0
  404. package/skills/ai-research/18-multimodal/clip/references/applications.md +208 -0
  405. package/skills/ai-research/18-multimodal/cosmos-policy/SKILL.md +402 -0
  406. package/skills/ai-research/18-multimodal/cosmos-policy/references/libero-commands.md +175 -0
  407. package/skills/ai-research/18-multimodal/cosmos-policy/references/robocasa-commands.md +147 -0
  408. package/skills/ai-research/18-multimodal/llava/SKILL.md +304 -0
  409. package/skills/ai-research/18-multimodal/llava/references/training.md +198 -0
  410. package/skills/ai-research/18-multimodal/openpi/SKILL.md +480 -0
  411. package/skills/ai-research/18-multimodal/openpi/references/checkpoints-and-env-map.md +86 -0
  412. package/skills/ai-research/18-multimodal/openpi/references/config-recipes.md +50 -0
  413. package/skills/ai-research/18-multimodal/openpi/references/pytorch-gotchas.md +49 -0
  414. package/skills/ai-research/18-multimodal/openpi/references/remote-client-pattern.md +48 -0
  415. package/skills/ai-research/18-multimodal/openpi/references/training-debugging.md +46 -0
  416. package/skills/ai-research/18-multimodal/openvla-oft/SKILL.md +441 -0
  417. package/skills/ai-research/18-multimodal/openvla-oft/references/aloha-workflow.md +141 -0
  418. package/skills/ai-research/18-multimodal/openvla-oft/references/config-troubleshooting.md +97 -0
  419. package/skills/ai-research/18-multimodal/openvla-oft/references/libero-workflow.md +115 -0
  420. package/skills/ai-research/18-multimodal/openvla-oft/references/paper-and-checkpoints.md +84 -0
  421. package/skills/ai-research/18-multimodal/segment-anything/SKILL.md +500 -0
  422. package/skills/ai-research/18-multimodal/segment-anything/references/advanced-usage.md +590 -0
  423. package/skills/ai-research/18-multimodal/segment-anything/references/troubleshooting.md +485 -0
  424. package/skills/ai-research/18-multimodal/stable-diffusion/SKILL.md +519 -0
  425. package/skills/ai-research/18-multimodal/stable-diffusion/references/advanced-usage.md +717 -0
  426. package/skills/ai-research/18-multimodal/stable-diffusion/references/troubleshooting.md +556 -0
  427. package/skills/ai-research/18-multimodal/whisper/SKILL.md +317 -0
  428. package/skills/ai-research/18-multimodal/whisper/references/languages.md +190 -0
  429. package/skills/ai-research/19-emerging-techniques/knowledge-distillation/SKILL.md +458 -0
  430. package/skills/ai-research/19-emerging-techniques/knowledge-distillation/references/minillm.md +335 -0
  431. package/skills/ai-research/19-emerging-techniques/long-context/SKILL.md +536 -0
  432. package/skills/ai-research/19-emerging-techniques/long-context/references/extension_methods.md +469 -0
  433. package/skills/ai-research/19-emerging-techniques/long-context/references/fine_tuning.md +612 -0
  434. package/skills/ai-research/19-emerging-techniques/long-context/references/rope.md +403 -0
  435. package/skills/ai-research/19-emerging-techniques/model-merging/SKILL.md +497 -0
  436. package/skills/ai-research/19-emerging-techniques/model-merging/references/coefficient-tuning.md +415 -0
  437. package/skills/ai-research/19-emerging-techniques/model-merging/references/evaluation.md +463 -0
  438. package/skills/ai-research/19-emerging-techniques/model-merging/references/examples.md +429 -0
  439. package/skills/ai-research/19-emerging-techniques/model-merging/references/methods.md +353 -0
  440. package/skills/ai-research/19-emerging-techniques/model-pruning/SKILL.md +495 -0
  441. package/skills/ai-research/19-emerging-techniques/model-pruning/references/wanda.md +348 -0
  442. package/skills/ai-research/19-emerging-techniques/moe-training/SKILL.md +526 -0
  443. package/skills/ai-research/19-emerging-techniques/moe-training/references/architectures.md +433 -0
  444. package/skills/ai-research/19-emerging-techniques/moe-training/references/inference.md +349 -0
  445. package/skills/ai-research/19-emerging-techniques/moe-training/references/training.md +426 -0
  446. package/skills/ai-research/19-emerging-techniques/speculative-decoding/SKILL.md +467 -0
  447. package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/lookahead.md +310 -0
  448. package/skills/ai-research/19-emerging-techniques/speculative-decoding/references/medusa.md +351 -0
  449. package/skills/ai-research/20-ml-paper-writing/academic-plotting/SKILL.md +479 -0
  450. package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/data-visualization.md +509 -0
  451. package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/diagram-generation.md +395 -0
  452. package/skills/ai-research/20-ml-paper-writing/academic-plotting/references/style-guide.md +305 -0
  453. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/SKILL.md +982 -0
  454. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/checklists.md +348 -0
  455. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/citation-workflow.md +563 -0
  456. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/reviewer-guidelines.md +349 -0
  457. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/sources.md +165 -0
  458. package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/references/writing-guide.md +477 -0
  459. package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/SKILL.md +298 -0
  460. package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/references/slide-templates.md +505 -0
  461. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/SKILL.md +270 -0
  462. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/checklist.md +279 -0
  463. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/reviewer-guidelines.md +116 -0
  464. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/section-blueprints.md +400 -0
  465. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/systems-conferences.md +261 -0
  466. package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/references/writing-patterns.md +231 -0
  467. package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/SKILL.md +384 -0
  468. package/skills/ai-research/21-research-ideation/creative-thinking-for-research/SKILL.md +366 -0
  469. package/skills/ai-research/22-agent-native-research-artifact/compiler/SKILL.md +245 -0
  470. package/skills/ai-research/22-agent-native-research-artifact/compiler/references/ara-schema.md +439 -0
  471. package/skills/ai-research/22-agent-native-research-artifact/compiler/references/exploration-tree-spec.md +125 -0
  472. package/skills/ai-research/22-agent-native-research-artifact/compiler/references/validation-checklist.md +149 -0
  473. package/skills/ai-research/22-agent-native-research-artifact/research-manager/SKILL.md +324 -0
  474. package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/event-taxonomy.md +124 -0
  475. package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/provenance-tags.md +190 -0
  476. package/skills/ai-research/22-agent-native-research-artifact/research-manager/references/session-protocol.md +162 -0
  477. package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/SKILL.md +322 -0
  478. package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/references/review-dimensions.md +182 -0
  479. package/skills/ai-research/SKILL.md +101 -0
  480. package/skills/ai-research/SOURCE +38 -0
  481. package/skills/ai-research/index/1-frame.md +18 -0
  482. package/skills/ai-research/index/2-data.md +21 -0
  483. package/skills/ai-research/index/3-train.md +48 -0
  484. package/skills/ai-research/index/4-measure.md +25 -0
  485. package/skills/ai-research/index/5-run.md +23 -0
  486. package/skills/ai-research/index/6-write.md +35 -0
  487. package/skills/ai-research/library.json +3456 -0
  488. package/skills/analyze-app/EVALS.md +82 -0
  489. package/skills/analyze-app/SKILL.md +188 -0
  490. package/skills/design-contract/EVALS.md +80 -0
  491. package/skills/design-contract/SKILL.md +171 -0
  492. package/skills/design-library/EVALS.md +85 -0
  493. package/skills/design-library/INDEX.md +59 -0
  494. package/skills/design-library/SKILL.md +58 -0
  495. package/skills/design-library/SOURCE +131 -0
  496. package/skills/design-library/adaptive-interfaces/skills/colour-independence/SKILL.md +90 -0
  497. package/skills/design-library/adaptive-interfaces/skills/flexible-typography/SKILL.md +83 -0
  498. package/skills/design-library/adaptive-interfaces/skills/information-density/SKILL.md +87 -0
  499. package/skills/design-library/adaptive-interfaces/skills/preference-audit/SKILL.md +70 -0
  500. package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/SKILL.md +86 -0
  501. package/skills/design-library/adaptive-interfaces/skills/responsive-review/SKILL.md +76 -0
  502. package/skills/design-library/adaptive-interfaces/skills/simplified-views/SKILL.md +97 -0
  503. package/skills/design-library/adaptive-interfaces/skills/specify/SKILL.md +63 -0
  504. package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/SKILL.md +100 -0
  505. package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/SKILL.md +61 -0
  506. package/skills/design-library/cognitive-accessibility/skills/assess-load/SKILL.md +48 -0
  507. package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/SKILL.md +60 -0
  508. package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/SKILL.md +61 -0
  509. package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/SKILL.md +71 -0
  510. package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/SKILL.md +67 -0
  511. package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/SKILL.md +60 -0
  512. package/skills/design-library/cognitive-accessibility/skills/plain-language-design/SKILL.md +78 -0
  513. package/skills/design-library/cognitive-accessibility/skills/review/SKILL.md +56 -0
  514. package/skills/design-library/cognitive-accessibility/skills/simplify/SKILL.md +39 -0
  515. package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/SKILL.md +64 -0
  516. package/skills/design-library/design-research/skills/behavioural-analytics/SKILL.md +33 -0
  517. package/skills/design-library/design-research/skills/qual-quant-triangulation/SKILL.md +33 -0
  518. package/skills/design-library/inclusive-interaction/skills/audit/SKILL.md +50 -0
  519. package/skills/design-library/inclusive-interaction/skills/design-flow/SKILL.md +58 -0
  520. package/skills/design-library/inclusive-interaction/skills/feedback-and-status/SKILL.md +76 -0
  521. package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/SKILL.md +70 -0
  522. package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/SKILL.md +99 -0
  523. package/skills/design-library/inclusive-interaction/skills/keyboard-review/SKILL.md +54 -0
  524. package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/SKILL.md +79 -0
  525. package/skills/design-library/inclusive-interaction/skills/multi-modal-input/SKILL.md +70 -0
  526. package/skills/design-library/inclusive-interaction/skills/touch-target-design/SKILL.md +71 -0
  527. package/skills/design-library/inclusive-interaction/skills/voice-interaction/SKILL.md +68 -0
  528. package/skills/design-library/visual-critique/skills/critique-affordance/SKILL.md +45 -0
  529. package/skills/design-library/visual-critique/skills/critique-brand-consistency/SKILL.md +42 -0
  530. package/skills/design-library/visual-critique/skills/critique-color/SKILL.md +44 -0
  531. package/skills/design-library/visual-critique/skills/critique-composition/SKILL.md +46 -0
  532. package/skills/design-library/visual-critique/skills/critique-information-density/SKILL.md +45 -0
  533. package/skills/design-library/visual-critique/skills/critique-typography/SKILL.md +45 -0
  534. package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/SKILL.md +40 -0
  535. package/skills/feature-audit/EVALS.md +83 -0
  536. package/skills/feature-audit/SKILL.md +326 -0
  537. package/skills/harness/EVALS.md +81 -0
  538. package/skills/harness/SKILL.md +88 -0
  539. package/skills/i-have-adhd/EVALS.md +80 -0
  540. package/skills/i-have-adhd/SKILL.md +183 -0
  541. package/skills/no-ai-slop/EVALS.md +89 -0
  542. package/skills/no-ai-slop/SKILL.md +209 -0
  543. package/skills/no-ai-slop/eval.md +52 -0
  544. package/skills/plan-add/EVALS.md +79 -0
  545. package/skills/plan-add/SKILL.md +179 -0
  546. package/skills/plan-add/render_table.py +72 -0
  547. package/skills/plan-status/EVALS.md +78 -0
  548. package/skills/plan-status/SKILL.md +52 -0
  549. package/skills/plan-sync/EVALS.md +80 -0
  550. package/skills/plan-sync/SKILL.md +69 -0
  551. package/skills/pm-frameworks/SKILL.md +33 -0
  552. package/skills/pm-frameworks/SOURCE +39 -0
  553. package/skills/pm-frameworks/intended-vs-implemented/SKILL.md +42 -0
  554. package/skills/pm-frameworks/opportunity-solution-tree/SKILL.md +64 -0
  555. package/skills/ponytail/EVALS.md +80 -0
  556. package/skills/ponytail/SKILL.md +124 -0
  557. package/skills/product-analysis/EVALS.md +103 -0
  558. package/skills/product-analysis/SKILL.md +361 -0
  559. package/skills/research/EVALS.md +104 -0
  560. package/skills/research/SKILL.md +570 -0
  561. package/skills/rl-env/SKILL.md +53 -0
  562. package/skills/rl-env/SOURCE +41 -0
  563. package/skills/rl-env/generate-nemo-gym-env/SKILL.md +169 -0
  564. package/skills/rl-env/generate-nemo-gym-env/references/architecture.md +114 -0
  565. package/skills/rl-env/generate-openenv-env/SKILL.md +183 -0
  566. package/skills/rl-env/generate-openenv-env/references/architecture.md +82 -0
  567. package/skills/rl-env/generate-ors-env/SKILL.md +209 -0
  568. package/skills/rl-env/generate-ors-env/references/architecture.md +113 -0
  569. package/skills/rl-env/generate-verifiers-env/SKILL.md +188 -0
  570. package/skills/rl-env/generate-verifiers-env/references/architecture.md +119 -0
  571. package/skills/rl-env/rl-env-from-description/SKILL.md +124 -0
  572. package/skills/rl-env/rl-env-from-description/references/interview.md +75 -0
  573. package/skills/rl-env/rl-env-from-description/references/nemo_gym.md +41 -0
  574. package/skills/rl-env/rl-env-from-description/references/openenv.md +35 -0
  575. package/skills/rl-env/rl-env-from-description/references/ors.md +50 -0
  576. package/skills/rl-env/rl-env-from-description/references/verifiers.md +39 -0
  577. package/skills/tezgah-contract/EVALS.md +78 -0
  578. package/skills/tezgah-contract/SKILL.md +792 -0
  579. package/statusline.py +129 -0
  580. package/workflows/graph-impact.js +153 -0
  581. package/workflows/graph-map.js +158 -0
  582. 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))
@@ -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:]))