Skip to content

Conversation

@GrocerPublishAgent
Copy link
Contributor

No description provided.

ex3ndr and others added 30 commits August 27, 2025 10:29
Updated default server endpoint from api.happy-servers.com to api.cluster-fluster.com in:
- CLI configuration (src/configuration.ts)
- Push notifications client (src/api/pushNotifications.ts)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
chore:
- stricter types for daemon control server
- fixed integration tests
ahundt and others added 28 commits January 8, 2026 02:45
Previous behavior:
- Session.cleanup() was never called after session loop completed,
  causing keepAliveInterval to run indefinitely (memory leak)
- sendClaudeSessionMessage() did not check socket.connected before
  emitting, causing messages to be silently lost when disconnected

What changed:
- src/claude/runClaude.ts: Add currentSession?.cleanup() calls in both
  the SIGINT handler (line 381) and after the main loop completes
  (line 457) to properly release intervals and callbacks
- src/api/apiSession.ts: Add socket.connected check before emit in
  sendClaudeSessionMessage() to prevent silent message loss and log
  a debug message when messages cannot be sent

Why: Prevents memory leaks from orphaned intervals and makes message
delivery failures visible in logs for debugging
Adds support for specifying the JavaScript runtime used to spawn Claude Code.
The new --js-runtime flag accepts 'node' (default) or 'bun'.

Usage: happy --js-runtime bun

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…rovements-merged

Feature/new session wizard ux improvements merged
- Move AgentBackend, AgentRegistry to core/
- Create transport/ with TransportHandler abstraction
- Move Gemini-specific logic to GeminiTransport
- Create adapters/ for message transformation
- Create factories/ for high-level agent creation
- Rename AcpSdkBackend → AcpBackend
- Remove acp/utils.ts (merged into transport handlers)
…proved UX

ACP Integration:
- Add sendAgentMessage() for unified Agent Communication Protocol format
- Migrate all Gemini messages from sendCodexMessage to sendAgentMessage(gemini, ...)
- Add ACP message types: task_started, task_complete, turn_aborted, permission-request

Model Selection:
- Support dynamic model selection from frontend via meta.model
- Save selected model to ~/.gemini/config.json for persistence

Permission Handling:
- Integrate GeminiPermissionHandler with permission modes (default, read-only, safe-yolo, yolo)
- Add permission ID to tool call ID mapping for proper UI tracking

Message Flow Improvements:
- Add waitForResponseComplete() to ensure all chunks received before task_complete
- Accumulate response chunks and send complete message once (fixes fragmentation)
- Fix status flickering by not resetting thinking on intermediate idle events

Error Handling:
- Add retry logic for empty response errors (up to 3 retries)
- Improve quota error handling: no retry, show reset time, suggest alternative model
- Better error messages for model not found, rate limits, quota exceeded

Tool Handling:
- Improve change_title detection from toolCallId pattern
- Add tool-result emission after permission approval
- Track hadToolCallInTurn for proper task_complete timing
- Add ConversationHistory class to track user/assistant messages
- Inject previous conversation context into new session on model change
- Allows seamless model switching without losing context
…ling

- Add `happy gemini project set/get` commands for Workspace accounts
- Store project ID per-account (linked to email)
- Show helpful error message for "Authentication required" with guide link
- Sync local ~/.gemini/oauth_creds.json on `happy connect gemini`
- Add `happy connect status` command to show vendor auth status
- Pass GOOGLE_CLOUD_PROJECT env var to Gemini SDK
codex: make abort graceful; force-close MCP on kill/exit
- Extract session update handlers into separate module (sessionUpdateHandlers.ts)
  - handleAgentMessageChunk, handleToolCallUpdate, handleToolCall, etc.
  - Reduces AcpBackend.ts from ~1350 to ~900 lines

- Add retry logic for ACP init/newSession operations
  - 3 attempts with exponential backoff (1s, 2s, 4s)
  - Improves reliability on slow starts

- Move timeouts to configurable constants
  - Add getIdleTimeout() to TransportHandler interface
  - Export GEMINI_TIMEOUTS from GeminiTransport
  - DEFAULT_IDLE_TIMEOUT_MS, DEFAULT_TOOL_CALL_TIMEOUT_MS

- Improve tool name detection in GeminiTransport
  - ExtendedToolPattern with inputFields and emptyInputDefault
  - Remove fragile context-based heuristics
  - Cleaner, more declarative pattern matching

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>
…ath calculation

The test was failing because it manually calculated the project directory path
by only replacing `/` with `-`, while getProjectPath replaces additional
characters including underscores. On macOS, temp directory paths contain
underscores, causing a path mismatch.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@bra1nDump bra1nDump marked this pull request as ready for review January 21, 2026 07:51
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.