summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-03-17Release v0.24.2v0.24.2Paul Buetow
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17Fix bugs, remove duplication, and clean up code quality issuesPaul Buetow
- Log swallowed JSON unmarshal errors in stats and LSP handlers - Fix debug log file handle leak in tmuxedit (return closer from initDebugLog) - Check f.Close() errors on write paths in promptstore and tmuxedit - Fix cacheGet TOCTOU race by using single write lock - Fix readInput to use passed stdin reader instead of os.Stdin.Stat() - Remove 45 'moved to' comment tombstones from lsp/handlers.go - Deduplicate canonicalProvider wrappers (use llmutils.CanonicalProvider directly) - Remove SetWindow side effect from stats.TakeSnapshot (pure read now) - Move duplicated splitLines to textutil.SplitLinesBytes - Collapse StatusSink.SetGlobal 10 params into GlobalStatus struct - Simplify LRU touchLocked to in-place delete-and-append Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16Release v0.24.1v0.24.1Paul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Strengthen LLM stats counter tests with value assertionsPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Fix byte vs UTF-16 indexing in LSP position handlingPaul Buetow
Adds utf16OffsetToByteOffset helper to correctly convert LSP character positions (UTF-16 code units) to Go string byte offsets. Fixes trigger detection, prefix heuristic, and completion text slicing for files containing multi-byte characters. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Extract LLM stats counters into llmStatsSubsystemPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Document lock ordering, fix test data races, correct stateMu guardPaul Buetow
- Add doc comments clarifying Server.mu and completionState.stateMu are independent (no ordering constraint). - Fix test using wrong lock (s.mu instead of stateMu) for lastLLMCall. - Replace time.Sleep polling in 7 tests with s.inflight.Wait() to eliminate data races under -race. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Add Snapshot.ScopeReqs/ScopeRPM and simplify 3 callersPaul Buetow
Centralizes the provider+model map traversal and window-minutes guard that was duplicated in hexaiaction, hexaicli, and lsp. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Track fire-and-forget goroutines with sync.WaitGroup for clean shutdownPaul Buetow
Adds inflight WaitGroup to Server and wraps inline-prompt, chat-response, and deferShowDocument goroutines. Run() waits for all in-flight work before returning. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Replace Summary: prefixes with standard Go package doc commentsPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Make deferShowDocument respect serverCtx for graceful shutdownPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Use atomic.Int64 for LLM stats counters instead of server-wide mutexPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Address review: add zero-temp test, remove unused surface parameterPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Centralize GPT-5 temperature override into llmutils.ResolveTemperaturePaul Buetow
Eliminates identical temperature resolution logic duplicated in hexaiaction, hexaicli, and lsp packages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Add bounds checks to extractRangeText and split into helper functionsPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Use read lock for cache misses in completionState.cacheGetPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Rename timeout helpers to match actual durations (timeout20s, timeout18s)Paul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Replace interface{} with any in LSP typesPaul Buetow
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Use filepath.Join instead of fmt.Sprintf for path constructionPaul Buetow
Replace string-based path building with filepath.Join in LSP and MCP server log path helpers for platform-correct path separators. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Add doc comments to exported types and functionsPaul Buetow
Document ~30 exported types in lsp/types.go and exported functions in llm/provider.go, lsp/server.go, and hexailsp/run.go. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Split mcp/server.go (962L) into server, handlers_prompt, handlers_toolPaul Buetow
server.go (223L): core lifecycle and routing handlers_prompt.go (420L): prompt CRUD handlers handlers_tool.go (335L): tool handlers and schema builders Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Split config_load.go into config_load.go and config_env.goPaul Buetow
Move environment variable handling functions into config_env.go (269L), keeping config_load.go at 697L. Both well under the 1000-line limit. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Merge runOnce and runOnceWithOpts in hexaiaction/prompts.goPaul Buetow
Consolidate near-identical functions into a single runOnce that accepts requestArgs (callers pass zero-value when no options needed). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Add gofumpt formatting target to MagefilePaul Buetow
Add 'mage fmt' target that runs gofumpt -w on the project. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Fix mixed pointer/value receivers on appconfig.AppPaul Buetow
Change all value receivers on App to pointer receivers for consistency. Update callers that pass App values to pass pointers where needed for the actionConfig interface. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Replace custom stringsTrim with strings.TrimSpacePaul Buetow
Remove duplicate stringsTrim implementations in stats and tmux packages, replacing all call sites with the standard library strings.TrimSpace. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Use %w for error wrapping in appconfig config_load.goPaul Buetow
Replace %v with %w in three fmt.Errorf calls that wrap actual error values, enabling errors.Is/errors.As chains for callers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Decompose App God struct into embedded section structsPaul Buetow
Replace 60+ flat fields in App with 4 embedded section structs: CoreConfig, ProviderConfig, PromptConfig, FeatureConfig. Go field promotion preserves all existing field access patterns. Updated flattenAppConfig to recurse into embedded structs for runtimeconfig. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Refactor oversized functions and split large test filesPaul Buetow
Split DefaultPrompts (201L), loadFromFile (83L), and Update (74L) into focused helper functions under 50 lines each. Split handlers_test.go (1650L) and config_test.go (1419L) into logical sub-files under 1000L. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Remove os.Setenv from MCP server production codePaul Buetow
Replace environment variable communication between cmd and internal packages with explicit MCPOverrides struct. CLI flag values are now passed via typed struct fields through Run/RunWithFactory/RunBackfill. Env var support preserved through appconfig's applyMCPEnv pipeline. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Replace panic with graceful error returns in tmuxedit and mcp-serverPaul Buetow
Change initDebugLog() and defaultLogPath() to return errors instead of panicking. Callers now handle errors gracefully with proper messages. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Fix time.After timer leak in stats.acquireFileLockPaul Buetow
Replace per-iteration time.After with a single time.NewTimer that is reused via Reset() and cleaned up with defer Stop(). Prevents leaking a timer and channel on every retry iteration. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Fix data races in logging package using atomic operationsPaul Buetow
Replace bare package-level vars with atomic.Pointer[log.Logger] for std and atomic.Int32 for logPreviewLimit to prevent concurrent access races. Add comprehensive tests including concurrency, edge cases, and nil logger. Coverage: 100%. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Release v0.24.0v0.24.0Paul Buetow
Bring unit test coverage from ~75% to 85.1% project-wide. All internal packages now exceed 80% coverage. Refactored cmd entrypoints to extract testable run() functions with injectable seams. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16Release v0.23.1v0.23.1Paul Buetow
2026-03-15Release v0.23.0v0.23.0Paul Buetow
2026-03-14Release v0.22.3v0.22.3Paul Buetow
2026-03-14Release v0.22.2v0.22.2Paul Buetow
2026-03-14Release v0.22.1v0.22.1Paul Buetow
2026-03-13release: v0.22.0v0.22.0Paul Buetow
2026-03-10Bump version to 0.20.2v0.20.2Paul Buetow
2026-03-10task 80330fc4: deduplicate default config path helperPaul Buetow
2026-03-10task dac9b1e5: avoid LSP startup panic on StateDir failurePaul Buetow
2026-03-10task bf088a70: extract LSP client and completion statePaul Buetow
2026-03-02release: v0.20.1v0.20.1Paul Buetow
2026-03-02hexaiaction: replace global action state with Runner struct (task 406)Paul Buetow
2026-03-02hexaicli: move column printer into internal/termprint package (task 406)Paul Buetow
2026-03-02lsp: inject StatusSink to decouple core from tmux package (task 407)Paul Buetow
2026-03-02appconfig: return toml raw-unmarshal errors instead of ignoring (task 409)Paul Buetow
2026-03-02io: use errors.Is for EOF checks in lsp and mcp servers (task 409)Paul Buetow