Commit Graph

68145 Commits

Author SHA1 Message Date
Peter Steinberger
25bc6df8cd refactor(speech-core): remove redundant API back-edge 2026-07-13 22:11:48 -07:00
Peter Steinberger
e278a34331 feat(macos): refresh DMG installer artwork (#107142) 2026-07-13 22:09:36 -07:00
Vincent Koc
ee6d6e7e78 refactor(extensions): remove dead local exports (#107146) 2026-07-14 13:09:20 +08:00
Peter Steinberger
cac097946d feat(ui): devices card action redesign + in-page removal confirm (#107123)
* feat(ui): redesign devices card actions and fix silent stale cleanup

* fix(ui): show device id in removal prompt; keep device glyphs page-local

* fix(ui): drop pending removal prompt on connection reset

* fix(ui): sync device removal prompt locales; attach devices view test containers

* chore(i18n): sync locale bundles for device removal prompt
2026-07-13 22:07:39 -07:00
Peter Steinberger
9c2dc92dd8 refactor(msteams): trim internal exports (#107148) 2026-07-13 22:01:56 -07:00
Peter Steinberger
73838101df refactor(agents): extract attempt stream runtime setup 2026-07-13 22:01:22 -07:00
Peter Steinberger
a6094900b6 fix(ui): stop Raw config editor asking users to switch to Raw (#107116)
* fix(ui): hide form warning in raw config mode

* chore: keep release notes out of fix PR
2026-07-13 21:56:45 -07:00
Hannes Rudolph
a5b2e4167d docs: publish release notes for v2026.7.1 (#107040)
* docs: publish release notes for v2026.7.1

* docs: refine v2026.7.1 release notes
2026-07-13 22:54:04 -06:00
Vincent Koc
7a279741ed fix(plugin-sdk): refresh API baseline hash (#107140) 2026-07-14 12:53:33 +08:00
Peter Steinberger
bf5fb5b760 fix(tui): preserve input across gateway restarts (#107115)
* fix(tui): recover input after gateway reconnects

* refactor(tui): extract submit state helpers
2026-07-13 21:51:38 -07:00
Peter Steinberger
61986571bb fix(plugins): forward-port bundled SDK fallback hardening (#107131)
* fix(plugins): avoid bundled SDK fallback races

* fix(ci): satisfy plugin SDK LOC ratchet

* fix(ci): align fallback forward-port guards

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-13 21:50:46 -07:00
Peter Steinberger
2e58c2bc53 test: accelerate sqlite reliability suite (#107134) 2026-07-13 21:50:36 -07:00
Peter Steinberger
4023eb92d2 feat(android): add foreground Voice Wake (#107081)
* feat(android): add foreground voice wake

* chore(android): refresh voice wake artifacts

* fix(android): refresh voice wake capability readiness

* chore(android): sync voice wake translations

* chore: keep release notes in PR context
2026-07-13 21:48:29 -07:00
zengLingbiao
692cb8dd9b fix(cron): reject non-string values in delivery target validation (#106952)
* fix(cron): reject non-string values in delivery target validation

assertNonBlankStringField had inverted logic — non-string values
(number, boolean, object) were silently accepted because typeof !== 'string'
was grouped with the undefined/null early return. The function name says
'assert non-blank string field' but it was bypassing validation for any
non-string type, defeating the purpose of input validation.

* test(cron): cover invalid delivery fields at entrypoints

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 21:48:15 -07:00
Peter Steinberger
352cf819bc improve: speed up agent command tests (#107107)
* test: avoid plugin discovery in agent command suites

* style: format agent command test imports

* test: preserve agent command mock ordering

* test: classify agent mock state as test support
2026-07-13 21:46:50 -07:00
moguangyu5-design
8419675fa1 fix(session): swallow onRecordError throw to avoid unhandled rejection (#106951)
* fix(session): swallow onRecordError throw to avoid unhandled rejection

* fix(session): settle async record error handlers

* fix(session): assimilate record handler results

---------

Co-authored-by: moguangyu5-design <moguangyu5-design@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 21:45:57 -07:00
Peter Steinberger
05fb55eb7b feat: discover OpenCode and Pi sessions on paired nodes (#106941)
* feat(sessions): add opencode and pi catalogs

* fix(sessions): satisfy catalog lint

* fix(sessions): validate pi storage paths

* fix(sessions): index growing pi transcripts

* refactor(sessions): split pi path resolution

* docs(sessions): refresh catalog map

* refactor(sessions): privatize pi catalog internals

* fix(sessions): validate node catalog payloads

* fix(sessions): harden external catalog discovery

* fix(sessions): normalize catalog transcript data

* refactor(gateway): keep node scope gate compact

* fix(opencode): reject option-like session ids

* fix(sessions): align external id validation
2026-07-13 21:45:53 -07:00
Peter Steinberger
1551fc9e43 test(e2e): isolate Pond baseline MCP tool (#107128) 2026-07-13 21:45:36 -07:00
Peter Steinberger
889b4f7dcf fix(control-ui): rotate branded progress labels (#107111)
* fix(control-ui): rotate branded progress labels

* chore: keep progress note in PR body
2026-07-13 21:42:35 -07:00
Peter Steinberger
111b3a157e refactor(codex): use native SemVer floor comparison 2026-07-13 21:42:23 -07:00
Peter Steinberger
1dc9d47130 refactor(voice-call): remove dead internal exports (#107130) 2026-07-13 21:42:11 -07:00
xingzhou
6b0a835116 fix(diagnostics): prevent broken emoji in long model identifiers (#106986)
* fix(diagnostics): preserve Unicode boundaries in timeline attributes

* fix(diagnostics): keep timeline truncation within LOC guard

* test(diagnostics): strengthen Unicode timeline regression

* test(diagnostics): type Unicode boundary cases

* test(diagnostics): await wrapped timeline call

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 21:41:15 -07:00
Peter Steinberger
861d1d5d53 fix(ui): lock the app root scroll in every host, not just standalone PWAs (#107102)
* fix(ui): lock the app root scroll in every host, not just standalone PWAs

* fix(ui): size mount fallback scroller to the visible viewport
2026-07-13 21:37:37 -07:00
mushuiyu886
ef25cefc8e fix(onepassword): validate audit limit strictly (#106926)
* fix(onepassword): validate audit limit strictly

* test(onepassword): strengthen audit limit coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 21:37:07 -07:00
Peter Steinberger
0ecbbe2382 fix(workboard): keep dispatch inside caller workspace authority (#107087)
* fix(workboard): inherit caller workspace authority

* docs(plugin-sdk): refresh API baseline

* fix(workboard): pin restricted worker authority

* fix(workboard): avoid host git for restricted dispatch

* refactor(worktrees): extract owner matching

* refactor(workboard): reuse sdk workspace helpers

* fix(workboard): narrow cleanup owner

* refactor(workboard): clarify claim value handling

* fix(workboard): inherit caller workspace authority

* test(worktrees): use managed temp directories

* chore: keep release notes in PR body

* fix(workboard): keep internal authority helpers private
2026-07-13 21:36:26 -07:00
Peter Steinberger
96c0e89291 refactor(scripts): share repository file discovery 2026-07-13 21:35:24 -07:00
Peter Steinberger
d45dd28df6 fix(ui): match settings controls to scene styling (#107109)
* fix(ui): match settings controls to scene styling

* chore: leave release notes to release automation
2026-07-13 21:34:48 -07:00
Peter Steinberger
80399ed19b refactor(matrix): trim internal exports (#107126) 2026-07-13 21:33:55 -07:00
Peter Steinberger
f82895d416 refactor(agents): extract attempt prompt phase 2026-07-13 21:32:56 -07:00
Vincent Koc
3a55f8d800 refactor(agents): remove dead test surfaces (#107113) 2026-07-14 12:23:41 +08:00
Peter Steinberger
be5558cb4e fix(plugin-sdk): preserve runtime contexts in test mocks (#107059)
* test(plugin-sdk): make runtime context mock stateful

* docs(agents): record Testbox invocation contracts
2026-07-13 21:21:09 -07:00
Peter Steinberger
66e6923929 test: accelerate session status suite (#107054) 2026-07-13 21:21:00 -07:00
Peter Steinberger
f69e1263d3 fix(ui): restore reload history and bundled icons (#106981)
* fix(ui): restore chat history after reload

* refactor(ui): keep chat pane within size limit

* test(ui): satisfy chat pane lint

* fix(ui): allow bundled Web Awesome icons
2026-07-13 21:20:34 -07:00
Peter Steinberger
504be0c255 fix(release): preserve closeout asset names (#107047) 2026-07-13 21:20:01 -07:00
Peter Steinberger
37c7de0148 refactor(ai): remove redundant tool argument finalization 2026-07-13 21:17:38 -07:00
Peter Steinberger
27f2a45c54 fix(onboarding): harden live inference handoff (#107041)
* fix(onboarding): harden live inference handoff

* fix(crestodian): preserve auto runtime probes

* fix(ci): restore current main lint gates
2026-07-13 21:15:36 -07:00
Jason (Json)
f72e936f26 fix: restore grouped AI auth options in guided onboarding (#107038)
Restore the grouped provider/auth picker for fresh guided onboarding, keep secondary providers under More, expose OAuth and device-code methods, and bound the setup probe session identifier so ChatGPT login is not rejected by the prompt cache key limit.
2026-07-13 22:12:19 -06:00
Peter Steinberger
689edddd34 fix(mattermost): restore strict test lint after refactor (#107079)
* test(mattermost): satisfy strict lint contracts

* test(mattermost): type partial response fixture
2026-07-13 21:09:35 -07:00
Peter Steinberger
632b17618e refactor(agents): extract attempt prompt dispatch phase 2026-07-13 21:06:46 -07:00
Peter Steinberger
c853064a42 refactor(microsoft): simplify Edge TTS output staging 2026-07-13 21:03:51 -07:00
Vincent Koc
63c7c21bdf refactor(core): privatize new internal helpers (#107096) 2026-07-14 12:02:46 +08:00
Peter Steinberger
ea33260491 refactor(agents): privatize prompt error outcome (#107097) 2026-07-13 21:01:48 -07:00
Peter Steinberger
87b2b4eaab refactor(agents): extract session lock preparation 2026-07-13 21:01:28 -07:00
Peter Steinberger
07284af748 test: omit live-only tooling leaf shards (#107088) 2026-07-13 20:56:14 -07:00
Peter Steinberger
8d465d71b5 fix(channels): progress drafts only for long tasks, with the model's own preamble as the status headline (#106026)
* fix(channels): time-gate progress drafts and defer narration until visible

Progress drafts started immediately on the second work event, so the 5s
initial delay never filtered small fast tasks and Discord showed narrated
status for turns that finish in seconds. The gate is now purely time-based
(explicit startNow paths like approvals/patches are unchanged), and the
progress narrator no longer spends utility-model completions before the
channel draft is visible - notes buffer so the first visible narration has
full context.

Surface: src/channels/streaming.ts gate, src/auto-reply/reply/progress-narrator.ts,
Discord draft-preview wiring; test updates across discord/matrix/msteams/slack.

Refs #105872

* feat(channels): model-preamble status headline for progress drafts

In progress mode the draft's status line is now the model's own typed pre-tool
preamble whenever it is fresh (always on, no new config); utility-model
narration fills the slot only when the model has been quiet for ~20s or emits
no preamble. Preambles never start the draft early - the time gate still owns
the small-vs-big decision - and narration generation is suppressed while a
fresh preamble exists, saving utility calls. Discord and Telegram render the
headline; the opt-in streaming.progress.commentary lane and its receipt
counters are unchanged.

Refs #105872

* refactor(channels): split status-text and telegram preview helpers to honor the LOC ratchet

The LOC ratchet forbids raising baseline entries, so the headline feature's
growth is paid for with clean splits: reasoning/commentary text normalization
moves to src/channels/progress-draft-status-text.ts, Telegram progress preview
rendering to extensions/telegram/src/progress-draft-preview.ts, and small
ownership moves (formatCompactionModelRef, resolveFollowupAbortSignal, shared
CLI preamble gate, Discord preamble item-event handling) shrink the runners
back under their pins. Baseline entries lowered to exact new counts; the
compositor entry is removed (424 lines, under the 500 ceiling).

Refs #105872

* test(auto-reply): add resolveFollowupAbortSignal to the queue mock factory

The explicit ./queue.js vi.mock factory must export every binding prod touches;
the relocated resolveFollowupAbortSignal was missing and failed the whole
followup-runner suite.

Refs #105872

* fix(channels): sanitize preamble headlines and retry skipped narration

Review findings: preamble headlines now strip inline delivery directives and
reject silent-control tokens (NO_REPLY) before rendering, sharing the
commentary sanitizer; rejected input keeps the previous valid headline. The
narrator schedules cancellation-aware retries when a run is skipped for draft
invisibility or preamble freshness, so single long tool calls still narrate
and the ~20s utility filler fires without needing another event. Silent
preambles no longer stamp freshness or add narration notes.

Refs #105872

* fix(channels): bound narrator visibility polling and gate Telegram headline mode on accepted preambles

Visibility retries stop after 30 one-second attempts (turn completion has no
narrator disposal signal) and re-arm on new activity; Telegram derives its
headline-rendering state from the compositor's sanitized headline instead of
raw payload text, so directive-only or NO_REPLY preambles keep structured
tool-line rendering. Docs scope the preamble headline to Discord and Telegram.

Refs #105872

* fix(telegram): read headline state from the compositor at render time

The progressHeadlineActive mirror flag was set after pushPreambleHeadline had
already rendered, so the first valid preamble arriving after the draft opened
rendered through the structured-line path and the headline never appeared
until the next event. The renderer and formatLine now read the compositor's
sanitized hasStatusHeadline directly and the mirror flag is deleted; adds an
ordering regression test. LOC baseline lowered to the exact new count.

Refs #105872

* fix(channels): let the opt-in commentary lane own preambles and scope narration docs to Discord

With streaming.progress.commentary enabled, the status headline would replace
the documented interleaved 💬 lines for any turn with a preamble (the exact
event the lane consumes). The compositor headline now declines when the
commentary lane is enabled, preserving that lane's shipped shape, and docs
state the utility-model filler is Discord-only today (Telegram's headline is
preamble-only; it has no narrator wiring).

Refs #105872

* fix(msteams): cancel the pending progress gate at finalize

With the purely time-based gate, every fast Teams progress turn leaves a
pending 5s start timer; the SDK resets its stream id on close, so a late
timer fired renderInformativeUpdate against the closed stream and posted a
stale working card below the final answer. finalize() now cancels the gate
and the informative renderer refuses to run once final text is queued.

Refs #105872

* docs(channels): record the headline-vs-commentary ownership decision inline

Refs #105872

* style: oxfmt the late review-fix rounds

Four files from the final review-fix commits were never oxfmt-formatted and
failed the shared CI formatting step; baseline lowered for the one-line
telegram shrink.

Refs #105872

* fix(channels): harden progress draft lifecycle

* fix(channels): refresh repeated preamble items

* fix(plugin-sdk): expose progress lifecycle options

* style(auto-reply): simplify narrator reset

* docs(channels): refresh progress draft docs map

* fix(auto-reply): clear queued narrator request context

* fix(discord): cancel delayed progress gate at final

* docs: refresh plugin sdk api baseline
2026-07-13 20:55:44 -07:00
Peter Steinberger
53f6212488 test(mattermost): fix slash response mock type (#107084) 2026-07-13 20:48:34 -07:00
Vincent Koc
3aab2ce6a9 refactor(packages): remove dead internal helpers (#107077) 2026-07-14 11:48:14 +08:00
Peter Steinberger
0ab9e625c2 refactor(agents): extract stream finalization phase 2026-07-13 20:47:47 -07:00
Peter Steinberger
e79cbbfb2e refactor(resources): use native minimatch list matching 2026-07-13 20:45:18 -07:00
Peter Steinberger
fe715a1b88 refactor(daemon): trim internal exports (#107075) 2026-07-13 20:43:08 -07:00