Skip to content

v0.148.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 01:32
· 272 commits to main since this release
de38b7b

protoAgent v0.148.0

Chat and Delegates

  • @ several participants in one message. The fan-out is sequential — each participant reads the thread before the next is addressed — and the combined reply attributes each voice (#3042).
  • Chat messages can address a delegate directly with @name; the exchange is recorded in the conversation, and the delegate sees the room it was called into (#3037).
  • A chat shows its cast, derived from the transcript rather than tracked as client state, and a chain renders as the several messages it actually was (#3049, #3051).
  • Adding a delegate now shows up in the @ menu without reloading the page (#3042).
  • Reply-text agent-to-agent addressing is removed: ACP subordinates can no longer pull other participants into a room, a routing capability they should not have had (#3050).
  • A doubled ACP reply is collapsed, loudly, and an empty one is retried before it counts as a failure (#3100, #2991).
  • Truncated and chunk-corrupted A2A delegate replies are fixed, and the ACP delegation timeout default rises to 30 minutes, overridable per call (#3085, #3091).
  • A reattached paused turn gets its HITL buttons back, and a reattached completed turn keeps its trailing answer (#3082, #3110).

Telemetry and Observability

  • CLI coder runs are recorded in telemetry under a coder:<delegate>:<id> origin, with duration and tool calls. Tokens and cost record as zero: the coder bills its own subscription and protoAgent never observes those numbers (#3015).
  • Flagged-outlier turns are measured against their own model's median, so coder rows no longer flood the anomaly list or hide genuine gateway spikes (#3015, #3041).
  • A delegation to an A2A peer bills the peer's reported cost and tokens to the calling turn, and a hostile peer can no longer erase that turn's telemetry row (#3016, #3038).
  • A coder run no longer books another run's effort (#3040).
  • One malformed member record no longer 500s the whole fleet telemetry rollup (#3018).
  • prompts.max_calls (default 5000) governs prompt-snapshot retention, and /prompt reports which cap is actually evicting (#3019).

Tracing, Secrets and Credentials

  • Langfuse tracing is configurable through tracing.* in config or Settings ▸ Tracing instead of environment variables only — which desktop fleet members had no way to set (#3017).
  • Config can no longer choose the destination for deployment-owned Langfuse credentials. Upgrade action: if you set the key pair in the environment and named a tracing.host in config, those traces move to LANGFUSE_HOST — export it to keep the destination you had (#3039).
  • Secrets are redacted from tool output before it reaches the transcript (#3070).
  • Agents can change their own operational config, if you let them. The guarded set_config tool is off by default (tools.self_config_enabled), lead-agent only, and refuses security, auth, secrets and executable paths outright (#3098).
  • Codex OAuth recovers from a burned refresh token instead of wedging: a rejected refresh re-imports the CLI's current credential, so codex login is finally enough to fix it (#3108).
  • A 401 from an A2A peer now says what to do about it (#3080).

Plugins and Extensibility

  • sdk.plugin_store() gives a plugin its own writable directory, scoped to the instance, replacing hand-rolled path logic (#3057).
  • Plugin views can contribute items to the console's context menu; the Docs view is the first to use it, for actions like "Copy as markdown" (#3030).
  • Plugin install and update land with an atomic directory swap, so a failed move never leaves a broken install (#3075).
  • The plugin API now has a reference tier generated from the code and gated in CI, and a stale generated page prints a diff of what drifted (#3057, #3099).
  • "Extend" is a top-level docs destination, with a plugin-view bridge reference, a first-plugin tutorial and an architecture page (#3057).

Console and Configuration

  • Settings ▸ Model lists every connected provider instead of gating on the active one, and provider/model coherence is validated across all slots at config load rather than at first dispatch (#3097, #3104).
  • The Inbox and Activity utility-bar pills are now one unified feed, and scheduled or autonomous results render as compact, expandable cards (#3029, #3028).
  • Gource visualization scripts render the repo's history as a growing contribution tree (#3094).
  • The starter-tools reference is a usable index of the core tool set again, and python -m evals.runner --tasks now says when an id doesn't exist instead of silently running fewer cases (#3055, #3059).

What's Changed

  • feat: Merge Activity + Inbox into a single unified feed widget (#3029) by @mabry1985 in #3031
  • fix(telemetry): one bad member no longer 500s the fleet rollup (#3018) by @mabry1985 in #3023
  • fix(prompts): make the cap that actually governs snapshot retention reachable (#3019) by @mabry1985 in #3026
  • feat(telemetry): record every CLI coding-agent run (#3015) by @mabry1985 in #3024
  • fix(telemetry): bill an A2A peer's reported cost-v1 to the calling turn (#3016) by @mabry1985 in #3025
  • feat(tracing): configure Langfuse from config, not env only (#3017) by @mabry1985 in #3027
  • docs(telemetry): catch the docs up with the #3015#3019 batch by @mabry1985 in #3034
  • feat: Compact expandable cards for scheduled/autonomous task results (#3028) by @mabry1985 in #3033
  • feat: fix: detect and retry empty ACP delegate replies before counting a failure (protoAgent#2991) by @mabry1985 in #3035
  • feat(console): plugin views contribute context-menu items over the bridge (#3030) by @mabry1985 in #3036
  • feat: S1: Server-side @DeleGate dispatch — parse @name prefix and route to delegate by @mabry1985 in #3043
  • fix(docs): name the real cause when a docs fetch fails by @mabry1985 in #3037
  • fix(tracing): pair the Langfuse host with the layer that supplied the keys (#3039) by @mabry1985 in #3044
  • fix(observability): outliers() keeps an absolute cost signal and a comparable fallback (#3041) by @mabry1985 in #3045
  • fix(delegates): bound a peer's self-reported cost-v1 numbers at the parse boundary (#3038) by @mabry1985 in #3046
  • fix(coder): a run books its own effort, never the previous run's (#3040) by @mabry1985 in #3047
  • docs(tools): make starter-tools an index of the real tool set by @mabry1985 in #3055
  • feat(chat): record the @DeleGate exchange in the room, and catch the delegate up (#3042) by @mabry1985 in #3048
  • fix(evals): finish the daily_log removal; unique eval case ids by @mabry1985 in #3056
  • fix(evals): warn when --tasks names a case id that doesn't exist by @mabry1985 in #3059
  • feat(console): show who answered, and complete @ from the roster (#3042) by @mabry1985 in #3053
  • feat(chat): agents can pull each other into the room, off by default (#3050) by @mabry1985 in #3060
  • docs(plugins): generate the plugin API reference from the code, and gate it by @mabry1985 in #3058
  • feat(sdk): plugin_store() — a plugin's own writable dir, scoped to the instance by @mabry1985 in #3066
  • revert(chat): remove reply-text agent-to-agent addressing (#3050) by @mabry1985 in #3067
  • docs(plugins): bus topic catalog, guide trim, and three stale citations by @mabry1985 in #3081
  • fix(console): the @ menu goes stale until a page reload (#3042) by @mabry1985 in #3079
  • fix(delegates): make an A2A peer's 401 actionable by @mabry1985 in #3080
  • feat: fix(installer): atomic plugin directory swap on install/update (#3075) by @mabry1985 in #3086
  • feat: No way to dismiss a settled tool-call card after cancelling a delegation by @mabry1985 in #3096
  • test: a stale generated page prints what drifted, not just its name by @mabry1985 in #3099
  • feat(chat): @ several participants in one message (#3042) by @mabry1985 in #3095
  • fix(acp): collapse a doubled reply, loudly by @mabry1985 in #3100
  • feat: Settings ▸ Model: show a connected-providers list, not a single active-provider gate by @mabry1985 in #3101
  • feat(console): a chain renders as the several messages it was (#3051) by @mabry1985 in #3063
  • feat(tools): let an agent change its own operational config, fenced by @mabry1985 in #3103
  • feat(chat): the cast of a chat — derived, told to the lead, composing the address (#3049) by @mabry1985 in #3062
  • feat: fix(reattach): handle input-required / rejected / auth-required states in reattach + watchdog (#3082) by @mabry1985 in #3088
  • feat: feat(security): redact secrets from tool output before it reaches the transcript (#3070) by @mabry1985 in #3089
  • feat: Reattach after toggling fleet agents can drop a completed turn's trailing text by @mabry1985 in #3104
  • feat: Validate/reconcile model provider+name coherence across ALL slots on config load and provider switch by @mabry1985 in #3105
  • feat: fix(delegates): raise default ACP delegation timeout + make it configurable per-call (#3091) by @mabry1985 in #3106
  • feat: fix(delegates): diagnose and fix truncated + chunk-corrupted A2A delegate replies (#3085) by @mabry1985 in #3107
  • fix(oauth): recover from a burned Codex refresh token instead of wedging by @mabry1985 in #3108

Full Changelog: v0.147.0...v0.148.0