session_start and task_classified telemetry fire once per user turn, not once per session
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- observability
Direzione di ricerca
Inizia in packages/opencode/src/session/prompt.ts, in loop() intorno alle righe 364 e 498, poi esamina il blocco di telemetria intorno alla riga 939 e il modo in cui sono disponibili lo stato con ambito di sessione o i messaggi precedenti dell’assistant. Riproduci il problema con tre messaggi ed esamina la telemetria. Il lavoro è completato quando ogni sessione emette un session_start e un task_classified dal turno di apertura, mentre il trace intenzionalmente eseguito per ogni loop alla riga 1088 rimane invariato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
session_start and task_classified are emitted once per user turn, not once per session. Session counts in telemetry are therefore inflated by roughly the average number of turns per session, and task_classified re-classifies intent on every turn instead of once from the opening message.
Detail
Both events are emitted from a if (step === 1) block in packages/opencode/src/session/prompt.ts:939:
session_start—packages/opencode/src/session/prompt.ts:953task_classified—packages/opencode/src/session/prompt.ts:1004
step is not session-scoped. It is declared inside loop():
let step = 0—packages/opencode/src/session/prompt.ts:364step++—packages/opencode/src/session/prompt.ts:498
and loop() is invoked once per prompt, i.e. once per user turn. So step === 1 means "first model step of this turn", and the block runs again for every subsequent message in the same session.
Impact
session_startovercounts sessions. A session with N user turns emits Nsession_startevents, all carrying the samesession_id.- Any funnel or retention metric built on
session_startcounts is proportionally wrong. De-duplicating bysession_idat query time recovers the true count, so historical data is salvageable, but no current dashboard is doing that unless it was written with this in mind. task_classifiedreports the intent of whatever the user most recently typed, not the task the session was opened for. Itsconfidencedistribution is also skewed by short follow-up messages ("thanks", "yes", "try again") being classified as tasks.- Cost: an extra pair of tracked events per turn, plus the
classifyTaskIntentregex sweep over up to 2000 characters per turn.
Reproduction
Start a session, send three messages, and inspect the emitted telemetry (or set a breakpoint on the step === 1 block). Three session_start events are emitted with identical session_id.
Suggested fix
Gate both events on something session-scoped rather than on step. Options, roughly in order of preference:
- Check whether the session already has prior assistant messages before emitting — a session that has already produced output is not starting.
- Keep a per-session "already emitted" claim in the telemetry module, similar to how other once-per-session state is tracked.
- Emit at session creation instead of in the prompt loop, which is where the event name says it belongs.
Note that packages/opencode/src/session/prompt.ts:1088 also uses if (step === 1), but that one is intentionally per-loop() (it traces the system prompt once per loop invocation, and the comment there says so). Only the telemetry block at line 939 is affected.
- Lingua principale
- TypeScript
- Stelle
- 815
- Fork
- 135
- Merge medio
- 1g 12h
- PR unite (30g)
- 53
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di AltimateAI/altimate-code
-
test: MCP tests fail when the developer's ~/.claude.json has MCP servers (HOME is not sandboxed)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
AltimateAI/altimate-code#1386 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
AltimateAI/altimate-code#1384 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
AltimateAI/altimate-code#1378 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
AltimateAI/altimate-code#1359 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
AltimateAI/altimate-code#1323 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di AltimateAI/altimate-code
Issue simili
-
needs:triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
ai-discovered
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
jessepollak/home#1627 ·
I maintainer di solito rispondono entro 1 giorno
-
agent-canvas bug llm priority:low ready-for-dev
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
OpenHands/OpenHands#17806 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
radius-project/ai-extensions#923 ·
I maintainer di solito rispondono entro 1 giorno