@pellux/goodvibes-sdk 0.18.49 → 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 (53) hide show
  1. package/dist/_internal/errors/index.d.ts +27 -2
  2. package/dist/_internal/errors/index.d.ts.map +1 -1
  3. package/dist/_internal/errors/index.js +44 -2
  4. package/dist/_internal/platform/auth/index.d.ts +6 -0
  5. package/dist/_internal/platform/auth/index.d.ts.map +1 -0
  6. package/dist/_internal/platform/auth/index.js +4 -0
  7. package/dist/_internal/platform/auth/oauth-client.d.ts +45 -0
  8. package/dist/_internal/platform/auth/oauth-client.d.ts.map +1 -0
  9. package/dist/_internal/platform/auth/oauth-client.js +45 -0
  10. package/dist/_internal/platform/auth/permission-resolver.d.ts +35 -0
  11. package/dist/_internal/platform/auth/permission-resolver.d.ts.map +1 -0
  12. package/dist/_internal/platform/auth/permission-resolver.js +57 -0
  13. package/dist/_internal/platform/auth/session-manager.d.ts +31 -0
  14. package/dist/_internal/platform/auth/session-manager.d.ts.map +1 -0
  15. package/dist/_internal/platform/auth/session-manager.js +44 -0
  16. package/dist/_internal/platform/auth/token-store.d.ts +23 -0
  17. package/dist/_internal/platform/auth/token-store.d.ts.map +1 -0
  18. package/dist/_internal/platform/auth/token-store.js +34 -0
  19. package/dist/_internal/platform/core/orchestrator.d.ts +75 -11
  20. package/dist/_internal/platform/core/orchestrator.d.ts.map +1 -1
  21. package/dist/_internal/platform/core/orchestrator.js +29 -8
  22. package/dist/_internal/platform/version.js +1 -1
  23. package/dist/_internal/transport-realtime/domain-events.d.ts +26 -0
  24. package/dist/_internal/transport-realtime/domain-events.d.ts.map +1 -1
  25. package/dist/_internal/transport-realtime/domain-events.js +63 -0
  26. package/dist/_internal/transport-realtime/index.d.ts +2 -2
  27. package/dist/_internal/transport-realtime/index.d.ts.map +1 -1
  28. package/dist/_internal/transport-realtime/index.js +2 -2
  29. package/dist/_internal/transport-realtime/runtime-events.d.ts +27 -1
  30. package/dist/_internal/transport-realtime/runtime-events.d.ts.map +1 -1
  31. package/dist/_internal/transport-realtime/runtime-events.js +27 -0
  32. package/dist/auth.d.ts +28 -0
  33. package/dist/auth.d.ts.map +1 -1
  34. package/dist/auth.js +3 -0
  35. package/dist/browser.d.ts +1 -0
  36. package/dist/browser.d.ts.map +1 -1
  37. package/dist/browser.js +1 -0
  38. package/dist/client.d.ts +50 -0
  39. package/dist/client.d.ts.map +1 -1
  40. package/dist/client.js +2 -0
  41. package/dist/expo.d.ts +1 -0
  42. package/dist/expo.d.ts.map +1 -1
  43. package/dist/expo.js +1 -0
  44. package/dist/node.d.ts +1 -0
  45. package/dist/node.d.ts.map +1 -1
  46. package/dist/node.js +1 -0
  47. package/dist/react-native.d.ts +1 -0
  48. package/dist/react-native.d.ts.map +1 -1
  49. package/dist/react-native.js +1 -0
  50. package/dist/web.d.ts +1 -0
  51. package/dist/web.d.ts.map +1 -1
  52. package/dist/web.js +1 -0
  53. package/package.json +1 -1
@@ -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.49';
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;
@@ -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
  }
package/dist/auth.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { OperatorMethodInput, OperatorMethodOutput } from './_internal/contracts/index.js';
2
2
  import type { AuthTokenResolver } from './_internal/transport-http/index.js';
3
3
  import type { OperatorSdk } from './_internal/operator/index.js';
4
+ export { OAuthClient, PermissionResolver, SessionManager, TokenStore, } from './_internal/platform/auth/index.js';
5
+ export type { OAuthStartState, OAuthTokenPayload } from './_internal/platform/auth/index.js';
4
6
  export type GoodVibesCurrentAuth = OperatorMethodOutput<'control.auth.current'>;
5
7
  export type GoodVibesLoginInput = OperatorMethodInput<'control.auth.login'>;
6
8
  export type GoodVibesLoginOutput = OperatorMethodOutput<'control.auth.login'>;
