mirror of https://github.com/garrytan/gstack.git
hosts/*.ts were ten copies of one file: runtimeRoot byte-identical in 9/10, pathRewrites mechanically derivable from the host name for 7/10, the 11-entry toolRewrites map byte-identical between openclaw and gbrain, and every asset change a 10-file edit (cursor and slate had already fallen out of three other hand-maintained lists). defineHost() owns the defaults; each host file now declares only what makes it different (slate/cursor: 8 lines each). Shared constants: CROSS_MODEL_RESOLVERS, GBRAIN_RESOLVERS, EXEC_STYLE_TOOL_REWRITES. Genuinely-different things stayed explicit: codex/factory $GSTACK_ROOT rewrites, hermes's tool vocabulary, claude's denylist+prefixable install, opencode's wider runtimeRoot. Proof: JSON.stringify(ALL_HOST_CONFIGS) dump-diff before/after EMPTY (and a runtime walk confirmed no function-valued or undefined-keyed fields, so the JSON diff is complete); gen:skill-docs --host all zero-diff; host-config + gen-skill-docs + idempotency suites 485/485. Host files 595 -> 285 lines. docs/ADDING_A_HOST.md teaches the factory pattern. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| designs | ||
| evals | ||
| images | ||
| spikes | ||
| ADDING_A_HOST.md | ||
| ON_THE_LOC_CONTROVERSY.md | ||
| OPENCLAW.md | ||
| REMOTE_BROWSER_ACCESS.md | ||
| askuserquestion-cjk.md | ||
| askuserquestion-split.md | ||
| domain-skills.md | ||
| explanation-diataxis-in-gstack.md | ||
| gbrain-sync-errors.md | ||
| gbrain-sync.md | ||
| gbrain-write-surfaces.md | ||
| howto-diagrams-and-formats.md | ||
| howto-document-a-shipped-feature.md | ||
| howto-ios-testing-with-gstack.md | ||
| skills.md | ||
| tutorial-document-generate.md | ||