Changelog

Changelog

v1.4.0-SNAPSHOT (Current Development)

Release Date: In Development

⚠️ Breaking change — auth/signing standardised (NOT compatible with v1.3.0 or earlier)

v1.4.0 standardises the AgentSDK signing scheme to align with the LinkSoul open-platform spec. The change touches the gateway URL, the credential source, the AgentSdk.create() signature and the wire-protocol headers. v1.3.0 (and earlier) clients cannot upgrade in place; every item below has to be migrated together:

Itemv1.3.0 and earlierv1.4.0
Gateway URLwss://agentsdk.agibot.com/v1/agentsdkwss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk
Credential sourceCustom-agent template on the legacy platformApplication on the LinkSoul open platform (issues an additional appKey)
FactoryAgentSdk.create(url, appId, appSecret)AgentSdk.create(url, appId, appKey, appSecret)
AlgorithmJWT (HS256) sent via AGIBOT_AUTHORIZATIONHMAC-SHA256("GET\n{path}\n{timestamp}\n{nonce}"), delivered across five signed headers
Auth headers1 header: AGIBOT_AUTHORIZATION5 headers: X-App-Id / X-App-Key / X-Timestamp / X-Nonce / X-Signature
callbackTypes transportJWT payload fieldStandalone header X-Callback-Types (JSON array string)
Internal impactLinkskyClient depends on JwtUtilLinkskyClient drops JwtUtil, adds hmacSha256(); AgentSdk no longer exposes the appSecret getter

Migration checklist:

  1. Re-issue appId / appKey / appSecret on the open-platform application page — old credentials cannot be reused.
  2. Switch the WebSocket gateway URL to wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk.
  3. Update every AgentSdk.create(url, appId, appSecret) call to AgentSdk.create(url, appId, appKey, appSecret).
  4. If you forward SDK traffic through a custom proxy / gateway, parse and propagate the new five-header signature plus X-Callback-Types, and stop relying on AGIBOT_AUTHORIZATION.
  5. Make sure nothing in your code still reads AgentSdk.getAppSecret() (getter removed).

Added

  • Three-in-one active greeting: PassiveCallback base class adds onGreetSignal(agentId, eventId, param, GreetResponse). Reply via either GreetResponse.onGreetVlmDelta/Done (VLM streaming text) or onGreetTtsDelta/Done (base64-encoded chunks of synthesised audio bytes)
  • New protocol events agentsdk.greet_response.tts.delta / agentsdk.greet_response.tts.done (alongside the existing agentsdk.greet_response.vlm.delta/done)
  • UID (face / voiceprint) exposure: base class adds onFaceInfo(agentId, eventId, param) and onVideoFrame(agentId, eventId, flag, buf, isKeyFrame, localTs, param)
  • State push merged into passive callback: PassiveCallback.onState(agentId, eventId, stateName, stateValue)
  • New protocol event agentsdk.state_request.meta (robot state push)

Changed

  • Greeting capability consolidated: Greet2VlmCallback and Greet2VlmResponse are removed. Greeting signals are delivered through PassiveCallback.onGreetSignal, and both VLM and TTS replies share a single GreetResponse. Greeting no longer uses a dedicated AgentCallbackType; any registered passive callback can receive it.
  • State listening consolidated: StateListenCallback and AgentSdk.registerStateListen(...) are removed. State changes now arrive via PassiveCallback.onState(...) shared by every callback subclass.
  • Fixed GreetResponse.onGreetTtsDelta/Done mistakenly emitting VLM event types

Removed

  • Greet2VlmCallback / Greet2VlmResponse / StateListenCallback (merged into PassiveCallback)
  • AgentSdk.registerStateListen(...) (folded into the passive callback registration flow)
  • Deleted passive callback classes (and their corresponding Response classes): Audio2Asr / Audio2Audio / AudioVideo2Audio / Text2Tts
  • Public AgentSdk methods removed (underlying Callback/Request classes kept on disk):
    • Passive callback registration: registerPushListen
    • Active APIs: querySkill, queryState, registerPullStream / unregisterPullStream
  • AgentCallbackType enum drops AUDIO_2_ASR, AUDIO_2_AUDIO, AUDIO_VIDEO_2_AUDIO, TEXT_2_TTS, STATE_LISTEN, GEET_2_VLM, GEET_2_TTS (PUSH_LISTEN is kept but no longer exposed publicly)
  • Public passive-callback surface narrows to 8 types: Audio2Llm / Audio2Tts / Asr2Llm / Asr2Tts / AsrVideo2Vlm / AsrVideo2Tts / AudioVideo2Vlm / AudioVideo2Tts
  • Public active surface narrows to registerTaskFlow / unregisterTaskFlow

