diff --git a/.codex/environments/environment.toml b/.codex/environments/environment.toml index 91fda2e2..e9973f80 100644 --- a/.codex/environments/environment.toml +++ b/.codex/environments/environment.toml @@ -1,6 +1,6 @@ # THIS IS AUTOGENERATED. DO NOT EDIT MANUALLY version = 1 -name = "ClawDnD" +name = "WorldOS" [setup] script = "" diff --git a/.coveragerc b/.coveragerc index d97bbdd2..e7cbf975 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,4 +1,4 @@ -# Coverage configuration for WorldOS / ClawDnD (QA Lab Phase-1, additive). +# Coverage configuration for WorldOS (QA Lab Phase-1, additive). # # Report-only: this file controls what coverage.py measures and which paths it # omits. It deliberately does NOT set fail_under -- coverage stays advisory so diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5daadc34..0fd4832c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# WorldOS / ClawDnD — minimal, OPT-IN pre-commit config (inner-loop friction-cutter). +# WorldOS — minimal, OPT-IN pre-commit config (inner-loop friction-cutter). # # This is intentionally TINY and ADDITIVE: it does NOT run the test suite on every commit # (the 16GB host OOMs on parallel test workers — full/heavy runs always go to GitHub CI). It diff --git a/agents/companion-agent.md b/agents/companion-agent.md index dac39b3e..4d1fe7eb 100644 --- a/agents/companion-agent.md +++ b/agents/companion-agent.md @@ -1,9 +1,9 @@ --- name: companion-agent -description: The ClawDnD AI companion as a standalone agent persona — a D&D party member with its own character sheet, voice, and agency. Tier-1 fork seed; in Tier 2 this is forked into an isolated OpenClaw sub-session of the user's own agent so the companion keeps the user's agent identity plus its own campaign memory. +description: The WorldOS AI companion as a standalone agent persona — a D&D party member with its own character sheet, voice, and agency. Tier-1 fork seed; in Tier 2 this is forked into an isolated OpenClaw sub-session of the user's own agent so the companion keeps the user's agent identity plus its own campaign memory. --- -You are the player's companion in a ClawDnD campaign — a full party member, not a sidekick or narrator. You have your own character sheet (in the `clawdnd-engine`), your own voice, and your own personality, goals, and opinions. +You are the player's companion in a WorldOS campaign — a full party member, not a sidekick or narrator. You have your own character sheet (in the `clawdnd-engine`), your own voice, and your own personality, goals, and opinions. ## Your agency - **Take your own tactical turns in combat.** When initiative reaches you, decide and act yourself: call the engine's combat tools against your own sheet and roll through the engine like everyone else. Don't wait to be told what to do. diff --git a/commands/campaign-new.md b/commands/campaign-new.md index 4a33f6c2..3628f447 100644 --- a/commands/campaign-new.md +++ b/commands/campaign-new.md @@ -1,8 +1,8 @@ --- -description: Start a brand-new ClawDnD campaign — create your character, meet your AI companion, and begin an adventure. +description: Start a brand-new WorldOS campaign — create your character, meet your AI companion, and begin an adventure. argument-hint: "[campaign name or theme] (optional; defaults to the \"Cellar Rats\" starter)" --- -The player wants to start a NEW ClawDnD campaign. +The player wants to start a NEW WorldOS campaign. Arguments (optional campaign name / theme): $ARGUMENTS diff --git a/commands/save.md b/commands/save.md index 4b8eda9b..46de0980 100644 --- a/commands/save.md +++ b/commands/save.md @@ -3,7 +3,7 @@ description: Save your campaign now — a durable checkpoint you can quit and re --- The player wants to save. -ClawDnD writes campaign state to disk after every beat, so progress is rarely lost. To honor an explicit save: +WorldOS writes campaign state to disk after every beat, so progress is rarely lost. To honor an explicit save: 1. Make sure any pending changes from the current beat are flushed through `clawdnd-engine` — HP, conditions, inventory, XP, quest and NPC facts, and position. 2. Call `get_state` to confirm the persisted snapshot is current and complete. 3. Tell the player it's safe to quit, and that `/session-start` will pick up exactly here with a recap. diff --git a/commands/session-start.md b/commands/session-start.md index 14f4f278..add36f45 100644 --- a/commands/session-start.md +++ b/commands/session-start.md @@ -2,7 +2,7 @@ description: Begin or resume play — loads your campaign, recaps "Previously on…", and hands the table to the DM. argument-hint: "[campaign id] (optional; defaults to your most recent campaign)" --- -The player wants to start or resume a ClawDnD session. +The player wants to start or resume a WorldOS session. Target campaign (optional id): $ARGUMENTS diff --git a/commands/voice-toggle.md b/commands/voice-toggle.md index a710a888..26d6a0ea 100644 --- a/commands/voice-toggle.md +++ b/commands/voice-toggle.md @@ -4,7 +4,7 @@ argument-hint: "[on|off] (optional; toggles if omitted)" --- The player wants to change voice output: $ARGUMENTS -ClawDnD's voice backend is chosen when the MCP servers launch (`CLAWDND_TTS_BACKEND` — `kokoro` for spoken audio, `null` for silent/text-only), so you can't relaunch it mid-session. Honor this as a **session preference**: +WorldOS's voice backend is chosen when the MCP servers launch (`CLAWDND_TTS_BACKEND` — `kokoro` for spoken audio, `null` for silent/text-only), so you can't relaunch it mid-session. Honor this as a **session preference**: - **off / silent:** stop calling `clawdnd-voice` `speak`. Keep narrating and voicing characters in **text only**, still labeling each speaker so the player knows who's talking. Confirm voice is off. - **on / voiced:** resume calling `clawdnd-voice` `speak(text, voice_id)` for narration, NPCs, and the companion in their own voices. If the active backend is `null`, tell the player to set `CLAWDND_TTS_BACKEND=kokoro` and restart the session for actual audio. diff --git a/commands/world-play.md b/commands/world-play.md index 410c8d13..99c24024 100644 --- a/commands/world-play.md +++ b/commands/world-play.md @@ -16,4 +16,4 @@ Do this: 5. Activate the **dungeon-master** skill and run its **"Generating a world live"** mode: drop the party at a starting option; generate each scene on arrival and PERSIST it (`add_location`, `create_character`, `remember`); pull canon on demand with `lookup_lore`; let the standing threads move on their own (weave in the `world_beats` from `travel_to`/`downtime`/`world_tick`); hold the story-craft bar (felt menace, a wounded companion, the unforgettable beat). 6. `start_session` (for the recap + continuity) and `end_session` when the player stops. -This is ClawDnD at its best — an epic, living world you inhabit, different every time. Make it sing. +This is WorldOS at its best — an epic, living world you inhabit, different every time. Make it sing. diff --git a/content/campaigns/cellar-rats/adventure.json b/content/campaigns/cellar-rats/adventure.json index a4254ec8..f0b00e2c 100644 --- a/content/campaigns/cellar-rats/adventure.json +++ b/content/campaigns/cellar-rats/adventure.json @@ -342,6 +342,6 @@ "conditions_in_play": ["Prone (Wolf knockdown, DC 11 STR)", "Grappled (optional vermin-swarm hazard)", "Frightened (DM may apply via the Long Thing's presence as a narrative dread, optional)"] }, "pacing_for_one_hour": "Scene 1 ~10 min (hook + bargain), Scene 2 ~10 min (descent + trap + fork), Scene 3 ~12 min (wolf fight), Scene 4 ~10 min (Quill + twist), Scene 5 ~15 min (climax + seal), Conclusion ~3 min. Trim the optional vermin swarm and run Grett's crew at 2 goblins to stay inside the hour for a smaller party.", - "originality_note": "This adventure is 100% original prose written for ClawDnD and is shippable under CC-BY. It uses only SRD 5.2 mechanics and the bundled Goblin/Wolf/Bandit stat blocks. No published or copyrighted adventure text is reproduced." + "originality_note": "This adventure is 100% original prose written for WorldOS and is shippable under CC-BY. It uses only SRD 5.2 mechanics and the bundled Goblin/Wolf/Bandit stat blocks. No published or copyrighted adventure text is reproduced." } } diff --git a/content/campaigns/cellar-rats/adventure.md b/content/campaigns/cellar-rats/adventure.md index 2a7d880f..91f4ffce 100644 --- a/content/campaigns/cellar-rats/adventure.md +++ b/content/campaigns/cellar-rats/adventure.md @@ -1,12 +1,12 @@ # Cellar Rats -> *A ClawDnD starter adventure. Levels 1–2 · one ~1-hour session · 3–4 players + companion.* +> *A WorldOS starter adventure. Levels 1–2 · one ~1-hour session · 3–4 players + companion.* **The Sodden Crown is the only inn for a day's walk, and something has moved into its flooded cellar. The owner blames rats. The scratching in the walls is far too big for rats.** This is a grounded, low-level dungeon crawl with a soft heart: a band of goblins has tunneled up into a tavern cellar — but they aren't raiders. They're refugees, fleeing something far worse still down in the drowned dark below. The "infestation" the party is hired to exterminate is a frightened family. The real monster is the one nobody ever quite sees. -It runs in about an hour and hits every beat a ClawDnD session should: a social hook, an exploration crawl with a trap and a choice, a memorable turncoat NPC whose attitude can flip, and two combats built from the bundled Goblin and Wolf stat blocks. +It runs in about an hour and hits every beat a WorldOS session should: a social hook, an exploration crawl with a trap and a choice, a memorable turncoat NPC whose attitude can flip, and two combats built from the bundled Goblin and Wolf stat blocks. --- @@ -259,4 +259,4 @@ The companion (`companion-default`) is a *character*, not a rules engine — giv --- -*This adventure is 100% original prose written for ClawDnD, shippable under CC-BY 4.0. It uses only SRD 5.2 mechanics and the bundled Goblin / Wolf / Bandit stat blocks (System Reference Document 5.2 © Wizards of the Coast, CC-BY-4.0; see `data/srd/ATTRIBUTION.md`). No published or copyrighted adventure text is reproduced.* +*This adventure is 100% original prose written for WorldOS, shippable under CC-BY 4.0. It uses only SRD 5.2 mechanics and the bundled Goblin / Wolf / Bandit stat blocks (System Reference Document 5.2 © Wizards of the Coast, CC-BY-4.0; see `data/srd/ATTRIBUTION.md`). No published or copyrighted adventure text is reproduced.* diff --git a/content/campaigns/embergloom-pact/adventure.json b/content/campaigns/embergloom-pact/adventure.json index c866865b..aa63a7f5 100644 --- a/content/campaigns/embergloom-pact/adventure.json +++ b/content/campaigns/embergloom-pact/adventure.json @@ -885,6 +885,6 @@ }, "the_embergloom_note": "The Embergloom — the buried entity — is NEVER fully seen and NEVER fought. It is the ashfall's true source and the rite's prize: a presence of grey hunger felt as rising ash, ember-light, and mounting dread. Its WAKING is the campaign's failure state (the Act 3 rite-clock); its RE-SEALING is the victory. Do NOT stat it. Velandra (Wight stats) is the human anchor the party actually fights; the Embergloom is the reason the fight matters.", "pacing": "Designed as a ~4-session arc (one act per ~80-min session, or a long single sitting). Act 1 ~ levels 1-2 (hook + mill + cult). Act 2 ~ levels 2-4 (barrow + reveal + seal). Act 3 ~ levels 4-5 (descent + crypt climax). Use the per-scene scaling notes to tune each fight to party size, and prefer milestone leveling (2 / 3-4 / 5) for clean act breaks.", - "originality_note": "This campaign is 100% original prose written for ClawDnD and is shippable under the root WorldOS license unless a separate content license is stated. It uses only SRD 5.2 mechanics and the bundled SRD creature stat blocks (Cultist, Skeleton, Bandit Captain, Specter, Ogre, Wight). No published or copyrighted adventure text, names, places, or plot is reproduced; the town of Cinderhollow, the Embergloom entity, Sister Velandra Coir, Brother Toll, and all NPCs and locations are original creations." + "originality_note": "This campaign is 100% original prose written for WorldOS and is shippable under the root WorldOS license unless a separate content license is stated. It uses only SRD 5.2 mechanics and the bundled SRD creature stat blocks (Cultist, Skeleton, Bandit Captain, Specter, Ogre, Wight). No published or copyrighted adventure text, names, places, or plot is reproduced; the town of Cinderhollow, the Embergloom entity, Sister Velandra Coir, Brother Toll, and all NPCs and locations are original creations." } } diff --git a/content/campaigns/embergloom-pact/adventure.md b/content/campaigns/embergloom-pact/adventure.md index b8b1c653..45351981 100644 --- a/content/campaigns/embergloom-pact/adventure.md +++ b/content/campaigns/embergloom-pact/adventure.md @@ -1,6 +1,6 @@ # The Embergloom Pact -*A ClawDnD showcase campaign — SRD 5.2, levels 1 → 5, ~4 sessions.* +*A WorldOS showcase campaign — SRD 5.2, levels 1 → 5, ~4 sessions.* *100% original prose on SRD primitives. Ships under the root WorldOS license unless a separate content license is stated.* --- diff --git a/data/srd/ATTRIBUTION.md b/data/srd/ATTRIBUTION.md index 9f6f8bfb..c5475776 100644 --- a/data/srd/ATTRIBUTION.md +++ b/data/srd/ATTRIBUTION.md @@ -8,7 +8,7 @@ The SRD 5.2.1 is licensed under the **Creative Commons Attribution 4.0 International License** (CC-BY-4.0), available at https://creativecommons.org/licenses/by/4.0/legalcode. -ClawDnD includes and adapts this material under that license. The following +WorldOS includes and adapts this material under that license. The following attribution is required by CC-BY-4.0 and must be retained: > This work includes material from the System Reference Document 5.2.1 ("SRD 5.2.1") @@ -17,5 +17,5 @@ attribution is required by CC-BY-4.0 and must be retained: > International License, available at > https://creativecommons.org/licenses/by/4.0/legalcode. -ClawDnD uses only SRD content. It does not include or redistribute any non-SRD, +WorldOS uses only SRD content. It does not include or redistribute any non-SRD, copyrighted Wizards of the Coast material. diff --git a/data/srd/LICENSE-DATA.md b/data/srd/LICENSE-DATA.md index 61107769..cd15a2d9 100644 --- a/data/srd/LICENSE-DATA.md +++ b/data/srd/LICENSE-DATA.md @@ -49,7 +49,7 @@ this data is redistributed: This dataset has been **converted from the original SRD 5.2.1 document into structured JSON** by the Open5e project (the conversion source below), and is -vendored here unmodified from that source. ClawDnD's rules server further +vendored here unmodified from that source. WorldOS's rules server further *adapts* these records at load time (field normalization into a lookup index); the on-disk JSON under `data/srd/srd524/` is a verbatim copy of the upstream Open5e files. @@ -67,7 +67,7 @@ data project, which converts the SRD into machine-readable JSON: above. Open5e's conversion work is gratefully acknowledged. Open5e is not affiliated -with, nor does it endorse, ClawDnD. +with, nor does it endorse, WorldOS. ## Scope of what is vendored diff --git a/data/srd/bg-midtier/ATTRIBUTION.md b/data/srd/bg-midtier/ATTRIBUTION.md index cd97809d..59e009d5 100644 --- a/data/srd/bg-midtier/ATTRIBUTION.md +++ b/data/srd/bg-midtier/ATTRIBUTION.md @@ -37,6 +37,6 @@ https://www.dndbeyond.com/srd, licensed under the **Creative Commons Attribution ## Flavor / Names / Descriptions All creature names and flavor material (names, world context, thematic framing) -are original works by the ClawDnD project authors, written from scratch to evoke +are original works by the WorldOS project authors, written from scratch to evoke the Baldur's Gate region. They do not reproduce any copyrighted game text, product-identity text, or wiki content. diff --git a/qa/lib_beat_driver.sh b/qa/lib_beat_driver.sh index 3942a8bb..80cd519d 100644 --- a/qa/lib_beat_driver.sh +++ b/qa/lib_beat_driver.sh @@ -957,7 +957,7 @@ clawdnd_coldopen_retry_msg() { printf '%s' "$base_msg" return 0 fi - printf '%s' "You are the Dungeon Master for a solo ClawDnD adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). + printf '%s' "You are the Dungeon Master for a solo WorldOS adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). A previous cold-open attempt already minted THIS session's campaign, so the world ALREADY EXISTS — RESUME it, do NOT start over: - This session's campaign ALREADY EXISTS: use campaign_id=$live_cid for EVERY engine call. DO NOT call start_world(\"$world\") — it would mint a NEW campaign id and ORPHAN this save (the player's seated party would vanish). diff --git a/scripts/launch_common.sh b/scripts/launch_common.sh index d37353bb..6feb25cd 100644 --- a/scripts/launch_common.sh +++ b/scripts/launch_common.sh @@ -29,7 +29,7 @@ clawdnd_missing_commands() { command -v "$cmd" >/dev/null 2>&1 || missing+=("$cmd") done if [ "${#missing[@]}" -gt 0 ]; then - echo "ClawDnD cannot start yet: missing command(s): ${missing[*]}" >&2 + echo "WorldOS cannot start yet: missing command(s): ${missing[*]}" >&2 echo >&2 echo "Install the missing tools, then double-click the launcher again." >&2 echo "Required for dashboard play: python3, claude, uv, jq, curl." >&2 diff --git a/scripts/license_check.py b/scripts/license_check.py index a4ffbe8e..82cf7438 100644 --- a/scripts/license_check.py +++ b/scripts/license_check.py @@ -46,7 +46,7 @@ def _check_ingested_attribution(tracked: list[str]) -> list[str]: """Every committed INGESTED record must carry its per-source attribution (it's wiki-derived CC-BY-SA, not the WorldOS license) — the docs promise it, so the gate enforces it instead of trusting memory. JSON records (characters/areas) need non-empty `license` + `attribution` (a wiki-derived one - also carries `source_url`, but original ClawDnD exemplars legitimately have none); wiki lore + also carries `source_url`, but original WorldOS exemplars legitimately have none); wiki lore .md needs a Source/license footer. Authored lore under lore/*.md is exempt — it's our prose.""" errors: list[str] = [] for f in tracked: diff --git a/scripts/play.sh b/scripts/play.sh index b3694de7..8379b189 100755 --- a/scripts/play.sh +++ b/scripts/play.sh @@ -475,7 +475,7 @@ viewer_supervisor & SUP=$! _play_cleanup() { if [ "${PROVIDER_STOPPED_CLEANLY:-0}" != "1" ] && [ -n "${PROVIDER_STATUS:-}" ] \ && declare -F clawdnd_write_provider_status >/dev/null 2>&1; then - clawdnd_write_provider_status "$PROVIDER_STATUS" failed crashed "ClawDnD DM provider exited unexpectedly. Restart the session to continue." "${DM_TURNS:-0}" "scripts/play.sh" + clawdnd_write_provider_status "$PROVIDER_STATUS" failed crashed "WorldOS DM provider exited unexpectedly. Restart the session to continue." "${DM_TURNS:-0}" "scripts/play.sh" fi declare -F clawdnd_release_launch_lock >/dev/null 2>&1 && clawdnd_release_launch_lock "$ROOT" kill "$SUP" 2>/dev/null @@ -492,7 +492,7 @@ trap '_play_cleanup; exit 130' INT TERM (command -v open >/dev/null 2>&1 && open "http://127.0.0.1:$PORT/openworlds/") \ || (command -v xdg-open >/dev/null 2>&1 && xdg-open "http://127.0.0.1:$PORT/openworlds/") || true ) & -echo "ClawDnD — playing in OpenWorlds → http://127.0.0.1:$PORT/openworlds/" +echo "WorldOS — playing in OpenWorlds → http://127.0.0.1:$PORT/openworlds/" echo " Opening the world… OpenWorlds fills in as the DM narrates the first scene." echo " Act via the palette (Say / Do / Continue, dice & combat, click-to-travel). Ctrl-C to stop." echo " Save dir: $STATE_DIR" @@ -510,7 +510,7 @@ if [ "$RESUME" = "1" ]; then # where the chronicle stood. The heartbeat targets the saved campaign so /events shows progress # within ~1s while the re-ground turn runs. clawdnd_emit_progress_heartbeat "$RESUME_CAMPAIGN" 1 0 - DMSG="$(dm_turn 1 "You are the Dungeon Master for a solo ClawDnD adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). + DMSG="$(dm_turn 1 "You are the Dungeon Master for a solo WorldOS adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). RESUME an EXISTING chronicle that is being re-opened — the world, the player's character, and the party ALREADY EXIST. You are NOT starting a new game: - This session's campaign ALREADY EXISTS: use campaign_id=$RESUME_CAMPAIGN for EVERY engine call. DO NOT call start_world — it would mint a NEW campaign id and ORPHAN this save. @@ -530,7 +530,7 @@ elif [ -n "$HERO_CAMP" ]; then # below mints its campaign INSIDE the turn, so it has no pre-turn campaign to target — it relies on # the #718 cold-open spinner + the live-progress rule the DM turn carries.) first=1 → opening teaser. clawdnd_emit_progress_heartbeat "$HERO_CAMP" 1 0 - DMSG="$(dm_turn 1 "You are the Dungeon Master for a solo ClawDnD adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). + DMSG="$(dm_turn 1 "You are the Dungeon Master for a solo WorldOS adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). Begin a SOLO session in a living world for a single human player who will act through the dashboard. The player AUTHORED their own character in the Creation wizard, so the world AND the player's character ALREADY EXIST — they were pre-seeded for you: - This session's campaign ALREADY EXISTS: use campaign_id=$HERO_CAMP for EVERY engine call. DO NOT call start_world — it would mint a NEW campaign id and ORPHAN the pre-seeded PC. @@ -544,7 +544,7 @@ CRITICAL — your FINAL output THIS turn MUST BE the opening SCENE itself, writt Their actions will arrive as tagged moves — [say] (their dialogue), [do] (an attempt), [check] (roll that skill), [cast]/[use]/[attack] (resolve via the engine) — one per turn from the dashboard.")" else - DMSG="$(dm_turn 1 "You are the Dungeon Master for a solo ClawDnD adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). + DMSG="$(dm_turn 1 "You are the Dungeon Master for a solo WorldOS adventure. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). Begin a SOLO session in a living world for a single human player who will act through the dashboard: - start_world(\"$WORLD\") and read the returned bible (premise, era/chronology, tone, standing threads, seeded regions/factions/roster). If it returns existing_campaigns, start fresh. @@ -645,7 +645,7 @@ fi # (PROVIDER_STATUS + PROVIDER_STOPPED_CLEANLY were defined near STATE_DIR so an early-abort EXIT trap # can write "failed"). provider_status_set() { clawdnd_write_provider_status "$PROVIDER_STATUS" "$1" "$2" "$3" "$DM_TURNS" "scripts/play.sh"; } -provider_status_set running active "ClawDnD DM provider is running." +provider_status_set running active "WorldOS DM provider is running." # Stop the (otherwise human-paced, unbounded) loop once the session hits its cost or turn # ceiling. total_cost_usd is reported on each turn's result event (accumulated in $COMBINED). @@ -656,14 +656,14 @@ over_budget() { local spent; spent="$(jq -rs '[.[]|select(.type=="result")|.total_cost_usd//0]|add // 0' "$COMBINED" 2>/dev/null)" if [ "$DM_TURNS" -ge "$MAX_TURNS" ]; then echo "[play] turn cap ($MAX_TURNS) reached — stopping (raise CLAWDND_PLAY_MAX_TURNS)." - provider_status_set stopped turn_cap "ClawDnD DM stopped after reaching the configured max turns. Increase Max turns or start a new session to continue." + provider_status_set stopped turn_cap "WorldOS DM stopped after reaching the configured max turns. Increase Max turns or start a new session to continue." PROVIDER_STOPPED_CLEANLY=1 sleep "${WORLDOS_PROVIDER_STOP_GRACE_SECONDS:-${CLAWDND_PROVIDER_STOP_GRACE_SECONDS:-20}}" return 0 fi if awk -v s="${spent:-0}" -v b="$SESSION_BUDGET" 'BEGIN{exit !(s+0>=b+0)}'; then echo "[play] session budget reached (~\$$spent/\$$SESSION_BUDGET) — stopping (raise CLAWDND_PLAY_SESSION_BUDGET)." - provider_status_set stopped budget "ClawDnD DM stopped after reaching the session budget (~\$$spent/\$$SESSION_BUDGET). Raise CLAWDND_PLAY_SESSION_BUDGET or start a new session." + provider_status_set stopped budget "WorldOS DM stopped after reaching the session budget (~\$$spent/\$$SESSION_BUDGET). Raise CLAWDND_PLAY_SESSION_BUDGET or start a new session." PROVIDER_STOPPED_CLEANLY=1 sleep "${WORLDOS_PROVIDER_STOP_GRACE_SECONDS:-${CLAWDND_PROVIDER_STOP_GRACE_SECONDS:-20}}" return 0 @@ -734,7 +734,7 @@ $RUNBOOK" "$CAMPAIGN_ID")" echo "[play] idle ${MAX_IDLE}s with no player move — stopping (relaunch when ready; raise CLAWDND_PLAY_MAX_IDLE to wait longer)." # F12-10: an idle stop is a CLEAN stop (not a crash) — write "stopped"/idle, set the flag so the # EXIT trap does not relabel it "failed". - provider_status_set stopped idle "ClawDnD DM stopped after ${MAX_IDLE}s with no player move. Relaunch to continue (raise CLAWDND_PLAY_MAX_IDLE to wait longer)." + provider_status_set stopped idle "WorldOS DM stopped after ${MAX_IDLE}s with no player move. Relaunch to continue (raise CLAWDND_PLAY_MAX_IDLE to wait longer)." PROVIDER_STOPPED_CLEANLY=1 break fi diff --git a/scripts/play_codex_actor.sh b/scripts/play_codex_actor.sh index 18872bae..6bcc7f84 100755 --- a/scripts/play_codex_actor.sh +++ b/scripts/play_codex_actor.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Run Codex as a constrained ClawDnD player actor. +# Run Codex as a constrained WorldOS player actor. # # The native app launches this through the provider environment contract. This # wrapper never writes campaign snapshots or QA/canon content; it only creates @@ -194,7 +194,7 @@ out_path.write_text( PY cat > "$PROMPT_FILE" </dev/null 2>&1; then - clawdnd_write_provider_status "$PROVIDER_STATUS" failed crashed "ClawDnD DM provider exited unexpectedly. Restart the session to continue." "${AGENT_TURNS:-0}" "scripts/play_party.sh" + clawdnd_write_provider_status "$PROVIDER_STATUS" failed crashed "WorldOS DM provider exited unexpectedly. Restart the session to continue." "${AGENT_TURNS:-0}" "scripts/play_party.sh" fi declare -F clawdnd_release_launch_lock >/dev/null 2>&1 && clawdnd_release_launch_lock "$ROOT" kill "$SUP" 2>/dev/null @@ -543,7 +543,7 @@ COMP_NAME_LIST="$(printf '%s' "$SEED_JSON" | jq -r '[.companions[].name] | join( # heartbeat INGEST. Same shared helper play.sh calls (its exact wrapper lines are what app.jsx # filters and the #763 fallback recognizes — never a local text bank). first=1 → opening teaser. clawdnd_emit_progress_heartbeat "$CAMPAIGN_ID" 1 0 -DMSG="$(turn dm "$DSID" 1 "You are the Dungeon Master for a ClawDnD adventure played by ONE human plus an AI PARTY. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). +DMSG="$(turn dm "$DSID" 1 "You are the Dungeon Master for a WorldOS adventure played by ONE human plus an AI PARTY. Activate and follow your \`dungeon-master\` skill — run its \"Generating a world live\" mode and hold its craft bar (mechanics sourced from the engine, NPCs speak, the world pushes back, scenes played not logged). Begin a session in a living world for a single human player (who acts through the dashboard) traveling with a party of companions who ALREADY EXIST in the world: - This session's campaign ALREADY EXISTS: use campaign_id=$CAMPAIGN_ID for EVERY engine call. The world, party, and companions were pre-seeded for you. DO NOT call start_world — it would mint a NEW campaign id and ORPHAN the pre-seeded companions; DO NOT recruit or create companions yourself. @@ -645,7 +645,7 @@ fi # the viewer shows a live provider. Shared writer; AGENT_TURNS is this lane's turn counter. (play.sh # parity; the EXIT trap relabels it "failed" on a crash, over_budget/idle relabel "stopped".) provider_status_set() { clawdnd_write_provider_status "$PROVIDER_STATUS" "$1" "$2" "$3" "$AGENT_TURNS" "scripts/play_party.sh"; } -provider_status_set running active "ClawDnD party DM provider is running." +provider_status_set running active "WorldOS party DM provider is running." # --- session ceiling (aggregate cost + turn cap), mirrors play.sh + run_party.sh -------- # F12-10: a clean cap/budget stop writes the "stopped" sidecar (with the reason) + a short grace @@ -655,7 +655,7 @@ over_budget() { local spent if [ "$AGENT_TURNS" -ge "$MAX_TURNS" ]; then echo "[play-party] turn cap ($MAX_TURNS) reached — stopping (raise CLAWDND_PLAY_MAX_TURNS)." - provider_status_set stopped turn_cap "ClawDnD party DM stopped after reaching the configured max turns. Increase Max turns or start a new session to continue." + provider_status_set stopped turn_cap "WorldOS party DM stopped after reaching the configured max turns. Increase Max turns or start a new session to continue." PROVIDER_STOPPED_CLEANLY=1 sleep "${WORLDOS_PROVIDER_STOP_GRACE_SECONDS:-${CLAWDND_PROVIDER_STOP_GRACE_SECONDS:-20}}" return 0 @@ -663,7 +663,7 @@ over_budget() { spent="$(jq -rs '[.[]|select(.type=="result")|.total_cost_usd//0]|add // 0' "$COMBINED" 2>/dev/null)" if awk -v s="${spent:-0}" -v b="$SESSION_BUDGET" 'BEGIN{exit !(s+0>=b+0)}'; then echo "[play-party] session budget reached (~\$$spent/\$$SESSION_BUDGET) — stopping (raise CLAWDND_PLAY_SESSION_BUDGET)." - provider_status_set stopped budget "ClawDnD party DM stopped after reaching the session budget (~\$$spent/\$$SESSION_BUDGET). Raise CLAWDND_PLAY_SESSION_BUDGET or start a new session." + provider_status_set stopped budget "WorldOS party DM stopped after reaching the session budget (~\$$spent/\$$SESSION_BUDGET). Raise CLAWDND_PLAY_SESSION_BUDGET or start a new session." PROVIDER_STOPPED_CLEANLY=1 sleep "${WORLDOS_PROVIDER_STOP_GRACE_SECONDS:-${CLAWDND_PROVIDER_STOP_GRACE_SECONDS:-20}}" return 0 @@ -764,7 +764,7 @@ Then PLAY the next beat as a full lived scene — NOT a fragment: any NPC (or co if [ $((SECONDS - last_activity)) -ge "$MAX_IDLE" ]; then echo "[play-party] idle ${MAX_IDLE}s with no player move — stopping (relaunch when ready; raise CLAWDND_PLAY_MAX_IDLE to wait longer)." # F12-10: an idle stop is CLEAN (not a crash) — write "stopped"/idle + set the flag. - provider_status_set stopped idle "ClawDnD party DM stopped after ${MAX_IDLE}s with no player move. Relaunch to continue (raise CLAWDND_PLAY_MAX_IDLE to wait longer)." + provider_status_set stopped idle "WorldOS party DM stopped after ${MAX_IDLE}s with no player move. Relaunch to continue (raise CLAWDND_PLAY_MAX_IDLE to wait longer)." PROVIDER_STOPPED_CLEANLY=1 break fi diff --git a/scripts/qa_reap.sh b/scripts/qa_reap.sh index 9699131b..179fda61 100755 --- a/scripts/qa_reap.sh +++ b/scripts/qa_reap.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# ClawDnD QA/play REAPER — kill any harness process (a QA run or a play session) older than +# WorldOS QA/play REAPER — kill any harness process (a QA run or a play session) older than # MAX_MIN minutes. A safety net against WEDGED runs that spin for hours: e.g. a dry-run # play_party with no human input that loops a sleep forever, or a `claude -p` that never returns. # (play_party/run_* now self-cap, but this catches anything that slips through or predates the fix.) diff --git a/skills/campaign-author/SKILL.md b/skills/campaign-author/SKILL.md index 32830418..f11b3636 100644 --- a/skills/campaign-author/SKILL.md +++ b/skills/campaign-author/SKILL.md @@ -1,6 +1,6 @@ --- name: campaign-author -description: Create or import a ClawDnD campaign — generate an original adventure (regions, factions, quest beats, NPC roster with assigned voices) from SRD primitives, or import a campaign module. Use when the player wants to start a new adventure, generate a campaign, or load authored content. Ships only original/CC content; copyrighted adventures are imported privately and never redistributed. +description: Create or import a WorldOS campaign — generate an original adventure (regions, factions, quest beats, NPC roster with assigned voices) from SRD primitives, or import a campaign module. Use when the player wants to start a new adventure, generate a campaign, or load authored content. Ships only original/CC content; copyrighted adventures are imported privately and never redistributed. --- # Campaign Author @@ -17,7 +17,7 @@ Build an original campaign from SRD primitives: a premise and hook; a region wit 4. **Validate before saving.** Call `validate_adventure(adv)` — it returns a list of problem strings (empty means valid: no duplicate ids, no unknown voice ids, no dangling scene references, title present). Fix every reported problem, then write the module under `content/campaigns//adventure.json`. ## Import -Load an authored campaign module. **Licensing matters:** ClawDnD ships only original or CC-licensed content. Adventures the player legally owns may be imported for **private** local play — these live under a git-ignored directory and are never committed or redistributed. Never reproduce copyrighted adventure text into the repository. +Load an authored campaign module. **Licensing matters:** WorldOS ships only original or CC-licensed content. Adventures the player legally owns may be imported for **private** local play — these live under a git-ignored directory and are never committed or redistributed. Never reproduce copyrighted adventure text into the repository. ## Voices Assign every NPC and the companion a stable logical `voice_id` at creation (see `content/voices/voice-map.json`) so each character sounds consistent across sessions. diff --git a/skills/companion/SKILL.md b/skills/companion/SKILL.md index 9d91dd53..f74e1afc 100644 --- a/skills/companion/SKILL.md +++ b/skills/companion/SKILL.md @@ -1,6 +1,6 @@ --- name: companion -description: Play the AI companion party member in a ClawDnD campaign — a distinct character with its own sheet, personality, and voice who adventures alongside the player. Use when the companion needs to act in combat, react in roleplay, or weigh in on a decision. The DM invokes the companion through the CompanionProvider boundary so it can later be promoted to a standalone OpenClaw sub-session (Tier 2). +description: Play the AI companion party member in a WorldOS campaign — a distinct character with its own sheet, personality, and voice who adventures alongside the player. Use when the companion needs to act in combat, react in roleplay, or weigh in on a decision. The DM invokes the companion through the CompanionProvider boundary so it can later be promoted to a standalone OpenClaw sub-session (Tier 2). --- # Companion diff --git a/skills/dungeon-master/AGENT.md b/skills/dungeon-master/AGENT.md index b6c65696..cc539b09 100644 --- a/skills/dungeon-master/AGENT.md +++ b/skills/dungeon-master/AGENT.md @@ -1,9 +1,9 @@ --- name: dungeon-master-agent -description: The ClawDnD Dungeon Master as a standalone agent definition — the DM's stable identity, personality, and the 3-act PROCESS it runs every session, plus the session-scope obligations the QA gate enforces. The short structural framing that pairs with the dungeon-master SKILL.md (the full craft contract); fed first so the DM's character and the shape of the arc are fixed once, not re-derived each run. +description: The WorldOS Dungeon Master as a standalone agent definition — the DM's stable identity, personality, and the 3-act PROCESS it runs every session, plus the session-scope obligations the QA gate enforces. The short structural framing that pairs with the dungeon-master SKILL.md (the full craft contract); fed first so the DM's character and the shape of the arc are fixed once, not re-derived each run. --- -You are the Dungeon Master for a ClawDnD campaign — a living D&D 5e world for one player and their AI companion. The `dungeon-master` skill is your full craft contract (the beat cycle, the iron tool rules, the non-negotiables, the playbooks); this is the shorter, structural framing on TOP of it: who you are, the act process you run, and the obligations you OWN. Hold both. +You are the Dungeon Master for a WorldOS campaign — a living D&D 5e world for one player and their AI companion. The `dungeon-master` skill is your full craft contract (the beat cycle, the iron tool rules, the non-negotiables, the playbooks); this is the shorter, structural framing on TOP of it: who you are, the act process you run, and the obligations you OWN. Hold both. ## Identity & personality You are a generous, brisk, fair storyteller with a Baldur's-Gate-3-prestige voice. You spotlight the player and their companion, say "yes, and" to clever ideas, and keep danger honest — the dice and rules are real, sourced from the engine, never invented. You are warm but you do not flatter the player with unearned wins: the world pushes back, NPCs have their own wants, and a concession the player never earned is worthless. You narrate the world and adjudicate outcomes; you never speak or decide for the player's character. Your prose is evocative and controlled, in-scene and in the present — a played scene, never an after-action log. This voice is stable across every session and every world. diff --git a/skills/dungeon-master/SKILL.md b/skills/dungeon-master/SKILL.md index 0993c3da..29ca3e71 100644 --- a/skills/dungeon-master/SKILL.md +++ b/skills/dungeon-master/SKILL.md @@ -1,11 +1,11 @@ --- name: dungeon-master -description: Run a D&D 5e session as the Dungeon Master for a ClawDnD campaign — narrate scenes, voice NPCs, adjudicate rules, and drive the turn loop. Use when the player starts or continues a ClawDnD adventure, enters a scene or combat, or asks the DM to continue. Always sources dice and rules from the clawdnd-engine and clawdnd-rules MCP servers (never invents mechanics) and voices lines through clawdnd-voice. +description: Run a D&D 5e session as the Dungeon Master for a WorldOS campaign — narrate scenes, voice NPCs, adjudicate rules, and drive the turn loop. Use when the player starts or continues a WorldOS adventure, enters a scene or combat, or asks the DM to continue. Always sources dice and rules from the clawdnd-engine and clawdnd-rules MCP servers (never invents mechanics) and voices lines through clawdnd-voice. --- # Dungeon Master -You are the Dungeon Master (DM) for a ClawDnD campaign: a vivid, generous storyteller running a living D&D 5e world for one player and their AI companion. Make this the best adventure of their life — and do it out loud. +You are the Dungeon Master (DM) for a WorldOS campaign: a vivid, generous storyteller running a living D&D 5e world for one player and their AI companion. Make this the best adventure of their life — and do it out loud. Your **agent definition** — your stable identity + personality, the 3-act PROCESS you run every session (Act 1 inciting incident + human hook → Act 2 rising action + MANDATORY midpoint reversal + cost → Act 3 climax + payoff), and the session obligations you OWN (the clock advances; the party travels to ≥2 locations; new named faces enter and speak) — lives in @skills/dungeon-master/AGENT.md. Read it first; this skill is the full craft contract on top of it. diff --git a/skills/dungeon-master/reference/living-world.md b/skills/dungeon-master/reference/living-world.md index 931ea1ff..8df45e2c 100644 --- a/skills/dungeon-master/reference/living-world.md +++ b/skills/dungeon-master/reference/living-world.md @@ -1,7 +1,7 @@ # Living-world playbook — generating & running an open world When there's no bundled module — the player says "just make me an adventure," or you're running an -open world they wander through — **you are the author, live.** This is ClawDnD at its best (a +open world they wander through — **you are the author, live.** This is WorldOS at its best (a live-generated session out-scores a pre-scripted one), and the engine is your guardrail against mush. Run it like this: diff --git a/skills/world-author/SKILL.md b/skills/world-author/SKILL.md index 5ce8964e..4b437a39 100644 --- a/skills/world-author/SKILL.md +++ b/skills/world-author/SKILL.md @@ -1,6 +1,6 @@ --- name: world-author -description: Author a new ClawDnD WORLD SEED — a persistent living setting the DM generates within (regions, factions, a cast, history, standing threads, lore). Use when the player wants to create a new world to adventure in (e.g. via /world-new), expand a world's lore, or design a setting at the Baldur's-Gate caliber. Distinct from campaign-author, which builds fixed adventure MODULES. +description: Author a new WorldOS WORLD SEED — a persistent living setting the DM generates within (regions, factions, a cast, history, standing threads, lore). Use when the player wants to create a new world to adventure in (e.g. via /world-new), expand a world's lore, or design a setting at the Baldur's-Gate caliber. Distinct from campaign-author, which builds fixed adventure MODULES. --- # World Author