Skip to content

feat: session lock & recovery, web interface, ads optimization, stoneage skills, themes and statusline - #18

Open
mat-dgruber wants to merge 47 commits into
Edwardmaster7:mainfrom
mat-dgruber:main
Open

feat: session lock & recovery, web interface, ads optimization, stoneage skills, themes and statusline#18
mat-dgruber wants to merge 47 commits into
Edwardmaster7:mainfrom
mat-dgruber:main

Conversation

@mat-dgruber

@mat-dgruber mat-dgruber commented Jul 27, 2026

Copy link
Copy Markdown

Summary

Este Pull Request traz uma grande consolidação de evoluções, correções e novas funcionalidades desenvolvidas e testadas no fork mat-dgruber/openclaude, sincronizando e aprimorando o estado mais recente do repositório base (Edwardmaster7/openclaude).


🔑 Destaques das Mudanças Integradas

1. 🔒 Gerenciamento de Sessão e Recuperação Automática de Crash (sessionLock & sessionRecoveryCheck)

  • State Manager de Lock Ativo: Implementado controle de ciclo de vida de trava de sessão ativa em src/utils/sessionLock.ts com validação de PID e estado.
  • Avaliador de Candidatos a Recuperação: Implementada a detecção em src/utils/sessionRecoveryCheck.ts para identificar se a última sessão caiu inesperadamente.
  • Auto-resume Configurável: Adicionada a opção autoResumeOnCrash nas configurações globais e prompt interativo durante o startup da CLI para resumir sessões com zero perda de progresso.

2. 🌐 Interface Web Completa (web/)

  • Aplicação React / Tailwind / Zustand: Adicionada estrutura web completa em web/ contendo:
    • ChatView reativo com MessageBubble, MessageInput, e leitor de histórico.
    • Renderizador de Markdown em tempo real (MarkdownRenderer) e visualizador de chamadas de ferramentas (ToolCallDisplay).
    • Navegador de documentação, flags CLI, provedores e configurações integradas.
    • Conexão WebSocket resiliente com gerenciamento de estado global via Zustand.

3. 📢 Otimização do Sistema de Anúncios e Dwell-time (/ads & gitlawbEarn)

  • Dashboard /ads Aprimorado: Exibição de saldo formatado em USD, regras de contexto e histórico de impressões enviadas na payload.
  • Rotação Dinâmica & Dwell-Time: Auto-confirmação baseada em tempo de exibição e rotação de anúncios na tela de processamento/spinner em turnos mais longos.
  • Reações do Companheiro (Buddy): Integração com o assistente gráfico para disparar animação/reação ao confirmar créditos de anúncios OpenGateway.

4. 🪨 Skills Stoneage e Token Economy Nativa (src/skills/bundled/stoneage.ts)

  • Pacote com 14 Skills Bundled: Integração nativa de todas as 14 skills da suíte stoneage e token-economy (answer-first, code-only, silent-tools, context-trim, etc.) direto no bundle estático.
  • Disponibilidade Imediata: As skills funcionam nativamente sem depender de plugins em diretórios externos ou temporários.

5. 🎨 Temas Expandidos, Statusline e Personalização Visual

  • 8 Novas Paletas de Cores: Adicionados temas dracula, nord, monokai, solarized, gruvbox, synthwave, cyberpunk e suporte a themeOverrides.
  • Statusline Nativa Aprimorada: Suporte a exibição do provedor ativo, contagem de MCPs, badge [OFFLINE], custo e tokens na statusline padrão.

6. ⚡ Suporte ao Gemini 3.6-Flash e Ajustes CLI

  • Model Catalog: Inclusão e ajuste de precificação/custos para o Gemini 3.6 Flash.
  • Atalho Nativo oc: Binário oc registrado em package.json para acionamento direto via terminal.
  • Controle de Limites via Env: Possibilidade de desativar caps de retry, turns e query guard via variáveis de ambiente.

