Skip to content

release: v0.2.36 - #1118

Merged
XingYu-Zhong merged 77 commits into
masterfrom
develop
Aug 7, 2026
Merged

release: v0.2.36#1118
XingYu-Zhong merged 77 commits into
masterfrom
develop

Conversation

@XingYu-Zhong

Copy link
Copy Markdown
Collaborator

Summary

Prepare the Kun v0.2.36 stable release from develop to master.

Changes

  • Add the user-facing release notes in release/release-v0.2.36.md.
  • Include the current develop changes for Graph, runtime recovery, providers, session daemons, design workflows, CLI/TUI, and release hardening.

Tests

  • npm run typecheck
  • npm run test:graph:platform (darwin/arm64)
  • npm run build
  • npm run lint
  • Full npm run test is still being evaluated locally; required native platform checks are expected from GitHub Actions.

XingYu-Zhong and others added 30 commits August 5, 2026 00:25
…handling

- Added `resolveOpenCodeGoCookie` function to retrieve session cookies from Chromium-family browsers.
- Enhanced `ProviderQuotaService` to utilize web quota data when available, falling back to local estimates if necessary.
- Updated tests to cover new functionality for OpenCode Go subscription usage and cookie resolution.
- Modified error handling to provide clearer messages when credentials are missing.
Restore production audit, Graph module-boundary, and PTY readiness baselines. Keep the macOS updater recovery test on its intended unsigned-updater path.
Keep the packaged extension desktop smoke deterministic by skipping updater initialization only when KUN_PACKAGED_EXTENSION_DESKTOP_SMOKE=1. Preserve normal updater behavior for unset and all other values. Also stabilize two Graph timing/concurrency tests exposed by the final Windows validation without changing production Graph behavior.
Add a workspace-scoped reveal action across the shared API, preload bridge, trusted Workbench IPC, and preview toolbar. Require workspaceRoot and resolve a canonical regular file within the workspace before calling Electron showItemInFolder. Add accessible localized UI and boundary/security regression coverage.
Serialize provider synchronization, deletion, rename overlays, explicit re-adds, and shared model selection through one mutation queue. Selection now reads the latest registry revision after queueing, rejects deleted/tombstoned providers, and retries one 409 conflict with the returned revision. Adds concurrency regression coverage for deletion, selection, rename overlays, unrelated settings, and explicit same-ID re-adds.
…resize

- Hide failed prototypes and preview-host errors instead of leaking raw
  paths/ENOENT into the timeline.
- Add an always-visible "Open in canvas" action that imports the chat
  prototype into the Design workspace as a real HTML artifact (deduped via
  importedFromPath) and routes to the board.
- Replace the hidden height-only drag strip with a discoverable corner
  handle resizing width and height (pointer + 4-direction keyboard), with
  per-mode size persistence and legacy height migration.
- Add componentPrototypeOpenCanvas / resize copy for all 7 locales.
Per-session daemons run a workspace script as a long-lived child process
owned by the Electron main process under the desktop-background-services
lease: heartbeat/silence detection, backoff restarts, tail-able logs,
explicit thread binding, and text WeChat pushes via [kun-push] control
frames whose target always comes from the daemon config.

- Independent schedule.daemons settings model (global kill switch + per-item)
- Shared reference-counted PowerSaveController used by ScheduleRuntime and DaemonRuntime
- daemon:status / daemon:restart / daemon:logs IPC plus window.kunGui bridge
- Strict WeChat sendmessage business-response validation (no HTTP-200 fake success)
- Schedule page gains 'Scheduled tasks | Session daemons' tabs, daemon cards,
  create/edit dialog with explicit WeChat channel + conversation push target,
  and a log drawer; i18n keys added for every active locale
Per-session daemons run a workspace script as a long-lived child process
owned by the Electron main process under the desktop-background-services
lease: heartbeat/silence detection, backoff restarts, tail-able logs,
explicit thread binding, and text WeChat pushes via [kun-push] control
frames whose target always comes from the daemon config.

- Independent schedule.daemons settings model (global kill switch + per-item)
- Shared reference-counted PowerSaveController used by ScheduleRuntime and DaemonRuntime
- daemon:status / daemon:restart / daemon:logs IPC plus window.kunGui bridge
- Strict WeChat sendmessage business-response validation (no HTTP-200 fake success)
- Schedule page gains 'Scheduled tasks | Session daemons' tabs, daemon cards,
  create/edit dialog with explicit WeChat channel + conversation push target,
  and a log drawer; i18n keys added for every active locale
…resize

- Hide failed prototypes and preview-host errors instead of leaking raw
  paths/ENOENT into the timeline.
