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
## Related Issue
No tracked issue — internal reconciliation pass. Stacked on #306; review
that one first.
## Problem
Six independent defects and small features, none of which were reachable
from the CLI or server as shipped:
- Print mode (`pythinker -p`) ignored `PYTHINKER_DISABLE_TELEMETRY` and
never attached a sink to the client the process-wide crash handlers
report through, so print-mode crashes went unreported.
- `pythinker upgrade` could only be answered interactively, so scripts
and non-interactive shells were shown the manual install command
instead.
- Every session open was counted twice in telemetry: the harness and the
engine each emitted `session_started`, and the provider/reload commands
mirrored the engine's `model_switch`.
- The `staleGuard` feature had no consumers but still owned a replayable
state key and two wire records.
- Goal time budgets were capped at 24 hours and kept accruing while the
session was closed, so a long goal could return already over budget
without doing any work.
- Image and video filenames were dropped: the gateway re-derived a name
from the mime type or the stored file.
## What changed
- **Print telemetry** — the config value routes through
`shouldEnableTelemetry` (which honours the env var), and the v1 pipeline
is initialized beside the v2 cloud appender so crash handlers have a
sink. The session id and resolved model are reconciled once known.
- **`upgrade -y/--yes`** — skips the confirmation and installs directly.
The existing native-install path keeps its own no-confirmation
behaviour.
- **Telemetry dedup** — harness-assembled clients drop the engine's
`session_started`; direct `SDKRpcClientV2` consumers keep it, since it
is their only producer. `activateModelAfterLogin` now reports whether
the engine already tracked the switch, so the command layer stays the
producer for exactly the paths it does not.
- **`staleGuard` removed** — replay still works for wires that carry the
retired records: the dispatcher skips them without a warning, and the
visualizer declares both record shapes locally.
- **Goal budgets** — no upper duration limit, time accrues only while
the agent is live, and an active goal pauses when its agent closes so
resume continues with the remainder.
- **Media names** — image and video parts carry an optional name through
the wire contract; an unsupported-format image keeps that name in the
notice and in the file written to the attachments directory.
Two things worth a reviewer's attention:
- `v1↔v2` goal parity now pins one deliberate difference. v2 reports
`Paused after agent closed`; v1 reports `Paused after agent resume`
because agent-core v1 has no agent close hook to attach the behaviour
to. Every other field still compares in full, and each engine's own
reason is asserted explicitly.
- The `dist-web` bundle is restaged in the media-names commit because
`packages/protocol` and `packages/transcript` are web build inputs. Only
`.web-bundle-manifest.json` changed.
## Checklist
- [x] I have read the
[CONTRIBUTING](https://github.com/PyModel/pythinker-code/blob/main/CONTRIBUTING.md)
document.
- [ ] I have linked a related issue (external PRs: the issue must have a
maintainer's `/approve`).
- [x] I have added tests that prove my feature works.
- [x] Ran `gen-changesets` skill, or this PR needs no changeset.
- [x] Ran `gen-docs` skill, or this PR needs no doc update.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added `-y, --yes` to install upgrades without confirmation.
* Preserved image and video filenames across prompts, sessions, and
history.
* **Bug Fixes**
* Goal timers now pause while sessions are closed and resume with
remaining time.
* Removed the 24-hour limit on goal time budgets.
* Print mode now respects telemetry disable settings.
* Improved session reload, model-switch tracking, telemetry, and
compatibility with older sessions.
* **Documentation**
* Updated goal timing and upgrade command documentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
0 commit comments