🧪 Plano de Testes e Validação

  • Suíte de Testes Unitários e de Integração:
    • bun test src/utils/sessionLock.test.ts (PASS)
    • bun test src/utils/sessionRecoveryCheck.test.ts (PASS)
    • bun test src/services/ads.test.ts (PASS)
    • bun test src/skills/bundled/stoneage.test.ts (PASS)
    • bun test src/utils/theme.test.ts (PASS)
  • Compilação e Typecheck: bun run build executado com sucesso e verificação do frontend web concluída sem erros de tipagem.
  • Verificação de Execução da CLI: Validação prática das rotas de anúncios, visualização de statusline e atalho oc.

mat-dgruber and others added 30 commits June 25, 2026 15:13
…hangeDetector

Switch change-detector to native FS events (no more Bun polling), add a
500ms debounce window per SettingSource with generation cancellation so
concurrent edits collapse into one fanout, and extract every external
side effect through a default-dependencies object that tests can override.

Why: Bun fs.watch deadlock forced chokidar usePolling which causes lag
and disk churn on a CLI that reacts to settings edits per keystroke.
Chokidar on Darwin uses fsevents which is reliable and faster. Deps
shape also lets us swap the watcher in unit tests without monkey-patching.

How to apply: when adding new side effects inside changeDetector, route
them through dependencies.* rather than importing the implementation
directly so they remain test-overridable.
…zed, gruvbox, synthwave, cyberpunk) + themeOverrides setting

Extends THEME_NAMES and getTheme() with seven new palettes derived from
darkTheme/lightTheme: dracula, nord, monokai, solarized-dark,
solarized-light, gruvbox, synthwave84, cyberpunk. Also threads a new
optional  record through SettingsSchema and applies it
on top of the resolved palette inside getTheme() so users can tweak
colors without forking the theme module. ThemePicker exposes the new
options in the picker.

Why: existing themes cover binary light/dark and colorblind variants
but not developer-favorite palettes; users wanted quick swap without
custom build steps. themeOverrides unlocks ad-hoc color tweaks via
settings without code changes.

How to apply: add new palettes by appending to THEME_NAMES, defining a
matching const Theme, and adding a case in getTheme().
…sume

generateCommandSuggestions now tight-matches when the input is one of
'/ads ', '/config ' or '/resume '. /ads completes to on/off, /config to
8 known keys, and /resume scans the project session directory for
.jsonl files, surfacing the latest 10 with their firstPrompt as desc.

Why: typing '/' alone only listed top-level commands, leaving users
guessing arg names. Tab-completing the first arg dramatically lowers
friction for the three highest-traffic config commands.

How to apply: keep this branch block at the top of
generateCommandSuggestions; add new '/cmd ' branches here so they
short-circuit the generic Fuse lookup.
Adds src/services/api/offlineState.ts: a DNS probe against google.com
with a 2s timeout that sets an in-memory offline flag, plus a
CLAUDE_CODE_OFFLINE=1 override for tests/deterministic runs.

QueryEngine.submitMessage now awaits checkInternetConnection() before
calling the underlying stream; when offline it emits a single assistant
warning + a synthetic 'result' with stop_reason 'offline' and exits,
so the CLI no longer hangs or floods errors when the user has no
network.

Why: the CLI was reaching the Anthropic SDK on every prompt and
producing noisy axios errors when wifi was off. Surfacing offline as a
first-class state gives users a clear message and unblocks local
diagnostics.

How to apply: extend offlineState (cache TTL, retry heuristics) here
rather than inside QueryEngine so that all entry points share one
probe. Coverage in QueryEngine.offline.test.ts sets
setOfflineMode(true) deterministically.
…in builtin status

BuiltinStatusData grew three new fields: providerName (from
getActiveProviderProfile, falls back to ''), offline (from
isOfflineMode), and tokenCount (tokenCountWithEstimation of message
history). buildBuiltinStatusSegments now:
- prepends an [OFFLINE] error segment when offline
- prefixes modelName with 'provider: ' when a profile is set
- shows 'NN tokens ($X.XX)' in the cost segment so users see budget
  burn-in even when dollar total is low
