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:
| Item | v1.3.0 and earlier | v1.4.0 |
|---|---|---|
| Gateway URL | wss://agentsdk.agibot.com/v1/agentsdk | wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk |
| Credential source | Custom-agent template on the legacy platform | Application on the LinkSoul open platform (issues an additional appKey) |
| Factory | AgentSdk.create(url, appId, appSecret) | AgentSdk.create(url, appId, appKey, appSecret) |
| Algorithm | JWT (HS256) sent via AGIBOT_AUTHORIZATION | HMAC-SHA256("GET\n{path}\n{timestamp}\n{nonce}"), delivered across five signed headers |
| Auth headers | 1 header: AGIBOT_AUTHORIZATION | 5 headers: X-App-Id / X-App-Key / X-Timestamp / X-Nonce / X-Signature |
callbackTypes transport | JWT payload field | Standalone header X-Callback-Types (JSON array string) |
| Internal impact | LinkskyClient depends on JwtUtil | LinkskyClient drops JwtUtil, adds hmacSha256(); AgentSdk no longer exposes the appSecret getter |
Migration checklist:
- Re-issue
appId/appKey/appSecreton the open-platform application page — old credentials cannot be reused. - Switch the WebSocket gateway URL to
wss://open.agibot.com/api/V1/open-portal/app/wss/agent-sdk. - Update every
AgentSdk.create(url, appId, appSecret)call toAgentSdk.create(url, appId, appKey, appSecret). - 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 onAGIBOT_AUTHORIZATION. - Make sure nothing in your code still reads
AgentSdk.getAppSecret()(getter removed).
Added
- Three-in-one active greeting:
PassiveCallbackbase class addsonGreetSignal(agentId, eventId, param, GreetResponse). Reply via eitherGreetResponse.onGreetVlmDelta/Done(VLM streaming text) oronGreetTtsDelta/Done(base64-encoded chunks of synthesised audio bytes) - New protocol events
agentsdk.greet_response.tts.delta/agentsdk.greet_response.tts.done(alongside the existingagentsdk.greet_response.vlm.delta/done) - UID (face / voiceprint) exposure: base class adds
onFaceInfo(agentId, eventId, param)andonVideoFrame(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:
Greet2VlmCallbackandGreet2VlmResponseare removed. Greeting signals are delivered throughPassiveCallback.onGreetSignal, and both VLM and TTS replies share a singleGreetResponse. Greeting no longer uses a dedicatedAgentCallbackType; any registered passive callback can receive it. - State listening consolidated:
StateListenCallbackandAgentSdk.registerStateListen(...)are removed. State changes now arrive viaPassiveCallback.onState(...)shared by every callback subclass. - Fixed
GreetResponse.onGreetTtsDelta/Donemistakenly emitting VLM event types
Removed
Greet2VlmCallback/Greet2VlmResponse/StateListenCallback(merged intoPassiveCallback)AgentSdk.registerStateListen(...)(folded into the passive callback registration flow)- Deleted passive callback classes (and their corresponding Response classes):
Audio2Asr/Audio2Audio/AudioVideo2Audio/Text2Tts - Public
AgentSdkmethods removed (underlying Callback/Request classes kept on disk):- Passive callback registration:
registerPushListen - Active APIs:
querySkill,queryState,registerPullStream/unregisterPullStream
- Passive callback registration:
AgentCallbackTypeenum dropsAUDIO_2_ASR,AUDIO_2_AUDIO,AUDIO_VIDEO_2_AUDIO,TEXT_2_TTS,STATE_LISTEN,GEET_2_VLM,GEET_2_TTS(PUSH_LISTENis 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) AgentParamsupports generic parameters (getObject/setObject,getList/setList)- Passive callbacks receive
AgentParam paramextension parameter - Protocol adds
policyfield to identify interaction mode - Response includes
eventIdfield for caller-side session tracking FlowStartCallback/FlowTaskCallbackdistinguishRequestAckvsExecuteAcktwo-phase confirmation- Automatic timeout cleanup mechanism
AgentThreadPoolthread pool management (per-agent binding, ordered message processing)AgentDelayedPooldelayed 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/agentsdktowss://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()addsappKeyparameter; auth method changed from JWT to HMAC-SHA256 gateway signing- Old signature:
AgentSdk.create(url, appId, appSecret)— generated JWT token sent viaAGIBOT_AUTHORIZATIONheader - 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}") LinkskyClientremovesJwtUtildependency; built-inhmacSha256method addedAgentSdkremovesappSecretgetter; auth credentials are now held internally byLinkskyClientcallbackTypesmoved from JWT payload field to a standaloneX-Callback-Typesrequest header (JSON array string)
- Old signature:
timeoutparameter type upgraded frominttolongfor larger ranges- All
onRequestcallback signatures gainAgentParam paramparameter - Optimized log output, reduced redundant logging
v1.1.0
Added
- Multimodal passive callbacks:
AsrVideo2Vlm,AsrVideo2Tts,AudioVideo2Vlm,AudioVideo2Tts,AudioVideo2Audio AgentMetawrapper 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:
AgentSdksingleton factory pattern - WebSocket client:
LinkskyClient(Netty-based, auto-reconnect, JWT auth) - Basic passive callbacks:
Audio2Asr,Audio2Llm,Audio2Tts,Asr2Llm,Asr2Tts,Audio2Audio,Text2Tts AgentParamtype-safe parameter wrapperIdGeneratorunique ID generationJwtUtilJWT signing utility- Example programs
Dependency Versions
| Dependency | Version |
|---|---|
| Java | 17+ |
| Netty | 4.1.116.Final |
| fastjson2 | 2.0.53 |
| jjwt | 0.11.5 |
| Lombok | 1.18.36 |
| commons-lang3 | 3.14.0 |
| SLF4J | 2.0.16 |
| Logback | 1.5.13 |