@pellux/goodvibes-sdk 0.18.48 → 0.18.50

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.
Files changed (59) hide show
  1. package/README.md +15 -13
  2. package/dist/_internal/errors/index.d.ts +111 -0
  3. package/dist/_internal/errors/index.d.ts.map +1 -1
  4. package/dist/_internal/errors/index.js +128 -0
  5. package/dist/_internal/platform/auth/index.d.ts +6 -0
  6. package/dist/_internal/platform/auth/index.d.ts.map +1 -0
  7. package/dist/_internal/platform/auth/index.js +4 -0
  8. package/dist/_internal/platform/auth/oauth-client.d.ts +45 -0
  9. package/dist/_internal/platform/auth/oauth-client.d.ts.map +1 -0
  10. package/dist/_internal/platform/auth/oauth-client.js +45 -0
  11. package/dist/_internal/platform/auth/permission-resolver.d.ts +35 -0
  12. package/dist/_internal/platform/auth/permission-resolver.d.ts.map +1 -0
  13. package/dist/_internal/platform/auth/permission-resolver.js +57 -0
  14. package/dist/_internal/platform/auth/session-manager.d.ts +31 -0
  15. package/dist/_internal/platform/auth/session-manager.d.ts.map +1 -0
  16. package/dist/_internal/platform/auth/session-manager.js +44 -0
  17. package/dist/_internal/platform/auth/token-store.d.ts +23 -0
  18. package/dist/_internal/platform/auth/token-store.d.ts.map +1 -0
  19. package/dist/_internal/platform/auth/token-store.js +34 -0
  20. package/dist/_internal/platform/core/orchestrator.d.ts +75 -11
  21. package/dist/_internal/platform/core/orchestrator.d.ts.map +1 -1
  22. package/dist/_internal/platform/core/orchestrator.js +29 -8
  23. package/dist/_internal/platform/version.js +1 -1
  24. package/dist/_internal/transport-http/http-core.d.ts +2 -0
  25. package/dist/_internal/transport-http/http-core.d.ts.map +1 -1
  26. package/dist/_internal/transport-http/http-core.js +29 -2
  27. package/dist/_internal/transport-http/http.d.ts.map +1 -1
  28. package/dist/_internal/transport-http/http.js +50 -2
  29. package/dist/_internal/transport-realtime/domain-events.d.ts +26 -0
  30. package/dist/_internal/transport-realtime/domain-events.d.ts.map +1 -1
  31. package/dist/_internal/transport-realtime/domain-events.js +63 -0
  32. package/dist/_internal/transport-realtime/index.d.ts +2 -2
  33. package/dist/_internal/transport-realtime/index.d.ts.map +1 -1
  34. package/dist/_internal/transport-realtime/index.js +2 -2
  35. package/dist/_internal/transport-realtime/runtime-events.d.ts +27 -1
  36. package/dist/_internal/transport-realtime/runtime-events.d.ts.map +1 -1
  37. package/dist/_internal/transport-realtime/runtime-events.js +27 -0
  38. package/dist/auth.d.ts +77 -0
  39. package/dist/auth.d.ts.map +1 -1
  40. package/dist/auth.js +52 -0
  41. package/dist/browser.d.ts +24 -0
  42. package/dist/browser.d.ts.map +1 -1
  43. package/dist/browser.js +24 -0
  44. package/dist/client.d.ts +158 -0
  45. package/dist/client.d.ts.map +1 -1
  46. package/dist/client.js +22 -0
  47. package/dist/expo.d.ts +15 -0
  48. package/dist/expo.d.ts.map +1 -1
  49. package/dist/expo.js +15 -0
  50. package/dist/node.d.ts +23 -0
  51. package/dist/node.d.ts.map +1 -1
  52. package/dist/node.js +23 -0
  53. package/dist/react-native.d.ts +27 -0
  54. package/dist/react-native.d.ts.map +1 -1
  55. package/dist/react-native.js +27 -0
  56. package/dist/web.d.ts +13 -0
  57. package/dist/web.d.ts.map +1 -1
  58. package/dist/web.js +13 -0
  59. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * TokenStore — Focused responsibility: token persistence.