- shifts priorities +1 to keep the existing fitSegments precedence

Why: provider-aware sessions and offline/online state were visible
nowhere in the status bar, and the cost column was empty for users on
free tiers where costUSD=0 but tokens add up.

How to apply: when adding new BuiltinStatusData fields, default them
in status-line test helpers and bump affected existing snapshots on
purpose rather than letting them rot.
Brings the 5 new commits (changeDetector debounce/fsevents refactor,
theme palettes, sub-argument suggestions, offline-state short-circuit,
statusline enhancements) into main.

Resolved conflict in src/utils/settings/changeDetector.ts getSourceForPath:
main's HEAD version normalize()s both dropInDir and the candidate path
against chokidar's forward-slashes on Windows — kept HEAD's wrap on top
of upstream-main's dependencies.* indirection, since both sides
already routed the source paths through .

Auto-merged cleanly: theme.ts, ThemePicker.tsx, types.ts, BuiltinStatusLine,
commandSuggestions.ts (and their tests), QueryEngine.ts, plus additions
of offlineState.ts and QueryEngine.offline.test.ts, theme.test.ts
Resolves errors uncovered while running tsc --noEmit on the freshly
merged main. They were not caused by my earlier commits — symptoms
of fork drift from upstream-main — but they each blocked `bun run
check` and one (DevBar) broke `bun run build` outright.

Patches:
- PromptInput.tsx: import toPersistableEffort from ../../utils/effort.js
  (function exists at src/utils/effort.ts:207 since 25b034b but the
  import was missing) and spread mainLoopModelForSession conditionally
  instead of assigning undefined (type forbids it)
- REPL.tsx: drop the dead `import { DevBar } from '../components/DevBar.js'`
  whose component was removed in e6ce103 refactor(open-build)
- ManagePlugins.tsx: gate the author .name render on typeof !== 'string'
  since the manifest schema allows author to be either a string or
  { name, email, url }
- pluginLoader.ts: add strict: false to the test-only fakePluginMarketplaceEntry
- openaiShim.test.ts: cast { reasoningEffort: 'max' } to any because the
  test documents the historical max→high mapping but the union is
  'low'|'medium'|'high'|'xhigh'
- observer.ts: type the for-loop messages as
  Array<{ type?: string; message?: any }> so the dead branch
  msg.type === 'tool_result' no longer complains. Runtime behaviour
  identical.

Why: 6 distinct TS errors gating typecheck and one build breaker.
All observed in main post-merge.

How to apply: each patch is one-line-equivalent. Do not bundle
unrelated cleanup into this commit.
…claude

- Resolve conflicts in openaiShim.ts and config.ts
- Retain local tool history compression and Ollama integration
- Integrate upstream Gemini context caching configuration and TTL properties
- Fix template literal type casting in cacheStats and cost loaders
- Fix client cast to any in geminiCache.test.ts for tsc type safety
- Resolve conflicts in commands.ts, PromptInput.tsx, and ide.ts
- Retain local advisor command and support for antigravity/agy IDE aliases
- Clean up deprecated inline effort notification from PromptInput.tsx (now in Notifications.tsx)
- Install and configure new upstream dependencies (graphology, web-tree-sitter, etc.)
- Merge latest features from Gitlawb/openclaude (v0.23.0) into main
- Integrate Cloudflare Workers AI and modular message refactoring
- Resolve conflicts in commands.ts, PromptInput.tsx, and providerProfiles.ts
- Retain local terminal session isolation and project overrides for provider profiles
Integra as últimas novidades e correções do original Gitlawb/openclaude (v0.24.0),
incluindo o suporte a customização de forms/set de companions, animações de tiro,
novos modelos, e detecção de ultrathink, preservando totalmente os recursos de
loja e pets customizados locais.
Mescla a branch upstream-main integrada para a branch de desenvolvimento local main,
unificando todos os recursos de missões (quests) locais com as novidades de v0.24.0.
Adiciona rotação automática de anúncios a cada 15 segundos no Spinner
quando a opção de ganhos do Ads (ads.enabled && ads.earnCode) está ativa.
Isso otimiza o acúmulo de créditos durante turnos mais longos, tasks
e execuções em segundo plano com múltiplos subagentes.
Adiciona suporte ao Gemini 3.6 Flash e remove definicao duplicada de
Gemini 3.5 Flash introduzida em merge anterior para corrigir testes.
Sobe limites hardcoded para variaveis de ambiente opt-in, mantendo defaults
identicos aos atuais:

