Skip to content

v1.3.233

Choose a tag to compare

@topcheer topcheer released this 07 Sep 07:40
· 2750 commits to main since this release

ggcode v1.3.233

Highlights

  • See the changelog below for the user-facing updates included in this release.

Compare

Changelog

  • fix(cli): split stderr tee's dup2 by platform so linux/arm64 builds
  • fix(swarm): remove the teammate from the team map on shutdown, freeing the quota slot (#1633)
  • release: v1.3.233
  • fix(tui): resolve the MCP panel's stuck reconnecting message via update events
  • fix(mcp): clear the notification-stream guard on every goroutine exit (#1632)
  • test(mcp): pin the OAuth pre-flight probe and the client_id health-check cancel path
  • feat(mcp): start OAuth immediately when an unauthenticated server declares it via well-known
  • fix(plugin): retire the old same-named instance BEFORE registering the new adapters (#1630)
  • fix(permission): cover the full raw-device families in the dd write gate (#1629)
  • fix(im): count pure-image messages as user activity for the Knight idle timer (#1628)
  • fix(lanchat): cap the presence endpoint and surface 413 across all four (#1627)
  • fix(security): stop the display redactor from re-echoing secrets, mask bare PKCS#8 PEMs (#1626)
  • fix(knight): sync the validator CJK range with the unicode tables (#1624)
  • fix(agent): keep word-boundary semantics in the sensitive-log final check (#1623)
  • fix(knight): tokenize the full CJK range and full-width ASCII (#1622)
  • fix(agent): tier stash drop and tag delete by their schema actions (#1621)
  • fix(agent): anchor empty-result counts and skip init METHODS in the side-effect scan (#1619)
  • fix(cmd): break the fatal-banner loop instead of spinning forever (#1620)
  • fix(provider): keep image/thinking blocks out of the token-calibration samples (#1618)
  • fix(provider): apply custom headers even without an impersonation preset (#1610)
  • fix(agent): judge force-push line by line so multi-line scripts don't cross-contaminate (#1609)
  • fix(provider): abort the tiered context probe on auth failure instead of draining remaining tiers (#1608)
  • fix(acp): route URL-only MCP servers to the http transport (#1606)
  • fix(plugin): hold the write lock across the MCP-disabled read-modify-write (#1601)
  • fix(agent): strip quotes for git-push adjacency so wrapper forms stay detected (#1600)
  • fix(plugin): propagate gRPC cancellation instead of flattening it into a tool error (#1597)
  • fix(permission): honor explicit Deny before allow fast-paths, lock the cmdRules snapshot read (#1595)
  • fix(acp): stop the legacy root-layout session copy from shadowing the redirected saves (#1594)
  • fix(memory): compare version numbers as sets, not cross-product pairs (#1592)
  • fix(agent): exempt unique-digit shapes from digit-template folding (#1590)
  • fix(lsp): surface unsupported documentChanges kinds in workspace edits (#1588)
  • fix(agent): gate orphan-file tracking on successful writes (#1587)
  • fix(lsp): surface context cancellation from csharp warmup retries (#1586)
  • fix(agent): require a non-blank block before injecting mid-run guidance (#1585)
  • fix(lanchat): reject pending approvals on hub shutdown (#1583)
  • fix(agent): keep failed edits out of the last-known-good revert list (#1581)
  • fix(knight): make Reject nil-safe and idempotent (#1580)
  • fix(agent): scope irreversibility matching to the command body, not the payload (#1579)
  • fix(config): port #1525 vendorModels fixes into sync-model-caps template
  • fix(agent): stop flagging in-memory fmt S-scan calls as init side effects (#1577)
  • fix(knight): report lock-verification failures as errors, not live PIDs (#1576)
  • fix(image): request PerMonitorV2 DPI awareness on Windows captures (#1571)
  • fix(agent): cover discard-form blind spots and destructive flag variants (#1569)
  • fix(a2a): exempt allowlisted IPs in the push-delivery Control pin (#1568)
  • fix(agent): #1566 pin fix-amnesia backslash normalization with a cross-platform test case
  • fix(agent): #1564/#1566 fix-amnesia path matching uses slash semantics on Windows (#1566)
  • fix(im): token-bounded case-insensitive Twitch mention gating and stripping (#1565)
  • fix(agent): directory-anchor fix-amnesia suffix matching, normalize the early exit (#1566)
  • fix(a2a): stop returning the stored product pointer from Create/Update (#1563)
  • fix(agent): share path-suffix semantics between fix-amnesia promotion and exclusion, feed the error file to the exclusion check (#1564)
  • fix(im): overlay feishu STT extras onto the global config, bound local transcription time (#1562)
  • fix(agent): wire undo_edit bookkeeping at the source, keep failed converging commands resetting the exploration window (#1559)
  • fix(im): let connected reports lift the disconnected terminal guard (#1558)
  • fix(im): enforce the image size cap on QQ local-path and data-URL branches (#1557)
  • fix(a2a): extend the #1458 fixes to the default client, unlock the query-scheme error path (#1556)
  • fix(im): re-account the full byte ledger after nested flushes in byte splitting (#1553)
  • fix(relay): enforce ticket version retirement on the refresh path (#1551)
  • fix(agent): gate verify-debt clearing on verification content (#1549)
  • fix(agent): extract edit paths for all nine mutating tools (#1547)
  • fix(im): check HTTP status in Discord SendInteractive (#1548)
  • fix(im): broadcast questionnaire fallback answers only the first unanswered question (#1546)
  • fix(relay): retry catalog refresh on failure state, not error-text mutation (#1545)
  • fix(hooks): strip content fields for exact-pattern matches, start user-named privateclaw bindings (#1543)
  • fix(extract): flag unreadable PDF pages, keep hook payloads alive on marshal failure (#1542)
  • fix(agent): resolve repo-root-relative paths before git show in cross-file impact (#1541)
  • fix(extract): register macro-enabled OOXML variants (#1540)
  • fix(extract): mark zip text truncation honestly, keep unreadable entries listed (#1539)
  • fix(cmd): keep partially-scanned sessions in the report (#1537)
  • fix(agent): require new failure evidence before re-firing the correction-spiral CRITICAL (#1538)
  • fix(daemon): treat permission errors as alive, reset the follow buffer on error, detach the Windows daemon console (#1535)
  • fix(agent): recognize keyless list block scalars and commented headers in YAML dup check (#1534)
  • fix(cron): advance hours in wall-clock semantics, cap NextTime by iterations (#1532)
  • fix(cmd): close-check the pipe output file before deciding the exit code (#1531)
  • fix(agent): give the command cache a real shell model (#1530)
  • fix(agent): require file evidence for causal attribution, cover the polling channel (#1528)
  • fix(config): dedupe alias-sourced model lists, fix dead kimi key, count tool_result images in budget (#1525)
  • fix(config): sort preset endpoint keys so the onboarding wizard preselects deterministically (#1523)
  • fix(agent): match lowercase job statuses so completed jobs actually stop cycling warnings (#1524)
  • fix(agent): drop bare 'latest'/'recent' ambiguity words the #1438-A fix claimed to drop (#1521)
  • fix(agent): strip the '# ' activity comment before verify-command matching (#1522)
  • fix(config): strip quotes on Unquote failure instead of keeping them in the value (#1519)
  • fix(agent): stop recording batch_replace targets as created files (#1520)
  • fix(config): merge AddEndpoint onto existing endpoints, persist vendor API keys to keys.env (#1517)
  • fix(agent): register the type-switch check, source error-recovery signals from the mutating-tools table (#1516)
  • fix(agent): stop retrying lsp_rename - a mutating tool (#1514)
  • fix(commands): drop SkillNames read lock that deadlocked against combinedCommands' internal write lock (#1513)
  • fix(codehealth): #1510 unreadable-root test skips on Windows via runtime.GOOS (#1510)
  • fix(agent): exempt CommonMark hard breaks in md/rst trailing-whitespace check (#1512)
  • fix(desktop): stop upgrading superseded runs to the new generation (#1511)
  • fix(cli): validate im config enabled values, error on unreadable code-health root (#1510)
  • fix(chat): clamp todo header active-suffix budget to width, not 10 (#1507)
  • fix(agent): keep evidence across text-less turns, burn fallback slot only on match (#1508)
  • fix(agent): exempt git/xargs/find content wrappers, widen zero-result prefixes in claim verify (#1506)
  • fix(config): bound Claude token refresh with a 30s timeout (#1505)
  • fix(desktop): bind session ID on Wails desktop, fail fast on placeholder A2A issuers (#1504) (#1503)
  • fix(agent): build correct Maven test-tree paths for Java coverage candidates (#1502)
  • fix(agentruntime): stop the P2P upgrade manager in TunnelHost.Close (#1501)
  • fix(agent): accept any same-dir _test.go as Go coverage, report bare type:ignore with explanation (#1500)
  • fix(swarm): carry task error on teammate_idle events so tunnel clients stop rendering failures green (#1497)
  • fix(agent): drop %c from SQL-injection int-verb exemption, teach error counter Go/Cargo/pytest output (#1498)
  • fix(agent): gate speculative cache hits on permission, split awk gsub pattern from replacement (#1496)
  • fix(agentruntime): always propagate session token budget so reload clears it (#1494)
  • fix(vcs): normalize svn log to one line per revision, add TS/Python symbols to sub-agent fallback (#1493)
  • fix(agent): cover multi_file_write/batch_replace in redaction guard, gate scope drift on successful edits (#1491)
  • fix(agent): delegate run-journal liveness to util.IsProcessAlive for Windows correctness (#1490)
  • fix(agentruntime): anchor Taskfile target detection and strip module-line comments (#1489)
  • fix(agent): gate reproducer text path on run tools, recognize field-store and channel ownership transfers (#1488)
  • fix(agentruntime): roll back model switch on resolve failure, extract async def and default export symbols (#1487)
  • fix(agent): align reverify with shell mutations, green PASS output, and file creation (#1486)
  • fix(agent): stop ratchet preventive path from falling back to error-output patterns (#1485)
  • fix(agent): exempt selector nil guards in range_nil_ptr detector (#1483)
  • fix(mcp): route elicitation through the session ask_user tool instead of the dead broker global (#1484)
  • fix(agentruntime): hot-reload Fallbacks chain, reset round on error, honor buffered approvals (#1482)
  • fix(agent): recognize ./mvnw as verification command in both tables (#1481)
  • fix(vision): restore user model on half-switched vision turn failures
  • test(vision): cover VisionTurnModel, IM turn switch/restore, desktop helpers
  • feat(vision): extend turn-scoped vision fallback to IM and desktop
  • fix(agentruntime): preserve inline-code identifiers and short CJK titles in auto title (#1479)
  • fix(agentruntime): preserve inline-code identifiers and short CJK titles in auto title (#1479)
  • feat(vision): mark vision models in system prompt and add turn-scoped vision model fallback
  • fix(tool): code index excludes nested git repositories entirely (#1659)
  • feat(config): refresh model capability database (958 models) with endpoint host matching
  • feat(config): add make sync-model-caps tool with local vendor preservation and URL-based provider matching
  • fix(im): expired approval prompts announce their own void (#1656)
  • fix(agent): primary stack truncation carries the explicit marker (#1637)
  • fix(memory): detectTechStack is module-gated like detectImportantPaths (#1636-A)
  • fix(agent): hub guard's 200ms budget starts AFTER the walk (#1634)
  • fix(agent): head+tail truncation marker is detected via a shared constant (#1554-C)
  • fix(agent): pagination exemption anchors to the footer tail; verify-kind normalizes env/cd prefixes (#1554)
  • fix(im): nostr short-ID slicing is panic-safe (#1553-B)
  • fix(im): Matrix sync token persists across restarts (#1553-A)
  • fix(im): IRC message splitting counts bytes per RFC 2812, not runes (#1552-A)
  • fix(mcp,acp): URL-only servers infer http; ACP non-text drops are logged (#1647, #1606-B follow-up)
  • fix(agent): hub keying treats unreadable nested go.mod as UNKNOWN (#1635, #1614-B follow-up)
  • fix(im): duplicated return left unreachable by the 1551-B synthesis (#1551-B follow-up 2)
  • fix(im): clear-then-return moved inside the send case (#1551-B follow-up)
  • fix(im): daemon bridge approval reply switches to non-blocking send (#1551-B)
  • fix(agent): orphan detector's pre-exec snapshot map is dropped on reset (#1643-1)
  • fix(lsp): publishDiagnostics version reconciliation; didChange invalidates the diagnostics cache (#1642-1)
  • fix(tui,desktop): all LSP install paths drop the probe cache (#1641)
  • fix(install): #1606 pin skips on Windows via runtime.GOOS, not the GOOS env var (#1606)
  • fix(context): calibrator thinking filter matches the real block type; embedded images filtered and priced per-image (#1640 1+2)
  • fix(knight,provider): porcelain paths normalized to workspace-relative; leading 413 permanent (#1639 1+2)
  • fix(agent): mixed batches containing ANY shell command skip pre-execution (#1607-A); EnsureOnPath failure pin (#1606 follow-up)
  • fix(install): EnsureOnPath surfaces write failures instead of promising nothing (#1606-A)
  • fix(agent): verifDebt quota reopens after compaction; recovery guard keys on new errors (#1605)
  • fix(knight): CJK word gate counts runes; trust write policies whitelist (#1604 D+E)
  • fix(mcp,markdown): non-text MCP blocks get typed placeholders; heading closers need CommonMark spacing (#1588 A+C)
  • fix(agent): orphan detector decides overwrite from a pre-execution snapshot (#1587-A)
  • fix(lsp,tui): stderr ring-capped; install submission drops the probe cache (#1586 A+B)
  • fix(context,provider): calibrator skips image/thinking samples; 402 gets a dedicated top-up message (#1618 A+B)
  • fix(provider): leading bare status codes are permanent; Inf/NaN and rogue durations fall back (#1617 C + riders)
  • fix(knight): rename rows filter only when BOTH sides are inside .ggcode (#1617-A)
  • fix(provider,agent): gemini thought signatures ride the full tool loop; gemini-3 uses thinkingLevel (#1610)
  • fix(agent): crash dump truncation is marked; crash filenames carry nanoseconds (#1616)
  • fix(memory): README HTML banners never become the project Summary (#1615)
  • fix(agent): hub fan-in counts each package under its NEAREST module (#1614)
  • fix(mcp): read-only segments split on hyphen and dot too; -t stdio runner-command guard (#1611)
  • fix(agentruntime,memory): sampling maxTokens mutation serialized with reflect guard; GC re-stats before remove (#1612, #1613)
  • fix(mcp): 404 on a session-bearing streamable-http POST drops the stale session and re-initializes (#1602)
  • fix(plugin): grpc entries record a successful handoff; scanDir dedups config-loaded paths (#1601)
  • fix(plugin,mcp): same-name plugin reload kills the old instance; SSE tail flushes at EOF (#1597)
  • fix(permission): exfil classification covers glued curl -T/-F, no-space redirects, and the name netcat (#1596)
  • fix(permission): dd writing TO a raw device is Critical; web approvals key on url site (#1595)
  • test(im): pin daemon bridge image-only and mixed content passthrough (#1584, #1466 convention)
  • fix(im): daemon submit path keeps image/attachment blocks; text-less image sends no longer drop (#1584-A)
  • fix(lanchat): request-body ceilings on receive endpoints (#1583-A)
  • fix(tool): code index total-term budget + streaming persist cap memory for parent-directory workspaces (#1625)
  • test(a2a,knight): regression pins for the #1582 fixes (#1582, #1466 convention)
  • fix(a2a,knight): live callback URL re-validated before dialing; CJK runes in validator token sets (#1582)
  • fix(agent): Go raw-string ${} is literal text, not JS interpolation (#1581-A)
  • fix(knight)+test(agent): CJK runes tokenize for similarity fingerprints; git_reset schema-shape test rows (#1580, #1579 follow-up)
  • fix(agent): irrev gate tiers git_reset by its mode field, not a shell literal (#1579-A)
  • fix(cli): capture runtime fatal dumps via fd-level stderr tee
  • fix(knight): nightly maintenance runs before the quiet-hours return (#1578-A)
  • fix(agent): init-side-effect check: time/http function blacklists, bare panic caught, dead ext loop removed (#1577)
  • fix(knight): rename rows filter by DESTINATION - .ggcode->outside moves stay visible to the read-only guard (#1576-C)
  • fix(knight): proposal transitions protect terminal states; ms-precision IDs; NameCollision is cumulative (#1576)
  • fix(agent): crash log captures all-goroutine dump
  • fix(knight): budget read failures keep prior state; emit throttle burns only on real destinations; unlimited reports -1 (#1575)
  • fix(agent): hub-package guard keys nested submodules by their own module; checked latches after init (#1574)
  • fix(memory): /init path hints are module-gated; project-memory hint uses the session working dir (#1593)
  • fix(agentruntime,provider): MCP sampling honors maxTokens; sampling provider is per-runtime (#1592)
  • fix(mcp): read-only keywords match whole segments at any length; ID decode keeps numeric precision (#1591)
  • fix(agentruntime,mcp): elicitation counter is atomic; stdio-strip convenience logs its ambiguity (#1589)
  • fix(agent): successful edits invalidate the phantom everRun exemption; deny-streak wording matches mixed majorities (#1598)
  • fix(agent): destructive-guard token scan bounded by command separators; clean long forms; lease no longer masks force (#1600)
  • fix(im): wechat shared quota truncation indexes by textQuota; image sends check ret+errcode (#1599)
  • fix(acp): resume already-active guard runs before MCP connect (#1604)
  • fix(provider): CloneWithModel re-keys the adaptive cap for the new model (#1603)
  • fix(agent,acp): shell mutations join the pre-exec batch guard; MCP close unregisters only owned tools (#1590, #1594)
  • fix(install,knight): installer writes PATH (python-installer parity); baseline read failures logged; V-prefix version normalized (#1573)
  • fix(agent): post-compaction reset clears injection quotas only, honoring the file's own contract (#1572)
  • fix(image): linux screenshot tools ordered by session type with per-tool fallback; wayland display listing prefers wlr-randr (#1571)
  • fix(image): add missing context/time imports in windows clipboard (#1570)
  • fix(image): windows clipboard timeout/error taxonomy; mac display capture by region (#1570)
  • fix(agent): destructive-guard force/clean detection is token-based; warn dedup keyed by command (#1569)
  • test(mcp): plugin HTTP mocks answer the GET notification-stream probe with 405
  • fix(im): wechat image/file notices, shared image+text quota, errcode check; wecom/whatsapp dedup drop-oldest (#1567)
  • feat(mcp): streamable-HTTP standalone GET SSE notification stream
  • fix(agent): phantom claims exempt session-verified back-references; deny-streak separates user rejections (#1478)