Skip to content

Release 2026.9.17 - #66

Closed
daocha wants to merge 15 commits into
mainfrom
develop
Closed

daocha wants to merge 15 commits into
mainfrom
develop

Conversation

@daocha

@daocha daocha commented Sep 16, 2026

Copy link
Copy Markdown
Owner

No description provided.

daocha and others added 14 commits September 17, 2026 03:30
* Normalize provider strings and fall back to a generic "Agent" label instead of hardcoded "Codex" when rendering output. 

* Add support on the claude code interactive mode (relay-back mode). Replace the previous stdin-interception approach (which didn't work since Claude runs headless via -p and never blocks on stdin) with detection of "which option" style replies, offering them as buttons that simply resend the chosen option as the next chat message.

* Show reply-option buttons under full option text with an action-needed prompt

---------

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
… sessions (#55)

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Improve multi-question handling, long-idle session safety, session metadata, and priming behavior across Claude, Codex, and Copilot.

* Resolve Claude Code multi-question replies, including questions wrapped in Markdown emphasis. Require multiple question labels before suppressing reply-option buttons so legitimate menus with a single question-style option still work.
* Add provider-aware long-idle session detection to warn about potential prompt-cache misses and token spikes before resuming.
    * Offer Compact, Proceed Anyway, and Switch/New Session actions.
    * Support incrementing -resumeN names for compacted sessions.
    * Apply checks consistently to both text and photo messages.
    * Add provider-specific context-size gates so small sessions don’t trigger unnecessary warnings.
    * Claude and Codex default to a 60-minute idle threshold; Copilot warnings are disabled by default because it has no documented inactivity timeout and performs native context compaction.
* Fix long-gap confirmation handling:
    * Prevent “Proceed anyway” from repeatedly triggering the same warning.
    * Preserve held messages when compaction fails or the workspace is busy.
    * Prevent message reordering when replaying held messages.
    * Prevent photos or concurrent Telegram messages from overwriting pending confirmations or silently dropping messages.
    * Queue concurrent text messages correctly and reject conflicting photos cleanly.
* Improve long-gap performance and correctness:
    * Move blocking filesystem/SQLite checks to asyncio.to_thread.
    * Add an activity-check cache without hiding sessions as they cross the idle threshold.
    * Don’t cache unknown activity and clean expired cache entries.
    * Consolidate provider threshold/size-gate configuration and activity dispatch.
    * Deduplicate Codex state DB lookup/query logic.
    * Fix provider normalization/fallback handling.
    * Fix size-gate/usage detection when errors produce zero-token or synthetic Claude transcript entries.
* Harden unresumable-session handling:
    * Detect Claude’s structured “No conversation found” failure via error_code="session_not_found".
    * Narrow Claude matching so unrelated errors mentioning “resume” don’t incorrectly create replacement sessions.
    * Retain generic fallback detection for Codex/Copilot where structured signals aren’t available.
* Make priming/replacement-session permissions consistent:
    * Codex priming now forces approval_policy=never and sandbox_mode=read-only.
    * Copilot correctly honors priming_only, preserving configured autopilot/permission/tool flags for real replacement-session requests while keeping actual priming restricted.
    * Add tests ensuring /new and /compact bootstrap calls remain explicitly priming_only=True for Claude, Codex, and Copilot.
* Improve session information:
    * /switch now shows native Last active: X ago and approximate token usage with compact formatting.
    * /current shows the same activity/token information.
* Add configurable maximum agent reply-option tokens.
* Expand regression/config tests, including checks that long-gap provider tables stay synchronized with SUPPORTED_PROVIDERS and AppConfig.
* Localize all new long-gap, photo-conflict, and session-info strings across all supported locale JSON files.
* Update all localized READMEs with long-gap behavior, provider thresholds, size gates, claude --resume/FAQ notes, and related session behavior.
* Standardize the zh-HK FAQ wording to written Traditional Chinese and fix stale configuration comments.

Co-authored-by: DCHA Agent 259406208+dcha-agent@users.noreply.github.com
Co-authored-by: Claude Sonnet 5 noreply@anthropic.com
Co-authored-by: Claude Opus 5 noreply@anthropic.com
* Write claude rate limit / usage used in state.json

* Move claude rate limit / usage to claude_rate_limit.json

* Add expiry mechanism for claude rate limit / usage data

---------

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
…hs (#57)

  - Batch up to 5 album images into one AI request; reject oversized/excess images
  - Preserve album ordering when text follows immediately
  - Enable Copilot image-path prompts and shorten attachment filenames
  - Localize album-limit errors across all supported languages

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
…d auto recover for network issue (#58)

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
* Detect and self-serve fix Claude Code headless auth failures

Adds reactive detection for the "OAuth session expired" failure across
/new, resume, and message paths, plus a `claude-auth` CLI/startup.sh
subcommand to save a `claude setup-token` result with interactive,
opt-in, cheap-model verification and automatic rollback on failure.
Documents the fix in the README and all locales.

* Fix zh-HK Claude-auth FAQ entry: standard Chinese, no duplicate heading

* Fix duplicate FAQ heading in README.zh-CN.md and README.zh-TW.md

---------

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
* Add /model command to pick a model for the active session
Lets users switch models per-session via inline buttons or /model <id>
(validated against the CLI before saving), scoped per provider and
persisted in state.json. New sessions always fall back to the
provider's configured default model.

* Add missing translations

* Update default model choices fallback to .env.example

---------

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…62)

* Add a portable Python recovery supervisor for installed commands

    - Route package and module entry points through the supervisor while retaining direct CLI execution for child processes.

    - Restart crashed or stale polling processes with DNS-aware backoff and orphan-process cleanup.

    - Simplify the repository startup script to delegate supervision and document installed-command recovery behavior.

---------

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Enable Telegram reply-option detection for Codex and Copilot sessions as well as Claude.

Add parameterized coverage for Claude, Codex, and Copilot choice callbacks.

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Add safe Git log and reset workflows

Add /log and two-step /reset flows, refresh remote targets before hard reset, and localize command descriptions and documentation.

Guard Git commands against session branch discrepancies, detached HEAD states, stale callbacks, branch changes, and concurrent workspace mutations.

Bind commit, diff, pull, push, and reset actions to tokenized session context and paginate bounded diff file listings.

Parse NUL-delimited Git status output for special filenames and escape branch references safely for Telegram Markdown.

Expand regression coverage across callback lifecycle, locking, localization, pagination, and failure paths.

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
* fix(queue): apply long-gap confirmation before queued resumes

Route grouped and individual queued questions through the same idle-session check as direct messages.

Hold warned queue batches as pending messages, prevent concurrent messages from jumping ahead, and avoid duplicate prompts after Proceed anyway.

Add coverage for grouped queue batches resuming an idle session.

* fix(queue): avoid duplicate messages after project recovery

Transfer queued messages waiting on project, provider, or branch setup to persistent pending-action ownership.

Remove the claimed queue file only for deferred prerequisite flows while preserving retry behavior for real execution failures.

Preserve the original Telegram reply target when a queued message resumes through /project or another control flow.

Add regression coverage for renamed project recovery, single execution, and correct reply association.

---------

Co-authored-by: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
@daocha daocha closed this Sep 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant