@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,497 @@
1
+ #!/usr/bin/env python3
2
+ """tezgah-doctor - report and reclaim the state the armed harnesses leave behind.
3
+
4
+ Two stores grow without bound and neither rotates on its own:
5
+ - opencode's SQLite session/event database (~/.local/share/opencode/opencode.db)
6
+ - one codegraph index per indexed repository (`<repo>/.codegraph/codegraph.db`).
7
+ It lives inside the repo rather than in one shared cache, so there is no
8
+ central directory to measure: the per-repo scan below is the only place the
9
+ total is visible, and a repo whose index is stale or abandoned keeps its
10
+ bytes until its owner deletes them.
11
+
12
+ It also reports the hosts' own state (~/.codex, ~/.omp, ~/.claude) and never
13
+ touches it: those stores belong to the hosts, and the number is here so a reader
14
+ can decide, not so this tool can act.
15
+
16
+ This tool is read-only by default. With --clean it vacuums the opencode database
17
+ (only when opencode is not running, so it cannot fight a live connection).
18
+ VACUUM alone cannot shrink that database - its pages are all live - so
19
+ --prune-sessions is the action that actually reclaims space: it deletes old
20
+ sessions through the supported opencode command and then vacuums.
21
+
22
+ --coverage is the other read-only report, and the one codegraph does not ship:
23
+ every tracked file the index does not hold, in the two classes a file can go
24
+ missing by. Its rules are imported from benchmarks/codegraph-bench/probe.py, the
25
+ spike that measured them. That file is in MANIFEST, which `packaging/build.sh`
26
+ ships verbatim, so a release artifact carries it and a packaged install answers
27
+ `--coverage` in full. A tree that lost it - a hand-stripped copy, a repack that
28
+ dropped benchmarks/ - gets a named refusal and exit 0 rather than an ImportError
29
+ out of a shipped CLI. Everything it reads is the standard library or a file in
30
+ this tree.
31
+
32
+ tezgah-doctor report sizes and counts
33
+ tezgah-doctor --json same, machine readable
34
+ tezgah-doctor --coverage the tracked files the graph index does not hold
35
+ tezgah-doctor --coverage --repo ~/Projects/x
36
+ tezgah-doctor --clean vacuum the opencode database, and delete the
37
+ hook state (evidence ledgers, turns/,
38
+ sessions/, classify.log, context-drops.log,
39
+ debug.log) idle > 30 days
40
+ (--retention-days N); $TEZGAH_SESSION's
41
+ own files are always kept
42
+ tezgah-doctor --prune-sessions 30 delete sessions idle > 30 days, then vacuum
43
+ """
44
+ import argparse
45
+ import importlib.machinery
46
+ import importlib.util
47
+ import json
48
+ import os
49
+ import shutil
50
+ import sqlite3
51
+ import subprocess
52
+ import sys
53
+ import time
54
+
55
+ HOME = os.path.expanduser("~")
56
+ # this file lives in <checkout>/bin, and the coverage rules live in the checkout's
57
+ # bench directory next to the hooks that own the roots and the binary resolver
58
+ REPO_ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
59
+ sys.path.insert(0, os.path.join(REPO_ROOT, "hooks"))
60
+ from tezgah_paths import (CACHE, CODEGRAPH, codegraph_bin, # noqa: E402
61
+ fallback_cache, root_for, roots)
62
+
63
+ # the coverage rules, in the bench directory next to the hooks that own the roots
64
+ # and the binary resolver. MANIFEST lists it, so it ships; it is also the one file
65
+ # here that a repack may drop, so `load_probe` treats it as optional rather than
66
+ # assuming it.
67
+ PROBE = os.path.join(REPO_ROOT, "benchmarks", "codegraph-bench", "probe.py")
68
+ OPENCODE = os.path.join(
69
+ os.environ.get("XDG_CONFIG_HOME") or os.path.join(HOME, ".config"), "opencode")
70
+ OPENCODE_DATA = os.environ.get("TEZGAH_OPENCODE_DATA",
71
+ os.path.join(HOME, ".local", "share", "opencode"))
72
+ OPENCODE_DB = os.path.join(OPENCODE_DATA, "opencode.db")
73
+ TEZGAH_CACHE = os.path.join(HOME, ".cache", "tezgah")
74
+ OPENCODE_BIN = shutil.which("opencode")
75
+ # codegraph's index, inside the repo it belongs to (derived from the engine name
76
+ # itself, so the doctor cannot name a directory the engine does not write)
77
+ GRAPH_DIR = "." + CODEGRAPH
78
+ GRAPH_DB = CODEGRAPH + ".db"
79
+ # The per-session state the hooks write and nothing else removes: the evidence
80
+ # ledgers, the per-turn stamps, the used-tool marks and the two capped logs.
81
+ # Audit L-11 (GAP-10) measured 2,000 of each, 400 days old, surviving a full
82
+ # cycle and `--clean`. Snapshots are not here: tezgah_snapshot caps them itself.
83
+ STATE_DIRS = ("evidence", "turns", "sessions")
84
+ STATE_LOGS = ("classify.log", "context-drops.log", "debug.log")
85
+ RETENTION_DAYS = 30
86
+
87
+
88
+ def du(path):
89
+ total = 0
90
+ for root, _dirs, files in os.walk(path):
91
+ for name in files:
92
+ try:
93
+ total += os.path.getsize(os.path.join(root, name))
94
+ except OSError:
95
+ pass
96
+ return total
97
+
98
+
99
+ def human(n):
100
+ n = float(n)
101
+ for unit in ("B", "K", "M", "G"):
102
+ if n < 1024:
103
+ return "%.1f%s" % (n, unit)
104
+ n /= 1024.0
105
+ return "%.1fT" % n
106
+
107
+
108
+ def codegraph_size(repo):
109
+ """One repo's index as (bytes, has_index).
110
+
111
+ The file is the marker, not the directory: codegraph writes `.codegraph/`
112
+ with its lock and `.gitignore` before the index exists, so a directory
113
+ without `codegraph.db` is a repo whose index never finished."""
114
+ try:
115
+ return os.path.getsize(os.path.join(repo, GRAPH_DIR, GRAPH_DB)), True
116
+ except OSError:
117
+ return 0, False
118
+
119
+
120
+ def is_repo(path):
121
+ """Git is the marker, and a worktree keeps `.git` as a file. `.codegraph` is
122
+ the second one: an indexed project that is not a git checkout is still a repo
123
+ this report has bytes to account for."""
124
+ return (os.path.exists(os.path.join(path, ".git"))
125
+ or os.path.isdir(os.path.join(path, GRAPH_DIR)))
126
+
127
+
128
+ def repos_under(root, depth=2):
129
+ """The repositories one configured root holds, as absolute paths.
130
+
131
+ Two levels below the root, so both a flat `~/Projects/<repo>` layout and an
132
+ `~/Projects/<org>/<repo>` one are covered. The walk stops at the first repo
133
+ on a path: descending into one would report its vendored checkouts as repos
134
+ of their own."""
135
+ found = []
136
+ frontier = [(root, 0)]
137
+ while frontier:
138
+ directory, level = frontier.pop()
139
+ if is_repo(directory):
140
+ found.append(directory)
141
+ continue
142
+ if level >= depth:
143
+ continue
144
+ try:
145
+ names = sorted(os.listdir(directory))
146
+ except OSError:
147
+ continue
148
+ for name in names:
149
+ path = os.path.join(directory, name)
150
+ if not name.startswith(".") and os.path.isdir(path):
151
+ frontier.append((path, level + 1))
152
+ return sorted(found)
153
+
154
+
155
+ def targets(named):
156
+ """The repositories to account for as (configured root, repo) pairs: the ones
157
+ the user named, else every repository under a configured tezgah root."""
158
+ if named:
159
+ out = []
160
+ for path in named:
161
+ repo = os.path.realpath(os.path.expanduser(path))
162
+ out.append((root_for(repo) or "", repo))
163
+ return out
164
+ return [(root, repo) for root in roots() for repo in repos_under(root)]
165
+
166
+
167
+ def host_bytes():
168
+ """The hosts' own state dirs, measured and never touched by this tool."""
169
+ return {"codex_bytes": du(os.path.join(HOME, ".codex")) if os.path.isdir(
170
+ os.path.join(HOME, ".codex")) else 0,
171
+ "omp_bytes": du(os.path.join(HOME, ".omp")) if os.path.isdir(
172
+ os.path.join(HOME, ".omp")) else 0,
173
+ "claude_bytes": du(os.path.join(HOME, ".claude")) if os.path.isdir(
174
+ os.path.join(HOME, ".claude")) else 0}
175
+
176
+
177
+ def db_rows(db, table):
178
+ if not os.path.exists(db):
179
+ return None
180
+ try:
181
+ con = sqlite3.connect("file:%s?mode=ro" % db, uri=True)
182
+ try:
183
+ return con.execute("SELECT count(*) FROM %s" % table).fetchone()[0]
184
+ finally:
185
+ con.close()
186
+ except sqlite3.Error:
187
+ return None
188
+
189
+
190
+ def opencode_cfg():
191
+ try:
192
+ with open(os.path.join(OPENCODE, "opencode.json"), encoding="utf-8") as fh:
193
+ return json.load(fh)
194
+ except Exception:
195
+ return {}
196
+
197
+
198
+ def opencode_running():
199
+ try:
200
+ return subprocess.run(["pgrep", "-x", "opencode"],
201
+ capture_output=True).returncode == 0
202
+ except OSError:
203
+ return False
204
+
205
+
206
+ def collect(pairs):
207
+ cfg = opencode_cfg()
208
+ repos = []
209
+ for root, repo in pairs:
210
+ size, indexed = codegraph_size(repo)
211
+ repos.append({"root": root, "repo": repo, "bytes": size, "indexed": indexed})
212
+ return {
213
+ "opencode_db_bytes": os.path.getsize(OPENCODE_DB) if os.path.exists(OPENCODE_DB) else 0,
214
+ "opencode_sessions": db_rows(OPENCODE_DB, "session"),
215
+ "opencode_events": db_rows(OPENCODE_DB, "event"),
216
+ "opencode_running": opencode_running(),
217
+ "compaction_prune": (cfg.get("compaction") or {}).get("prune"),
218
+ "watcher_ignore": len(((cfg.get("watcher") or {}).get("ignore") or [])),
219
+ "codegraph_repos": repos,
220
+ "codegraph_bytes": sum(r["bytes"] for r in repos),
221
+ "tezgah_cache_bytes": du(TEZGAH_CACHE) if os.path.isdir(TEZGAH_CACHE) else 0,
222
+ **host_bytes(),
223
+ }
224
+
225
+
226
+ def vacuum_db():
227
+ before = os.path.getsize(OPENCODE_DB)
228
+ con = sqlite3.connect(OPENCODE_DB)
229
+ try:
230
+ con.execute("PRAGMA wal_checkpoint(TRUNCATE)")
231
+ con.execute("VACUUM")
232
+ con.commit()
233
+ finally:
234
+ con.close()
235
+ return before, os.path.getsize(OPENCODE_DB)
236
+
237
+
238
+ def select_old_sessions(days):
239
+ """Sessions whose last update is older than `days`, oldest first."""
240
+ if not os.path.exists(OPENCODE_DB):
241
+ return []
242
+ cutoff = int((time.time() - days * 86400) * 1000) # time_updated is epoch ms
243
+ try:
244
+ con = sqlite3.connect("file:%s?mode=ro" % OPENCODE_DB, uri=True)
245
+ try:
246
+ rows = con.execute(
247
+ "SELECT id FROM session WHERE time_updated < ? ORDER BY time_updated",
248
+ (cutoff,)).fetchall()
249
+ return [r[0] for r in rows]
250
+ finally:
251
+ con.close()
252
+ except sqlite3.Error:
253
+ return []
254
+
255
+
256
+ def prune_sessions(days):
257
+ """Delete sessions older than `days` and return (deleted, failed).
258
+
259
+ Uses `opencode session delete` rather than raw SQL: that keeps the event log
260
+ and the running server consistent. The caller guarantees opencode is stopped.
261
+ """
262
+ ids = select_old_sessions(days)
263
+ if not ids or not OPENCODE_BIN:
264
+ # nothing is attempted without the CLI; the caller reports the skip, so
265
+ # do not count these ids as failed deletions
266
+ return 0, 0
267
+ deleted = failed = 0
268
+ for sid in ids:
269
+ proc = subprocess.run([OPENCODE_BIN, "session", "delete", sid],
270
+ capture_output=True)
271
+ if proc.returncode == 0:
272
+ deleted += 1
273
+ else:
274
+ failed += 1
275
+ return deleted, failed
276
+
277
+
278
+ def sweep_state(days, session=None):
279
+ """Delete the hook state not modified for `days`, in the global cache and
280
+ the temp fallback; (removed, bytes freed).
281
+
282
+ By mtime because every writer appends or rewrites in place, so a file's
283
+ mtime is its session's last activity. The current session's files
284
+ (`TEZGAH_SESSION`, the id omp and the judgement CLIs export) are kept
285
+ whatever their age: a session idle past the window and then resumed must
286
+ not lose its ledger mid-flight."""
287
+ from tezgah_context import slug
288
+ from tezgah_integrity import _slug
289
+ keep = ({_slug(session) + ".jsonl", slug(session) + ".json",
290
+ slug(session) + ".jsonl"} if session else set())
291
+ cutoff = time.time() - days * 86400
292
+ removed = freed = 0
293
+ for base in dict.fromkeys((CACHE, fallback_cache())):
294
+ paths = [os.path.join(base, name) for name in STATE_LOGS]
295
+ for sub in STATE_DIRS:
296
+ try:
297
+ paths += [os.path.join(base, sub, n)
298
+ for n in os.listdir(os.path.join(base, sub))]
299
+ except OSError:
300
+ continue
301
+ for path in paths:
302
+ if os.path.basename(path) in keep:
303
+ continue
304
+ try:
305
+ st = os.lstat(path)
306
+ if not os.path.isfile(path) or st.st_mtime >= cutoff:
307
+ continue
308
+ os.remove(path)
309
+ except OSError:
310
+ continue
311
+ removed += 1
312
+ freed += st.st_size
313
+ return removed, freed
314
+
315
+
316
+
317
+ def load_probe():
318
+ """The bench spike, imported by path so its two coverage rules stay the only
319
+ implementation of them; `None` when this tree has no such file.
320
+
321
+ Its directory name (`codegraph-bench`) is not an identifier, so it cannot be
322
+ imported as a package; a copy of the rules here would be a second definition
323
+ of "covered" that drifts from the spike's the first time either is touched.
324
+ Missing is an answer, not an error: a tree that dropped benchmarks/ asks for
325
+ rules that are simply not there, and a shipped CLI may not raise at the user
326
+ over a file it can describe."""
327
+ if not os.path.exists(PROBE):
328
+ return None
329
+ loader = importlib.machinery.SourceFileLoader("tezgah_codegraph_probe", PROBE)
330
+ spec = importlib.util.spec_from_loader(loader.name, loader)
331
+ module = importlib.util.module_from_spec(spec)
332
+ loader.exec_module(module)
333
+ return module
334
+
335
+
336
+ def coverage_report(repo, dump_path):
337
+ """Every tracked file the codegraph index does not hold, as two classes.
338
+
339
+ A report, not a gate: it always exits 0, and the counts it read come first,
340
+ so an empty result cannot read as "everything is covered". The same holds
341
+ when the rules themselves are not in this tree: it names the file and what to
342
+ do, so a user of a tree that lost them reads a reason, not a traceback."""
343
+ probe = load_probe()
344
+ if probe is None:
345
+ print("codegraph coverage: %s" % repo)
346
+ print(" coverage probe unavailable: %s" % PROBE)
347
+ print(" it is the only implementation of these rules and this tree has "
348
+ "lost it (a copy or repack that dropped benchmarks/): run "
349
+ "--coverage from a tree that has it.")
350
+ return 0
351
+ binary = codegraph_bin()
352
+ report, why = probe.coverage(repo, dump_path,
353
+ [binary] if binary else None)
354
+ print("codegraph coverage: %s" % repo)
355
+ if report is None:
356
+ print(" could not read an index dump: %s" % why)
357
+ print(" index the repo first (`codegraph init`), run this in a git work "
358
+ "tree, or pass --dump FILE with the output of `codegraph files -j`.")
359
+ return 0
360
+ print(" tracked files read: %d | files the index holds: %d"
361
+ % (report["tracked"], report["indexed"]))
362
+ print(" uncovered, supported extension (%d):" % len(report["by_ext"]))
363
+ for rel, lang in report["by_ext"]:
364
+ print(" %s (%s)" % (rel, lang))
365
+ print(" uncovered, shebang-only script with no `.py` twin (%d):"
366
+ % len(report["by_shebang"]))
367
+ for rel, lang in report["by_shebang"]:
368
+ print(" %s (%s)" % (rel, lang))
369
+ print(" covered through a `.py` twin (%d)" % len(report["twins"]))
370
+ print(" codegraph reports none of this itself: `status` counts what it "
371
+ "parsed, never what it skipped.")
372
+ return 0
373
+
374
+
375
+ def report(rep):
376
+ print("opencode")
377
+ print(" db %s (%s sessions, %s events)" % (
378
+ human(rep["opencode_db_bytes"]), rep["opencode_sessions"], rep["opencode_events"]))
379
+ print(" compaction prune=%s watcher.ignore=%d" % (
380
+ rep["compaction_prune"], rep["watcher_ignore"]))
381
+ print(" running %s" % ("yes" if rep["opencode_running"] else "no"))
382
+ print("codegraph (one index per repository)")
383
+ rows = rep["codegraph_repos"]
384
+ if not rows:
385
+ print(" no repository under a configured root (%s)"
386
+ % (", ".join(roots()) or "none configured"))
387
+ else:
388
+ root = None
389
+ for row in rows:
390
+ if row["root"] != root:
391
+ root = row["root"]
392
+ print(" %s" % (root or "(named on the command line)"))
393
+ print(" %-40s %9s %s" % (
394
+ os.path.relpath(row["repo"], root) if root else row["repo"],
395
+ human(row["bytes"]), "indexed" if row["indexed"] else "no index"))
396
+ indexed = sum(1 for row in rows if row["indexed"])
397
+ print(" total %s across %d repos (%d indexed, %d without an index)"
398
+ % (human(rep["codegraph_bytes"]), len(rows), indexed,
399
+ len(rows) - indexed))
400
+ print("tezgah")
401
+ print(" cache %s" % human(rep["tezgah_cache_bytes"]))
402
+ print("host state (the hosts' own; this tool never touches it)")
403
+ for label, key in (("codex", "codex_bytes"), ("omp", "omp_bytes"),
404
+ ("claude", "claude_bytes")):
405
+ print(" %-13s %s" % (label, human(rep[key])))
406
+
407
+
408
+ def main():
409
+ ap = argparse.ArgumentParser(description="report and reclaim harness state")
410
+ ap.add_argument("--json", action="store_true", help="machine-readable report")
411
+ ap.add_argument("--coverage", action="store_true",
412
+ help="the tracked files the graph index does not hold (exits 0)")
413
+ ap.add_argument("--repo", action="append", metavar="PATH",
414
+ help="a repository to account for instead of the configured "
415
+ "roots (repeatable; --coverage reports the first)")
416
+ ap.add_argument("--dump", metavar="FILE",
417
+ help="a saved `codegraph files -j` dump to read for --coverage")
418
+ ap.add_argument("--clean", action="store_true",
419
+ help="vacuum the opencode database and delete tezgah hook "
420
+ "state (ledgers, turns/, sessions/, classify.log, "
421
+ "context-drops.log, debug.log) not "
422
+ "modified for --retention-days; the current session "
423
+ "($TEZGAH_SESSION) is kept (opt-in)")
424
+ ap.add_argument("--retention-days", type=int, default=RETENTION_DAYS,
425
+ metavar="DAYS",
426
+ help="the age --clean deletes hook state past (default: "
427
+ "%(default)s days)")
428
+ ap.add_argument("--prune-sessions", type=int, metavar="DAYS",
429
+ help="delete sessions idle longer than DAYS, then vacuum")
430
+ args = ap.parse_args()
431
+ if args.retention_days < 1:
432
+ ap.error("--retention-days wants a positive day count")
433
+
434
+ if args.coverage:
435
+ repo = os.path.realpath(os.path.expanduser(args.repo[0]) if args.repo
436
+ else os.getcwd())
437
+ return coverage_report(repo, args.dump)
438
+
439
+ pairs = targets(args.repo)
440
+ rep = collect(pairs)
441
+ cleaned = None
442
+ if args.clean or args.prune_sessions is not None:
443
+ cleaned = {}
444
+ if args.prune_sessions is not None and os.path.exists(OPENCODE_DB):
445
+ if rep["opencode_running"]:
446
+ cleaned["prune_sessions"] = "skipped: opencode is running"
447
+ elif not OPENCODE_BIN:
448
+ cleaned["prune_sessions"] = "skipped: opencode is not installed"
449
+ else:
450
+ deleted, failed = prune_sessions(args.prune_sessions)
451
+ cleaned["prune_sessions"] = {"deleted": deleted, "failed": failed}
452
+ if os.path.exists(OPENCODE_DB):
453
+ if rep["opencode_running"]:
454
+ cleaned["vacuum"] = "skipped: opencode is running"
455
+ else:
456
+ try:
457
+ before, after = vacuum_db()
458
+ cleaned["vacuum"] = {"before": before, "after": after}
459
+ except sqlite3.Error as exc:
460
+ cleaned["vacuum"] = "failed: %s" % exc
461
+ if args.clean:
462
+ removed, freed = sweep_state(args.retention_days,
463
+ os.environ.get("TEZGAH_SESSION"))
464
+ cleaned["state"] = {"removed": removed, "bytes": freed,
465
+ "days": args.retention_days}
466
+ rep = collect(pairs)
467
+
468
+ if args.json:
469
+ out = dict(rep)
470
+ if cleaned is not None:
471
+ out["cleaned"] = cleaned
472
+ print(json.dumps(out, indent=2))
473
+ return 0
474
+ report(rep)
475
+ if cleaned is not None:
476
+ print("cleaned")
477
+ ps = cleaned.get("prune_sessions")
478
+ if isinstance(ps, dict):
479
+ print(" sessions %d deleted, %d failed" % (ps["deleted"], ps["failed"]))
480
+ elif ps:
481
+ print(" sessions %s" % ps)
482
+ v = cleaned.get("vacuum")
483
+ if isinstance(v, dict):
484
+ print(" vacuum %s -> %s" % (human(v["before"]), human(v["after"])))
485
+ elif v:
486
+ print(" vacuum %s" % v)
487
+ st = cleaned.get("state")
488
+ if st:
489
+ print(" hook state %d file(s) older than %d days removed, %s"
490
+ % (st["removed"], st["days"], human(st["bytes"])))
491
+ elif rep["opencode_db_bytes"] > 500 * 1024 * 1024:
492
+ print("\nrun with --clean to vacuum; --prune-sessions DAYS to shrink the db")
493
+ return 0
494
+
495
+
496
+ if __name__ == "__main__":
497
+ sys.exit(main())
package/bin/tezgah-dsh ADDED
@@ -0,0 +1,37 @@
1
+ #!/bin/sh
2
+ # tezgah-dsh - launch the DeepSeek Harness (dsh) CLI installed under $DSH_HOME.
3
+ #
4
+ # dsh ships as node modules under <harness home>/profiles/node_modules, so there
5
+ # is no PATH command unless one is created. tezgah-setup symlinks ~/.local/bin/dsh
6
+ # to this wrapper; the wrapper resolves the CLI so the symlink survives a version
7
+ # change. Arguments are passed through untouched (e.g. --profile web|headless).
8
+ #
9
+ # dsh boots its hooks under a workspace-write sandbox that confines hook
10
+ # subprocesses to the workspace plus the platform temp dir. The graph index
11
+ # worker writes `.codegraph/` inside the repository and the CLI it calls wants a
12
+ # writable cache of its own, which that sandbox denies for a repo dsh has never
13
+ # seen; without the warm-up below such a repo would never get indexed from the
14
+ # hook. The launcher runs in the user's shell, unconfined, so it starts the same
15
+ # worker the hooks use - HEAD-stamped, so it is a no-op when the graph is current.
16
+ set -eu
17
+ DSH_HOME="${DSH_HOME:-$HOME/.dsh}"
18
+ BIN="$DSH_HOME/profiles/node_modules/@deepseek-ai/dsh/lib/bin.js"
19
+ INDEX="${TEZGAH_INDEX_BIN:-$HOME/.config/tezgah/bin/tezgah-index}"
20
+ warm_index() {
21
+ if [ -x "$INDEX" ]; then
22
+ "$INDEX" "$PWD" >/dev/null 2>&1 || true
23
+ fi
24
+ }
25
+ if [ -f "$BIN" ]; then
26
+ warm_index
27
+ exec node "$BIN" "$@"
28
+ fi
29
+ # A fresh machine has no profile tree yet; npx runs dsh and materializes
30
+ # $DSH_HOME, so the host works before the first explicit `dsh web` boot.
31
+ if command -v npx >/dev/null 2>&1; then
32
+ warm_index
33
+ exec npx -y @deepseek-ai/dsh "$@"
34
+ fi
35
+ echo "tezgah-dsh: dsh CLI not found at $BIN" >&2
36
+ echo "tezgah-dsh: install the DeepSeek Harness (npx -y @deepseek-ai/dsh) or set DSH_HOME" >&2
37
+ exit 127
@@ -0,0 +1,70 @@
1
+ @echo off
2
+ rem tezgah-dsh.cmd - launch the DeepSeek Harness (dsh) CLI on Windows.
3
+ rem
4
+ rem The Windows twin of bin/tezgah-dsh, the /bin/sh wrapper: a machine with no
5
+ rem sh cannot start that file, so tezgah-setup copies this one to
6
+ rem ~/.local/bin/dsh.cmd, the name cmd.exe resolves through PATHEXT. Everything
7
+ rem below is resolved absolutely - the CLI under the profile home and the index
8
+ rem farm under the config dir - so the copy works from anywhere. Arguments are
9
+ rem passed through untouched.
10
+ rem
11
+ rem dsh boots its hooks under a workspace-write sandbox that confines hook
12
+ rem subprocesses to the workspace plus the platform temp dir. The graph index
13
+ rem worker writes .codegraph/ inside the repository and the CLI it calls wants a
14
+ rem writable cache of its own, which that sandbox denies for a repo dsh has
15
+ rem never seen; without the warm-up below such a repo would never get indexed
16
+ rem from the hook. The launcher runs in the user's shell, unconfined, so it
17
+ rem starts the same worker the hooks use - HEAD-stamped, so it is a no-op when
18
+ rem the graph is current.
19
+ setlocal
20
+
21
+ rem The profile home defaults to the place the sh launcher's ${DSH_HOME:-...}
22
+ rem resolves to, so both twins find one tree.
23
+ if not defined DSH_HOME set "DSH_HOME=%USERPROFILE%\.dsh"
24
+ set "BIN=%DSH_HOME%\profiles\node_modules\@deepseek-ai\dsh\lib\bin.js"
25
+
26
+ if exist "%BIN%" goto dsh_cli
27
+ where npx >nul 2>nul
28
+ if errorlevel 1 goto no_cli
29
+
30
+ rem A fresh machine has no profile tree yet; npx runs dsh and materializes the
31
+ rem profile home, so the host works before the first explicit dsh web boot.
32
+ call :warm
33
+ rem cmd.exe has no exec, so the launcher waits for the CLI and returns its own
34
+ rem exit code, which is what a caller scripts against.
35
+ npx -y @deepseek-ai/dsh %*
36
+ exit /b %errorlevel%
37
+
38
+ :dsh_cli
39
+ call :warm
40
+ node "%BIN%" %*
41
+ exit /b %errorlevel%
42
+
43
+ :no_cli
44
+ echo tezgah-dsh: dsh CLI not found at %BIN% 1>&2
45
+ echo tezgah-dsh: install the DeepSeek Harness (npx -y @deepseek-ai/dsh) or set DSH_HOME 1>&2
46
+ exit /b 127
47
+
48
+ :warm
49
+ rem Best effort, as in the sh twin: a machine that cannot start the worker
50
+ rem still starts dsh. The farm entry is a Python script
51
+ rem (a relay where a symlink was refused), so it is started the way
52
+ rem hooks/tezgah_paths.python_cmd resolves an interpreter: the pin first, then
53
+ rem the names Windows ships - python3 is never one of them - and py last.
54
+ set "CONFIG=%XDG_CONFIG_HOME%"
55
+ if not defined CONFIG set "CONFIG=%USERPROFILE%\.config"
56
+ set "INDEX=%TEZGAH_INDEX_BIN%"
57
+ if not defined INDEX set "INDEX=%CONFIG%\tezgah\bin\tezgah-index"
58
+ if not exist "%INDEX%" exit /b 0
59
+ set "PY=%TEZGAH_PYTHON%"
60
+ if defined PY goto warm_run
61
+ where python3 >nul 2>nul && set "PY=python3"
62
+ if defined PY goto warm_run
63
+ where python >nul 2>nul && set "PY=python"
64
+ if defined PY goto warm_run
65
+ where py >nul 2>nul && set "PY=py"
66
+ if not defined PY exit /b 0
67
+
68
+ :warm_run
69
+ "%PY%" "%INDEX%" "%CD%" >nul 2>nul
70
+ exit /b 0
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env python3
2
+ """tezgah-gate - the gate's decision, for a host that is not Python.
3
+
4
+ tezgah-gate check one call on stdin, its deny reason on stdout (if any);
5
+ a dry run: nothing is written anywhere
6
+ tezgah-gate decide the same answer, recorded the way the live gate records
7
+ it (deny/drift/nudge rows, the pre-write snapshot)
8
+ tezgah-gate replay the real ledgers replayed through this gate in a sandbox
9
+ HOME, with per-stratum fidelity; `--report` reads labels,
10
+ `--sheet` draws the blind label sample (hooks/tezgah_replay.py)
11
+
12
+ Reads the host's own call as {"tool":..., "input":{...}, "cwd":...,
13
+ "session_id":...} and prints what hooks/tezgah_gate.decision() returns for it,
14
+ or nothing when the call passes. A host whose plugin is written in another
15
+ language (opencode's tezgah.js) asks `decide` instead of mirroring a rule: that
16
+ mirror is documented as incomplete and divergent, so a new rule reaches such a
17
+ host through the core rather than through a second implementation of it that
18
+ drifts. `check` is what a person or the MCP `tezgah_gate_check` tool asks: a
19
+ dry run against a live session id used to write refusal rows into that
20
+ session's counters (audit CHAT-07 / L-14b).
21
+
22
+ Exit codes: 0 whether the call passes or is refused - the reason is the output,
23
+ not the status - 2 for misuse, and 3 from `check` when the gate's core cannot
24
+ be imported: an empty answer there would read as a pass (`decide`, opencode's
25
+ hook path, fails open with 0 like every hook).
26
+ """
27
+ import json
28
+ import os
29
+ import sys
30
+
31
+ HERE = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
32
+ sys.path.insert(0, os.path.join(HERE, "hooks"))
33
+ from tezgah_guard import import_failed # noqa: E402
34
+ try:
35
+ from tezgah_gate import decision # noqa: E402
36
+ except Exception as exc:
37
+ # `check` is asked for a verdict (by a person, or the MCP `gate_check`
38
+ # tool): an empty answer with exit 0 reads as a pass from a gate that is
39
+ # not there. `decide` is opencode's hook path and fails open like the rest.
40
+ import_failed(exc, 3 if sys.argv[1:2] == ["check"] else 0)
41
+
42
+
43
+ def misuse(message):
44
+ print("tezgah-gate: %s" % message, file=sys.stderr)
45
+ return 2
46
+
47
+
48
+ def main(argv):
49
+ if len(argv) < 2:
50
+ print(__doc__, file=sys.stderr)
51
+ return 2
52
+ if argv[1] == "replay":
53
+ import tezgah_replay
54
+ return tezgah_replay.main(argv[2:])
55
+ if argv[1] not in ("check", "decide"):
56
+ return misuse("unknown command %r (check, decide, replay)" % argv[1])
57
+ if len(argv) > 2:
58
+ return misuse("check reads its call on stdin, not as arguments")
59
+ try:
60
+ payload = json.load(sys.stdin)
61
+ except ValueError:
62
+ return misuse("stdin is not one JSON object")
63
+ if not isinstance(payload, dict):
64
+ return misuse("stdin must be one JSON object")
65
+ inp = payload.get("input")
66
+ reason = decision(payload.get("tool"), inp if isinstance(inp, dict) else {},
67
+ payload.get("cwd") or os.getcwd(),
68
+ payload.get("session_id"), record=argv[1] == "decide")
69
+ if reason:
70
+ sys.stdout.write(reason if reason.endswith("\n") else reason + "\n")
71
+ return 0
72
+
73
+
74
+ if __name__ == "__main__":
75
+ sys.exit(main(sys.argv))