| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
|
love it, thanks! |
Sorry, something went wrong.
…d dank Windows Command Execution Fixes: - Add detectCommandShell() and parseCommand() functions for shell detection - Implement direct PowerShell execution bypassing cmd.exe wrapper - Add shell built-ins detection and needsShellExecution function - Fix stream draining to prevent race conditions (Promise.all) - Remove duplicate abort listeners Edit Tool Improvements: - Add newString validation guard (handles undefined/null/empty) - Add UnicodeNormalizedReplacer for smart quotes and em-dashes - Fix multi-line pattern matching with empty lines (Issue anomalyco#26) - Add unique match identification for replaceFirst functionality - Improve block anchor matching with variable gap handling Documentation: - Add verified-fixes-summary.md documenting all fixed issues - Add windows-command-execution-issues.md comprehensive analysis - Add linux-unix-mac-compatibility-analysis.md for cross-platform impact Fixes: Issues anomalyco#2, anomalyco#3, anomalyco#4, anomalyco#5, anomalyco#7, anomalyco#8, anomalyco#9, anomalyco#15, anomalyco#19, anomalyco#26
… (#4) * feat: implement Remory MCP integration (#3) - Add comprehensive TDD test suite for configuration validation - Update opencode.json to use Remory via Docker exec command - Add infrastructure tests for container health and connectivity - Include placeholder tests for memory operations and semantic search Following GitHub issue #3 requirements for enhanced memory capabilities. * test: enhance Remory integration test coverage (#3) - Add comprehensive test suite for Remory MCP integration - Validate Docker container health and connectivity - Test semantic search capabilities and performance - Verify memory tool compatibility with Remory backend - 100% test coverage for configuration validation - All tests passing with 7/7 success rate * docs: add comprehensive Remory memory service documentation (#3) - Document enhanced memory capabilities with semantic search - Add Docker container setup instructions - Detail 5-15x performance improvements over basic memory server - Include technical architecture and configuration examples - Document memory operations and performance benefits - Complete documentation requirements for issue #3 * docs: verify MCP configuration for local Remory instance The MCP memory configuration in opencode.json is already correctly set up to use the local Remory instance running in Docker. No changes needed.
… leaks Addresses the 4 remaining high-priority memory leak issues from the work plan (I-9385-A, I-7046-A, PR-14635, I-7046-C partial). I-9385-A (CRITICAL, Priority anomalyco#1) — tool/task.ts: call Session.remove() after extracting subagent task output. This fires the session.deleted event, which triggers cleanupSessionCaches() in the event-reducer — freeing all in-memory messages, parts, diffs, permissions, and status for the subagent session. The task_id in the output becomes a dead reference; if the LLM tries to resume, Session.get() fails gracefully and a fresh session is created. Validated: the cleanup infrastructure already existed but was never invoked for subagent sessions. I-7046-A (CRITICAL, Priority anomalyco#3) — session/compaction.ts: clear part.state.output and part.state.attachments when pruning compacted tool parts. Previously, prune() set time.compacted but left the full output string in both the DB row and the in-memory store. toModelMessages already substituted "[Old tool result content cleared]" for compacted parts — this change aligns stored data with that behavior, freeing the large strings from memory and disk. PR-14635 (HIGH, Priority anomalyco#4) — TUI event listener cleanup: - app.tsx: save the unsubscribe functions returned by all 6 sdk.event.on() calls; call them in a single onCleanup() handler. Previously, onCleanup was not even imported. - routes/session/index.tsx: save and clean up the message.part.updated listener. This component mounts/unmounts during session navigation, so each navigation previously added a duplicate listener. - component/prompt/index.tsx: save and clean up the PromptAppend listener. Same mount/unmount pattern as the session component. I-7046-C (partial) — the TUI event listener fixes above cover the most impactful instances of the missing-dispose pattern. A full audit of all subscribe() call sites remains as follow-up work. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…r details - retry.ts: respect isRetryable:false and 4xx status in JSON error bodies (Issue #7) - provider.ts: cap Bedrock Anthropic models at 200K context (Issue #4) - batch.ts: include per-tool error details in failure output (Issue #9) - retry.test.ts: 5 new tests for catch-all retry classification
…odies - Refresh VCS state before idempotency check in create() to avoid TOCTOU race (anomalyco#4, anomalyco#12) - Use refreshed branch/defaultBranch in fallback PR return (anomalyco#9) - Validate base branch exists before attempting gh pr create (anomalyco#22) - Wrap review comment bodies in fenced blocks for structural separation (anomalyco#8)
- Finding #1: re-sync active sessions after disposal by saving fullSyncedSessions before clear and calling result.session.sync() after successful bootstrap - Finding #2: cap retries at 5 with exponential backoff (2s/4s/8s/16s/30s) and generation counter to cancel stale retries when newer disposal arrives - Finding #3: move Instance.provide() inside while loop so each event stream reconnect iteration gets fresh context - Finding anomalyco#4: remove unconditional startEventStream(process.cwd()); add events RPC method; thread calls it only when not in external transport mode - Finding anomalyco#5: replace manual new Promise+setTimeout with sleep() from node:timers/promises - Finding anomalyco#6: reload() aborts current event stream and conditionally restarts it
- Finding #1: re-sync active sessions after disposal by saving fullSyncedSessions before clear and calling result.session.sync() after successful bootstrap - Finding #2: cap retries at 5 with exponential backoff (2s/4s/8s/16s/30s) and generation counter to cancel stale retries when newer disposal arrives - Finding #3: move Instance.provide() inside while loop so each event stream reconnect iteration gets fresh context - Finding anomalyco#4: remove unconditional startEventStream(process.cwd()); add events RPC method; thread calls it only when not in external transport mode - Finding anomalyco#5: replace manual new Promise+setTimeout with sleep() from node:timers/promises - Finding anomalyco#6: reload() aborts current event stream and conditionally restarts it
- Finding #1: re-sync active sessions after disposal by saving fullSyncedSessions before clear and calling result.session.sync() after successful bootstrap - Finding #2: cap retries at 5 with exponential backoff (2s/4s/8s/16s/30s) and generation counter to cancel stale retries when newer disposal arrives - Finding #3: move Instance.provide() inside while loop so each event stream reconnect iteration gets fresh context - Finding anomalyco#4: remove unconditional startEventStream(process.cwd()); add events RPC method; thread calls it only when not in external transport mode - Finding anomalyco#5: replace manual new Promise+setTimeout with sleep() from node:timers/promises - Finding anomalyco#6: reload() aborts current event stream and conditionally restarts it
…odies - Refresh VCS state before idempotency check in create() to avoid TOCTOU race (anomalyco#4, anomalyco#12) - Use refreshed branch/defaultBranch in fallback PR return (anomalyco#9) - Validate base branch exists before attempting gh pr create (anomalyco#22) - Wrap review comment bodies in fenced blocks for structural separation (anomalyco#8)
* Restructure watchdogTick so idle-detection sweeps
SessionActivity.list() independently of stuck-tool
query results — fixes Bug anomalyco#4 (idle gated behind
stuck-tool results) and Bug anomalyco#5 (leaf.length === 0
early return skipping idle detection entirely)
* Add pre-cancel map cleanup in the idle sweep to
prevent unbounded growth of stale entries
* Define CancelRequested bus event in processor and
publish from abortChildren so child sessions get
in-memory cancel alongside the DB updates (Bug anomalyco#7)
* Add SessionPrompt.init() subscribing to the event,
called from bootstrap alongside SessionActivity
* Wrap AI SDK iterator consumption in try/finally to
call iter.return() on abort, preventing leaked HTTP
connections (Bug anomalyco#8)
* Check abort signal before retry continue to stop
cancelled sessions from restarting loops (Bug anomalyco#9)
* Remove shadowed abort promise in permission-check
loop so pre-aborted signals reject immediately
instead of hanging (Bug anomalyco#10)
* Update watchdog tests for independent idle sweep
and add cancel-propagation event tests
* Restructure watchdogTick so idle-detection sweeps
SessionActivity.list() independently of stuck-tool
query results — fixes Bug anomalyco#4 (idle gated behind
stuck-tool results) and Bug anomalyco#5 (leaf.length === 0
early return skipping idle detection entirely)
* Add pre-cancel map cleanup in the idle sweep to
prevent unbounded growth of stale entries
* Define CancelRequested bus event in processor and
publish from abortChildren so child sessions get
in-memory cancel alongside the DB updates (Bug anomalyco#7)
* Add SessionPrompt.init() subscribing to the event,
called from bootstrap alongside SessionActivity
* Wrap AI SDK iterator consumption in try/finally to
call iter.return() on abort, preventing leaked HTTP
connections (Bug anomalyco#8)
* Check abort signal before retry continue to stop
cancelled sessions from restarting loops (Bug anomalyco#9)
* Remove shadowed abort promise in permission-check
loop so pre-aborted signals reject immediately
instead of hanging (Bug anomalyco#10)
* Update watchdog tests for independent idle sweep
and add cancel-propagation event tests
…t-errors-another-one Fix markdownlint errors (MD038, MD058, MD025, MD034)
* feat: add pending instinct TTL pruning and /prune command Pending instincts generated by the observer accumulate indefinitely with no cleanup mechanism. This adds lifecycle management: - `instinct-cli.py prune` — delete pending instincts older than 30 days (configurable via --max-age). Supports --dry-run and --quiet flags. - Enhanced `status` command — shows pending count, warns at 5+, highlights instincts expiring within 7 days. - `observer-loop.sh` — runs prune before each analysis cycle. - `/prune` slash command — user-facing command for manual pruning. Design rationale: council consensus (4/4) rejected auto-promote in favor of TTL-based garbage collection. Frequency of observation does not establish correctness. Unreviewed pending instincts auto-delete after 30 days; if the pattern is real, the observer will regenerate it. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering> * fix: remove duplicate functions, broaden extension filter, fix prune output - Remove duplicate _collect_pending_dirs and _parse_created_date defs - Use ALLOWED_INSTINCT_EXTENSIONS (.md/.yaml/.yml) instead of .md-only - Track actually-deleted items separately from expired for accurate output - Update README.md and AGENTS.md command counts: 59 → 60 Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering> * fix: address Copilot and CodeRabbit review findings - Use is_dir() instead of exists() for pending path checks - Change > to >= for --max-age boundary (--max-age 0 now prunes all) - Use CLV2_PYTHON_CMD env var in observer-loop.sh prune call - Remove unused source_dupes variable - Remove extraneous f-string prefix on static string Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering> * fix: update AGENTS.md project structure command count 59 → 60 Co-Authored-By: Claude <noreply@anthropic.com> * fix: address cubic and coderabbit review findings - Fix status early return skipping pending instinct warnings (cubic anomalyco#1) - Exclude already-expired items from expiring-soon filter (cubic anomalyco#2) - Warn on unparseable pending instinct age instead of silent skip (cubic anomalyco#4) - Log prune failures to observer.log instead of silencing (cubic anomalyco#5) Co-Authored-By: Claude <noreply@anthropic.com> * fix: YAML single-quote unescaping, f-string cleanup, add /prune to README - Fix single-quoted YAML unescaping: use '' doubling (YAML spec) not backslash escaping which only applies to double-quoted strings (greptile P1) - Remove extraneous f-string prefix on static string (coderabbit) - Add /prune to README command catalog and file tree (cubic) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Happy <yesreply@happy.engineering>
anomalyco#1-anomalyco#4 独立验收 3 条 P2: - settings: FORCE_STABLE_LAYOUT 下 newLayoutDesigns getter 钉死 false(忽略持久值) + settings-general 隐藏「新布局」实验开关——彻底封死未完成的 V2 布局,避免曾 手动开过开关、持久化 true 的用户重启后再次丢失左右栏 - layout deleteSession:导航目标改用 sortedRootSessions(可见 root 会话),避免删 当前会话后跳到侧栏看不见的子会话/已归档会话 + 补 notifySessionTabsRemoved 广播 关掉指向已删会话的死 tab - session-side-panel:右侧空文件 tab 残留的 opencode Mark 水印换成 PunkcodeAI 文字 anomalyco#5 reload 时序独立验收:P0(无限 reload/登录态)主路径安全,加固 P2-1: - auth.ts 加 localStorage reload 熔断——sessionStorage marker 持续失效时同账号会 反复 reload(白屏死循环),用 localStorage 记上次 reload 的 {账号,时刻},同账号 5s 内已 reload 过则熔断跳过(接受内存残留好过白屏)。按账号区分,不误伤正常切换 typecheck 19/19。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refresh commit SHAs, consolidate 17 scattered commits into 5 logical sections, and add invariant anomalyco#4 for the 401 redirect-loop fix. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…helper [feat: prevent-sleep] /code-review high effort 多 agent 审查后修复正确性 + 清理: - #1 worker 改请求-回执模型,set_enabled 以真实 guard 状态(actual)更新所有 surface,请求开启却没生效返 Err → 不再谎报"已开"(altitude 修复) - anomalyco#2 persist 移最后且失败只 warn 不回退运行态,消除多方状态打架 - anomalyco#3 listen 注册失败记日志(不再静默) anomalyco#4 worker send 失败立即 Err - anomalyco#6 抽 utils/prevent-sleep.ts wrapper(组件不裸用 invoke,对齐 feishu-config) - anomalyco#7 抽 settings_store.rs(read_value/write),不再手抄 store 样板 - anomalyco#10 event API 改静态 import cargo check 0 error / typecheck 17/17 / 纯逻辑 5 单测未变 / 全套 e2e 16 passed+3 skip 无回归。未修边际项 anomalyco#5/anomalyco#8/anomalyco#9 记录在案。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…开关 env/jsonc/失败提示 [feat: telemetry-usage-stats] 把上批未修的剩余 code-review 项清完(telemetry 16 单测 + typecheck 16/16 + app 808 全绿): - anomalyco#2 update_applied relaunch 前易丢:加 track_blocking + track_event_blocking_cmd,前端 await 后再 relaunch - anomalyco#10 启动期同步文件 IO:track 重构,opt-out 判定+文件 IO 整个丢进后台 spawn - anomalyco#4 UI 开关忽略 env:get_telemetry_enabled 返回 is_enabled() 有效值 - anomalyco#5 不读 opencode.jsonc:read_config_telemetry 按合并优先级读 config.json<opencode.json<opencode.jsonc - anomalyco#7 写失败静默:set_telemetry_enabled 返回 Result,前端失败 showToast 提示(+i18n×3) - anomalyco#9 事件名无共享常量:前端加 TELEMETRY_EVENT 常量集中事件名 - 顺带抽 home_base()/config_dir() 去重路径解析 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lizeWorkspace)[feat: feishu-account-workspace] 针对 /code-review high 的 2 个影响使用项: - #1 首字节快速失败 120s→240s:留足推理模型(deepseek-r1 等)长思考/非增量流式首字节余量,降低误杀正常慢响应;仍比 30min 快 7.5x - anomalyco#2/anomalyco#5 workspace 未 trim:抽 normalizeWorkspace 单一 helper,account-store 存盘 + pipeline workspaceDir 读取都规整(消三处重复 + 防带首尾空格路径被当目录) 测试 +3(normalizeWorkspace 2 例 + account-store T8b trim);adapter 732 pass / typecheck 17/17。 anomalyco#3(占位 part 后卡死漏网)/anomalyco#4(.gitignore 热路径 I/O)低优先,记 backlog。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…LLM paths A panic while holding any of our Mutex<Option<Child>> / Mutex<Option<Engine>> locks was poisoning the state permanently — the next lock() would panic again, so TTS/STT/LLM were dead until the app restarted. Introduce MutexSafe trait in util.rs (same spirit as mobile speech.rs lock_safe) and migrate all 33 call sites in llm.rs, speech.rs and lib.rs to state.child.lock_safe(). Poisoned-mutex cases now log a warning and keep serving — the guarded state (process handles, load flags) is idempotent across calls so resuming is safe. Closes #4/21.
Bug #1: watcher.ts ignored add/unlink/change events on directories not yet expanded (isDirLoaded guard). Fixed: change events on files now correctly refresh the parent directory. Bug #2: tree-store.ts listDir with force:true was silently dropped when an inflight request existed. Fixed: force:true now chains after the in-flight request completes. Bug #3: operations.ts refreshDir was fire-and-forget. Dialog closed before tree refresh completed. Fixed: await refreshDir in all 5 operations (createFile, createFolder, renameNode, deleteNode, moveNode). Bug #4: watcher.ts change event on a file (not directory) never refreshed the parent directory. Fixed: file change events now refresh parent dir when loaded. Also: store.ts open() accepts fallbackContent to avoid false "file deleted" when readRaw fails but content is already loaded in read mode. Double-click on file tree opens in edit mode directly (VS Code parity).
…, Codebase Memory MCP, Ponytail benchmark - anomalyco#3 SkillOpt: scripts/vmk-skill-audit.ps1 (audita 71 skills en 4 dimensiones) - anomalyco#5 MCP: codebase-memory-mcp v0.8.1 install + config en opencode.jsonc (disabled: true) - anomalyco#6 Ponytail: scripts/vmk-ponytail-bench.ps1 (benchmark compresion 3 escenarios x5 niveles) - // vMK: tags verificados en AMARILLO files - Context pruning (anomalyco#1) + output constraints (anomalyco#4) pre-existentes en session/ - Build vMK verificado: opencode-vMK.exe (136MB, smoke+help OK)
…docs audit - run_agent: collect all tool calls per turn instead of breaking after the first ToolCallEnd (bug anomalyco#1) - provider: replace single tool_call_id with index-based Vec to correctly route interleaved parallel tool call args in SSE stream (bug anomalyco#2) - explore agent: mode 'subagent' -> 'explore' so tools_for_mode strips write tools as intended (bug anomalyco#3) - session_input: remove orphaned dead module with no consumers (bug anomalyco#4) - ToolContext: add shutdown flag, run_agent checks it for early exit (bug anomalyco#5) - todowrite: preserve stable task IDs by title-matching existing entries instead of positional reassignment (bug anomalyco#6) - agent descriptions: remove false parallel-execution claims (bug anomalyco#7) - run_agent: last_assistant now updated on tool-call-only turns (bug anomalyco#8) - debug CLI: add task add/delete subcommands + SessionStore.delete_task (bug anomalyco#9) - worker.rs: replace production unwrap() with if-let guard (bug anomalyco#10) - AGENTS.md: fix platform (Linux-only -> cross-platform), branch names, core/ module list, provider/ trait location
Tool: new codegraph tool with 5 modes (explore, search, trace, impact, path). Pre-indexed AST-parsed knowledge graph for code structure questions — anomalyco#2 in the grounding priority chain. Build: add cross-platform @colbymchenry/codegraph@1.4.1 dependency + bun install --os=* --cpu=* for all 6 platform bundles. Grounding chain §P7: anomalyco#1 where.exe/which anomalyco#2 codegraph (new) anomalyco#3 messagesearch anomalyco#4 universalsearch anomalyco#5 glob anomalyco#6 grep anomalyco#7 rg/fd anomalyco#8 nvidia-smi etc. Evidence hierarchy: Observation > CodeGraph > Ext Source > Inferred > Hypothetical > Guess
…t CSP wasm anomalyco#4 run.ts: every process.exit(1) inside the Effect.promise handler has been replaced with 'throw new CliError({ message })'. CliError is recognised by FormatError at the top-level catch (index.ts:128), which prints the message and sets exitCode = 1 — same user-visible behavior, but Effect finalizers and the effectCmd try/finally (store.dispose) run first. The 'die()' helper and its 8 early-validation call sites remain unchanged (no resources allocated yet). anomalyco#5 ui.ts: add comment documenting why 'wasm-unsafe-eval' is required by the embedded web UI (CodeMirror/Lezer WASM grammars, Monaco WASM editor core).
anomalyco#1 wildcard.ts: collapse consecutive * and ? into single .* and . to prevent catastrophic backtracking (ReDoS) from patterns like ****. anomalyco#2 ideas.ts: log warning when JSON.parse of Python AI subprocess stdout fails, instead of silently swallowing the error with empty catch {}. anomalyco#3 message-v2.ts: scope try/catch to ProviderError.parseStreamError only. If parseStreamError throws, the error is now visible in the fallthrough to NamedError.Unknown with proper cause tracking. anomalyco#4 session.ts: escape % and _ in search input before LIKE pattern interpolation, preventing SQL wildcard interpretation of literal chars. anomalyco#5 server/handlers/fs.ts: replace magic number slice(13) with proper prefix match, wrap decodeURIComponent in try/catch returning 400 on malformed percent-encoded path instead of crashing.
| Back | FazBrowse Home | New Git URL |
Fixes #3
I originally brought this up when I added model selection in the first place, I have these changes in open pr and figured I would copy it over to here since it is the new repo.