v1.3.0

Added

  • Milestone release with all features enabled
  • Active interaction: Skill Query (querySkill) — query robot skills and parameters
  • Active interaction: State Query (queryState) — query robot current state
  • Active interaction: Task Flow (TaskFlowRequest) — orchestrate multi-step tasks (startRequest/taskRequest/endRequest/interruptRequest)
  • Active interaction: Pull Stream (PullStreamRequest) — startRequest/keepaliveRequest/endRequest
  • Active interaction: Push Stream Listen (PushListenCallback) — receive robot-pushed video streams
  • Active interaction: State Listen (StateListenCallback) — real-time state change notifications
  • Passive interaction skill return: response.onSkill(eventId, itemId, skillType, skillName, skillParam)
  • Passive interaction interrupt: response.onInterrupt(eventId, interruptType, interruptTips)
  • AgentParam supports generic parameters (getObject/setObject, getList/setList)
  • Passive callbacks receive AgentParam param extension parameter
  • Protocol adds policy field to identify interaction mode
  • Response includes eventId field for caller-side session tracking
  • FlowStartCallback/FlowTaskCallback distinguish RequestAck vs ExecuteAck two-phase confirmation
  • Automatic timeout cleanup mechanism
  • AgentThreadPool thread pool management (per-agent binding, ordered message processing)
  • AgentDelayedPool delayed task framework (heartbeat timeout detection)
  • Active interaction example programs
  • Skill return and interrupt example programs

Changed

  • Gateway URL switched (2026-06-25): WebSocket endpoint moves from wss://agentsdk.agibot.com/v1/agentsdk to wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk. Credentials (appId / appKey / appSecret) are now issued by the application page on the LinkSoul open platform (replaces the previous "custom agent template")
  • Authentication upgrade (2026-06-24): AgentSdk.create() adds appKey parameter; auth method changed from JWT to HMAC-SHA256 gateway signing
    • Old signature: AgentSdk.create(url, appId, appSecret) — generated JWT token sent via AGIBOT_AUTHORIZATION header
    • New signature: AgentSdk.create(url, appId, appKey, appSecret) — authenticates via five headers: X-App-Id, X-App-Key, X-Timestamp, X-Nonce, X-Signature; signature algorithm: HMAC-SHA256("GET\n{path}\n{timestamp}\n{nonce}")
    • LinkskyClient removes JwtUtil dependency; built-in hmacSha256 method added
    • AgentSdk removes appSecret getter; auth credentials are now held internally by LinkskyClient
    • callbackTypes moved from JWT payload field to a standalone X-Callback-Types request header (JSON array string)
  • timeout parameter type upgraded from int to long for larger ranges
  • All onRequest callback signatures gain AgentParam param parameter
  • Optimized log output, reduced redundant logging

v1.1.0

Added

  • Multimodal passive callbacks: AsrVideo2Vlm, AsrVideo2Tts, AudioVideo2Vlm, AudioVideo2Tts, AudioVideo2Audio
  • AgentMeta wrapper replacing raw JSONObject
  • Video stream passthrough support (H264 + Image)
  • Image frame size limits

Changed

  • Project restructured, migrated to independent repository
  • Configurable appId/appSecret for custom agents

v1.0.0

Release Date: 2025-02-27

Initial Release

  • SDK core framework: AgentSdk singleton factory pattern
  • WebSocket client: LinkskyClient (Netty-based, auto-reconnect, JWT auth)
  • Basic passive callbacks: Audio2Asr, Audio2Llm, Audio2Tts, Asr2Llm, Asr2Tts, Audio2Audio, Text2Tts
  • AgentParam type-safe parameter wrapper
  • IdGenerator unique ID generation
  • JwtUtil JWT signing utility
  • Example programs

Dependency Versions

DependencyVersion
Java17+
Netty4.1.116.Final
fastjson22.0.53
jjwt0.11.5
Lombok1.18.36
commons-lang33.14.0
SLF4J2.0.16
Logback1.5.13