@r1z4x/tezgah 1.9.2 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +83 -1
- package/MANIFEST +382 -144
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.md +1 -1
- package/README.tr.md +1 -1
- package/bin/codegen +5 -2
- package/bin/tezgah-design +288 -1
- package/bin/tezgah-docs +1 -1
- package/bin/tezgah-doctor +39 -2
- package/bin/tezgah-import-ai-research +26 -12
- package/bin/tezgah-ocr-review +296 -0
- package/bin/tezgah-research +216 -40
- package/bin/tezgah-review-quote +185 -0
- package/bin/tezgah-setup +136 -33
- package/bin/tezgah-skill +1 -1
- package/bin/tezgah-status +201 -3
- package/bin/tezgah-task +203 -3
- package/commands/adhd.md +2 -2
- package/commands/ponytail.md +4 -4
- package/docs/architecture.md +2 -2
- package/docs/citations-baseline.json +2 -2
- package/docs/clarity-baseline.json +2 -2
- package/docs/contract.md +87 -42
- package/docs/environment.md +2 -0
- package/docs/evidence.md +28 -9
- package/docs/feature-audit.md +2 -2
- package/docs/gate.md +54 -31
- package/docs/glossary.md +5 -2
- package/docs/hosts.md +17 -3
- package/docs/index.json +34 -8
- package/docs/judge.md +4 -2
- package/docs/layers.md +3 -3
- package/docs/models.md +31 -9
- package/docs/operations.md +126 -1
- package/docs/research.md +786 -5
- package/docs/skills.md +137 -13
- package/docs/status-line.md +115 -1
- package/hooks/hooks.json +1 -1
- package/hooks/lang/en.json +10 -0
- package/hooks/lang/tr.json +11 -1
- package/hooks/tezgah_agents.py +38 -22
- package/hooks/tezgah_apps.py +18 -0
- package/hooks/tezgah_components.py +4 -0
- package/hooks/tezgah_context.py +189 -50
- package/hooks/tezgah_extension.py +337 -0
- package/hooks/tezgah_gate.py +188 -56
- package/hooks/tezgah_integrity.py +652 -105
- package/hooks/tezgah_judge.py +6 -4
- package/hooks/tezgah_models.py +59 -19
- package/hooks/tezgah_orca.py +1 -1
- package/hooks/tezgah_paths.py +102 -6
- package/hooks/tezgah_policy.py +94 -45
- package/hooks/tezgah_rank.py +9 -6
- package/hooks/tezgah_replay.py +4 -4
- package/hooks/tezgah_research.py +1260 -65
- package/hooks/tezgah_research_capture.py +1544 -0
- package/hooks/tezgah_research_evidence.py +842 -0
- package/hooks/tezgah_research_stats.py +258 -0
- package/hooks/tezgah_skill_pick.py +408 -106
- package/hooks/tezgah_stopspec.py +8 -1
- package/hooks/tezgah_task.py +12 -4
- package/hooks/tezgah_taste_ledger.py +1 -1
- package/hosts/cursor/hook.py +29 -2
- package/hosts/opencode/plugins/tezgah.js +307 -46
- package/hosts/opencode/tui/cli/tui.tsx +100 -0
- package/hosts/opencode/tui/tezgah-tui.tsx +2 -1
- package/output-styles/tezgah.md +10 -10
- package/package.json +1 -1
- package/skills/ai-research/SKILL.md +21 -14
- package/skills/ai-research/SOURCE +7 -5
- package/skills/ai-research/index/1-frame.md +6 -6
- package/skills/ai-research/index/2-data.md +9 -9
- package/skills/ai-research/index/3-train.md +36 -36
- package/skills/ai-research/index/4-measure.md +13 -13
- package/skills/ai-research/index/5-run.md +11 -11
- package/skills/ai-research/index/6-write.md +23 -23
- package/skills/ai-research/library.json +104 -104
- package/skills/analyze-app/SKILL.md +17 -12
- package/skills/design-contract/SKILL.md +42 -7
- package/skills/design-contract/data-views.md +2 -2
- package/skills/design-library/EVALS.md +1 -1
- package/skills/design-library/INDEX.md +39 -39
- package/skills/design-library/SKILL.md +19 -13
- package/skills/design-library/SOURCE +45 -43
- package/skills/feature-audit/SKILL.md +20 -14
- package/skills/hallmark/LICENSE +21 -0
- package/skills/hallmark/SKILL.md +154 -0
- package/skills/hallmark/SOURCE +207 -0
- package/skills/hallmark/agents/openai.yaml +13 -0
- package/skills/hallmark/references/anatomy.md +71 -0
- package/skills/hallmark/references/brand-truth.md +40 -0
- package/skills/hallmark/references/comp.md +104 -0
- package/skills/hallmark/references/craft.md +116 -0
- package/skills/hallmark/references/dark-mode.md +49 -0
- package/skills/hallmark/references/data-viz.md +48 -0
- package/skills/hallmark/references/design-md.md +53 -0
- package/skills/hallmark/references/direction.md +52 -0
- package/skills/hallmark/references/export-formats.md +80 -0
- package/skills/hallmark/references/flow.md +131 -0
- package/skills/hallmark/references/fonts.md +58 -0
- package/skills/hallmark/references/gates.md +243 -0
- package/skills/hallmark/references/genres/atmospheric.md +24 -0
- package/skills/hallmark/references/genres/editorial.md +24 -0
- package/skills/hallmark/references/genres/modern-minimal.md +24 -0
- package/skills/hallmark/references/genres/playful.md +24 -0
- package/skills/hallmark/references/imagery.md +99 -0
- package/skills/hallmark/references/interaction-and-states.md +89 -0
- package/skills/hallmark/references/layout.md +104 -0
- package/skills/hallmark/references/macrostructures/01-bento-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/02-long-document.md +35 -0
- package/skills/hallmark/references/macrostructures/03-marquee-hero.md +21 -0
- package/skills/hallmark/references/macrostructures/04-stat-led.md +21 -0
- package/skills/hallmark/references/macrostructures/05-workbench.md +21 -0
- package/skills/hallmark/references/macrostructures/06-conversational-faq.md +28 -0
- package/skills/hallmark/references/macrostructures/07-manifesto.md +28 -0
- package/skills/hallmark/references/macrostructures/08-photographic.md +21 -0
- package/skills/hallmark/references/macrostructures/09-quote-led.md +21 -0
- package/skills/hallmark/references/macrostructures/10-specimen.md +21 -0
- package/skills/hallmark/references/macrostructures/11-catalogue.md +21 -0
- package/skills/hallmark/references/macrostructures/12-letter.md +21 -0
- package/skills/hallmark/references/macrostructures/13-index-first.md +21 -0
- package/skills/hallmark/references/macrostructures/14-narrative-workflow.md +21 -0
- package/skills/hallmark/references/macrostructures/15-split-studio.md +21 -0
- package/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
- package/skills/hallmark/references/macrostructures/17-type-specimen.md +19 -0
- package/skills/hallmark/references/macrostructures/18-portfolio-grid.md +21 -0
- package/skills/hallmark/references/macrostructures/19-map-diagram.md +21 -0
- package/skills/hallmark/references/macrostructures/20-ecosystem-index.md +19 -0
- package/skills/hallmark/references/macrostructures/21-component-playground.md +21 -0
- package/skills/hallmark/references/macrostructures.md +119 -0
- package/skills/hallmark/references/microinteractions.md +80 -0
- package/skills/hallmark/references/patterns.md +202 -0
- package/skills/hallmark/references/redesign.md +88 -0
- package/skills/hallmark/references/responsive.md +46 -0
- package/skills/hallmark/references/review-finish.md +19 -0
- package/skills/hallmark/references/review-hero.md +20 -0
- package/skills/hallmark/references/scroll-choreography.md +110 -0
- package/skills/hallmark/references/texture.md +90 -0
- package/skills/hallmark/references/themes/README.md +58 -0
- package/skills/hallmark/references/themes/almanac.jpg +0 -0
- package/skills/hallmark/references/themes/almanac.md +103 -0
- package/skills/hallmark/references/themes/arcade.jpg +0 -0
- package/skills/hallmark/references/themes/arcade.md +102 -0
- package/skills/hallmark/references/themes/atelier.jpg +0 -0
- package/skills/hallmark/references/themes/atelier.md +98 -0
- package/skills/hallmark/references/themes/bloom.jpg +0 -0
- package/skills/hallmark/references/themes/bloom.md +102 -0
- package/skills/hallmark/references/themes/blueprint.jpg +0 -0
- package/skills/hallmark/references/themes/blueprint.md +103 -0
- package/skills/hallmark/references/themes/broadside.jpg +0 -0
- package/skills/hallmark/references/themes/broadside.md +108 -0
- package/skills/hallmark/references/themes/brutal.jpg +0 -0
- package/skills/hallmark/references/themes/brutal.md +95 -0
- package/skills/hallmark/references/themes/carnival.jpg +0 -0
- package/skills/hallmark/references/themes/carnival.md +104 -0
- package/skills/hallmark/references/themes/cobalt.jpg +0 -0
- package/skills/hallmark/references/themes/cobalt.md +101 -0
- package/skills/hallmark/references/themes/console.jpg +0 -0
- package/skills/hallmark/references/themes/console.md +99 -0
- package/skills/hallmark/references/themes/coral.jpg +0 -0
- package/skills/hallmark/references/themes/coral.md +102 -0
- package/skills/hallmark/references/themes/darkroom.jpg +0 -0
- package/skills/hallmark/references/themes/darkroom.md +99 -0
- package/skills/hallmark/references/themes/dose.jpg +0 -0
- package/skills/hallmark/references/themes/dose.md +98 -0
- package/skills/hallmark/references/themes/dusk.jpg +0 -0
- package/skills/hallmark/references/themes/dusk.md +105 -0
- package/skills/hallmark/references/themes/editorial.jpg +0 -0
- package/skills/hallmark/references/themes/editorial.md +97 -0
- package/skills/hallmark/references/themes/formwork.jpg +0 -0
- package/skills/hallmark/references/themes/formwork.md +107 -0
- package/skills/hallmark/references/themes/furrow.jpg +0 -0
- package/skills/hallmark/references/themes/furrow.md +98 -0
- package/skills/hallmark/references/themes/garden.jpg +0 -0
- package/skills/hallmark/references/themes/garden.md +97 -0
- package/skills/hallmark/references/themes/grid.jpg +0 -0
- package/skills/hallmark/references/themes/grid.md +101 -0
- package/skills/hallmark/references/themes/halftone.jpg +0 -0
- package/skills/hallmark/references/themes/halftone.md +106 -0
- package/skills/hallmark/references/themes/hedgerow.jpg +0 -0
- package/skills/hallmark/references/themes/hedgerow.md +104 -0
- package/skills/hallmark/references/themes/hum.jpg +0 -0
- package/skills/hallmark/references/themes/hum.md +99 -0
- package/skills/hallmark/references/themes/index.json +2191 -0
- package/skills/hallmark/references/themes/ink.jpg +0 -0
- package/skills/hallmark/references/themes/ink.md +106 -0
- package/skills/hallmark/references/themes/kiln.jpg +0 -0
- package/skills/hallmark/references/themes/kiln.md +108 -0
- package/skills/hallmark/references/themes/loom.jpg +0 -0
- package/skills/hallmark/references/themes/loom.md +106 -0
- package/skills/hallmark/references/themes/lumen.jpg +0 -0
- package/skills/hallmark/references/themes/lumen.md +103 -0
- package/skills/hallmark/references/themes/manifesto.jpg +0 -0
- package/skills/hallmark/references/themes/manifesto.md +101 -0
- package/skills/hallmark/references/themes/midnight.jpg +0 -0
- package/skills/hallmark/references/themes/midnight.md +97 -0
- package/skills/hallmark/references/themes/newsprint.jpg +0 -0
- package/skills/hallmark/references/themes/newsprint.md +102 -0
- package/skills/hallmark/references/themes/overprint.jpg +0 -0
- package/skills/hallmark/references/themes/overprint.md +101 -0
- package/skills/hallmark/references/themes/pasteup.jpg +0 -0
- package/skills/hallmark/references/themes/pasteup.md +100 -0
- package/skills/hallmark/references/themes/piste.jpg +0 -0
- package/skills/hallmark/references/themes/piste.md +99 -0
- package/skills/hallmark/references/themes/ribbon.jpg +0 -0
- package/skills/hallmark/references/themes/ribbon.md +106 -0
- package/skills/hallmark/references/themes/rim.jpg +0 -0
- package/skills/hallmark/references/themes/rim.md +96 -0
- package/skills/hallmark/references/themes/riso.jpg +0 -0
- package/skills/hallmark/references/themes/riso.md +98 -0
- package/skills/hallmark/references/themes/solstice.jpg +0 -0
- package/skills/hallmark/references/themes/solstice.md +104 -0
- package/skills/hallmark/references/themes/specimen.jpg +0 -0
- package/skills/hallmark/references/themes/specimen.md +100 -0
- package/skills/hallmark/references/themes/spore.jpg +0 -0
- package/skills/hallmark/references/themes/spore.md +104 -0
- package/skills/hallmark/references/themes/sport.jpg +0 -0
- package/skills/hallmark/references/themes/sport.md +101 -0
- package/skills/hallmark/references/themes/squeeze.jpg +0 -0
- package/skills/hallmark/references/themes/squeeze.md +99 -0
- package/skills/hallmark/references/themes/sticker.jpg +0 -0
- package/skills/hallmark/references/themes/sticker.md +106 -0
- package/skills/hallmark/references/themes/studio.jpg +0 -0
- package/skills/hallmark/references/themes/studio.md +99 -0
- package/skills/hallmark/references/themes/terminal.jpg +0 -0
- package/skills/hallmark/references/themes/terminal.md +96 -0
- package/skills/hallmark/references/themes/terrazzo.jpg +0 -0
- package/skills/hallmark/references/themes/terrazzo.md +106 -0
- package/skills/hallmark/references/themes/ultraviolet.jpg +0 -0
- package/skills/hallmark/references/themes/ultraviolet.md +106 -0
- package/skills/hallmark/references/themes/vellum.jpg +0 -0
- package/skills/hallmark/references/themes/vellum.md +105 -0
- package/skills/hallmark/references/themes/wayfind.jpg +0 -0
- package/skills/hallmark/references/themes/wayfind.md +105 -0
- package/skills/hallmark/references/themes/werkstatt.jpg +0 -0
- package/skills/hallmark/references/themes/werkstatt.md +105 -0
- package/skills/hallmark/scripts/capture.mjs +125 -0
- package/skills/hallmark/scripts/fixtures/exemplars/atmospheric.html +324 -0
- package/skills/hallmark/scripts/fixtures/exemplars/editorial.html +363 -0
- package/skills/hallmark/scripts/fixtures/exemplars/modern-minimal.html +527 -0
- package/skills/hallmark/scripts/fixtures/exemplars/playful.html +353 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-fail/index.html +118 -0
- package/skills/hallmark/scripts/fixtures/eyebrow-pass/index.html +137 -0
- package/skills/hallmark/scripts/fixtures/kept/after.html +27 -0
- package/skills/hallmark/scripts/fixtures/kept/before.html +26 -0
- package/skills/hallmark/scripts/fixtures/slopped.html +145 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Feature.vue +14 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/index.html +74 -0
- package/skills/hallmark/scripts/fixtures/tailwind-fail/style.css +6 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/Hero.tsx +33 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/index.html +57 -0
- package/skills/hallmark/scripts/fixtures/tailwind-pass/style.css +15 -0
- package/skills/hallmark/scripts/fixtures/waiver/index.html +54 -0
- package/skills/hallmark/scripts/imagegen.mjs +85 -0
- package/skills/hallmark/scripts/install-hook.mjs +70 -0
- package/skills/hallmark/scripts/install.mjs +141 -0
- package/skills/hallmark/scripts/lint-hook.mjs +49 -0
- package/skills/hallmark/scripts/photos.json +1 -0
- package/skills/hallmark/scripts/picture.mjs +71 -0
- package/skills/hallmark/scripts/refcheck.mjs +352 -0
- package/skills/hallmark/scripts/sloplint-render.mjs +1252 -0
- package/skills/hallmark/scripts/sloplint.mjs +4422 -0
- package/skills/hallmark/scripts/theme.mjs +650 -0
- package/skills/harness/SKILL.md +15 -8
- package/skills/i-have-adhd/SKILL.md +22 -11
- package/skills/no-ai-slop/SKILL.md +15 -1
- package/skills/plan-add/SKILL.md +33 -26
- package/skills/plan-status/SKILL.md +13 -7
- package/skills/plan-sync/SKILL.md +18 -12
- package/skills/pm-frameworks/SKILL.md +19 -10
- package/skills/pm-frameworks/SOURCE +7 -5
- package/skills/ponytail/SKILL.md +19 -14
- package/skills/product-analysis/SKILL.md +22 -18
- package/skills/product-flow/SKILL.md +14 -9
- package/skills/research/SKILL.md +75 -39
- package/skills/rl-env/SKILL.md +25 -13
- package/skills/rl-env/SOURCE +8 -6
- package/skills/tezgah-contract/SKILL.md +47 -42
- package/bin/tezgah-skill.py +0 -59
- /package/skills/ai-research/0-autoresearch-skill/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/litgpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/mamba/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/nanogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/rwkv/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/01-model-architecture/torchtitan/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/huggingface-tokenizers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/02-tokenization/sentencepiece/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/axolotl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/llama-factory/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/peft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/03-fine-tuning/unsloth/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/nnsight/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/pyvene/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/saelens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/04-mechanistic-interpretability/transformer-lens/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/nemo-curator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/05-data-processing/ray-data/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/grpo-rl-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/miles/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/openrlhf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/simpo/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/slime/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/torchforge/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/trl-fine-tuning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/06-post-training/verl/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/constitutional-ai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/llamaguard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/nemo-guardrails/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/07-safety-alignment/prompt-guard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/accelerate/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/deepspeed/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/megatron-core/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-fsdp2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/pytorch-lightning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/08-distributed-training/ray-train/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/lambda-labs/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/modal/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/09-infrastructure/skypilot/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/awq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/bitsandbytes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/flash-attention/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gguf/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/gptq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/hqq/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/10-optimization/ml-training-recipes/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/bigcode-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/lm-evaluation-harness/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/11-evaluation/nemo-evaluator/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/llama-cpp/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/sglang/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/tensorrt-llm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/12-inference-serving/vllm/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/mlflow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/swanlab/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/tensorboard/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/13-mlops/weights-and-biases/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/a-evolve/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/autogpt/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/crewai/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/langchain/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/14-agents/llamaindex/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/chroma/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/faiss/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/pinecone/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/qdrant/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/15-rag/sentence-transformers/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/dspy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/guidance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/instructor/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/16-prompt-engineering/outlines/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/langsmith/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/17-observability/phoenix/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/audiocraft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/blip-2/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/clip/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/cosmos-policy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/llava/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openpi/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/openvla-oft/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/segment-anything/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/stable-diffusion/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/18-multimodal/whisper/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/knowledge-distillation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/long-context/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-merging/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/model-pruning/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/moe-training/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/19-emerging-techniques/speculative-decoding/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/academic-plotting/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/ml-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/presenting-conference-talks/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/20-ml-paper-writing/systems-paper-writing/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/brainstorming-research-ideas/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/21-research-ideation/creative-thinking-for-research/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/compiler/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/research-manager/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/ai-research/22-agent-native-research-artifact/rigor-reviewer/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/colour-independence/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/flexible-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/preference-audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-accessibility/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/responsive-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/simplified-views/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/specify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/adaptive-interfaces/skills/user-preference-respect/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/adaptive-personalisation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/assess-load/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/cognitive-load-assessment/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/contextual-help-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/error-prevention-recovery/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/focus-attention-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/memory-load-reduction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/plain-language-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/simplify/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/cognitive-accessibility/skills/wayfinding-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/behavioural-analytics/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/design-research/skills/qual-quant-triangulation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/audit/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/design-flow/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/feedback-and-status/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/gesture-alternatives/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-navigation/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/keyboard-review/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/motion-sensitivity/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/multi-modal-input/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/touch-target-design/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/inclusive-interaction/skills/voice-interaction/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-affordance/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-brand-consistency/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-color/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-composition/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-information-density/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-typography/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/design-library/visual-critique/skills/critique-visual-hierarchy/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/intended-vs-implemented/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/pm-frameworks/opportunity-solution-tree/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-nemo-gym-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-openenv-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-ors-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/generate-verifiers-env/{SKILL.md → ENTRY.md} +0 -0
- /package/skills/rl-env/rl-env-from-description/{SKILL.md → ENTRY.md} +0 -0
package/hooks/tezgah_judge.py
CHANGED
|
@@ -195,10 +195,12 @@ SESSION_ARGV = {
|
|
|
195
195
|
# None of the next three takes a system prompt or drops its tools, so
|
|
196
196
|
# `_session_request` puts the system prompt in front of the prompt text and
|
|
197
197
|
# the empty temp cwd is what keeps tools from reaching a repository. Each
|
|
198
|
-
# set is from the CLI's own `--help` (
|
|
199
|
-
# `run
|
|
200
|
-
#
|
|
201
|
-
|
|
198
|
+
# set is from the CLI's own `--help` (opencode rechecked 2026-10-19):
|
|
199
|
+
# opencode 2.0.32 `run` lists `--format json` and no longer the 1.18
|
|
200
|
+
# `--pure` (it exits 1 "Unrecognized flag: --pure"), so its plugins load
|
|
201
|
+
# again and the inline config below is what keeps its tools denied; no flag
|
|
202
|
+
# skips the session record either.
|
|
203
|
+
"opencode": ["run", "--format", "json"],
|
|
202
204
|
# cursor-agent 2026.10.01: `-p` print, `--output-format json` (only with
|
|
203
205
|
# --print), `--mode ask` "Q&A style ... (read-only)", `--trust` "Trust the
|
|
204
206
|
# current workspace without prompting" - the temp cwd is never trusted.
|
package/hooks/tezgah_models.py
CHANGED
|
@@ -55,7 +55,7 @@ READ_ON = "2026-09-30"
|
|
|
55
55
|
STALE_DAYS = 60
|
|
56
56
|
OVERLAY = os.path.join(tp.CONFIG_DIR, "models.json")
|
|
57
57
|
OPENROUTER_MODELS = "https://openrouter.ai/api/v1/models"
|
|
58
|
-
MODES = ("auto", "anthropic", "zai", "any", "openai", "off")
|
|
58
|
+
MODES = ("auto", "anthropic", "zai", "any", "experientiallabs", "openai", "off")
|
|
59
59
|
# The two status markers `bin/tezgah-setup` classifies an `apply_omp()` line by:
|
|
60
60
|
# a skip is not a write and not a failure - the user's omp is left untouched, and
|
|
61
61
|
# nothing is left to repair, which is why the status report excuses it rather
|
|
@@ -84,18 +84,24 @@ TIERS = ("cheap", "standard", "frontier")
|
|
|
84
84
|
# against GLM-5.3's 95.4 at $0.34 (vals.ai, artifacts/model-table.json), so the
|
|
85
85
|
# cheap slots take the flash id and standard the plain one.
|
|
86
86
|
SLOTS = {
|
|
87
|
+
# The experientiallabs column: the gateway's uncensored DeepSeek V4.1 Flash
|
|
88
|
+
# serves efforts none/low/high/max only, so cheap and explore carry `low`
|
|
89
|
+
# where the Anthropic column carries `medium`.
|
|
87
90
|
"cheap": {"anthropic": ("claude-opus-5-5", "low"),
|
|
88
91
|
"openai": ("gpt-6.1-sol", "low"),
|
|
89
92
|
"zai": ("zai/glm-5.3-flash", None),
|
|
90
|
-
"any": ("z-ai/glm-5.3-flash", None)
|
|
93
|
+
"any": ("z-ai/glm-5.3-flash", None),
|
|
94
|
+
"experientiallabs": ("deepseek-v4.1-flash-uncensored", "low")},
|
|
91
95
|
"explore": {"anthropic": ("claude-opus-5-5", "medium"),
|
|
92
96
|
"openai": ("gpt-6.1-sol", "low"),
|
|
93
97
|
"zai": ("zai/glm-5.3-flash", None),
|
|
94
|
-
"any": ("deepseek/deepseek-v4.1-flash", None)
|
|
98
|
+
"any": ("deepseek/deepseek-v4.1-flash", None),
|
|
99
|
+
"experientiallabs": ("deepseek-v4.1-flash-uncensored", "low")},
|
|
95
100
|
"standard": {"anthropic": ("claude-opus-5-5", "medium"),
|
|
96
101
|
"openai": ("gpt-6.1-sol", "high"),
|
|
97
102
|
"zai": ("zai/glm-5.3", None),
|
|
98
|
-
"any": ("openai/gpt-6.1-sol", "high")
|
|
103
|
+
"any": ("openai/gpt-6.1-sol", "high"),
|
|
104
|
+
"experientiallabs": ("deepseek-v4.1-flash-uncensored", "high")},
|
|
99
105
|
# The frontier row names a concrete model on every family: the strongest
|
|
100
106
|
# Anthropic run the snapshot prices (Opus 5.5 @high, 56.6 Terminal-Bench 4.0
|
|
101
107
|
# at $1.82/task on AA v4.3), OpenAI's own frontier id, and the same Opus 5.5
|
|
@@ -103,7 +109,8 @@ SLOTS = {
|
|
|
103
109
|
"frontier": {"anthropic": ("claude-opus-5-5", "high"),
|
|
104
110
|
"openai": ("gpt-6-astra", "high"),
|
|
105
111
|
"zai": ("zai/glm-5.3", None),
|
|
106
|
-
"any": ("anthropic/claude-opus-5.5", "high")
|
|
112
|
+
"any": ("anthropic/claude-opus-5.5", "high"),
|
|
113
|
+
"experientiallabs": ("deepseek-v4.1-flash-uncensored", "high")},
|
|
107
114
|
}
|
|
108
115
|
# omp's own OpenAI column (plan 107): omp reaches OpenAI through its
|
|
109
116
|
# `openai-codex` provider (a ChatGPT login), which on 2026-10-13 listed
|
|
@@ -124,6 +131,10 @@ SNAPSHOT = {"anthropic/claude-opus-5.5": (4.0, 20.0),
|
|
|
124
131
|
"openai/gpt-6-astra": (10.0, 50.0),
|
|
125
132
|
"z-ai/glm-5.3-flash": (0.15, 0.5),
|
|
126
133
|
"deepseek/deepseek-v4.1-flash": (0.0198, 0.396)}
|
|
134
|
+
# `experientiallabs` has no SNAPSHOT row on purpose: SNAPSHOT holds OpenRouter
|
|
135
|
+
# ids, and `refresh` reads its list - a custom-provider id here would be a
|
|
136
|
+
# permanent false "no longer in the OpenRouter list" flag. Its prices live in
|
|
137
|
+
# ~/.omp/agent/models.yml `cost`.
|
|
127
138
|
|
|
128
139
|
# ---------------------------------------------------------------- overlay ----
|
|
129
140
|
|
|
@@ -211,12 +222,13 @@ def openrouter_ready():
|
|
|
211
222
|
# provider lists none of the column's ids on this machine (`omp models
|
|
212
223
|
# openai-codex`, 2026-10-01: gpt-5.5, gpt-5.6-luna/-terra, gpt-6-luna), so a
|
|
213
224
|
# pattern for it would never resolve.
|
|
214
|
-
OMP_FAMILIES = ("anthropic", "zai", "any")
|
|
225
|
+
OMP_FAMILIES = ("anthropic", "zai", "any", "experientiallabs")
|
|
215
226
|
# family -> (omp's auth-store provider id, the env names omp reads for it)
|
|
216
227
|
# (omp://providers.md:39, omp://environment-variables.md:39-40,71,73).
|
|
217
228
|
OMP_AUTH = {"anthropic": ("anthropic", ("ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY")),
|
|
218
229
|
"zai": ("zai", ("ZAI_API_KEY",)),
|
|
219
230
|
"any": ("openrouter", ("OPENROUTER_API_KEY",)),
|
|
231
|
+
"experientiallabs": ("experientiallabs", ("EXPERIMENTALLABS_API_KEY",)),
|
|
220
232
|
"openai": ("openai-codex", ("OPENAI_CODEX_OAUTH_TOKEN",))}
|
|
221
233
|
# Every family `--mode` can pin. `openai` is no fallback for the others: it is
|
|
222
234
|
# its own subscription with its own limit, and the owner's fallback ask
|
|
@@ -573,16 +585,16 @@ def start_health():
|
|
|
573
585
|
|
|
574
586
|
|
|
575
587
|
def omp_mode(default_selector=None):
|
|
576
|
-
"""`anthropic`, `zai`, `openai` or `any`: the saved
|
|
577
|
-
default's own family.
|
|
588
|
+
"""`anthropic`, `zai`, `openai`, `experientiallabs` or `any`: the saved
|
|
589
|
+
mode, else the default's own family.
|
|
578
590
|
|
|
579
591
|
A default of no listed family reads as `any`, never as a silent fall back
|
|
580
592
|
to the Anthropic column - the caller decides what to do when the credential
|
|
581
593
|
the selectors need is missing (`apply_omp` writes nothing and says so)."""
|
|
582
594
|
mode = overlay().get("mode")
|
|
583
|
-
if mode in
|
|
595
|
+
if mode in MODES and mode != "auto":
|
|
584
596
|
return mode
|
|
585
|
-
for family in ("anthropic", "zai", "openai"):
|
|
597
|
+
for family in ("anthropic", "zai", "openai", "experientiallabs"):
|
|
586
598
|
if str(default_selector or "").startswith(FAMILY_PREFIX[family] or family + "/"):
|
|
587
599
|
return family
|
|
588
600
|
return "any"
|
|
@@ -597,8 +609,10 @@ OMP_ROLES = ("plan", "slow")
|
|
|
597
609
|
|
|
598
610
|
# The prefix each family's stored id needs to become an omp selector. `zai` needs
|
|
599
611
|
# none: its id already is `<provider>/<model>`, the shape omp's own config uses.
|
|
612
|
+
# `experientiallabs` is a custom models.yml provider, so its prefix is that
|
|
613
|
+
# provider's own id (~/.omp/agent/models.yml).
|
|
600
614
|
FAMILY_PREFIX = {"anthropic": "anthropic/", "zai": "", "any": "openrouter/",
|
|
601
|
-
"openai": "openai-codex/"}
|
|
615
|
+
"experientiallabs": "experientiallabs/", "openai": "openai-codex/"}
|
|
602
616
|
|
|
603
617
|
|
|
604
618
|
def _row(family, slot):
|
|
@@ -1102,7 +1116,7 @@ WRITES = re.compile(r"\b(?:fix|implement|edit|write|add|refactor|patch|migrate|"
|
|
|
1102
1116
|
r"rename|delete|remove|rotate)\w*\b", re.I)
|
|
1103
1117
|
|
|
1104
1118
|
|
|
1105
|
-
def route(brief, phase=None, ask=None):
|
|
1119
|
+
def route(brief, phase=None, ask=None, cwd=None):
|
|
1106
1120
|
"""{"agent", "tier", "why", "via", "judge", "judged"} for one delegation
|
|
1107
1121
|
brief; `via` is what set the tier: `rule`, `jev`, `phase` or `default`, and
|
|
1108
1122
|
`judge` is the `provider/model` that answered when a judgement set it.
|
|
@@ -1112,7 +1126,10 @@ def route(brief, phase=None, ask=None):
|
|
|
1112
1126
|
goes out redacted (`ti.redact`, the reader the ledger uses) and only when no
|
|
1113
1127
|
override matched: a brief matching the override vocabulary never leaves the
|
|
1114
1128
|
machine. Answers are read through the seam's own accessors, so a malformed
|
|
1115
|
-
reply is the same as no reply and this never raises.
|
|
1129
|
+
reply is the same as no reply and this never raises.
|
|
1130
|
+
|
|
1131
|
+
The repository's own `agents` (`_repo_route`) are read last, at `cwd`
|
|
1132
|
+
(None: this process's directory, the shell `tezgah-route` runs in)."""
|
|
1116
1133
|
hit = OVERRIDE.search(brief or "")
|
|
1117
1134
|
if hit:
|
|
1118
1135
|
if REVIEW_ONLY.search(brief) and not WRITES.search(brief):
|
|
@@ -1131,14 +1148,37 @@ def route(brief, phase=None, ask=None):
|
|
|
1131
1148
|
out["judge"] = "%s/%s" % (result.get("provider") or "-",
|
|
1132
1149
|
result.get("model") or "-")
|
|
1133
1150
|
out["judged"] = result
|
|
1134
|
-
return out
|
|
1151
|
+
return _repo_route(out, brief, cwd)
|
|
1135
1152
|
if phase in PHASE_AGENT:
|
|
1136
|
-
|
|
1137
|
-
"phase")
|
|
1138
|
-
if phase in PHASE_TIER:
|
|
1139
|
-
return _pick(PHASE_TIER[phase], "no judgement; static table for phase %s" % phase,
|
|
1153
|
+
out = _agent(PHASE_AGENT[phase], "no judgement; phase %s names it" % phase,
|
|
1140
1154
|
"phase")
|
|
1141
|
-
|
|
1155
|
+
elif phase in PHASE_TIER:
|
|
1156
|
+
out = _pick(PHASE_TIER[phase], "no judgement; static table for phase %s" % phase,
|
|
1157
|
+
"phase")
|
|
1158
|
+
else:
|
|
1159
|
+
out = _pick("standard", "no judgement and no phase; the middle tier", "default")
|
|
1160
|
+
return _repo_route(out, brief, cwd)
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
def _repo_route(out, brief, cwd):
|
|
1164
|
+
"""`out` with the repository's declared agent in place of tezgah's when one
|
|
1165
|
+
of the manifest's `agents` matches the brief (`tezgah_extension.repo_agent`).
|
|
1166
|
+
|
|
1167
|
+
Read after the harness judgement and never before it: the tier, `via` and
|
|
1168
|
+
the judge stay the harness's, only the agent that runs it is the repo's.
|
|
1169
|
+
The override rule returns before this is reached, so a brief the harness
|
|
1170
|
+
pinned by rule keeps its agent. A broken manifest, a missing module or a
|
|
1171
|
+
vanished cwd keeps `out` as it was."""
|
|
1172
|
+
try:
|
|
1173
|
+
import tezgah_extension
|
|
1174
|
+
found = tezgah_extension.repo_agent(brief, cwd or os.getcwd())
|
|
1175
|
+
except Exception:
|
|
1176
|
+
found = None
|
|
1177
|
+
if not found:
|
|
1178
|
+
return out
|
|
1179
|
+
agent, pattern = found
|
|
1180
|
+
return dict(out, agent=agent,
|
|
1181
|
+
why="%s; repo agent %s (match %r)" % (out["why"], agent, pattern))
|
|
1142
1182
|
|
|
1143
1183
|
|
|
1144
1184
|
def _agent(agent, why, via):
|
package/hooks/tezgah_orca.py
CHANGED
|
@@ -116,7 +116,7 @@ def context_line(env=None):
|
|
|
116
116
|
"`git worktree add`, which Orca does not list. A long job runs in "
|
|
117
117
|
"`orca terminal create --worktree <selector> --command <cmd> --json`, "
|
|
118
118
|
"not a background shell. Track with `orca worktree ps --json` and "
|
|
119
|
-
"
|
|
119
|
+
"`~/.config/tezgah/bin/tezgah-status --orca`; mark checkpoints with `orca worktree set "
|
|
120
120
|
"--worktree active --comment <text>`. Full guide: `orca skills get "
|
|
121
121
|
"orca-cli`." % where)
|
|
122
122
|
|
package/hooks/tezgah_paths.py
CHANGED
|
@@ -69,13 +69,13 @@ OFF_DIRS = (CONFIG_DIR, os.path.join(HOME, ".claude"))
|
|
|
69
69
|
# (bin/tezgah-setup OFF_SWITCH_NAMES), the context's off-note (`switches()`),
|
|
70
70
|
# the opencode plugin's own `off()` and the gate's control rule all answer from
|
|
71
71
|
# it, and tests/test_paths.py fails when any of them names a switch it lacks.
|
|
72
|
-
# CORE_SWITCHES are the
|
|
72
|
+
# CORE_SWITCHES are the seventeen the always-on contract names. ADR 007 leaves
|
|
73
73
|
# UNCLASSIFIED_SWITCHES open - three `off()` names CORE does not list (the
|
|
74
74
|
# third, `slices-off`, stops the slice journal: hooks/tezgah_task.py) and two
|
|
75
75
|
# opt-in markers read with `armed()` - and until the owner classifies them the
|
|
76
76
|
# control rule protects them like the rest (bin/tezgah-docs carries the same
|
|
77
77
|
# set for its inventory check; the test pins the two equal).
|
|
78
|
-
CORE_SWITCHES = ("adhd-off", "consult-off", "docs-judge-off", "exec-mode.off",
|
|
78
|
+
CORE_SWITCHES = ("adhd-off", "consult-off", "design-off", "docs-judge-off", "exec-mode.off",
|
|
79
79
|
"judge-off", "lang-off", "orchestrate-off", "ponytail-auto.off",
|
|
80
80
|
"pretooluse-off", "reminder-off", "research-off", "spec-off",
|
|
81
81
|
"task-off", "triage-off", "verify-off", "workspace-off")
|
|
@@ -245,15 +245,84 @@ def root_for(path):
|
|
|
245
245
|
rs = roots()
|
|
246
246
|
for r in rs:
|
|
247
247
|
if real == r or real.startswith(r + os.sep):
|
|
248
|
-
|
|
248
|
+
# Read lazily, in the branch where the root already matched: a path
|
|
249
|
+
# outside every configured root pays nothing for the marker.
|
|
250
|
+
return None if harness_excluded(real) else r
|
|
249
251
|
top = worktree_top(real)
|
|
250
252
|
if top:
|
|
251
253
|
main = _linked_main_at(top)
|
|
252
254
|
if main and any(main == r or main.startswith(r + os.sep) for r in rs):
|
|
253
|
-
return top
|
|
255
|
+
return None if harness_excluded(top) else top
|
|
254
256
|
return None
|
|
255
257
|
|
|
256
258
|
|
|
259
|
+
# --- the owner marker: a repository that says who owns its workspace --------
|
|
260
|
+
# Every repository under a configured root is armed, because `roots()` is the
|
|
261
|
+
# only switch and the kill switches are global (`~/.config/tezgah/*.off`) or
|
|
262
|
+
# per-feature (`<repo>/.no-ponytail`). A project whose workspace is not this
|
|
263
|
+
# harness's has no way to say so - and one measured consequence is a review of
|
|
264
|
+
# an authorized offensive-security workspace where the harness's development
|
|
265
|
+
# plan/task machine drove a lab engagement: three `tezgah-task` writes inside
|
|
266
|
+
# the run and the per-turn phase line reaching a read-only review subagent
|
|
267
|
+
# (that repository's `.tezgah/analysis/harness-review-and-gaps.md`, the plan-011
|
|
268
|
+
# section; the line range is left out because a citation into another
|
|
269
|
+
# repository's workspace cannot be judged against this tree).
|
|
270
|
+
# The marker is that way: a file the repository owns, committed, reviewable in a
|
|
271
|
+
# diff, and not produced by `tezgah-setup`, so a config rewrite cannot resurrect
|
|
272
|
+
# the collision. Two settings, because they cost different things:
|
|
273
|
+
# tasks: off - the plan/task machine and the per-turn task line stop;
|
|
274
|
+
# the scope gate, research and lessons keep working.
|
|
275
|
+
# harness: excluded - `root_for` answers None and the harness is inert here
|
|
276
|
+
# entirely: no workspace init, no plan/task/lesson record,
|
|
277
|
+
# no gate envelope, no per-turn contract clause.
|
|
278
|
+
OWNER_MARKER = "tezgah.owner"
|
|
279
|
+
OWNER_KEYS = ("owner", "tasks", "harness")
|
|
280
|
+
_OWNER_OFF = ("off", "false", "no")
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def owner_marker(path):
|
|
284
|
+
"""The owner marker's fields for the repository holding `path`, or {}.
|
|
285
|
+
|
|
286
|
+
Read from the nearest `.git` top level at or above `path` (`_toplevel`), so a
|
|
287
|
+
path inside a workspace reads its project's marker and a repository cloned
|
|
288
|
+
inside that workspace answers for itself. A missing or unreadable file, a
|
|
289
|
+
line with no `:`, an unknown key and a blank value all answer {} rather than
|
|
290
|
+
raise: this runs inside `root_for`, which every gate call and every session
|
|
291
|
+
start reaches, and a marker that cannot be read must decide nothing."""
|
|
292
|
+
top = _toplevel(os.path.realpath(path))
|
|
293
|
+
if not top:
|
|
294
|
+
return {}
|
|
295
|
+
try:
|
|
296
|
+
with open(os.path.join(top, OWNER_MARKER), encoding="utf-8") as fh:
|
|
297
|
+
text = fh.read(4096)
|
|
298
|
+
except (OSError, UnicodeDecodeError):
|
|
299
|
+
return {}
|
|
300
|
+
out = {}
|
|
301
|
+
for line in text.splitlines():
|
|
302
|
+
key, _, value = line.split("#", 1)[0].partition(":")
|
|
303
|
+
key, value = key.strip().lower(), value.strip().lower()
|
|
304
|
+
if key in OWNER_KEYS and value:
|
|
305
|
+
out[key] = value
|
|
306
|
+
return out
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def harness_excluded(path):
|
|
310
|
+
"""True when the repository holding `path` declares `harness: excluded`,
|
|
311
|
+
the state in which `root_for` answers None and nothing here is armed."""
|
|
312
|
+
return owner_marker(path).get("harness") == "excluded"
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def tasks_disabled(path):
|
|
316
|
+
"""True when `path`'s repository says the plan/task machine must not run from
|
|
317
|
+
its plans: `tasks: off`, or `harness: excluded`, which implies it.
|
|
318
|
+
|
|
319
|
+
The narrower of the two settings, and the one a project takes first: the
|
|
320
|
+
task rule turns off while the seams a repository still wants - the scope
|
|
321
|
+
gate, `bin/run-tool`, research, lessons - keep reading its workspace."""
|
|
322
|
+
fields = owner_marker(path)
|
|
323
|
+
return fields.get("harness") == "excluded" or fields.get("tasks") in _OWNER_OFF
|
|
324
|
+
|
|
325
|
+
|
|
257
326
|
def _toplevel(real):
|
|
258
327
|
"""The nearest directory at or above `real` holding a `.git` entry, else
|
|
259
328
|
None - the project for a path inside its `.tezgah` (`project_top`)."""
|
|
@@ -492,7 +561,10 @@ CONSULT_CLIS = {
|
|
|
492
561
|
"--model", "Anthropic Claude"),
|
|
493
562
|
"codex": (["codex", "exec", "--skip-git-repo-check", "--ephemeral",
|
|
494
563
|
"-s", "read-only", "--color", "never"], "-m", "OpenAI GPT"),
|
|
495
|
-
|
|
564
|
+
# opencode 2.0.32 dropped the 1.18 `--pure` (`run` exits 1 "Unrecognized
|
|
565
|
+
# flag: --pure") and no flag replaces it, so the member runs the way the
|
|
566
|
+
# user's own `opencode run` does
|
|
567
|
+
"opencode": (["opencode", "run"], "-m",
|
|
496
568
|
"whichever provider/model opencode is configured for"),
|
|
497
569
|
"cursor-agent": (["cursor-agent", "-p", "--output-format", "text"],
|
|
498
570
|
"--model", "whichever model Cursor is configured for"),
|
|
@@ -750,6 +822,16 @@ def orx_bin():
|
|
|
750
822
|
return which_user(os.environ.get("TEZGAH_ORX_BIN") or ORX)
|
|
751
823
|
|
|
752
824
|
|
|
825
|
+
def ocr_bin():
|
|
826
|
+
"""The open-code-review `ocr` executable, or None when it is not installed.
|
|
827
|
+
|
|
828
|
+
TEZGAH_OCR_BIN points at a specific binary (tests, CI); otherwise the first
|
|
829
|
+
`ocr` on PATH wins, then a known per-user bin dir - the lookup `orx_bin()`
|
|
830
|
+
makes. Optional: without it the reviewer brief is today's (plan 125)."""
|
|
831
|
+
return which_user(os.environ.get("TEZGAH_OCR_BIN") or "ocr")
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
|
|
753
835
|
def omp_bin():
|
|
754
836
|
"""The omp CLI, or None when it is not installed.
|
|
755
837
|
|
|
@@ -1282,10 +1364,24 @@ def ensure_workspace(repo):
|
|
|
1282
1364
|
(its worktrees' links are excluded by `link_workspace`). A second call costs
|
|
1283
1365
|
three stats and one file read: the subprocess runs only when `.tezgah/.git`
|
|
1284
1366
|
does not exist yet. Fail-open: a read-only tree returns None and the session
|
|
1285
|
-
goes on.
|
|
1367
|
+
goes on.
|
|
1368
|
+
|
|
1369
|
+
A linked worktree never gets a workspace of its own (plan 121): it gets the
|
|
1370
|
+
main checkout's as a link, the same link `link_workspace` makes, so research,
|
|
1371
|
+
migrate and the session start all land in the one store instead of forking a
|
|
1372
|
+
second `.tezgah` that `git worktree remove` deletes."""
|
|
1286
1373
|
bare = _bare_repo(repo)
|
|
1287
1374
|
if not bare and not os.path.exists(os.path.join(repo, ".git")):
|
|
1288
1375
|
return None
|
|
1376
|
+
main = linked_main(repo)
|
|
1377
|
+
if main and main != repo:
|
|
1378
|
+
target = ensure_workspace(main)
|
|
1379
|
+
# A `.tezgah` already on disk - the project's own or a fork an older
|
|
1380
|
+
# tezgah made - is `link_workspace`'s to leave alone; the main
|
|
1381
|
+
# checkout's is what every reader is handed either way.
|
|
1382
|
+
if target and not os.path.lexists(workspace(repo)):
|
|
1383
|
+
link_workspace(repo, main)
|
|
1384
|
+
return target or None
|
|
1289
1385
|
ws = workspace(repo)
|
|
1290
1386
|
# A `.tezgah` that is a symlink (or anything but a directory) came with the
|
|
1291
1387
|
# repository: following it would `git init` inside the target the clone
|