Expose large_output_file_path on TaskShellProgress so clients can read complete shell-task output
Nessuno ha ancora preso questa issue.
- Lingua principale
- Shell
- Stelle
- 11.2k
- Fork
- 1.9k
- Merge medio
- 14h 16m
- PR unite (30g)
- 6
Descrizione
Describe the feature or problem you'd like to solve
TaskShellProgress.recentOutput is a small rolling window (~10 lines / ~80 chars). A client polling it to display a running shell task shows a lossy sample presented as the tail. Measured at 2s polling against a 10 lines/sec producer — consecutive polls are disjoint, so ~half the output is unobservable:
| poll | lines | first | last |
|---|---|---|---|
| 1 | 10 | 3 | 12 |
| 2 | 10 | 21 | 30 |
| 3 | 10 | 39 | 48 |
| 7 | 10 | 113 | 122 |
A complete log already exists. With largeOutput enabled the runtime writes a full, gap-free file — including for attached tasks (400 lines → bytes=3492 first=1 last=400 contiguous=true). The runtime knows the path: shell_attached_session_read returns recent_output, large_output_file_path, large_output_total_bytes.
The wire contract drops the last two, so clients cannot find the file.
Proposed solution
In schemas/api.schema.json, add to TaskShellProgress:
"largeOutputFilePath": { "type": "string" },
"largeOutputTotalBytes": { "type": "integer" }
Optional, populated only when largeOutput is enabled and the threshold has been crossed — no change for existing consumers.
This must happen in the CLI: TaskShellProgress is defined here and the SDK's rpc.d.ts is generated from this schema (AUTO-GENERATED FILE - DO NOT EDIT / Generated from: api.schema.json). The definition also sets "additionalProperties": false, so the field is actively forbidden on the wire — no client-side or SDK-side change can surface it.
Example prompts or workflows
A GUI host showing live build output for a long-running shell task. Today it must poll recentOutput and stitch samples, knowingly dropping content.
Clients cannot work around this: largeOutput is session-scoped (fixed at createSession; no per-message option, no mid-session config update), so a directory-per-task mapping isn't possible. Concurrent tasks do get separate files, but creation order does not follow task order — tasks listed 1,0 produced files in reverse — so ctime correlation is unsafe. That leaves content-matching heuristics, which are genuinely ambiguous while two tasks emit identical output.
Additional context
- Still absent in 1.0.11:
TaskShellProgressunchanged (3 fields),largeOutputappears 0 times inrpc.d.ts, whilerpc.d.tsgrew ~109KB with other features — looks unaddressed rather than deliberate. - The file is written incrementally (one tracked its task from t=23s to t=44s), so exposing the path enables a real live tail.
- It appears only after the size threshold is crossed (~17s in one probe); brief absence is expected and easy to handle.
TaskShellInfo.logPathdoesn't cover this — documented as detached-only, whereaslarge_output_file_pathis on the attached read path.- Related but distinct: #2984 (session-state trace logging for replay/forensics — different consumer and timing; neither request satisfies the other). The
largeOutputissues oncopilot-sdk(#1788, #2158, #2161) concern the config not being honored; here it was honored.
Guida per i contributori
Apri 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.
Direzione di ricerca
Inizia in schemas/api.schema.json, alla definizione di TaskShellProgress, quindi esamina il percorso di generazione di rpc.d.ts, che è indicato come generato da quello schema. Verifica come vengono rappresentati i campi opzionali e controlla i test pertinenti dello schema CLI o di convalida dell'API. Il lavoro è completato quando l'avanzamento delle attività collegate può esporre il percorso dell'output di grandi dimensioni e il conteggio totale dei byte quando disponibili, senza interrompere i consumer esistenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- shell
- Ambito
- api, cli
- Tipo di issue
- Funzionalità
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Attiva
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 78/100