@@ -16,12 +18,38 @@ export interface BrowserTokenStoreOptions {
16
18
  export interface GoodVibesAuthLoginOptions {
17
19
  readonly persistToken?: boolean;
18
20
  }
21
+ /**
22
+ * The combined auth client attached to an SDK instance.
23
+ *
24
+ * This interface aggregates token storage and session management behind a
25
+ * single object for convenience. For focused single-responsibility access,
26
+ * use the split classes exported from this module:
27
+ * - Token persistence: `TokenStore`
28
+ * - Login / session lifecycle: `SessionManager`
29
+ * - OAuth 2.0 flows: `OAuthClient`
30
+ * - Role / scope checks: `PermissionResolver`
31
+ */
19
32
  export interface GoodVibesAuthClient {
20
33
  readonly writable: boolean;
21
34
  current(): Promise<GoodVibesCurrentAuth>;
22
35
  login(input: GoodVibesLoginInput, options?: GoodVibesAuthLoginOptions): Promise<GoodVibesLoginOutput>;
36
+ /**
37
+ * @deprecated Prefer `TokenStore.getToken()` for direct token access.
38
+ * `GoodVibesAuthClient.getToken()` remains supported and delegates to the
39
+ * same underlying store.
40
+ */
23
41
  getToken(): Promise<string | null>;
42
+ /**
43
+ * @deprecated Prefer `TokenStore.setToken()` for direct token mutation.
44
+ * `GoodVibesAuthClient.setToken()` remains supported and delegates to the
45
+ * same underlying store.
46
+ */
24
47
  setToken(token: string | null): Promise<void>;
48
+ /**
49
+ * @deprecated Prefer `TokenStore.clearToken()` for direct token mutation.
50
+ * `GoodVibesAuthClient.clearToken()` remains supported and delegates to the
51
+ * same underlying store.
52
+ */
25
53
  clearToken(): Promise<void>;
26
54
  }
27
55
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzC,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtG,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,mBAAmB,CAa9F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,mBAAmB,CAmBnG;AAwBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,mBAAmB,GAAG,IAAI,EACtC,YAAY,CAAC,EAAE,iBAAiB,GAC/B,mBAAmB,CA0BrB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAIjE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzC,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtG;;;;OAIG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;OAIG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,mBAAmB,CAa9F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,mBAAmB,CAmBnG;AAwBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,mBAAmB,GAAG,IAAI,EACtC,YAAY,CAAC,EAAE,iBAAiB,GAC/B,mBAAmB,CA0BrB"}
package/dist/auth.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import { ConfigurationError } from './_internal/errors/index.js';
2
+ // Re-export focused responsibility classes for consumers who prefer
3
+ // narrower, single-concern APIs over the combined GoodVibesAuthClient facade.
4
+ export { OAuthClient, PermissionResolver, SessionManager, TokenStore, } from './_internal/platform/auth/index.js';
2
5
  function requireStorage(storage) {
3
6
  const resolved = storage ?? globalThis.localStorage;
4
7
  if (!resolved) {
package/dist/browser.d.ts CHANGED
@@ -27,5 +27,6 @@ export interface BrowserGoodVibesSdkOptions extends Omit<GoodVibesSdkOptions, 'b
27
27
  *
28
28
  * const agents = await sdk.operator.agents.list();
29
29
  */
30
+ export { forSession } from './transport-realtime.js';
30
31
  export declare function createBrowserGoodVibesSdk(options?: BrowserGoodVibesSdkOptions): GoodVibesSdk;
31
32
  //# sourceMappingURL=browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,0BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAC3C;AAaD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,YAAY,CAiCd"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,0BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAC3C;AAaD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,YAAY,CAiCd"}
package/dist/browser.js CHANGED
@@ -32,6 +32,7 @@ function resolveBrowserBaseUrl(baseUrl) {
32
32
  *
33
33
  * const agents = await sdk.operator.agents.list();
34
34
  */
35
+ export { forSession } from './transport-realtime.js';
35
36
  export function createBrowserGoodVibesSdk(options = {}) {
36
37
  return createGoodVibesSdk({
37
38
  baseUrl: resolveBrowserBaseUrl(options.baseUrl),
package/dist/client.d.ts CHANGED
@@ -48,6 +48,8 @@ export interface GoodVibesSdkOptions {
48
48
  *
49
49
  * Lowest-precedence auth option — ignored when `tokenStore` or `getAuthToken`
50
50
  * is also provided.
51
+ *
52
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/authentication.md
51
53
  */
52
54
  readonly authToken?: string | null;
53
55
  /**
@@ -59,6 +61,8 @@ export interface GoodVibesSdkOptions {
59
61
  * `setToken` / `clearToken` throws a `ConfigurationError`.
60
62
  *
61
63
  * Takes precedence over `authToken`; ignored when `tokenStore` is provided.
64
+ *
65
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/authentication.md
62
66
  */
63
67
  readonly getAuthToken?: AuthTokenResolver;
64
68
  /**
@@ -69,6 +73,8 @@ export interface GoodVibesSdkOptions {
69
73
  * Highest-precedence auth option — overrides both `getAuthToken` and
70
74
  * `authToken`. Use `createBrowserTokenStore()` (localStorage) or
71
75
  * `createMemoryTokenStore()` for common cases.
76
+ *
77
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/authentication.md
72
78
  */
73
79
  readonly tokenStore?: GoodVibesTokenStore;
74
80
  /**
@@ -114,6 +120,26 @@ export interface GoodVibesRealtimeOptions {
114
120
  /**
115
121
  * Realtime event subscriptions for the GoodVibes daemon.
116
122
  * Choose SSE for read-only event streams or WebSocket for bidirectional use.
123
+ *
124
+ * ### Filtering by session
125
+ *
126
+ * When multiple sessions share one SSE/WebSocket connection, use
127
+ * `forSession(events, sessionId)` to get a pre-filtered view instead of
128
+ * manually guarding every callback with `if (e.sessionId !== mine) return`.
129
+ *
130
+ * @example
131
+ * import { createNodeGoodVibesSdk, forSession } from '@pellux/goodvibes-sdk';
132
+ *
133
+ * const sdk = createNodeGoodVibesSdk({ baseUrl: 'http://127.0.0.1:3210' });
134
+ * const session = await sdk.operator.sessions.create({ title: 'demo' });
135
+ * const sessionId = session.session.id;
136
+ *
137
+ * const events = sdk.realtime.viaSse();
138
+ * const sessionEvents = forSession(events, sessionId);
139
+ *
140
+ * sessionEvents.turn.onEnvelope('STREAM_DELTA', (e) => {
141
+ * process.stdout.write(e.payload.content); // only fires for this session
142
+ * });
117
143
  */
118
144
  export interface GoodVibesRealtime {
119
145
  viaSse(): RemoteRuntimeEvents<RuntimeEventRecord>;
@@ -132,9 +158,31 @@ export interface GoodVibesRealtime {
132
158
  * - **`auth`** — login, logout, and token management helpers.
133
159
  */
134
160
  export interface GoodVibesSdk {
161
+ /**
162
+ * Full control-plane API: daemon admin, agent management, session lifecycle,
163
+ * config. Requires an operator-level auth token.
164
+ *
165
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/reference-operator.md
166
+ */
135
167
  readonly operator: OperatorSdk;
168
+ /**
169
+ * Peer-to-peer and collaboration APIs: pairing, channels, shared sessions.
170
+ * May be used with peer-scoped tokens.
171
+ *
172
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/reference-peer.md
173
+ */
136
174
  readonly peer: PeerSdk;
175
+ /**
176
+ * Login, logout, and token management helpers.
177
+ *
178
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/authentication.md
179
+ */
137
180
  readonly auth: GoodVibesAuthClient;
181
+ /**
182
+ * Subscribe to live daemon events via SSE or WebSocket.
183
+ *
184
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/realtime-and-telemetry.md
185
+ */
138
186
  readonly realtime: GoodVibesRealtime;
139
187
  }
140
188
  /**
@@ -145,6 +193,8 @@ export interface GoodVibesSdk {
145
193
  * `createNodeGoodVibesSdk`, `createBrowserGoodVibesSdk`,
146
194
  * `createReactNativeGoodVibesSdk`.
147
195
  *
196
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/getting-started.md
197
+ *
148
198
  * @example
149
199
  * // Example only: replace baseUrl and authToken with your own values.
150
200
  * import { createGoodVibesSdk } from '@pellux/goodvibes-sdk';
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,qBAAqB,EACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAE1C;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAE9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IAErC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAClD,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CACzF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AA4DD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,GAC3B,YAAY,CA+Cd"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,qBAAqB,EACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAE9B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IAErC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAClD,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CACzF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AA4DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,GAC3B,YAAY,CA+Cd"}
package/dist/client.js CHANGED
@@ -61,6 +61,8 @@ function createPeerOptions(options) {
61
61
  * `createNodeGoodVibesSdk`, `createBrowserGoodVibesSdk`,
62
62
  * `createReactNativeGoodVibesSdk`.
63
63
  *
64
+ * @see https://github.com/mgd34msu/goodvibes-sdk/blob/main/docs/getting-started.md
65
+ *
64
66
  * @example
65
67
  * // Example only: replace baseUrl and authToken with your own values.
66
68
  * import { createGoodVibesSdk } from '@pellux/goodvibes-sdk';
package/dist/expo.d.ts CHANGED
@@ -15,5 +15,6 @@ export interface ExpoGoodVibesSdkOptions extends ReactNativeGoodVibesSdkOptions
15
15
  * authToken: await SecureStore.getItemAsync('gv-token'),
16
16
  * });
17
17
  */
18
+ export { forSession } from './transport-realtime.js';
18
19
  export declare function createExpoGoodVibesSdk(options: ExpoGoodVibesSdkOptions): ReactNativeGoodVibesSdk;
19
20
  //# sourceMappingURL=expo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACpC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;CAAG;AAElF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAEhG"}
1
+ {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACpC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;CAAG;AAElF;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAEhG"}
package/dist/expo.js CHANGED
@@ -13,6 +13,7 @@ import { createReactNativeGoodVibesSdk, } from './react-native.js';
13
13
  * authToken: await SecureStore.getItemAsync('gv-token'),
14
14
  * });
15
15
  */
16
+ export { forSession } from './transport-realtime.js';
16
17
  export function createExpoGoodVibesSdk(options) {
17
18
  return createReactNativeGoodVibesSdk(options);
18
19
  }
package/dist/node.d.ts CHANGED
@@ -23,5 +23,6 @@ export interface NodeGoodVibesSdkOptions extends GoodVibesSdkOptions {
23
23
  * const session = await sdk.operator.sessions.create({ name: 'my-session' });
24
24
  * console.log(session.id);
25
25
  */
26
+ export { forSession } from './transport-realtime.js';
26
27
  export declare function createNodeGoodVibesSdk(options: NodeGoodVibesSdkOptions): GoodVibesSdk;
27
28
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;CAAG;AAEvE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,YAAY,CAwBd"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;CAAG;AAEvE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,YAAY,CAwBd"}
package/dist/node.js CHANGED
@@ -21,6 +21,7 @@ import { createGoodVibesSdk, } from './client.js';
21
21
  * const session = await sdk.operator.sessions.create({ name: 'my-session' });
22
22
  * console.log(session.id);
23
23
  */
24
+ export { forSession } from './transport-realtime.js';
24
25
  export function createNodeGoodVibesSdk(options) {
25
26
  return createGoodVibesSdk({
26
27
  ...options,
@@ -36,5 +36,6 @@ export type ReactNativeGoodVibesSdk = Omit<GoodVibesSdk, 'realtime'> & {
36
36
  * const events = sdk.realtime.runtime();
37
37
  * events.agents.on('AGENT_SPAWNING', ({ agentId }) => console.log(agentId));
38
38
  */
39
+ export { forSession } from './transport-realtime.js';
39
40
  export declare function createReactNativeGoodVibesSdk(options: ReactNativeGoodVibesSdkOptions): ReactNativeGoodVibesSdk;
40
41
  //# sourceMappingURL=react-native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-native.d.ts","sourceRoot":"","sources":["../src/react-native.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IACnD,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CACzF;AAED,MAAM,MAAM,uBAAuB,GACjC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;CACjD,CAAC;AAYJ;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,uBAAuB,CA0DzB"}
1
+ {"version":3,"file":"react-native.d.ts","sourceRoot":"","sources":["../src/react-native.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IACnD,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CACzF;AAED,MAAM,MAAM,uBAAuB,GACjC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;CACjD,CAAC;AAYJ;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,uBAAuB,CA0DzB"}
@@ -34,6 +34,7 @@ function requireReactNativeWebSocket(webSocketImpl) {
34
34
  * const events = sdk.realtime.runtime();
35
35
  * events.agents.on('AGENT_SPAWNING', ({ agentId }) => console.log(agentId));
36
36
  */
37
+ export { forSession } from './transport-realtime.js';
37
38
  export function createReactNativeGoodVibesSdk(options) {
38
39
  const base = createGoodVibesSdk({
39
40
  ...options,
package/dist/web.d.ts CHANGED
@@ -14,5 +14,6 @@ export interface WebGoodVibesSdkOptions extends BrowserGoodVibesSdkOptions {
14
14
  * const events = sdk.realtime.viaSse();
15
15
  * events.agents.on('AGENT_SPAWNING', ({ agentId }) => console.log(agentId));
16
16
  */
17
+ export { forSession } from './transport-realtime.js';
17
18
  export declare function createWebGoodVibesSdk(options?: WebGoodVibesSdkOptions): GoodVibesSdk;
18
19
  //# sourceMappingURL=web.d.ts.map
package/dist/web.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;CAAG;AAE7E;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,YAAY,CAExF"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;CAAG;AAE7E;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,YAAY,CAExF"}
package/dist/web.js CHANGED
@@ -11,6 +11,7 @@ import { createBrowserGoodVibesSdk, } from './browser.js';
11
11
  * const events = sdk.realtime.viaSse();
12
12
  * events.agents.on('AGENT_SPAWNING', ({ agentId }) => console.log(agentId));
13
13
  */
14
+ export { forSession } from './transport-realtime.js';
14
15
  export function createWebGoodVibesSdk(options = {}) {
15
16
  return createBrowserGoodVibesSdk(options);
16
17
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-sdk",
3
- "version": "0.18.49",
3
+ "version": "0.18.50",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mgd34msu/goodvibes-sdk.git"