singularity-forge/src/worktree-name-gen.ts
Mikael Hugo b24f426f2b batch: snapshot of in-flight v2 work
This commit captures uncommitted modifications that accumulated in the
working tree across multiple in-progress workstreams. It is a snapshot
to clear the deck before sf v3 work begins; individual workstreams
should land separately on top of this.

Notable additions:
- trace-collector.ts, traces.ts, src/tests/trace-export.test.ts —
  trace export plumbing
- biome.json — Biome linter configuration
- .gitignore — exclude native/npm/**/*.node compiled binaries

The bulk of the diff is across src/resources/extensions/sf/ (301 files)
and src/resources/extensions/sf/tests/ (277 files), reflecting the
ongoing sf extension work. Specific feature commits should follow this
snapshot rather than being archaeology'd out of it.

The 76MB native/npm/linux-x64-gnu/forge_engine.node compiled binary
was left out of the commit — it's now gitignored and built locally.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 12:42:31 +02:00

200 lines
2.3 KiB
TypeScript

/**
* Random worktree name generator.
*
* Produces names in the pattern: adjective-verbing-noun
* e.g. "noble-roaming-karp", "swift-whistling-matsumoto"
*/
const ADJECTIVES = [
"agile",
"bold",
"brave",
"bright",
"calm",
"clear",
"cool",
"crisp",
"dapper",
"eager",
"fair",
"fast",
"fierce",
"fine",
"fleet",
"fond",
"gentle",
"glad",
"grand",
"happy",
"keen",
"kind",
"lively",
"lucid",
"mellow",
"merry",
"mighty",
"neat",
"nimble",
"noble",
"plucky",
"polite",
"proud",
"quiet",
"rapid",
"ready",
"serene",
"sharp",
"sleek",
"sleepy",
"smooth",
"snappy",
"steady",
"sturdy",
"sunny",
"sure",
"swift",
"tidy",
"tough",
"tranquil",
"vivid",
"warm",
"wise",
"witty",
"zesty",
];
const VERBS = [
"baking",
"bouncing",
"building",
"carving",
"chasing",
"climbing",
"coding",
"crafting",
"dancing",
"dashing",
"diving",
"drawing",
"dreaming",
"drifting",
"drumming",
"exploring",
"fishing",
"floating",
"flying",
"forging",
"gliding",
"growing",
"hiking",
"humming",
"jumping",
"juggling",
"knitting",
"laughing",
"leaping",
"mapping",
"mixing",
"painting",
"planting",
"playing",
"racing",
"reading",
"riding",
"roaming",
"rowing",
"running",
"sailing",
"singing",
"skating",
"sketching",
"spinning",
"squishing",
"surfing",
"swimming",
"thinking",
"threading",
"tracing",
"walking",
"weaving",
"whistling",
"writing",
];
const NOUNS = [
"atlas",
"aurora",
"balloon",
"beacon",
"bolt",
"brook",
"canyon",
"cedar",
"comet",
"cook",
"coral",
"cosmos",
"crest",
"dawn",
"delta",
"echo",
"ember",
"falcon",
"fern",
"flare",
"frost",
"gale",
"glacier",
"grove",
"harbor",
"hawk",
"horizon",
"iris",
"jade",
"karp",
"lantern",
"lark",
"luna",
"maple",
"marsh",
"matsumoto",
"mesa",
"nebula",
"oasis",
"orbit",
"otter",
"pebble",
"phoenix",
"pine",
"prism",
"puppy",
"quartz",
"raven",
"reef",
"ridge",
"river",
"sage",
"shore",
"sierra",
"spark",
"sprout",
"stone",
"summit",
"thorn",
"tide",
"topaz",
"trail",
"vale",
"violet",
"wave",
"willow",
"zenith",
];
function pick<T>(arr: T[]): T {
return arr[Math.floor(Math.random() * arr.length)]!;
}
export function generateWorktreeName(): string {
return `${pick(ADJECTIVES)}-${pick(VERBS)}-${pick(NOUNS)}`;
}