Skip to content

v1.3.84

Choose a tag to compare

@topcheer topcheer released this 26 Jun 02:40
· 6216 commits to main since this release

v1.3.84

New Features

LAN Chat — Role-Based Identity

Each LAN Chat participant now has a role alongside their nickname, making it easy for agents to identify who does what on the network.

Setting your identity:

/nick alice@frontend     →  nick: alice_frontend, role: frontend, agent: alice_frontend_agent
/nick bob@devops         →  nick: bob_devops, role: devops, agent: bob_devops_agent
/nick charlie            →  nick: charlie_developer, role: developer (default), agent: charlie_developer_agent

The nick_role composition minimizes name collisions across teams. On conflict, the resolver appends a number: alice_frontend2, alice_frontend3, etc.

Agent-visible role discovery:

  • The lanchat tool list action now returns role for each participant
  • Tool description explicitly mentions roles for task routing
  • Presence exchange and nick-change broadcasts carry role information

Persistence:

  • Nick and role are stored per-session: ~/.ggcode/lanchat/sessions/<sid>/lanchat-nick and lanchat-role
  • Global nick file (~/.ggcode/lanchat/lanchat-nick) is no longer read or written — each session is fully independent

IM Adapter — Atomic Exclusive Binding

When multiple ggcode instances in different workspaces bind the same IM adapter (e.g., same Telegram bot token), the binding operation is now atomic. The new BindExclusive method collapses the previous 3-step read-delete-write sequence into a single locked operation, eliminating cross-process TOCTOU races.

Bug Fixes

  • mcp: Handle resource field in OAuth protected resource metadata as either string or array (RFC 9728 compliance)
  • ios: Auto-cleanup stale review submission items to prevent "concurrency limit reached" errors
  • ios: Ensure usesIdfa is set on App Store version submission (fixes "not in valid state" rejection)
  • ios: Reuse READY_FOR_REVIEW review submissions instead of creating new ones (avoids concurrency limit)

Internal Changes

  • Removed global nick concept from LAN Chat — all nick persistence is per-session only
  • globalNickDir() helper removed
  • SetNick() replaced by SetNickRole(nick, role)
  • BindingStore interface gains BindExclusive(binding) method
  • BindAdapterToWorkspace now calls BindExclusive in a single step