@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,485 @@
1
+ #!/usr/bin/env python3
2
+ """tezgah-triage - the snapshot lines an analysis needs, judged in one call.
3
+
4
+ A `browser_snapshot` / `mobile_list_elements_on_screen` result is the whole screen
5
+ as text - one measured 40-row work-order table came back as 13,045 characters in
6
+ 356 lines - and the analyze-app loop pays for all of it to find the dozen lines
7
+ that carry the controls. This flattens the snapshot, asks TypeSafe about the
8
+ units of the tree (a row, a table cell, a control on its own) in ONE batched
9
+ request, and prints the line ids under the selected units with their original
10
+ element refs.
11
+
12
+ tezgah-triage --select FILE --task "TEXT" the lines a named task needs
13
+ tezgah-triage --states FILE [--component T] per-state coverage of a component
14
+
15
+ FILE is the JSON a snapshot call returned (the MCP result object), the flattened
16
+ text of one, or the text itself. Output is the selected line ids with their refs,
17
+ how many units and lines were selected, the characters that may now be skipped,
18
+ and the arithmetic of the judgement - input tokens sent, latency, and the cost at
19
+ $0.042 per 1M input tokens (output tokens are billed at $0).
20
+
21
+ The judgement is an aid, not the finding: the agent reads the selected refs and
22
+ still owns the claim, and a line it did not select is a line the judgement did not
23
+ rank - the shape below was measured on two reproduced screens this round, and the
24
+ measurement is printed with every run:
25
+
26
+ units, one question each 356-line / 40-row table 100% of the 83 control
27
+ lines at a 94% read (67 units)
28
+ 31-line / 20-button screen 100% at a 74% read
29
+ one question per line 356-line / 40-row table 73.5% at a 26% read
30
+
31
+ Per-line questions split identical siblings - a `Sil` next to a selected `Düzenle`
32
+ came back as low as 0.5 while its twin scored 0.92 - so the shipped unit keeps
33
+ every line under a selected subtree. Read-share is not free: on a task that names
34
+ a control every row repeats, the selection is most of the screen, because most of
35
+ the screen is what the task needs. 79% of that screen's lines sit inside the 40
36
+ rows the task names, so no selection keeping 95% of the controls reads less than
37
+ 76% of it - the floor is arithmetic, not a tuning failure.
38
+
39
+ It needs a credential - with no key, or with the seam's `judge-off` master switch
40
+ or this tool's own `triage-off`, this prints why and exits 1, and the loop reads
41
+ the tree directly. Exit codes: 0 judged, 1 no judgement, 2 misuse.
42
+ """
43
+ import json
44
+ import os
45
+ import re
46
+ import sys
47
+
48
+ HERE = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
49
+ sys.path.insert(0, os.path.join(HERE, "hooks"))
50
+ import tezgah_integrity as ti # noqa: E402
51
+ import tezgah_judge # noqa: E402
52
+ import tezgah_paths as tp # noqa: E402
53
+
54
+ # jev-1.12's own cookbook price for input; output is billed at $0, so the
55
+ # arithmetic is one multiplication and a caller can check it against this number.
56
+ PRICE_PER_MILLION = 0.042
57
+ # A noul is a probability, so the printed rows are a table rather than a verdict.
58
+ # The threshold comes from the two measured curves, not from the midpoint: at 0.3
59
+ # both screens keep 100% of their control lines (94% read on the 40-row table, 74%
60
+ # on the 20-button screen), and the read-share is flat from 0.2 to 0.4, so nothing
61
+ # is bought by reading more. At 0.5 the table loses a control and the detail screen
62
+ # reads the same; above 0.6 both start dropping what they were asked for.
63
+ SELECTED_AT = 0.3
64
+ # The state set the analyze-app contract asks a component for: whichever of these
65
+ # the tree does not show is the finding, so all of them are asked at once.
66
+ STATES = ("default", "hover", "focus", "active", "disabled", "loading", "error",
67
+ "empty", "skeleton", "offline", "partial", "long-text",
68
+ "permission-denied")
69
+ REF = re.compile(r"\[ref=([A-Za-z0-9_-]+)\]")
70
+ # The tree's own repeating pieces: a row / list item / article / table cell with
71
+ # everything under it, or a control that is a leaf on its own. One question per
72
+ # unit instead of one per line is what keeps identical siblings together - the unit
73
+ # is judged once, so a `Sil` beside a selected `Düzenle` cannot be lost to a second,
74
+ # lower guess - and it is what makes the judgement cheaper: 67 questions for a
75
+ # 40-row table instead of 356, at 7,008 input tokens instead of 13,559.
76
+ #
77
+ # units, one question each 100% of the 83 control lines at a 94% read
78
+ # one question per line 73.5% at a 26% read (22 controls lost)
79
+ #
80
+ # The read-share is bounded by the task, not by the unit: 79% of that screen's
81
+ # lines sit inside the 40 rows the task names, so any selection keeping 95% of the
82
+ # controls reads at least 76% of it.
83
+ UNIT = re.compile(r"^\s*-\s(row|listitem|article|cell|button|searchbox|combobox|"
84
+ r"textbox|checkbox|link|option)\b")
85
+ # Printed with every selection: the recall the shape was measured at on the two
86
+ # screens it was measured on this round, because a caller that treats a selection
87
+ # as coverage reads a missed line as a line that does not matter.
88
+ MEASURED = ("100% of the control lines at a 94% read on a reproduced 356-line "
89
+ "40-row table (67 units), 100% at a 74% read on a 31-line 20-button "
90
+ "screen")
91
+ CUT = 96
92
+ USAGE = "tezgah-triage --select FILE --task TEXT | --states FILE [--component TEXT]"
93
+ NO_CREDENTIAL = ("no credential (TYPESAFE_API_KEY or ~/.config/typesafe/key, or "
94
+ "the OpenRouter fallback's OPENROUTER_API_KEY or "
95
+ "~/.config/openrouter/key), or the judge-off switch is on")
96
+ TRIAGE_OFF = "the triage-off switch is on"
97
+ FAILED = ("the call failed - a timeout, a refusal, or a reply that is not the "
98
+ "documented shape")
99
+
100
+
101
+ def misuse(message):
102
+ """A wrong call, not a wrong snapshot: exit 2, so a caller can tell them apart."""
103
+ sys.stderr.write("tezgah-triage: %s\n" % message)
104
+ return 2
105
+
106
+
107
+ def no_judgement(reason):
108
+ """Exit 1 with the reason, which is what the loop's fallback reads."""
109
+ sys.stderr.write("tezgah-triage: no judgement - %s; read the snapshot "
110
+ "yourself\n" % reason)
111
+ return 1
112
+
113
+
114
+ def off_reason():
115
+ """Why no judgement can be asked for, or None when one can.
116
+
117
+ This tool's own switch answers first, then the seam's - `judge-off`, or no
118
+ credential - because a switch that answers for one caller must not answer for
119
+ the others: `triage-off` leaves `tezgah-docs` and the skill picker judging."""
120
+ if tp.off("triage-off"):
121
+ return TRIAGE_OFF
122
+ if not tezgah_judge.available():
123
+ return NO_CREDENTIAL
124
+ return None
125
+
126
+
127
+ def record(result):
128
+ """One `judge` ledger row for the call just paid for, in the shape the status
129
+ counters fold on: which caller, which model, and what it cost.
130
+
131
+ A cost row, never a step and never a check - nothing here may license a done
132
+ claim. Best effort in every direction: no session id, or an unwritable ledger,
133
+ changes nothing the run prints."""
134
+ usage = result["usage"]
135
+ ti.note(os.environ.get("TEZGAH_SESSION"), "judge",
136
+ "tezgah-triage %s in=%d out=%d ms=%d"
137
+ % (result.get("model", tezgah_judge.MODEL),
138
+ usage["input_tokens"], usage["output_tokens"],
139
+ result["latency_ms"]))
140
+
141
+
142
+ def snapshot_text(path):
143
+ """The snapshot as text, from the three shapes a caller actually has.
144
+
145
+ The raw `tools/call` result (`{"content": [{"type": "text", "text": ...}]}`),
146
+ the flattened text saved as a JSON string, or the text written by hand. A
147
+ shape that fits none of them is handed back as text - flattening it is then
148
+ the caller's problem, not a crash."""
149
+ with open(path, encoding="utf-8") as fh:
150
+ raw = fh.read()
151
+ try:
152
+ data = json.loads(raw)
153
+ except ValueError:
154
+ return raw
155
+ if isinstance(data, str):
156
+ return data
157
+ if isinstance(data, dict):
158
+ content = data["snapshot"] if isinstance(data.get("snapshot"), str) \
159
+ else data.get("content")
160
+ else:
161
+ content = data
162
+ if isinstance(content, list):
163
+ content = "\n".join(part.get("text", "") for part in content
164
+ if isinstance(part, dict))
165
+ return content if isinstance(content, str) else raw
166
+
167
+
168
+ def lines(text):
169
+ """The snapshot as lines, in order. Blank lines carry nothing a judgement can
170
+ select and each one costs a question, so they are dropped rather than
171
+ numbered."""
172
+ return [line.rstrip() for line in text.splitlines() if line.strip()]
173
+
174
+
175
+ def numbered_text(window, start=1):
176
+ return "\n".join("%d: %s" % (start + i, line) for i, line in enumerate(window))
177
+
178
+
179
+ def chance(result, key):
180
+ """The noul a question came back with, 0.0 when it came back as anything else:
181
+ an unreadable answer is a line that was not selected, not a crash."""
182
+ value = tezgah_judge.noul(result, key)
183
+ return value if value is not None else 0.0
184
+
185
+
186
+ def ref(line):
187
+ match = REF.search(line)
188
+ return match.group(1) if match else "-"
189
+
190
+
191
+ def trim(line):
192
+ text = line.strip()
193
+ return text if len(text) <= CUT else text[:CUT] + "..."
194
+
195
+
196
+ def judge_line(result):
197
+ usage = result["usage"]
198
+ print("judge: %d input tokens, %d output, %d ms; $%.6f at $%.3f/1M input"
199
+ % (usage["input_tokens"], usage["output_tokens"], result["latency_ms"],
200
+ usage["input_tokens"] * PRICE_PER_MILLION / 1000000,
201
+ PRICE_PER_MILLION))
202
+
203
+
204
+ def units(numbered):
205
+ """(first, last, role) 0-based spans, one per line, covering every line.
206
+
207
+ A unit is a line the tree marks as one repeating piece - `row`, `listitem`,
208
+ `article`, `cell` - with its whole subtree, or a control leaf (`button`,
209
+ `searchbox`, `combobox`, `textbox`, `checkbox`, `link`, `option`). Only the
210
+ outermost ones are units: an inner cell of a selected row would be a second
211
+ question about the same lines, and the outer answer already carries it. A line
212
+ the tree marks with something else (`banner`, `table`, `rowgroup`) or not at
213
+ all stands as a unit of its own, so every line is in exactly one unit and no
214
+ line is invisible to the judgement - a selection that could not name the
215
+ footer could not select it either."""
216
+ spans, i = [], 0
217
+ while i < len(numbered):
218
+ match = UNIT.match(numbered[i])
219
+ end = i + 1
220
+ if match:
221
+ indent = len(numbered[i]) - len(numbered[i].lstrip())
222
+ while end < len(numbered) and \
223
+ len(numbered[end]) - len(numbered[end].lstrip()) > indent:
224
+ end += 1
225
+ spans.append((i, end, match.group(1) if match else "line"))
226
+ i = end
227
+ return spans
228
+
229
+
230
+ def select_request(numbered, task):
231
+ """(state, questions) for one `--select` pass: the units with their lines, one
232
+ noul each. The state carries the task, so the per-unit question can stay short
233
+ instead of repeating the task 67 times."""
234
+ spans = units(numbered)
235
+ state = ("TASK: %s\n\nThe units below are the repeating pieces of the "
236
+ "accessibility tree - a row, a list item, a table cell, or a control "
237
+ "on its own - numbered, each with the lines under it. A unit matters "
238
+ "when it carries a control, a label or a datum this task must read or "
239
+ "act on; a unit that only groups or decorates does not.\n\nUNITS:\n%s"
240
+ % (task, "\n".join("%d: %s" % (k, "\n ".join(numbered[start:end]))
241
+ for k, (start, end, _role)
242
+ in enumerate(spans, 1))))
243
+ questions = {str(k): {"type": "noul",
244
+ "instructions": "Does unit %d matter for the task above?" % k}
245
+ for k in range(1, len(spans) + 1)}
246
+ return spans, state, questions
247
+
248
+
249
+ def select(numbered, task):
250
+ """Which lines a named task needs: one noul per unit, every line under a
251
+ selected unit read."""
252
+ spans, state, questions = select_request(numbered, task)
253
+ if len(spans) <= 1:
254
+ return no_judgement("the snapshot carries no unit the tree marks (row, "
255
+ "cell, or a control)")
256
+ result = tezgah_judge.ask(state, questions)
257
+ if not result:
258
+ return no_judgement(FAILED)
259
+ record(result)
260
+ scored = [(k, start, end, chance(result, str(k)))
261
+ for k, (start, end, _role) in enumerate(spans, 1)]
262
+ chosen = [row for row in scored if row[3] >= SELECTED_AT]
263
+ picked = [(n, numbered[n - 1], row[3])
264
+ for row in chosen for n in range(row[1] + 1, row[2] + 1)]
265
+ ids = {n for n, _line, _value in picked}
266
+ total = sum(len(line) + 1 for line in numbered)
267
+ skipped = [line for n, line in enumerate(numbered, 1) if n not in ids]
268
+ print("snapshot: %d lines, %d chars" % (len(numbered), total))
269
+ print("task: %s" % task)
270
+ print("selected %d of %d units, %d of %d lines:"
271
+ % (len(chosen), len(spans), len(picked), len(numbered)))
272
+ for n, line, value in picked:
273
+ print(" #%-4d ref=%-8s %.2f %s" % (n, ref(line), value, trim(line)))
274
+ print("not selected: %d lines, %d chars the caller may skip"
275
+ % (len(skipped), sum(len(line) + 1 for line in skipped)))
276
+ if len(picked) >= 0.8 * len(numbered):
277
+ print("note: the selection is most of the screen - a task naming a control "
278
+ "every row repeats is read in full, so the units bought coverage, "
279
+ "not skipping")
280
+ print("measured: %s" % MEASURED)
281
+ judge_line(result)
282
+ return 0
283
+
284
+
285
+ def locate(numbered, component):
286
+ """The (first, last) 0-based span of a component: `#12` names a line, anything
287
+ else matches a line's text, and the span runs to the end of the subtree - the
288
+ lines indented under it - so a per-component pass sees the component, not one
289
+ line of it."""
290
+ if component.startswith("#"):
291
+ digits = component[1:]
292
+ if not digits.isdigit() or not 1 <= int(digits) <= len(numbered):
293
+ return None
294
+ start = int(digits) - 1
295
+ else:
296
+ start = next((i for i, line in enumerate(numbered)
297
+ if component.lower() in line.lower()), None)
298
+ if start is None:
299
+ return None
300
+ indent = len(numbered[start]) - len(numbered[start].lstrip())
301
+ end = start + 1
302
+ while end < len(numbered) and \
303
+ len(numbered[end]) - len(numbered[end].lstrip()) > indent:
304
+ end += 1
305
+ return start, end
306
+
307
+
308
+ def states(numbered, component):
309
+ """A component's states judged in one request: one noul each, and the
310
+ interactive pair read off one Choice.
311
+
312
+ Each question carries what counts as shown, because `Is the component shown in
313
+ its <state> state?` alone was measured answering about the wrong lines: on a
314
+ driven fixture (ten conditions x five components) the disabled question came
315
+ back 0.49-0.51 for a form whose only `[disabled]` sat on a child button, and
316
+ partial came back 0.26-0.30 for a view whose row printed a missing amount.
317
+ focus and active share one bit of evidence - the snapshot's `[active]` marks
318
+ the element that has focus and it has no marker for a press - so two nouls
319
+ over that one bit answered both at once (0.95 focus beside 0.82 active on the
320
+ focused searchbox, 0.87 active on the button held down). One Choice over the
321
+ three readings cannot say both, and its pressed option names what a press
322
+ really prints, `[pressed]`, which `[active]` is not.
323
+ The tables stay inside this function rather than above it: the docs cite this
324
+ file by line number and a constant higher up would move every citation under
325
+ it."""
326
+ span = locate(numbered, component) if component else (0, len(numbered))
327
+ if span is None:
328
+ return misuse("no line matches %r" % component)
329
+ start, end = span
330
+ window = numbered[start:end]
331
+ state = ("COMPONENT: %s\n\nThese are the component's lines from the "
332
+ "accessibility tree, numbered as the snapshot was flattened. For each "
333
+ "state asked about, answer yes when the tree shows the component in "
334
+ "that state; a state this snapshot does not show is not yet a missing "
335
+ "state - drive the element, or route the data state, and re-read.\n\n%s"
336
+ % (trim(window[0]), numbered_text(window, start + 1)))
337
+ shown = {
338
+ "default": "the lines show the component's at-rest content and no other "
339
+ "state below replaces them",
340
+ "hover": "a line under the component carries content that only appears "
341
+ "while the pointer is over it",
342
+ "disabled": "the component's own line carries [disabled]; a disabled child "
343
+ "does not put the component in that state",
344
+ "loading": "a line under the component carries loading or in-progress text",
345
+ "error": "a line under the component carries a failure message - a request "
346
+ "that failed, or an alert about a failure; a permission, offline "
347
+ "or no-data message is a different state",
348
+ "empty": "a line under the component says there is no data to show; a field "
349
+ "left blank is not this state",
350
+ "skeleton": "the component shows placeholder shapes while data loads",
351
+ "offline": "a line under the component carries an offline or connectivity "
352
+ "message",
353
+ "partial": "a value under the component is printed as missing, unavailable "
354
+ "or not loaded while the component is otherwise populated; a "
355
+ "loading placeholder, an error, an offline notice or a permission "
356
+ "message is a different state",
357
+ "long-text": "a value under the component is long enough that the component "
358
+ "must wrap or truncate it",
359
+ "permission-denied": "a line under the component carries a permission or "
360
+ "access message",
361
+ }
362
+ # The interactive pair, asked as one Choice over the three readings of the one
363
+ # bit they share: the option taken IS the answer, so the tree cannot come back
364
+ # as showing focus and a press at once, and the pressed option carries the
365
+ # marker a press really prints.
366
+ interactive = {
367
+ "neither": "no line under the component carries [active]",
368
+ "focus": "a line under the component carries [active], the snapshot's mark "
369
+ "for the element that has focus",
370
+ "pressed": "a line under the component carries [pressed], or copy that only "
371
+ "a press shows; [active] is the element that has focus, so that "
372
+ "marker on its own is not this option",
373
+ }
374
+ pair_option = {"focus": "focus", "active": "pressed"}
375
+ # One question answers the pair, so its id is written once: the ask and the
376
+ # reading of the reply both use it.
377
+ pair_id = "interactive"
378
+ # The states the aria snapshot cannot carry, measured on the same fixture: it
379
+ # has no marker for the pointer being over an element, [active] is the focused
380
+ # element rather than a pressed one, a skeleton and a loading placeholder read
381
+ # the same, "long" is a width the text does not know, and default is the
382
+ # absence of every other state. A verdict on these is the judgement reading the
383
+ # words rather than the tree, in either direction - a "shown" among them is not
384
+ # proof any more than a "not shown" is a finding - so the run names them.
385
+ unmarked = ("default", "hover", "active", "skeleton", "long-text")
386
+ questions = {name: {"type": "noul",
387
+ "criteria": {"true": shown[name], "false": "it is not"},
388
+ "instructions": "Is the component shown in its %s state?" % name}
389
+ for name in STATES if name not in pair_option}
390
+ questions[pair_id] = {"type": "choice", "criteria": interactive,
391
+ "instructions": "Which of these does the component show?"}
392
+ result = tezgah_judge.ask(state, questions)
393
+ if not result:
394
+ return no_judgement(FAILED)
395
+ record(result)
396
+ # The pair's answer is the option, not two probabilities: the one Choice that
397
+ # came back - and each option's share of the distribution beside it, when the
398
+ # reply prints one.
399
+ taken = tezgah_judge.choice(result, pair_id)
400
+
401
+ def reading(name):
402
+ """(value, shown) for one state: the noul its own question came back with,
403
+ or - for the two the Choice answers - whether this state's option is the one
404
+ taken, valued by the probability the reply put on that option (1.0 / 0.0
405
+ when it prints none), so the column stays the confidence it was."""
406
+ if name not in pair_option:
407
+ value = chance(result, name)
408
+ return value, value >= SELECTED_AT
409
+ chosen = taken == pair_option[name]
410
+ value = tezgah_judge.noul(result, pair_id, pair_option[name])
411
+ return (value if value is not None else 1.0 if chosen else 0.0), chosen
412
+
413
+ verdicts = {name: reading(name) for name in STATES}
414
+ missing = [name for name in STATES if not verdicts[name][1]]
415
+ print("snapshot: %d lines" % len(numbered))
416
+ print("component: %s" % trim(window[0]))
417
+ print("lines %d-%d, %d chars, %d states asked in one call:"
418
+ % (start + 1, end, sum(len(line) + 1 for line in window), len(STATES)))
419
+ for name in STATES:
420
+ value, is_shown = verdicts[name]
421
+ print(" %-18s %.2f %s" % (name, value,
422
+ "shown" if is_shown else "not shown"))
423
+ print("not shown: %d of %d%s" % (len(missing), len(STATES),
424
+ (" - " + ", ".join(missing)) if missing else ""))
425
+ print("unmarked: %s - the aria snapshot cannot carry these either way, so a "
426
+ "verdict on them is the judgement reading the words rather than the tree: "
427
+ "drive or route the state and re-read" % ", ".join(unmarked))
428
+ judge_line(result)
429
+ return 0
430
+
431
+
432
+ def main(argv):
433
+ if not argv:
434
+ print(__doc__.strip(), file=sys.stderr)
435
+ return 2
436
+ if "-h" in argv or "--help" in argv:
437
+ print(__doc__.strip())
438
+ return 0
439
+ mode, task, component = None, None, None
440
+ rest = []
441
+ flag = 0
442
+ while flag < len(argv):
443
+ arg = argv[flag]
444
+ if arg in ("--select", "--states"):
445
+ if mode:
446
+ return misuse("one mode at a time: %s" % USAGE)
447
+ mode = arg[2:]
448
+ elif arg in ("--task", "--component"):
449
+ if flag + 1 >= len(argv):
450
+ return misuse("%s needs a value" % arg)
451
+ flag += 1
452
+ if arg == "--task":
453
+ task = argv[flag]
454
+ else:
455
+ component = argv[flag]
456
+ elif arg.startswith("--"):
457
+ return misuse("unknown option %r (%s)" % (arg, USAGE))
458
+ else:
459
+ rest.append(arg)
460
+ flag += 1
461
+ if not mode or len(rest) != 1:
462
+ return misuse(USAGE)
463
+ if mode == "select":
464
+ if not task:
465
+ return misuse('--select needs --task "TEXT"')
466
+ if component:
467
+ return misuse("--component only means something with --states")
468
+ elif task:
469
+ return misuse("--task only means something with --select")
470
+ try:
471
+ text = snapshot_text(rest[0])
472
+ except (OSError, UnicodeDecodeError) as exc:
473
+ return misuse("cannot read %s: %s" % (rest[0], exc))
474
+ numbered = lines(text)
475
+ if not numbered:
476
+ return misuse("%s holds no lines" % rest[0])
477
+ reason = off_reason()
478
+ if reason:
479
+ return no_judgement(reason)
480
+ return select(numbered, task) if mode == "select" \
481
+ else states(numbered, component)
482
+
483
+
484
+ if __name__ == "__main__":
485
+ sys.exit(main(sys.argv[1:]))
package/bin/tezgah.js ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ // bin/tezgah.js - npm's bin entry: finds a Python interpreter and execs
3
+ // bin/tezgah-setup with every argument passed through. npm resolves this
4
+ // symlink to the global prefix, so process.argv[1] is the shim, not the target.
5
+ const { spawn } = require("child_process");
6
+ const { existsSync } = require("fs");
7
+ const os = require("os");
8
+ const path = require("path");
9
+
10
+ const here = __dirname;
11
+ const setup = path.join(here, "tezgah-setup");
12
+ if (!existsSync(setup)) {
13
+ process.stderr.write("tezgah: " + setup + " not found\n");
14
+ process.exit(1);
15
+ }
16
+
17
+ const candidates = process.env.TEZGAH_PYTHON
18
+ ? [process.env.TEZGAH_PYTHON]
19
+ : ["python3", "python3.12", "python3.11", "python3.10", "python"];
20
+
21
+ const py = candidates.find(c => {
22
+ try { require("child_process").execSync(c + " -c ''", { stdio: "ignore" }); return true; }
23
+ catch (_) { return false; }
24
+ });
25
+
26
+ if (!py) {
27
+ process.stderr.write("tezgah: no python interpreter found (looked for: " + candidates.join(", ") + ")\n");
28
+ process.exit(1);
29
+ }
30
+
31
+ const child = spawn(py, [setup, ...process.argv.slice(2)], { stdio: "inherit" });
32
+ // A child killed by a signal reports code null, and process.exit(null) is exit
33
+ // 0: an installer killed mid-run read as a success (audit L-10, ENV-06). The
34
+ // shell convention 128 + signal number carries the failure out instead.
35
+ child.on("exit", (code, signal) =>
36
+ process.exit(signal ? 128 + (os.constants.signals[signal] || 0) : code));
@@ -0,0 +1,21 @@
1
+ Run `tezgah-adhd $ARGUMENTS` and report the one line it prints.
2
+
3
+ The installed CLI owns the state: it writes or removes
4
+ `~/.config/tezgah/adhd-off`, the kill switch that drops the act-on-it rule from
5
+ the text every host injects. Never create or delete that file by hand, and never
6
+ edit any other rule's switch from here.
7
+
8
+ ```sh
9
+ adhd=$(command -v tezgah-adhd || echo "$HOME/.config/tezgah/bin/tezgah-adhd")
10
+ "$adhd" $ARGUMENTS
11
+ ```
12
+
13
+ - No argument: run it bare, which prints `on` or `off`.
14
+ - `off`: disarms the rule everywhere on this machine.
15
+ - `on`: arms it again (`off` is the default).
16
+ - Anything else: the CLI exits 2 with the usage on stderr - show that to the
17
+ user and stop.
18
+
19
+ Then say the new state in one line, and nothing else. A repo opts out on its own
20
+ with a `.no-adhd` mark, which this command does not touch - if the user wants
21
+ that, they say so and you create the file in the repo.
@@ -0,0 +1,21 @@
1
+ Run `tezgah-pony $ARGUMENTS` and report the one line it prints.
2
+
3
+ The installed CLI is the source of truth for the level, and it owns the state
4
+ file (`~/.config/tezgah/ponytail.level`) - never edit that file by hand, and do
5
+ not argue for a level: the user's argument is the decision. Resolve the command
6
+ first, because this machine may not have tezgah's bin dir on PATH:
7
+
8
+ ```sh
9
+ pony=$(command -v tezgah-pony || echo "$HOME/.config/tezgah/bin/tezgah-pony")
10
+ "$pony" $ARGUMENTS
11
+ ```
12
+
13
+ - No argument: run it bare, which prints the level in force.
14
+ - `lite` / `full` / `ultra`: sets it. `full` prints the default and removes the
15
+ file.
16
+ - Anything else: the CLI exits 2 with the usage on stderr - show that to the
17
+ user and stop.
18
+
19
+ Then say the new level and what changed in one line, and nothing else. The level
20
+ rides the per-turn reminder from the next turn on, so there is nothing to
21
+ re-inject and no file to edit.