Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,13 @@ AGENT_QUALITY_CANDIDATE_TIMEOUT_MS=45000
OPENROUTER_FREE_MODEL_CACHE_MS=600000
OPENROUTER_REQUIRE_NO_TRAINING=1
OPENROUTER_FREE_ALLOW_FILE_EGRESS=0
# Provider-neutral NodeAgent uses OpenRouter's governed free ladder first, then
# this direct Gemini route when free routes are unavailable. Receipts retain the
# catalog price because an account's free-tier entitlement cannot be asserted.
NODEAGENT_FREE_AUTO_GOOGLE_MODEL=gemini-3.5-flash
# Provider-neutral NodeAgent uses OpenRouter's governed free ladder only. This
# direct Gemini route is an opt-in paid leg: it is taken only when the caller sets
# allowPaidFallback AND passes a spend meter (adapter.ts), and no production caller
# does either, so by default a free-route outage is an error, not a paid request.
# Receipts retain the catalog price because an account's free-tier entitlement
# cannot be asserted.
NODEAGENT_FREE_AUTO_GOOGLE_MODEL=gemini-3.8-flash
AGENT_MODEL=gpt-5.4-nano
# Optional voice provider overrides. Browser TTS is the free client default;
# Convex `/voice/*` endpoints are authenticated hosted fallbacks.
Expand All @@ -81,7 +84,7 @@ VOICE_CLOUDFLARE_TTS_MODEL=@cf/myshell-ai/melotts
VOICE_CLOUDFLARE_TTS_LANG=en
GEMINI_API_KEY=
VOICE_GEMINI_TTS_FREE_TIER_CONFIRMED=0
VOICE_GEMINI_TTS_MODEL=gemini-3.1-flash-tts-preview
VOICE_GEMINI_TTS_MODEL=gemini-3.8-flash-tts
VOICE_GEMINI_TTS_VOICE=Kore
VOICE_GEMINI_TTS_INSTRUCTIONS=Read clearly and concisely for a collaborative work room.
GOOGLE_CLOUD_TTS_API_KEY=
Expand Down Expand Up @@ -113,7 +116,7 @@ SEO_QA_GOOGLE_TARGET_PHRASE=NodeRoom collaborative AI room
GOOGLE_SEARCH_CONSOLE_SITE_URL=https://noderoom.live/
GOOGLE_SEARCH_CONSOLE_ACCESS_TOKEN=
GOOGLE_SEARCH_CONSOLE_SERVICE_ACCOUNT_JSON=
GEMINI_SEO_VIDEO_JUDGE_MODEL=gemini-3.5-flash
GEMINI_SEO_VIDEO_JUDGE_MODEL=gemini-3.6-flash
NEBIUS_SEO_JUDGE_MODEL=nebius/MiniMaxAI/MiniMax-M2.5
NEBIUS_SMOKE_MODEL=nebius/MiniMaxAI/MiniMax-M2.5
NEBIUS_ENABLE_VISION_JUDGE=0
Expand Down Expand Up @@ -162,8 +165,8 @@ FREE_JOB_GOAL=
FREE_JOB_TIMEOUT_MS=900000

# Optional server-side parser model overrides.
PROVIDER_PARSER_GEMINI_MODEL=gemini-3.5-flash
PROVIDER_PARSER_GEMINI_MODEL=gemini-3.8-flash,gemini-3.6-flash
PROVIDER_PARSER_OPENAI_MODEL=gpt-5.4-mini
PROVIDER_PARSER_ANTHROPIC_MODEL=claude-haiku-4-5
PROVIDER_PARSER_OPENROUTER_MODEL=z-ai/glm-5.2,moonshotai/kimi-k2.7-code,cohere/north-mini-code:free,nvidia/nemotron-3-ultra-550b-a55b,nex-agi/nex-n2-pro
PROVIDER_PARSER_ANTHROPIC_MODEL=claude-haiku-5-5,claude-sonnet-5-5
PROVIDER_PARSER_OPENROUTER_MODEL=z-ai/glm-5.2,moonshotai/kimi-k2.7-code,cohere/north-mini-code:free,nvidia/nemotron-3-ultra-550b-a55b
PROVIDER_PARSER_ALLOW_FILE_EGRESS=0
6 changes: 3 additions & 3 deletions .tours/01-primary-user-flow.tour
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@
},
{
"file": "src/ui/Chat.tsx",
"line": 1878,
"line": 1879,
"pattern": "const send = \\(raw\\?: string",
"title": "The primary user action",
"description": "`send` is what the Send button calls. Two separate things happen and it matters that they are separate:\n\n1. The message is posted to the room, with a client-generated `clientMsgId` — that id is how a retry updates the same message instead of double-posting it.\n2. Only then is the text inspected to see whether it was addressed to the assistant."
},
{
"file": "src/ui/Chat.tsx",
"line": 1166,
"line": 1167,
"pattern": "function parsePublicNodeAgentRequest",
"title": "Where text becomes intent",
"description": "The assistant that can edit the shared sheet is addressable ONLY as a leading `@nodeagent …` directive. Mentioning it mid-sentence does not summon it.\n\nThis decides intent. It does not decide permission — that happens on the server, in the next step but one."
Expand All @@ -48,7 +48,7 @@
},
{
"file": "convex/agentJobs.ts",
"line": 2782,
"line": 2799,
"pattern": "export const startPublicAsk = mutation\\(",
"title": "Where input becomes trusted (live tier)",
"description": "This is the real trust boundary. Convex validators reject a malformed payload before a job row exists, and `requireActorProof` checks that this browser is actually a member of this room.\n\nThe client-side parse two steps back exists to decide what the user meant. This decides what they are allowed to do."
Expand Down
6 changes: 3 additions & 3 deletions .tours/03-debug-and-recovery.tour
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,21 @@
},
{
"file": "src/ui/Chat.tsx",
"line": 269,
"line": 270,
"pattern": "const MAX_FAILED_SENDS = 50;",
"title": "Failure 3 — a message fails to post, and the list is bounded",
"description": "`MAX_FAILED_SENDS = 50`, FIFO. Every in-memory collection on an agent path needs a cap and an eviction rule; agents loop, and an unbounded list fills memory in minutes rather than months."
},
{
"file": "src/ui/Chat.tsx",
"line": 1943,
"line": 1944,
"pattern": "const retrySend = \\(cid: string, text: string\\)",
"title": "Retry that cannot double-post",
"description": "`retrySend` re-sends with the SAME `clientMsgId`. That id is what makes the retry idempotent at the store, so a user hammering Retry on a flaky connection does not produce five copies of their message."
},
{
"file": "src/ui/Chat.tsx",
"line": 935,
"line": 936,
"pattern": "function buildAgentFailureNotice\\(",
"title": "Failure 4 — the agent fails",
"description": "`buildAgentFailureNotice` turns a provider error into a sentence a non-engineer can act on, carrying which model selection was used, what was asked, and which job it was. A stack trace on this surface is a defect, not a debug aid — this is a surface where a user decides whether to trust the assistant."
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ entries have not been invented or backfilled.
## Quality assurance

- [Benchmark timeout budgets](qa/benchmark-timeout-budgets.md)
- [Model default refresh](qa/model-refresh-noderoom.md)
- [NodeKit note reference proof](qa/nodekit-note-reference-proof.md)

See [TEMPLATE.md](TEMPLATE.md) before adding or editing a lane.
Loading
Loading