- OPENCLAUDE_PERSISTENT_MAX_ATTEMPTS=0 desativa o teto de tentativas
  persistentes em withRetry.
- OPENCLAUDE_PERSISTENT_MAX_BACKOFF_MS e OPENCLAUDE_PERSISTENT_RESET_CAP_MS
  ajustam os caps de backoff e reset sem rebuild.
- OPENCLAUDE_MAX_RETRIES=999999 e OPENCLAUDE_MAX_529_RETRIES=0 dao controle
  total sobre retries da API.
- OPENCLAUDE_GOAL_MAX_TURNS=0 remove o teto de 50 turns em /goal.
- OPENCLAUDE_QUERY_HARD_MAX_MS=0 e OPENCLAUDE_QUERY_IDLE_TIMEOUT_MS=0
  desativam o watchdog do query guard sem desligar leases.

Testes existentes atualizados para 0/Infinity novo contrato. Fixtures/
ficaram untracked por serem artefatos de teste locais nao versionados.
Mescla a ramificação upstream/main, resolvendo conflitos em modelOptions.ts,
providerProfiles.ts e bun.lock. Mantém as customizações locais do Crocbiçom,
do editor Antigravity e lógicas estendidas de ads/segurança.
Remove os marcadores de conflito remanescentes em `src/commands/ads.tsx`,
`src/commands/ads.test.ts` e `src/services/tips/gitlawbEarn.test.ts`,
preservando o texto explicativo de contextualização de anúncios local.
…eiro

- Corrige tipos e cache de getCompanion em companion.ts
- Restaura deterministic.ts do companheiro pós-merge
- Adiciona suporte e tipo para 'antigravity' IDE em ide.ts
- Corrige importação de modelo Opus em modelCost.ts
- Corrige invocação segura de cache em permissions.test.ts e sintaxe em ads.test.ts
…de skills

Adiciona os documentos de arquitetura e o cronograma detalhado de
passos para a migração nativa das 14 skills do stoneage.
- Adiciona tratamento defensivo para ausência de MACRO no CLI
- Ignora validação do provider se o subcomando for 'skills'
- Corrige flag '--add-dir' para aceitar múltiplos diretórios repetíveis
- Evita quebra de importação dinâmica do Claude in Chrome MCP
- Atualiza custos de tokens considerando o Opus 4.8 em modo rápido

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @mat-dgruber, your pull request is larger than the review limit of 150000 diff characters

@sourcery-ai

sourcery-ai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds a native oc CLI alias and bundles 14 previously-plugin Stoneage/Token-Economy skills into a new core skills module, while tightening a broad set of platform features: buddy species and sprites, themes and statusline UX, retry and timeout configurability, offline detection, ads/tips safety, command suggestions, skills CLI ergonomics, query guard behavior, and multiple test hardening/bug fixes.

Sequence diagram for new offline handling in QueryEngine submitMessage

sequenceDiagram
  participant User
  participant QueryEngine
  participant OfflineState as offlineState

  User->>QueryEngine: submitMessage(prompt)
  QueryEngine->>OfflineState: checkInternetConnection()
  OfflineState-->>QueryEngine: boolean (online/offline)
  alt offline
    QueryEngine->>OfflineState: isOfflineMode()
    OfflineState-->>QueryEngine: true
    QueryEngine-->>User: assistant message (offline warning)
    QueryEngine-->>User: result { stop_reason: offline }
  else online
    QueryEngine->>QueryEngine: isSessionPersistenceDisabled()
    QueryEngine->>QueryEngine: wrappedCanUseTool(...)
    QueryEngine-->>User: normal streamed results
  end