3
+ *
4
+ * Owns all read/write/clear operations on a `GoodVibesTokenStore`. Consumers
5
+ * that only need token storage can interact with this class directly rather
6
+ * than going through the full auth client.
7
+ */
8
+ import type { GoodVibesTokenStore } from '../../../auth.js';
9
+ export declare class TokenStore {
10
+ #private;
11
+ constructor(store: GoodVibesTokenStore);
12
+ /** Return the current token, or null if none is stored. */
13
+ getToken(): Promise<string | null>;
14
+ /** Persist a new token, or clear storage when null. */
15
+ setToken(token: string | null): Promise<void>;
16
+ /** Clear the stored token. */
17
+ clearToken(): Promise<void>;
18
+ /** Return true when a non-empty token is currently stored. */
19
+ hasToken(): Promise<boolean>;
20
+ /** Expose the underlying store for interop with existing consumers. */
21
+ get store(): GoodVibesTokenStore;
22
+ }
23
+ //# sourceMappingURL=token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/auth/token-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,qBAAa,UAAU;;gBAGT,KAAK,EAAE,mBAAmB;IAItC,2DAA2D;IACrD,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,uDAAuD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,8BAA8B;IACxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,8DAA8D;IACxD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAKlC,uEAAuE;IACvE,IAAI,KAAK,IAAI,mBAAmB,CAE/B;CACF"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * TokenStore — Focused responsibility: token persistence.
3
+ *
4
+ * Owns all read/write/clear operations on a `GoodVibesTokenStore`. Consumers
5
+ * that only need token storage can interact with this class directly rather
6
+ * than going through the full auth client.
7
+ */
8
+ export class TokenStore {
9
+ #store;
10
+ constructor(store) {
11
+ this.#store = store;
12
+ }
13
+ /** Return the current token, or null if none is stored. */
14
+ async getToken() {
15
+ return this.#store.getToken();
16
+ }
17
+ /** Persist a new token, or clear storage when null. */
18
+ async setToken(token) {
19
+ return this.#store.setToken(token);
20
+ }
21
+ /** Clear the stored token. */
22
+ async clearToken() {
23
+ return this.#store.clearToken();
24
+ }
25
+ /** Return true when a non-empty token is currently stored. */
26
+ async hasToken() {
27
+ const token = await this.#store.getToken();
28
+ return typeof token === 'string' && token.length > 0;
29
+ }
30
+ /** Expose the underlying store for interop with existing consumers. */
31
+ get store() {
32
+ return this.#store;
33
+ }
34
+ }
@@ -17,18 +17,58 @@ interface HookDispatcherLike {
17
17
  interface LowPrioritySystemMessageSink {
18
18
  low(message: string): void;
19
19
  }
20
+ /**
21
+ * Options for constructing an {@link Orchestrator}.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * const orchestrator = new Orchestrator({
26
+ * conversation,
27
+ * getViewportHeight: () => window.innerHeight,
28
+ * scrollToEnd: (vHeight) => scrollContainer.scrollTo({ top: vHeight }),
29
+ * toolRegistry,
30
+ * permissionManager,
31
+ * getSystemPrompt: () => mySystemPrompt,
32
+ * hookDispatcher,
33
+ * flagManager,
34
+ * requestRender: () => renderFn(),
35
+ * runtimeBus,
36
+ * services: { agentManager, wrfcController },
37
+ * });
38
+ * ```
39
+ */
40
+ export interface OrchestratorOptions {
41
+ /** Manages the conversation message history. */
42
+ conversation: ConversationManager;
43
+ /** Returns the current viewport height in rows/px for scrolling calculations. */
44
+ getViewportHeight: () => number;
45
+ /** Scrolls the UI to the given viewport height after a turn. */
46
+ scrollToEnd: (vHeight: number) => void;
47
+ /** Registry of all available tools. */
48
+ toolRegistry: ToolRegistry;
49
+ /** Manages tool-use permission grants and denials. */
50
+ permissionManager: PermissionManager;
51
+ /** Returns the current system prompt text. Defaults to `() => ''`. */
52
+ getSystemPrompt?: () => string;
53
+ /** Optional hook dispatcher for lifecycle events. */
54
+ hookDispatcher?: HookDispatcherLike | null;
55
+ /** Optional feature flag manager. */
56
+ flagManager?: FeatureFlagManager | null;
57
+ /** Optional render request callback, called after state changes requiring a redraw. */
58
+ requestRender?: (() => void) | null;
59
+ /** Optional runtime event bus for cross-system event propagation. */
60
+ runtimeBus?: RuntimeEventBus | null;
61
+ /** Required runtime service dependencies. */
62
+ services: {
63
+ readonly agentManager: Pick<AgentManager, 'list' | 'spawn'>;
64
+ readonly wrfcController: Pick<WrfcController, 'listChains'>;
65
+ };
66
+ }
20
67
  /**
21
68
  * Orchestrator - Manages LLM turn lifecycle with full tool-use loop.
22
69
  * Supports multi-turn agent loops: call LLM -> execute tools -> send results -> repeat.
23
70
  */
24
71
  export declare class Orchestrator {
25
- private conversation;
26
- private getViewportHeight;
27
- private scrollToEnd;
28
- private toolRegistry;
29
- private permissionManager;
30
- private getSystemPrompt;
31
- private hookDispatcher;
32
72
  isThinking: boolean;
33
73
  thinkingFrame: number;
34
74
  usage: {
@@ -113,10 +153,34 @@ export declare class Orchestrator {
113
153
  private readonly requestRender;
114
154
  private systemMessageRouter;
115
155
  private readonly followUpRuntime;
116
- constructor(conversation: ConversationManager, getViewportHeight: () => number, scrollToEnd: (vHeight: number) => void, toolRegistry: ToolRegistry, permissionManager: PermissionManager, getSystemPrompt: (() => string) | undefined, hookDispatcher: (HookDispatcherLike | null) | undefined, flagManager: (FeatureFlagManager | null) | undefined, requestRender: (() => void) | null | undefined, runtimeBus: (RuntimeEventBus | null) | undefined, services: {
117
- readonly agentManager: Pick<AgentManager, 'list' | 'spawn'>;
118
- readonly wrfcController: Pick<WrfcController, 'listChains'>;
119
- });
156
+ private conversation;
157
+ private getViewportHeight;
158
+ private scrollToEnd;
159
+ private toolRegistry;
160
+ private permissionManager;
161
+ private getSystemPrompt;
162
+ private hookDispatcher;
163
+ /**
164
+ * Construct an Orchestrator using a named-options object.
165
+ *
166
+ * @example
167
+ * ```ts
168
+ * const orchestrator = new Orchestrator({
169
+ * conversation,
170
+ * getViewportHeight: () => terminalRows,
171
+ * scrollToEnd: (vHeight) => ui.scrollToEnd(vHeight),
172
+ * toolRegistry,
173
+ * permissionManager,
174
+ * getSystemPrompt: () => systemPrompt,
175
+ * hookDispatcher,
176
+ * flagManager,
177
+ * requestRender: () => render(),
178
+ * runtimeBus,
179
+ * services: { agentManager, wrfcController },
180
+ * });
181
+ * ```
182
+ */
183
+ constructor(options: OrchestratorOptions);
120
184
  setCoreServices(services: OrchestratorCoreServices): void;
121
185
  /**
122
186
  * Attach an AcpManager and register the 'delegate' tool into the ToolRegistry.
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/core/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -30,13 +30,6 @@ const THINKING_SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦'
30
30
  * Supports multi-turn agent loops: call LLM -> execute tools -> send results -> repeat.
31
31
  */
32
32
  export class Orchestrator {
33
- conversation;
34
- getViewportHeight;
35
- scrollToEnd;
36
- toolRegistry;
37
- permissionManager;
38
- getSystemPrompt;
39
- hookDispatcher;
40
33
  isThinking = false;
41
34
  thinkingFrame = 0;
42
35
  usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
@@ -113,7 +106,35 @@ export class Orchestrator {
113
106
  requestRender;
114
107
  systemMessageRouter = null;
115
108
  followUpRuntime;
116
- constructor(conversation, getViewportHeight, scrollToEnd, toolRegistry, permissionManager, getSystemPrompt = () => '', hookDispatcher = null, flagManager = null, requestRender = null, runtimeBus = null, services) {
109
+ conversation;
110
+ getViewportHeight;
111
+ scrollToEnd;
112
+ toolRegistry;
113
+ permissionManager;
114
+ getSystemPrompt;
115
+ hookDispatcher;
116
+ /**
117
+ * Construct an Orchestrator using a named-options object.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const orchestrator = new Orchestrator({
122
+ * conversation,
123
+ * getViewportHeight: () => terminalRows,
124
+ * scrollToEnd: (vHeight) => ui.scrollToEnd(vHeight),
125
+ * toolRegistry,
126
+ * permissionManager,
127
+ * getSystemPrompt: () => systemPrompt,
128
+ * hookDispatcher,
129
+ * flagManager,
130
+ * requestRender: () => render(),
131
+ * runtimeBus,
132
+ * services: { agentManager, wrfcController },
133
+ * });
134
+ * ```
135
+ */
136
+ constructor(options) {
137
+ const { conversation, getViewportHeight, scrollToEnd, toolRegistry, permissionManager, getSystemPrompt = () => '', hookDispatcher = null, flagManager = null, requestRender = null, runtimeBus = null, services, } = options;
117
138
  this.conversation = conversation;
118
139
  this.getViewportHeight = getViewportHeight;
119
140
  this.scrollToEnd = scrollToEnd;
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.18.48';
3
+ let version = '0.18.50';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;
@@ -35,6 +35,8 @@ export interface TransportJsonError {
35
35
  readonly body: unknown;
36
36
  readonly url: string;
37
37
  readonly method: string;
38
+ readonly retryAfterMs?: number;
39
+ readonly cause?: unknown;
38
40
  }
39
41
  export interface HttpJsonTransport {
40
42
  readonly baseUrl: string;
@@ -1 +1 @@
1
- {"version":3,"file":"http-core.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/http-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-core.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/http-core.ts"],"names":[],"mappings":"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"}
@@ -47,16 +47,24 @@ function readErrorMessage(status, url, body) {
47
47
  }
48
48
  return `Transport request failed with status ${status} for ${url}`;
49
49
  }
50
- function createTransportError(status, url, method, body) {
50
+ function createTransportError(status, url, method, body, retryAfterMs) {
51
51
  return Object.assign(new Error(readErrorMessage(status, url, body)), {
52
52
  transport: {
53
53
  status,
54
54
  body,
55
55
  url,
56
56
  method,
57
+ ...(retryAfterMs !== undefined ? { retryAfterMs } : {}),
57
58
  },
58
59
  });
59
60
  }
61
+ /**
62
+ * Creates a transport error representing a network-level failure (no HTTP response received).
63
+ *
64
+ * Note: `Error.cause` (set via `Object.assign`) is the authoritative standard-compliant
65
+ * cause field. The inner `transport.cause` mirrors it for callers that inspect the raw
66
+ * transport payload — treat `Error.cause` as the source of truth.
67
+ */
60
68
  function createNetworkTransportError(error, url, method) {
61
69
  const message = error instanceof Error && error.message.trim()
62
70
  ? error.message.trim()
@@ -68,6 +76,7 @@ function createNetworkTransportError(error, url, method) {
68
76
  body: { error: message },
69
77
  url,
70
78
  method,
79
+ cause: error,
71
80
  },
72
81
  });
73
82
  }
@@ -122,6 +131,23 @@ export function createFetch(fetchImpl, fallbackFetch) {
122
131
  }
123
132
  return resolved.bind(globalThis);
124
133
  }
134
+ function parseRetryAfterMs(headers) {
135
+ const retryAfter = headers.get('retry-after');
136
+ if (!retryAfter)
137
+ return undefined;
138
+ // Numeric seconds
139
+ const seconds = Number(retryAfter);
140
+ if (!Number.isNaN(seconds) && seconds >= 0) {
141
+ return Math.ceil(seconds * 1000);
142
+ }
143
+ // HTTP-date
144
+ const date = new Date(retryAfter);
145
+ if (!Number.isNaN(date.getTime())) {
146
+ const ms = date.getTime() - Date.now();
147
+ return ms > 0 ? ms : 0;
148
+ }
149
+ return undefined;
150
+ }
125
151
  export async function readJsonBody(response) {
126
152
  const text = await response.text();
127
153
  if (!text.trim())
@@ -143,7 +169,8 @@ export async function requestJson(fetchImpl, url, init = {}) {
143
169
  }
144
170
  const body = await readJsonBody(response);
145
171
  if (!response.ok) {
146
- throw createTransportError(response.status, url, init.method ?? 'GET', body);
172
+ const retryAfterMs = parseRetryAfterMs(response.headers);
173
+ throw createTransportError(response.status, url, init.method ?? 'GET', body, retryAfterMs);
147
174
  }
148
175
  return body;
149
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/http.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EAEX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,kBAAkB,GACnB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,GAC/B,CAAC;AAsBF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAkB7D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAmBhF"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-http/http.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EAEX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,UAAU,EACV,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,6BAA6B,EAC7B,qBAAqB,EACrB,kBAAkB,GACnB,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,uBAAuB,EACvB,8BAA8B,GAC/B,CAAC;AA2CF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAiD7D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAmBhF"}
@@ -1,5 +1,5 @@
1
1
  // Synced from packages/transport-http/src/http.ts
2
- import { ConfigurationError, ContractError, createHttpStatusError } from '../errors/index.js';
2
+ import { ConfigurationError, ContractError, HttpStatusError, createHttpStatusError } from '../errors/index.js';
3
3
  import { mergeHeaders, resolveAuthToken, resolveHeaders, } from './auth.js';
4
4
  import { computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal, } from './backoff.js';
5
5
  import { DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy, } from './retry.js';
@@ -14,9 +14,57 @@ function isTransportError(error) {
14
14
  && typeof error.transport.status === 'number'
15
15
  && typeof error.transport.url === 'string');
16
16
  }
17
+ function inferTransportHint(status, url, retryAfterMs) {
18
+ if (status === 0)
19
+ return `Transport could not reach ${url}. Verify the baseUrl is reachable.`;
20
+ if (status === 401)
21
+ return 'Check your authentication token or credentials.';
22
+ if (status === 403)
23
+ return 'Valid credentials but insufficient permissions for this operation.';
24
+ if (status === 404)
25
+ return 'The requested resource was not found.';
26
+ if (status === 408)
27
+ return 'The request timed out. Consider retrying.';
28
+ if (status === 429) {
29
+ return retryAfterMs !== undefined
30
+ ? `Rate limit exceeded. Retry after ${retryAfterMs}ms.`
31
+ : 'Rate limit exceeded. Back off and retry.';
32
+ }
33
+ if (status >= 500)
34
+ return 'Remote server error. The service may be temporarily unavailable.';
35
+ return undefined;
36
+ }
17
37
  export function normalizeTransportError(error) {
18
38
  if (isTransportError(error)) {
19
- return Object.assign(createHttpStatusError(error.transport.status, error.transport.url, typeof error.transport.method === 'string' ? error.transport.method : 'GET', error.transport.body), { transport: error.transport });
39
+ const { status, url, body, method, retryAfterMs, cause } = error.transport;
40
+ const resolvedMethod = typeof method === 'string' ? method : 'GET';
41
+ const hint = inferTransportHint(status, url, retryAfterMs);
42
+ if (status === 0) {
43
+ // Network-level failure: no HTTP response received
44
+ const networkError = new HttpStatusError(error instanceof Error ? error.message : `Transport could not reach ${url}`, {
45
+ status: undefined,
46
+ url,
47
+ method: resolvedMethod,
48
+ body,
49
+ category: 'network',
50
+ source: 'transport',
51
+ recoverable: true,
52
+ hint,
53
+ ...(retryAfterMs !== undefined ? { retryAfterMs } : {}),
54
+ });
55
+ if (cause !== undefined) {
56
+ Object.defineProperty(networkError, 'cause', { value: cause, writable: true, configurable: true });
57
+ }
58
+ return Object.assign(networkError, { transport: error.transport });
59
+ }
60
+ const baseError = createHttpStatusError(status, url, resolvedMethod, body);
61
+ // Only apply inferred hint if the daemon body didn't supply one already
62
+ const effectiveHint = baseError.hint ?? hint;
63
+ return Object.assign(baseError, {
64
+ transport: error.transport,
65
+ ...(effectiveHint !== undefined ? { hint: effectiveHint } : {}),
66
+ ...(retryAfterMs !== undefined ? { retryAfterMs } : {}),
67
+ });
20
68
  }
21
69
  if (error instanceof Error) {
22
70
  if (error.message === 'Fetch implementation is required' || error.message === 'Transport baseUrl is required') {
@@ -14,5 +14,31 @@ export interface SerializedEventEnvelope<TEvent extends EventLike = EventLike> {
14
14
  export type DomainEventConnector<TDomain extends string, TEvent extends EventLike = EventLike> = (domain: TDomain, onEnvelope: (envelope: SerializedEventEnvelope<TEvent>) => void) => void | Promise<() => void>;
15
15
  export type DomainEvents<TDomain extends string, TEvent extends EventLike = EventLike> = RuntimeEventFeeds<TDomain, TEvent>;
16
16
  export declare function createRemoteDomainEvents<TDomain extends string, TEvent extends EventLike = EventLike>(domains: readonly TDomain[], connect: DomainEventConnector<TDomain, TEvent>): DomainEvents<TDomain, TEvent>;
17
+ /**
18
+ * Returns a filtered view of the given domain events object where every
19
+ * callback only fires for events whose envelope `sessionId` equals the
20
+ * supplied value.
21
+ *
22
+ * All domain feeds and the `domain()` accessor are pre-filtered. The
23
+ * `domains` list is preserved unchanged.
24
+ *
25
+ * Unsubscribe handles returned by the filtered feeds propagate correctly
26
+ * to the underlying connection.
27
+ *
28
+ * @example
29
+ * const events = sdk.realtime.viaSse();
30
+ * // Without forSession — manual filter:
31
+ * events.turn.onEnvelope('STREAM_DELTA', (e) => {
32
+ * if (e.sessionId !== mySessionId) return;
33
+ * process.stdout.write(e.payload.content);
34
+ * });
35
+ *
36
+ * // With forSession — no filter needed:
37
+ * const sessionEvents = forSession(events, mySessionId);
38
+ * sessionEvents.turn.onEnvelope('STREAM_DELTA', (e) => {
39
+ * process.stdout.write(e.payload.content);
40
+ * });
41
+ */
42
+ export declare function forSession<TDomain extends string, TEvent extends EventLike = EventLike>(events: DomainEvents<TDomain, TEvent>, sessionId: string): DomainEvents<TDomain, TEvent>;
17
43
  export {};
18
44
  //# sourceMappingURL=domain-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/domain-events.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkD,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpH,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,uBAAuB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,IAClC,CACF,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,IAAI,KAC5D,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAEhC,MAAM,MAAM,YAAY,CACtB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,IAClC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAmIvC,wBAAgB,wBAAwB,CACtC,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,EAEpC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAC7C,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAK/B"}
1
+ {"version":3,"file":"domain-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/domain-events.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkD,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpH,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,uBAAuB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,IAClC,CACF,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,IAAI,KAC5D,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAEhC,MAAM,MAAM,YAAY,CACtB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,IAClC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAmIvC,wBAAgB,wBAAwB,CACtC,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,EAEpC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAC7C,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAK/B;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CACxB,OAAO,SAAS,MAAM,EACtB,MAAM,SAAS,SAAS,GAAG,SAAS,EAEpC,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EACrC,SAAS,EAAE,MAAM,GAChB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAY/B"}
@@ -114,3 +114,66 @@ function createRemoteDomainEventFeed(domain, connect) {
114
114
  export function createRemoteDomainEvents(domains, connect) {
115
115
  return createRuntimeEventFeeds(domains, (domain) => createRemoteDomainEventFeed(domain, connect));
116
116
  }
117
+ /**
118
+ * Wraps an existing {@link RuntimeEventFeed} and returns a filtered feed whose
119
+ * callbacks only fire for envelopes whose `sessionId` matches the given value.
120
+ *
121
+ * Unsubscribe handles returned by `on` / `onEnvelope` on the filtered feed
122
+ * correctly remove the underlying listener from the original feed.
123
+ */
124
+ function createFilteredFeed(feed, sessionId) {
125
+ return {
126
+ on(type, listener) {
127
+ return feed.onEnvelope(type, (envelope) => {
128
+ if (envelope.sessionId !== sessionId)
129
+ return;
130
+ listener(envelope.payload);
131
+ });
132
+ },
133
+ onEnvelope(type, listener) {
134
+ return feed.onEnvelope(type, (envelope) => {
135
+ if (envelope.sessionId !== sessionId)
136
+ return;
137
+ listener(envelope);
138
+ });
139
+ },
140
+ };
141
+ }
142
+ /**
143
+ * Returns a filtered view of the given domain events object where every
144
+ * callback only fires for events whose envelope `sessionId` equals the
145
+ * supplied value.
146
+ *
147
+ * All domain feeds and the `domain()` accessor are pre-filtered. The
148
+ * `domains` list is preserved unchanged.
149
+ *
150
+ * Unsubscribe handles returned by the filtered feeds propagate correctly
151
+ * to the underlying connection.
152
+ *
153
+ * @example
154
+ * const events = sdk.realtime.viaSse();
155
+ * // Without forSession — manual filter:
156
+ * events.turn.onEnvelope('STREAM_DELTA', (e) => {
157
+ * if (e.sessionId !== mySessionId) return;
158
+ * process.stdout.write(e.payload.content);
159
+ * });
160
+ *
161
+ * // With forSession — no filter needed:
162
+ * const sessionEvents = forSession(events, mySessionId);
163
+ * sessionEvents.turn.onEnvelope('STREAM_DELTA', (e) => {
164
+ * process.stdout.write(e.payload.content);
165
+ * });
166
+ */
167
+ export function forSession(events, sessionId) {
168
+ const filteredFeeds = {};
169
+ for (const domain of events.domains) {
170
+ filteredFeeds[domain] = createFilteredFeed(events[domain], sessionId);
171
+ }
172
+ return Object.freeze({
173
+ ...filteredFeeds,
174
+ domains: events.domains,
175
+ domain(d) {
176
+ return filteredFeeds[d];
177
+ },
178
+ });
179
+ }
@@ -1,6 +1,6 @@
1
1
  export type { DomainEventConnector, DomainEvents, SerializedEventEnvelope, } from './domain-events.js';
2
- export { createRemoteDomainEvents } from './domain-events.js';
2
+ export { createRemoteDomainEvents, forSession } from './domain-events.js';
3
3
  export type { RemoteRuntimeEvents, SerializedRuntimeEnvelope } from './runtime-events.js';
4
- export { buildEventSourceUrl, buildWebSocketUrl, createEventSourceConnector, createRemoteRuntimeEvents, createWebSocketConnector, } from './runtime-events.js';
4
+ export { buildEventSourceUrl, buildWebSocketUrl, createEventSourceConnector, createRemoteRuntimeEvents, createWebSocketConnector, forSessionRuntime, } from './runtime-events.js';
5
5
  export type { RuntimeEventConnectorOptions } from './runtime-events.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,2 +1,2 @@
1
- export { createRemoteDomainEvents } from './domain-events.js';
2
- export { buildEventSourceUrl, buildWebSocketUrl, createEventSourceConnector, createRemoteRuntimeEvents, createWebSocketConnector, } from './runtime-events.js';
1
+ export { createRemoteDomainEvents, forSession } from './domain-events.js';
2
+ export { buildEventSourceUrl, buildWebSocketUrl, createEventSourceConnector, createRemoteRuntimeEvents, createWebSocketConnector, forSessionRuntime, } from './runtime-events.js';
@@ -7,6 +7,33 @@ type RuntimeEventRecord = {
7
7
  };
8
8
  export type SerializedRuntimeEnvelope<TEvent extends RuntimeEventRecord = RuntimeEventRecord> = SerializedEventEnvelope<TEvent>;
9
9
  export type RemoteRuntimeEvents<TEvent extends RuntimeEventRecord = RuntimeEventRecord> = DomainEvents<RuntimeEventDomain, TEvent>;
10
+ /**
11
+ * Returns a filtered view of a {@link RemoteRuntimeEvents} object where every
12
+ * callback only fires for events whose envelope `sessionId` equals the given
13
+ * session identifier.
14
+ *
15
+ * This is a convenience wrapper around {@link forSession} scoped to the
16
+ * canonical runtime-event domains. Use it instead of manually checking
17
+ * `e.sessionId` in every callback.
18
+ *
19
+ * @example
20
+ * const events = sdk.realtime.viaSse();
21
+ * const session = await sdk.operator.sessions.create({ title: 'demo' });
22
+ * const sessionId = session.session.id;
23
+ *
24
+ * // Before forSession — repeated manual guard:
25
+ * events.turn.onEnvelope('STREAM_DELTA', (e) => {
26
+ * if (e.sessionId !== sessionId) return;
27
+ * process.stdout.write(e.payload.content);
28
+ * });
29
+ *
30
+ * // After forSession — clean, session-scoped subscription:
31
+ * const sessionEvents = forSessionRuntime(events, sessionId);
32
+ * sessionEvents.turn.onEnvelope('STREAM_DELTA', (e) => {
33
+ * process.stdout.write(e.payload.content);
34
+ * });
35
+ */
36
+ export { forSession as forSessionRuntime } from './domain-events.js';
10
37
  export interface RuntimeEventConnectorOptions {
11
38
  readonly reconnect?: StreamReconnectPolicy;
12
39
  readonly onError?: (error: unknown) => void;
@@ -17,5 +44,4 @@ export declare function buildEventSourceUrl(baseUrl: string, domain: RuntimeEven
17
44
  export declare function buildWebSocketUrl(baseUrl: string, domains: readonly RuntimeEventDomain[]): string;
18
45
  export declare function createEventSourceConnector(baseUrl: string, token: AuthTokenSource, fetchImpl: typeof fetch, options?: RuntimeEventConnectorOptions): DomainEventConnector<RuntimeEventDomain, AnyRuntimeEvent>;
19
46
  export declare function createWebSocketConnector(baseUrl: string, token: AuthTokenSource, WebSocketImpl: typeof WebSocket, options?: RuntimeEventConnectorOptions): DomainEventConnector<RuntimeEventDomain, AnyRuntimeEvent>;
20
- export {};
21
47
  //# sourceMappingURL=runtime-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/runtime-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAsB,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAA6D,MAAM,4BAA4B,CAAC;AAE/K,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,kBAAkB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,yBAAyB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,IAC1F,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAElC,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,IACpF,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAE3C,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,KAAK,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAErE,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,EAC9F,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC,GACxD,mBAAmB,CAAC,MAAM,CAAC,CAK7B;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,MAAM,CAQR;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,OAAO,KAAK,EACvB,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAiB3D;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,OAAO,SAAS,EAC/B,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAuF3D"}
1
+ {"version":3,"file":"runtime-events.d.ts","sourceRoot":"","sources":["../../../src/_internal/transport-realtime/runtime-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAsB,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAA6D,MAAM,4BAA4B,CAAC;AAE/K,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,kBAAkB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpD,MAAM,MAAM,yBAAyB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,IAC1F,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAElC,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,IACpF,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,KAAK,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAErE,wBAAgB,yBAAyB,CAAC,MAAM,SAAS,kBAAkB,GAAG,kBAAkB,EAC9F,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC,GACxD,mBAAmB,CAAC,MAAM,CAAC,CAK7B;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAIR;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,MAAM,CAQR;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,OAAO,KAAK,EACvB,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAiB3D;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,OAAO,SAAS,EAC/B,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAuF3D"}
@@ -4,6 +4,33 @@ import { RUNTIME_EVENT_DOMAINS } from '../contracts/index.js';
4
4
  import { normalizeAuthToken, openRawServerSentEventStream as openServerSentEventStream } from '../transport-http/index.js';
5
5
  import { buildUrl, normalizeBaseUrl } from '../transport-http/index.js';
6
6
  import { createRemoteDomainEvents, } from './domain-events.js';
7
+ /**
8
+ * Returns a filtered view of a {@link RemoteRuntimeEvents} object where every
9
+ * callback only fires for events whose envelope `sessionId` equals the given
10
+ * session identifier.
11
+ *
12
+ * This is a convenience wrapper around {@link forSession} scoped to the
13
+ * canonical runtime-event domains. Use it instead of manually checking
14
+ * `e.sessionId` in every callback.
15
+ *
16
+ * @example
17
+ * const events = sdk.realtime.viaSse();
18
+ * const session = await sdk.operator.sessions.create({ title: 'demo' });
19
+ * const sessionId = session.session.id;
20
+ *
21
+ * // Before forSession — repeated manual guard:
22
+ * events.turn.onEnvelope('STREAM_DELTA', (e) => {
23
+ * if (e.sessionId !== sessionId) return;
24
+ * process.stdout.write(e.payload.content);
25
+ * });
26
+ *
27
+ * // After forSession — clean, session-scoped subscription:
28
+ * const sessionEvents = forSessionRuntime(events, sessionId);
29
+ * sessionEvents.turn.onEnvelope('STREAM_DELTA', (e) => {
30
+ * process.stdout.write(e.payload.content);
31
+ * });
32
+ */
33
+ export { forSession as forSessionRuntime } from './domain-events.js';
7
34
  export function createRemoteRuntimeEvents(connect) {
8
35
  return createRemoteDomainEvents(RUNTIME_EVENT_DOMAINS, connect);
9
36
  }