You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .claude/skills/byoa-link/SKILL.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -147,10 +147,10 @@ Path: `--out` value, or `<main-repo-root>/.env.byoa` if not provided. **Never wr
147
147
Resolve the main repo root with `git rev-parse --path-format=absolute --git-common-dir` — its parent is the main worktree root whether the caller is in the main checkout or a linked worktree. The `env.byoa.example` template also lives at that root.
Copy file name to clipboardExpand all lines: .claude/skills/load-quests/SKILL.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Load Quest Data
2
2
3
-
Loads quest definitions from JSON files in `quest-data/` into Supabase.
3
+
Loads quest definitions from `GRADIENTBANG_QUEST_DATA_DIR` (`data/quests/` by default) into Supabase.
4
4
5
5
## Parameters
6
6
@@ -20,17 +20,17 @@ set -a && source .env.supabase && set +a
20
20
21
21
Upsert mode (default — updates existing quests, inserts new ones):
22
22
```bash
23
-
uv run -m gradientbang.scripts.load_quests_to_supabase --from-json quest-data/
23
+
uv run -m gradientbang.scripts.load_quests_to_supabase
24
24
```
25
25
26
26
Force mode (wipes all quest definitions and reloads from scratch):
27
27
```bash
28
-
uv run -m gradientbang.scripts.load_quests_to_supabase --from-json quest-data/ --force
28
+
uv run -m gradientbang.scripts.load_quests_to_supabase --force
29
29
```
30
30
31
31
Dry run (validate JSON files without writing to database):
32
32
```bash
33
-
uv run -m gradientbang.scripts.load_quests_to_supabase --from-json quest-data/ --dry-run
33
+
uv run -m gradientbang.scripts.load_quests_to_supabase --dry-run
34
34
```
35
35
36
36
### 3. Verify
@@ -39,7 +39,7 @@ Confirm the output shows "Success!" and check the stats summary for expected que
39
39
40
40
## Important notes
41
41
42
-
- Each `.json` file in `quest-data/` represents one quest chain. The loader picks up all `*.json` files in the directory.
42
+
- Each `.json` file in `GRADIENTBANG_QUEST_DATA_DIR` represents one quest chain. The loader picks up all `*.json` files in the directory.
43
43
- The loader upserts by quest `code`, so it's safe to re-run after editing quest data.
44
44
-`--force` deletes ALL quest definitions (cascades to steps and subscriptions) before reloading. Player quest progress (`player_quests`, `player_quest_steps`) is NOT affected — but orphaned progress rows will reference deleted step IDs.
45
45
- If you get a PostgREST schema cache error, run: `docker exec supabase_db_gb-world-server psql -U postgres -d postgres -c "NOTIFY pgrst, 'reload schema'"` then retry.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
## [0.6.0] - 2026-05-26
11
+
12
+
### Changed
13
+
14
+
- Centralized runtime configuration in `gradientbang.config` using `pydantic-settings`.
15
+
- Repository structure tidy-up and runtime module reorganization under `src/gradientbang/runtime/`.
16
+
- Migrated to the latest Pipecat SubAgents spec — `PipelineWorker`-hosted `Orchestrator`, bus-based `TaskAgent` workers, and the universal wake-up handshake aligned to the current `pipecat-ai-subagents` API.
17
+
- New-player onboarding now keeps the generated mega-port route as session-scoped private TaskAgent startup context for player-ship tasks, controlled by `BOT_NEW_PLAYER_ONBOARDING`.
18
+
- Local player-ship TaskAgents are now one-task workers like local corp-ship TaskAgents; completed player tasks end and remove their worker instead of reusing an idle pipeline.
19
+
- Text input now waits on Pipecat user-mute events via `app_resources`, matching voice turn sequencing.
-`src/gradientbang/game/` - game API client and event transport adapters
17
18
-`deployment/supabase/functions/` - all game server logic
18
19
-`client/` - web client for the game
19
20
20
21
## Bot architecture
21
22
22
-
`bot.py` creates all components and wires them together:
23
+
Core runtime shape:
23
24
24
-
-**MainAgent** (inline in `bot.py`) - `BaseAgent` owning transport pipeline (STT/TTS) with `BusBridgeProcessor`
25
-
-**VoiceAgent** (`subagents/voice_agent.py`) - `LLMAgent` with 16 game tools; spawns TaskAgent children per task, broadcasts game events to bus
26
-
-**TaskAgent** (`subagents/task_agent.py`) - `LLMAgent` with 31 game tools; self-contained autonomous agent, receives events via bus
27
-
-**EventRelay** (`subagents/event_relay.py`) - single game event subscriber, declarative routing engine; feeds VoiceAgent which distributes to TaskAgents via bus
28
-
-**UIAgent** (`subagents/ui_agent.py`) - parallel pipeline branch for autonomous UI control (not on bus)
25
+
- The web client connects to the bot over WebRTC. Audio uses the WebRTC transport; RTVI messages flow both ways for client/server events and custom client messages.
26
+
-`bot.py` builds the live Pipecat voice pipeline: transport, STT, voice LLM, TTS, aggregators, and the `player``PipelineWorker`.
27
+
- The `player` worker owns Pipecat lifecycle and bus identity. The voice LLM runs inline in this pipeline.
28
+
-`Orchestrator` is a plain Python coordinator attached to the `player` worker. It owns session bootstrap, voice tools, client-message routing, event relay integration, task lifecycle, BYOA, and shutdown.
- Edge Functions mutate database state and emit game events. The database is the source of truth for world state, ships, corporations, tasks, events, and BYOA config.
31
+
-`EventRelay` receives game events and routes them to RTVI, voice LLM context, and the subagent bus.
32
+
-`VoiceRuntime` binds the voice tool schema to Orchestrator handler methods.
33
+
-`TaskAgent` workers are children of the `player` worker and communicate with Orchestrator over bus messages.
34
+
- BYOA agents use the same bus protocol as in-process task agents, but are externally hosted and woken by the runtime.
29
35
30
-
Tool schemas are defined once in `src/gradientbang/tools/` and shared by VoiceAgent, TaskAgent, and UIAgent.
31
-
32
-
See `src/gradientbang/pipecat_server/subagents/CLAUDE.md` for detailed architecture docs.
36
+
Tool schemas live in `src/gradientbang/runtime/tool_schema.py`.
33
37
34
38
## Local dev (quick)
35
39
@@ -48,6 +52,7 @@ See `src/gradientbang/pipecat_server/subagents/CLAUDE.md` for detailed architect
48
52
- To run Supabase edge functions: `npx supabase functions serve --workdir deployment --no-verify-jwt --env-file .env.supabase`.
49
53
- To start the bot: `set -a && source .env.supabase && set +a && uv run bot --host 0.0.0.0`.
50
54
- If you need to run edge functions or start the bot, redirect ALL output to a file. Do NOT use `tee`; use `head`, `tail`, `grep`, etc. to inspect log files.
55
+
- All Python env vars are inventoried in `src/gradientbang/config.py`. When adding or removing an env var anywhere in the Python code, keep that file in sync.
0 commit comments