Loading

File-Level Changes

Change Details Files
Introduce new Stoneage/Token-Economy bundled skills module and ensure all 14 skills are registered at startup with tests.
  • Create src/skills/bundled/stoneage.ts with prompt text and registerStoneageSkills() that registers 14 related skills via registerBundledSkill.
  • Wire registerStoneageSkills() into initBundledSkills() so these skills are always available without external plugins.
  • Add stoneage.test.ts to assert all 14 skill names are present after initBundledSkills() and include supporting docs under docs/superpowers/.
src/skills/bundled/stoneage.ts
src/skills/bundled/index.ts
src/skills/bundled/stoneage.test.ts
docs/superpowers/plans/2026-07-27-stoneage-native-migration-plan.md
docs/superpowers/specs/2026-07-27-stoneage-native-migration-design.md
Expose native oc CLI alias and harden CLI/skills entrypoints for non-interactive and skills-only workflows.
  • Map a new bin alias "oc" to ./bin/openclaude in package.json and add tests to assert bin mapping.
  • Add a MACRO fallback initializer in cli.tsx for environments without build-time macros.
  • Relax provider validation and startup banner logic so claude skills ... can run without configured providers and without the gradient screen.
  • Adjust main.ts CLI options and parsing for repeatable --add-dir, allowUnknownOption on skills subcommands, and skip full command tree in print/resume modes; improve skills CLI tests to isolate env and ensure no real network/API calls.
package.json
src/entrypoints/cli.tsx
src/main.tsx
src/entrypoints/cli.skills.test.ts
src/utils/package.test.ts
Extend buddy system with new species, deterministic visuals/behavior, and companion customization.
  • Add seven new buddy species constants, extend SPECIES list, define SPECIES_COLORS map and companionColor helper in types, and allow speciesOverride on StoredCompanion.
  • Expand sprites.ts with body and shoot animation frames for new species plus a SHOOT_FRAMES map, renderShootSprite() and shootFrameCount(), and extend renderFace() for the new species’ eye patterns.
  • Teach /buddy set subcommand to switch companion form (including a random mode that clears overrides), cache getCompanion() results for performance, and swap hash helper to new deterministic.ts for non-persisted choices; extend AppState with companionShotAt.
  • Update buddy command metadata hint string to include the new set subcommand and fix observer imports/types.
  • Add a migration fixture JSON for buddy/skills scenarios.
src/buddy/types.ts
src/buddy/sprites.ts
src/buddy/companion.ts
src/buddy/deterministic.ts
src/commands/buddy/buddy.tsx
src/commands/buddy/index.ts
src/buddy/observer.ts
fixtures/0530e8.json
fixtures/734ad7.json
src/state/AppStateStore.ts
Add curated themes with user override support and surface richer statusline/usage information.
  • Extend THEME_NAMES with curated themes (dracula, nord, monokai, solarized, gruvbox, synthwave84, cyberpunk) and implement each as a Theme inheriting from light/dark presets.
  • Refactor getTheme() to select a baseTheme, then optionally merge in themeOverrides from settings via getInitialSettings(), with a safe require() and try/catch.
  • Wire new themes into ThemePicker options list, preserving accessibility/ANSI themes.
  • Update BuiltinStatusLine to show offline state, provider name, combined token+cost segment, and prioritize segments correctly when space-constrained; feed providerName, offline flag, and tokenCountWithEstimation from runtime; add tests for new BuiltinStatusData shape and curated theme resolution/overrides.