- Add an always-visible "Open in canvas" action that imports the chat
  prototype into the Design workspace as a real HTML artifact (deduped via
  importedFromPath) and routes to the board.
- Replace the hidden height-only drag strip with a discoverable corner
  handle resizing width and height (pointer + 4-direction keyboard), with
  per-mode size persistence and legacy height migration.
- Add componentPrototypeOpenCanvas / resize copy for all 7 locales.
…ails

Chain models.dev -> kun-agent.com/api/models when the primary catalog
request fails or times out, then stale cache, then an error. The fallback
uses the same provider-map format, so parsing, provider matching, URL
matching, and cursor enrichment are reused unchanged.

- Track catalog source in the cache so ETag revalidation stays same-source
  and stale results report where the data came from.
- Expose optional source on ModelsDevCatalogResult ok results for logs/UI.
- Normalize fallback provider keys onto models.dev keys via an alias table
  (filled from the real endpoint during integration).
- Keep the fallback request credential-free and bounded (15s timeout).
…cution

Cursor custom tools only carried name/args into Kun's ToolHost, so MCP,
extension, file, and command tools lost their provider id and tool kind
at execution time. The bridge now keeps toolKind in the catalog spec,
normalizes tool names once, and the runtime factory resolves the bridged
spec before executing so providerId/toolKind reach LocalToolHost.

Adds regression coverage for provenance forwarding, name normalization,
per-send custom tools on resumed/forced runs, and plan-mode create_plan
advertising (agent and read-only sandbox gating).
Stream recovery previously forced at least one retry even when the
operator configured maxAttempts: 0, and it silently returned the raw
stream_read_error/stream_truncated error once final text, tool calls,
or generated output had started. Use the normalized retry budget
everywhere so an explicit 0 disables all transport retries, and
annotate exhausted/blocked recoveries with an explicit reason while
keeping the original error code for existing consumers.
feat(schedule): add session-level daemon threads with WeChat push
Automatic compaction now counts the reserved output budget (maxOutputTokens)
against the same hard cap used by the send-time guard, closing the dead zone
where input sits below the soft threshold while input + output already
exceeds the cap (e.g. 725733 + 131072 > 850000). When the final rebuilt
request still exceeds the cap, a single heuristic send-boundary compaction
runs against the latest persisted history (no summary model call), and only
a second failure records context_window_exceeded with structured details.

- ContextCompactor: budget-driven force compaction in planCompaction
- HistoryCompactionService: outcome object, capacity passthrough, CAS retry
  keeps capacity constraints, allowModelSummary=false skips model summary
- ModelStepService: shared capacity model, composeForwardedRequest helper,
  one-shot send-boundary fallback, detailed input_compressed/error details
- tests: dead-zone regression, boundary equality, image-forward fallback,
  no-compactable-history diagnostics; docs updated
XingYu-Zhong and others added 29 commits August 6, 2026 02:51
…ails

Chain models.dev -> kun-agent.com/api/models when the primary catalog
request fails or times out, then stale cache, then an error. The fallback
uses the same provider-map format, so parsing, provider matching, URL
matching, and cursor enrichment are reused unchanged.

- Track catalog source in the cache so ETag revalidation stays same-source
  and stale results report where the data came from.
- Expose optional source on ModelsDevCatalogResult ok results for logs/UI.
- Normalize fallback provider keys onto models.dev keys via an alias table
  (filled from the real endpoint during integration).
- Keep the fallback request credential-free and bounded (15s timeout).
…sion hidden frames

- add undoable deleteCanvasLayers action used by the layers panel trash
  button and Delete/Backspace; locked/hidden layers can be deleted
  explicitly while lock still guards accidental geometry edits
- add per-row Trash2 button to CanvasLayersPanel with canvasLayerDelete
  label in all 7 locales
- persist boardHiddenVersionIds tombstones so a deleted HTML version frame
  is not recreated by board sync/reload while newer versions still appear;
  legacy boardHidden keeps hiding only the current version
- detect removed linked frames by artifactId+kind+versionId so deleting one
  version is not masked by another version's frame
- clear tombstones when a frame is restored (undo) via node sync
…sion hidden frames

- add undoable deleteCanvasLayers action used by the layers panel trash
  button and Delete/Backspace; locked/hidden layers can be deleted
  explicitly while lock still guards accidental geometry edits
- add per-row Trash2 button to CanvasLayersPanel with canvasLayerDelete
  label in all 7 locales
- persist boardHiddenVersionIds tombstones so a deleted HTML version frame
  is not recreated by board sync/reload while newer versions still appear;
  legacy boardHidden keeps hiding only the current version
