@agentforge-io/sdk-server 4.11.0 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -48,6 +48,16 @@ export interface StreamMessageForAppUserInput {
48
48
  * as "declared by the App, not verified by AgentForge"; omit for no claims.
49
49
  */
50
50
  caller?: AppCallerClaims;
51
+ /**
52
+ * AGF-100g — set when the App shows human-owned conversations to its own
53
+ * people (e.g. through `af.inbox.forAgent(agentId)`). Then, when the agent
54
+ * calls `request_human_review`, the conversation's thread moves to human
55
+ * mode: the agent stops answering until a person hands it back (or the
56
+ * team's handback timeout does), and the stream ends with a
57
+ * `{ type: 'mode', mode: 'human', reason: 'escalated' }` chunk. Omit it if
58
+ * nobody on the App side will answer — the tool then stays a no-op.
59
+ */
60
+ humanHandoff?: boolean;
51
61
  }
52
62
  /** What an App declares about its end user on a chat turn (see `caller`). */
53
63
  export interface AppCallerClaims {
@@ -150,6 +150,7 @@ class ChatResource {
150
150
  content: input.content,
151
151
  ...(input.channel ? { channel: input.channel } : {}),
152
152
  ...(input.caller ? { caller: input.caller } : {}),
153
+ ...(input.humanHandoff ? { humanHandoff: true } : {}),
153
154
  });
154
155
  if (!res.body) {
155
156
  throw new Error('chat.streamMessageForAppUser: response has no readable body');
package/dist/types.d.ts CHANGED
@@ -342,6 +342,18 @@ export type ChatStreamChunk = ({
342
342
  connectorName?: string;
343
343
  toolDescription?: string;
344
344
  copy?: ApprovalCopyBundle;
345
+ } | {
346
+ /**
347
+ * AGF-100g — App-user chat only: who owns the conversation's inbox
348
+ * thread. Sent once after `conversation` (`mode: 'agent'`), as the
349
+ * only frame when a human owns the thread (`mode: 'human'`, the
350
+ * agent did not run), and before the stream closes when this turn
351
+ * escalated to a human (`reason: 'escalated'`, needs `humanHandoff`).
352
+ */
353
+ type: 'mode';
354
+ mode: InboxThreadMode;
355
+ threadId: string;
356
+ reason?: 'escalated';
345
357
  } | {
346
358
  type: 'done';
347
359
  messageId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentforge-io/sdk-server",
3
- "version": "4.11.0",
3
+ "version": "4.12.0",
4
4
  "description": "Server-side SDK for backend apps integrating with AgentForge platform. Auth via ChatToken, ak_live_ API key or App secret (sk_live_), with App installations across tenants.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",