src/utils/theme.ts
src/utils/theme.test.ts
src/components/ThemePicker.tsx
src/components/BuiltinStatusLine.tsx
src/components/BuiltinStatusLine.test.tsx
src/utils/settings/types.ts
Make query guard and retry behavior more configurable and allow disabling certain timeouts/caps via env.
  • Generalize queryGuardConfig to handle three env-based durations (hard max, idle timeout, tool lease grace) with a shared resolver that accepts zero as “disabled”, adds new env constants and max limits, and returns a composite QueryGuardResolvedOptions; extend tests accordingly.
  • Adjust QueryGuard to treat 0 hardMaxQueryMs and idleTimeoutMs as disabled (infinite deadlines and skipping the corresponding timeout reasons) while preserving positive-only semantics for leases.
  • Increase MAX_CONFIGURABLE_RETRIES, add env-driven overrides for persistent retry caps/backoff (OPENCLAUDE_PERSISTENT_MAX_*), expose getPersistentMaxAttempts() in tests, and add OPENCLAUDE_MAX_529_RETRIES with validation and tests; tweak withRetry logging metadata to use new getters.
  • Expose resolveGoalMaxTurns() with OPENCLAUDE_GOAL_MAX_TURNS env override (0 → unbounded) and update createGoalState to default via resolver; update repl max-turn behavior to treat 0/null/undefined/negative as “no limit” and adapt associated tests.
  • Tighten cacheStats, modelCost, and other utilities (e.g., falling back to a fixed unknown-model cost instead of default-main-loop model).
src/utils/queryGuardConfig.ts
src/utils/queryGuardConfig.test.ts
src/utils/QueryGuard.ts
src/services/api/withRetry.ts
src/services/api/withRetry.test.ts
src/services/goal/state.ts
src/screens/replMaxTurns.ts
src/screens/replMaxTurnsProp.test.ts
src/utils/modelCost.ts
src/commands/cacheStats/cacheStats.ts
Introduce offline-detection plumbing that short-circuits query execution and surfaces status to UI.
  • Add services/api/offlineState.ts with checkInternetConnection(), isOfflineMode(), and setOfflineMode(), using dns.promises.lookup and a CLAUDE_CODE_OFFLINE opt-out.
  • Update QueryEngine.submitMessage to call checkInternetConnection() before doing any work, emit an assistant message explaining offline mode plus a synthetic result event with stop_reason=offline when offline, and bail out early.
  • Expose offline flag via BuiltinStatusLine data and display an [OFFLINE] status segment; ensure offline detection is safe in bootstrap and tests.
  • Add QueryEngine.offline.test.ts to verify the new offline behavior and the global offline state toggling.
src/services/api/offlineState.ts
src/QueryEngine.ts
src/QueryEngine.offline.test.ts
src/components/BuiltinStatusLine.tsx
Improve ads / earning tips UX, privacy, and tests around Gitlawb-sponsored content.
  • Extend gitlawbEarn to attribute sponsored tips to the actual advertiser and link target using renderSponsorLink(), pass latest user message into fetchNextTip for contextual matching, treat malformed/blank ads as fallback-only, and unref dwell confirmation timers; update tests to assert fetched-ad content, blank-ad fallback, and environment cleanup.
  • Enhance /ads command to always use a masked dialog (never persist inline codes), clear stored earnCode on opt-out, include explicit disclosure about sharing redacted prompts for targeted tips, and handle dialog submit/cancel flows; add tests for all flows and restore env/config between tests.
  • Strengthen gitlawbEarn and ads tests by stubbing fetch, isolating ADS_BASE_URL and cadence env vars, and restoring global config after each run.
src/services/tips/gitlawbEarn.ts
src/services/tips/gitlawbEarn.test.ts
src/commands/ads.tsx
src/commands/ads.test.ts
src/services/tips/tipLink.ts
Enhance command suggestions for specific commands and make skills/doctor diagnostics more robust in dev/test environments.
  • Extend generateCommandSuggestions to provide sub-argument completions for /ads, /config, and /resume, including reading session history JSONL files via getSessionProjectDir(), and ensure it behaves safely when directories/files are missing; add targeted tests for these flows.
  • Make doctorDiagnostic classify development installations more robustly via isRunningFromSourceTree() that walks up parent directories looking for package.json names, and use it both in getCurrentInstallationType() and getInstallationPath(); add tests for installation type and stale project settings paths.
  • Adjust skillChangeDetector watcher options to set depth=2 and followSymlinks=false to avoid Bun FSWatcher deadlocks, and update tests to assert the new depth.
  • Harden skills CLI tests to scrub provider/env variables, set OPENCLAUDE_MAX_RETRIES=0, and log failing stdout/stderr when the skills process exits non-zero.