- detect removed linked frames by artifactId+kind+versionId so deleting one
  version is not masked by another version's frame
- clear tombstones when a frame is restored (undo) via node sync
feat(schedule): add session-level daemon threads with WeChat push
OpenCode Go models with a large declared max output token cap (e.g.
500k) sent max_tokens far beyond the provider context window, so the
request failed with a context cap error even though input was small.

- model-step-service now derives the effective output budget from the
  exact composed request: min(declared max output, remaining capacity
  under the 85% context cap) and forwards it as request maxTokens.
- existing model profiles are refreshed from models.dev catalog limits
  instead of only filling missing values, so stale oversized
  maxOutputTokens metadata is corrected on re-import.
- loop tests updated: input alone past the cap still fails cleanly;
  send-boundary rehydration overage is absorbed by the clamp.
…stics

Model-request traces now carry a pipeline phase (credential/setup/model),
a failure origin, and a machine-readable diagnostic code. Credential and
provider-setup failures emit not_started diagnostic records instead of
blank request details, and Gemini loadCodeAssist/OAuth failures are traced
with sanitized request/response data bound to the same thread/turn.

Runtime diagnostics harden the 'missing LLM request' case:
- ENOSPC and permission write failures are classified in trace persistence
  and atomic writes so operators stop chasing generic fetch failed logs.
- Event-loop stall reports include stall class (cpu vs hard), runtime
  instance/build ids, and cheap live counters (inflight/captures).
- better-sqlite3 ABI mismatches are reported with compiled vs current ABI
  and a rebuild hint instead of a bare JSONL fallback line.
- Legacy gemini-cli-subscription provider kinds migrate idempotently to
  gemini-cli-api; provider config errors fail closed with the offending path.
- Agent Perspective shows phase, failure origin, diagnostic code, and a
  legacy-trace marker; renderer parses optional request payloads and
  not_started statuses, and locale parity gains the new labels.
… fast pipeline

Add explore_agent as a first-class tool in the main agent's tool list
(alongside delegate_task). It runs a read-oriented child with full bash
plus an exploration allow-list (read/grep/glob/ls/repo_map/find/
web_fetch/web_search), reusing the subagent runtime so child events and
SubagentCallCard rendering work unchanged.

- Tool registration in kun/src/adapters/tool/explore-agent-tool-provider.ts
  gated by the new Lab settings (default enabled); disabled removes it
  from the tool list and in-flight calls fail with a clear error.
- Model policy: follows the main session (model/providerId/reasoning/
  serviceTier) by default; Lab settings can pin provider/model/reasoning
  and enable Codex fast (serviceTier=priority). Delegation runtime gains
  inheritSessionDefaults + serviceTier propagation through ChildRunRecord
  and the child executor; fast is wire-gated on Codex priority capability.
- New Settings -> Laboratory -> Explore agent panel plus shared
  KunLabSettingsV1 types, normalizer, kun-config lab schema, GUI->runtime
  config mapping, and IPC patch schema (sanitize round-trip stable).
- Main agent system prompt steers investigation tasks to explore_agent.
- Tests: tool provider, delegation serviceTier propagation, child request
  gating, shared settings merge, renderer lab panel, config stability.
- Removed windowSize and threshold properties from toolStorm configuration across various files, simplifying the settings to only include the enabled flag.
- Updated related documentation to reflect the changes in tool storm behavior, allowing repeated tool calls without suppression.
- Adjusted tests to align with the new tool storm configuration and behavior, ensuring that the system correctly handles repeated tool calls.
- Modified localization files to update descriptions related to tool storm functionality.
…localization fallback handling

- Updated the cleanup logic in DaemonRuntime tests to retry file removal on busy errors, improving test reliability.
- Refactored localization handling in i18n.ts to merge with English fallback, ensuring that controls render correctly without raw translation keys.
- Adjusted design module boundaries test to exempt specific long files from line count checks, maintaining test integrity.
…d tests

- Added `appInstallPath` to the `UninstallAppRemovalTarget` type to display the application installation location.
- Updated the `resolveAppRemovalTarget` function to return the installation path for different platforms (macOS, Windows, Linux).
- Modified related tests to assert the presence of the installation path in the expected results.
- Enhanced the uninstall settings section to show the installation path when applicable.
…ngsSection

- Modified the API key input placeholder to display masked characters when a valid API key is present, enhancing security and user experience.
- Updated related tests to reflect changes in the placeholder logic, ensuring accurate representation of the input state during provider mutation lifecycle tests.
@XingYu-Zhong
XingYu-Zhong merged commit 8cce134 into master Aug 7, 2026
4 checks passed
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.

2 participants