src/utils/suggestions/commandSuggestions.ts
src/utils/suggestions/commandSuggestions.test.ts
src/utils/doctorDiagnostic.ts
src/utils/doctorDiagnostic.settingsPath.test.ts
src/utils/skills/skillChangeDetector.ts
src/utils/skills/skillChangeDetector.test.ts
src/entrypoints/cli.skills.test.ts
Tighten OpenAI/Gemini shim behavior, integration options, and model options around providers/IDE.
  • Adjust OpenAI shim to clamp reasoning_effort max-levels and ensure catalog Gemini models map reasoningEffort='max' to 'high'; update tests accordingly and refine Gemini context-caching tests to include assistant message in cached prefix content.
  • Register additional Gemini model IDs (e.g., google/gemini-3.1-pro-preview) and tune Gemini context caching thresholds and behavior; ensure cache requests include both user and assistant context where needed.
  • Disable inactive provider profile switching by making getInactiveProviderProfileOptions() return an empty list, effectively hiding cross-profile model options; minor providerProfiles adjustments.
  • Add Antigravity as a VS Code–style IDE type with dedicated command resolution and process keywords, and fix ManagePlugins author rendering to avoid assuming author is always a string.
src/services/api/openaiShim.ts
src/services/api/openaiShim.test.ts
src/services/api/openaiShim.geminiCache.test.ts
src/integrations/models/gemini.ts
src/utils/model/modelOptions.ts
src/utils/providerProfiles.ts
src/utils/ide.ts
src/commands/plugin/ManagePlugins.tsx
General quality-of-life fixes and test harness improvements across config, permissions, ads, and install surfaces.
  • Make _setGlobalConfigCacheForTesting simpler/idempotent by always syncing testGlobalConfigForTesting with the provided config or undefined.
  • Harden permissions tests by guarding optional cache clearing on getPlatform.cache, and tweak cleanupNpmInstallations test expectations to match current shim naming.
  • Update ads-related tests to restore original env/config and swap unreachable ADS_BASE_URL setup to beforeEach/afterEach; clarify cacheStats behavior for empty histories.
  • Update claudeInChrome skill/setup to require the BROWSER_TOOLS module via createRequire with a try/catch so dev installs without the MCP package don’t crash.
  • Ensure CLI macro defaults exist in entrypoints/cli.tsx for test and non-macro builds, and add or update lockfile and fixtures as needed.
src/utils/config.ts
src/utils/permissions/permissions.test.ts
src/utils/openclaudeInstallSurfaces.test.ts
src/services/tips/gitlawbEarn.test.ts
src/commands/cacheStats/cacheStats.ts
src/skills/bundled/claudeInChrome.ts
src/utils/claudeInChrome/setup.ts
src/entrypoints/cli.tsx
bun.lock

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

- Adiciona ignore para a dependência @azure/identity e limpa ignore inativos em knip.json
- Cria script typecheck no pacote web/package.json
- Substitui configuração legada e quebrada do Astro por tsconfig para React+Vite
- Restaura os arquivos web/src/content.ts e web/src/vite-env.d.ts ausentes
- Corrige incompatibilidades estritas de tipos no Zustand e no react-markdown do web
…ongas

Altera o cap padrão de `replMaxTurns` de 50 para 0 (sem limite) tanto no
`createDefaultGlobalConfig` quanto na constante `DEFAULT_REPL_MAX_TURNS`,
eliminando a interrupção "Reached the maximum number of turns (50)" em
sessões interativas longas. O usuário pode configurar um valor positivo
via `config.replMaxTurns` quando necessário.
@mat-dgruber mat-dgruber changed the title feat: native 'oc' alias & bundle 14 stoneage & token-economy skills feat: session lock & recovery, web interface, ads optimization, stoneage skills, themes and statusline Jul 31, 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.

2 participants