@realtimex/sdk 1.7.12 → 1.7.14

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.
@@ -705,6 +705,83 @@ var V1DesktopRuntimeSessionsModule = class {
705
705
  }
706
706
  };
707
707
 
708
+ // src/v1/modules/v1DesktopBrowser.ts
709
+ var V1DesktopBrowserModule = class {
710
+ constructor(client) {
711
+ this.client = client;
712
+ }
713
+ /**
714
+ * List RealTimeX Browser sessions available in the Electron desktop app.
715
+ * @see GET /sdk/desktop/browser/sessions
716
+ */
717
+ async listSessions() {
718
+ return this.client.request("GET", `/sdk/desktop/browser/sessions`);
719
+ }
720
+ /**
721
+ * Create a named RealTimeX Browser session in the Electron desktop app.
722
+ * @see POST /sdk/desktop/browser/sessions
723
+ */
724
+ async createSession(body) {
725
+ return this.client.request("POST", `/sdk/desktop/browser/sessions`, body);
726
+ }
727
+ /**
728
+ * Get a specific RealTimeX Browser session by session name.
729
+ * @see GET /sdk/desktop/browser/sessions/{sessionName}
730
+ */
731
+ async getSession(sessionName) {
732
+ return this.client.request("GET", `/sdk/desktop/browser/sessions/${sessionName}`);
733
+ }
734
+ /**
735
+ * Delete a named RealTimeX Browser session from the Electron desktop app.
736
+ * @see DELETE /sdk/desktop/browser/sessions/{sessionName}
737
+ */
738
+ async deleteSession(sessionName) {
739
+ return this.client.request("DELETE", `/sdk/desktop/browser/sessions/${sessionName}`);
740
+ }
741
+ /**
742
+ * Create a RealTimeX Browser tab, optionally launching the browser session if needed.
743
+ * @see POST /sdk/desktop/browser/tabs
744
+ */
745
+ async createTab(body) {
746
+ return this.client.request("POST", `/sdk/desktop/browser/tabs`, body);
747
+ }
748
+ /**
749
+ * Get a RealTimeX Browser tab snapshot by tab reference.
750
+ * @see GET /sdk/desktop/browser/tabs/{tabRef}
751
+ */
752
+ async getTab(tabRef) {
753
+ return this.client.request("GET", `/sdk/desktop/browser/tabs/${tabRef}`);
754
+ }
755
+ /**
756
+ * Close an existing RealTimeX Browser tab.
757
+ * @see DELETE /sdk/desktop/browser/tabs/{tabRef}
758
+ */
759
+ async deleteTab(tabRef) {
760
+ return this.client.request("DELETE", `/sdk/desktop/browser/tabs/${tabRef}`);
761
+ }
762
+ /**
763
+ * Evaluate JavaScript in a specific RealTimeX Browser tab.
764
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/evaluate
765
+ */
766
+ async evaluateTab(tabRef, body) {
767
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/evaluate`, body);
768
+ }
769
+ /**
770
+ * Focus an existing RealTimeX Browser tab.
771
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/focus
772
+ */
773
+ async focusTab(tabRef, body) {
774
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/focus`, body);
775
+ }
776
+ /**
777
+ * Navigate an existing RealTimeX Browser tab to a new URL.
778
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/navigate
779
+ */
780
+ async navigateTab(tabRef, body) {
781
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/navigate`, body);
782
+ }
783
+ };
784
+
708
785
  // src/v1/namespace.ts
709
786
  var V1ApiNamespace = class {
710
787
  // [GENERATED-PROPS-END]
@@ -720,6 +797,7 @@ var V1ApiNamespace = class {
720
797
  this.openai = new V1OpenAIModule(this._client);
721
798
  this.embed = new V1EmbedModule(this._client);
722
799
  this.desktopRuntimeSessions = new V1DesktopRuntimeSessionsModule(this._client);
800
+ this.desktopBrowser = new V1DesktopBrowserModule(this._client);
723
801
  }
724
802
  };
725
803
 
@@ -740,5 +818,6 @@ export {
740
818
  V1OpenAIModule,
741
819
  V1EmbedModule,
742
820
  V1DesktopRuntimeSessionsModule,
821
+ V1DesktopBrowserModule,
743
822
  V1ApiNamespace
744
823
  };
@@ -450,6 +450,61 @@ declare class V1DesktopRuntimeSessionsModule {
450
450
  permission(sessionId: string, body?: Record<string, unknown>): Promise<unknown>;
451
451
  }
452
452
 
453
+ declare class V1DesktopBrowserModule {
454
+ private readonly client;
455
+ constructor(client: DeveloperApiClient);
456
+ /**
457
+ * List RealTimeX Browser sessions available in the Electron desktop app.
458
+ * @see GET /sdk/desktop/browser/sessions
459
+ */
460
+ listSessions(): Promise<unknown>;
461
+ /**
462
+ * Create a named RealTimeX Browser session in the Electron desktop app.
463
+ * @see POST /sdk/desktop/browser/sessions
464
+ */
465
+ createSession(body?: Record<string, unknown>): Promise<unknown>;
466
+ /**
467
+ * Get a specific RealTimeX Browser session by session name.
468
+ * @see GET /sdk/desktop/browser/sessions/{sessionName}
469
+ */
470
+ getSession(sessionName: string): Promise<unknown>;
471
+ /**
472
+ * Delete a named RealTimeX Browser session from the Electron desktop app.
473
+ * @see DELETE /sdk/desktop/browser/sessions/{sessionName}
474
+ */
475
+ deleteSession(sessionName: string): Promise<unknown>;
476
+ /**
477
+ * Create a RealTimeX Browser tab, optionally launching the browser session if needed.
478
+ * @see POST /sdk/desktop/browser/tabs
479
+ */
480
+ createTab(body?: Record<string, unknown>): Promise<unknown>;
481
+ /**
482
+ * Get a RealTimeX Browser tab snapshot by tab reference.
483
+ * @see GET /sdk/desktop/browser/tabs/{tabRef}
484
+ */
485
+ getTab(tabRef: string): Promise<unknown>;
486
+ /**
487
+ * Close an existing RealTimeX Browser tab.
488
+ * @see DELETE /sdk/desktop/browser/tabs/{tabRef}
489
+ */
490
+ deleteTab(tabRef: string): Promise<unknown>;
491
+ /**
492
+ * Evaluate JavaScript in a specific RealTimeX Browser tab.
493
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/evaluate
494
+ */
495
+ evaluateTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>;
496
+ /**
497
+ * Focus an existing RealTimeX Browser tab.
498
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/focus
499
+ */
500
+ focusTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>;
501
+ /**
502
+ * Navigate an existing RealTimeX Browser tab to a new URL.
503
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/navigate
504
+ */
505
+ navigateTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>;
506
+ }
507
+
453
508
  /**
454
509
  * V1ApiNamespace - Container for all RealtimeX Developer API (v1) modules.
455
510
  *
@@ -474,6 +529,7 @@ declare class V1ApiNamespace {
474
529
  openai: V1OpenAIModule;
475
530
  embed: V1EmbedModule;
476
531
  desktopRuntimeSessions: V1DesktopRuntimeSessionsModule;
532
+ desktopBrowser: V1DesktopBrowserModule;
477
533
  constructor(baseUrl: string, apiKey: string, appId?: string);
478
534
  }
479
535
 
@@ -498,4 +554,4 @@ declare class ServerError extends DeveloperApiError {
498
554
  constructor(message?: string);
499
555
  }
500
556
 
501
- export { AuthenticationError as A, DeveloperApiClient as D, NotFoundError as N, ServerError as S, V1ApiNamespace as V, V1DesktopRuntimeSessionsModule as a, DeveloperApiError as b, ValidationError as c, V1AuthModule as d, V1AdminModule as e, V1DocumentModule as f, V1WorkspaceModule as g, V1SystemModule as h, V1ThreadModule as i, V1UsersModule as j, V1OpenAIModule as k, V1EmbedModule as l };
557
+ export { AuthenticationError as A, DeveloperApiClient as D, NotFoundError as N, ServerError as S, V1ApiNamespace as V, V1DesktopRuntimeSessionsModule as a, V1DesktopBrowserModule as b, DeveloperApiError as c, ValidationError as d, V1AuthModule as e, V1AdminModule as f, V1DocumentModule as g, V1WorkspaceModule as h, V1SystemModule as i, V1ThreadModule as j, V1UsersModule as k, V1OpenAIModule as l, V1EmbedModule as m };
@@ -450,6 +450,61 @@ declare class V1DesktopRuntimeSessionsModule {
450
450
  permission(sessionId: string, body?: Record<string, unknown>): Promise<unknown>;
451
451
  }
452
452
 
453
+ declare class V1DesktopBrowserModule {
454
+ private readonly client;
455
+ constructor(client: DeveloperApiClient);
456
+ /**
457
+ * List RealTimeX Browser sessions available in the Electron desktop app.
458
+ * @see GET /sdk/desktop/browser/sessions
459
+ */
460
+ listSessions(): Promise<unknown>;
461
+ /**
462
+ * Create a named RealTimeX Browser session in the Electron desktop app.
463
+ * @see POST /sdk/desktop/browser/sessions
464
+ */
465
+ createSession(body?: Record<string, unknown>): Promise<unknown>;
466
+ /**
467
+ * Get a specific RealTimeX Browser session by session name.
468
+ * @see GET /sdk/desktop/browser/sessions/{sessionName}
469
+ */
470
+ getSession(sessionName: string): Promise<unknown>;
471
+ /**
472
+ * Delete a named RealTimeX Browser session from the Electron desktop app.
473
+ * @see DELETE /sdk/desktop/browser/sessions/{sessionName}
474
+ */
475
+ deleteSession(sessionName: string): Promise<unknown>;
476
+ /**
477
+ * Create a RealTimeX Browser tab, optionally launching the browser session if needed.
478
+ * @see POST /sdk/desktop/browser/tabs
479
+ */
480
+ createTab(body?: Record<string, unknown>): Promise<unknown>;
481
+ /**
482
+ * Get a RealTimeX Browser tab snapshot by tab reference.
483
+ * @see GET /sdk/desktop/browser/tabs/{tabRef}
484
+ */
485
+ getTab(tabRef: string): Promise<unknown>;
486
+ /**
487
+ * Close an existing RealTimeX Browser tab.
488
+ * @see DELETE /sdk/desktop/browser/tabs/{tabRef}
489
+ */
490
+ deleteTab(tabRef: string): Promise<unknown>;
491
+ /**
492
+ * Evaluate JavaScript in a specific RealTimeX Browser tab.
493
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/evaluate
494
+ */
495
+ evaluateTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>;
496
+ /**
497
+ * Focus an existing RealTimeX Browser tab.
498
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/focus
499
+ */
500
+ focusTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>;
501
+ /**
502
+ * Navigate an existing RealTimeX Browser tab to a new URL.
503
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/navigate
504
+ */
505
+ navigateTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>;
506
+ }
507
+
453
508
  /**
454
509
  * V1ApiNamespace - Container for all RealtimeX Developer API (v1) modules.
455
510
  *
@@ -474,6 +529,7 @@ declare class V1ApiNamespace {
474
529
  openai: V1OpenAIModule;
475
530
  embed: V1EmbedModule;
476
531
  desktopRuntimeSessions: V1DesktopRuntimeSessionsModule;
532
+ desktopBrowser: V1DesktopBrowserModule;
477
533
  constructor(baseUrl: string, apiKey: string, appId?: string);
478
534
  }
479
535
 
@@ -498,4 +554,4 @@ declare class ServerError extends DeveloperApiError {
498
554
  constructor(message?: string);
499
555
  }
500
556
 
501
- export { AuthenticationError as A, DeveloperApiClient as D, NotFoundError as N, ServerError as S, V1ApiNamespace as V, V1DesktopRuntimeSessionsModule as a, DeveloperApiError as b, ValidationError as c, V1AuthModule as d, V1AdminModule as e, V1DocumentModule as f, V1WorkspaceModule as g, V1SystemModule as h, V1ThreadModule as i, V1UsersModule as j, V1OpenAIModule as k, V1EmbedModule as l };
557
+ export { AuthenticationError as A, DeveloperApiClient as D, NotFoundError as N, ServerError as S, V1ApiNamespace as V, V1DesktopRuntimeSessionsModule as a, V1DesktopBrowserModule as b, DeveloperApiError as c, ValidationError as d, V1AuthModule as e, V1AdminModule as f, V1DocumentModule as g, V1WorkspaceModule as h, V1SystemModule as i, V1ThreadModule as j, V1UsersModule as k, V1OpenAIModule as l, V1EmbedModule as m };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { V as V1ApiNamespace, a as V1DesktopRuntimeSessionsModule } from './errors-x6ngbrlA.mjs';
2
- export { A as AuthenticationError, D as DeveloperApiClient, b as DeveloperApiError, N as NotFoundError, S as ServerError, c as ValidationError } from './errors-x6ngbrlA.mjs';
1
+ import { V as V1ApiNamespace, a as V1DesktopRuntimeSessionsModule, b as V1DesktopBrowserModule } from './errors-DsxB91BA.mjs';
2
+ export { A as AuthenticationError, D as DeveloperApiClient, c as DeveloperApiError, N as NotFoundError, S as ServerError, d as ValidationError } from './errors-DsxB91BA.mjs';
3
3
 
4
4
  /**
5
5
  * RealtimeX Local App SDK - Types
@@ -2027,6 +2027,11 @@ declare class RealtimeXSDK {
2027
2027
  * Backed by `sdk.v1.desktopRuntimeSessions` for compatibility with generated v1 modules.
2028
2028
  */
2029
2029
  desktopRuntimeSessions: V1DesktopRuntimeSessionsModule | undefined;
2030
+ /**
2031
+ * Desktop browser control — top-level alias for the RealTimeX Browser session and tab APIs.
2032
+ * Backed by `sdk.v1.desktopBrowser` for compatibility with generated v1 modules.
2033
+ */
2034
+ desktopBrowser: V1DesktopBrowserModule | undefined;
2030
2035
  readonly appId: string;
2031
2036
  readonly appName: string | undefined;
2032
2037
  readonly apiKey: string | undefined;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { V as V1ApiNamespace, a as V1DesktopRuntimeSessionsModule } from './errors-x6ngbrlA.js';
2
- export { A as AuthenticationError, D as DeveloperApiClient, b as DeveloperApiError, N as NotFoundError, S as ServerError, c as ValidationError } from './errors-x6ngbrlA.js';
1
+ import { V as V1ApiNamespace, a as V1DesktopRuntimeSessionsModule, b as V1DesktopBrowserModule } from './errors-DsxB91BA.js';
2
+ export { A as AuthenticationError, D as DeveloperApiClient, c as DeveloperApiError, N as NotFoundError, S as ServerError, d as ValidationError } from './errors-DsxB91BA.js';
3
3
 
4
4
  /**
5
5
  * RealtimeX Local App SDK - Types
@@ -2027,6 +2027,11 @@ declare class RealtimeXSDK {
2027
2027
  * Backed by `sdk.v1.desktopRuntimeSessions` for compatibility with generated v1 modules.
2028
2028
  */
2029
2029
  desktopRuntimeSessions: V1DesktopRuntimeSessionsModule | undefined;
2030
+ /**
2031
+ * Desktop browser control — top-level alias for the RealTimeX Browser session and tab APIs.
2032
+ * Backed by `sdk.v1.desktopBrowser` for compatibility with generated v1 modules.
2033
+ */
2034
+ desktopBrowser: V1DesktopBrowserModule | undefined;
2030
2035
  readonly appId: string;
2031
2036
  readonly appName: string | undefined;
2032
2037
  readonly apiKey: string | undefined;
package/dist/index.js CHANGED
@@ -3750,6 +3750,83 @@ var V1DesktopRuntimeSessionsModule = class {
3750
3750
  }
3751
3751
  };
3752
3752
 
3753
+ // src/v1/modules/v1DesktopBrowser.ts
3754
+ var V1DesktopBrowserModule = class {
3755
+ constructor(client) {
3756
+ this.client = client;
3757
+ }
3758
+ /**
3759
+ * List RealTimeX Browser sessions available in the Electron desktop app.
3760
+ * @see GET /sdk/desktop/browser/sessions
3761
+ */
3762
+ async listSessions() {
3763
+ return this.client.request("GET", `/sdk/desktop/browser/sessions`);
3764
+ }
3765
+ /**
3766
+ * Create a named RealTimeX Browser session in the Electron desktop app.
3767
+ * @see POST /sdk/desktop/browser/sessions
3768
+ */
3769
+ async createSession(body) {
3770
+ return this.client.request("POST", `/sdk/desktop/browser/sessions`, body);
3771
+ }
3772
+ /**
3773
+ * Get a specific RealTimeX Browser session by session name.
3774
+ * @see GET /sdk/desktop/browser/sessions/{sessionName}
3775
+ */
3776
+ async getSession(sessionName) {
3777
+ return this.client.request("GET", `/sdk/desktop/browser/sessions/${sessionName}`);
3778
+ }
3779
+ /**
3780
+ * Delete a named RealTimeX Browser session from the Electron desktop app.
3781
+ * @see DELETE /sdk/desktop/browser/sessions/{sessionName}
3782
+ */
3783
+ async deleteSession(sessionName) {
3784
+ return this.client.request("DELETE", `/sdk/desktop/browser/sessions/${sessionName}`);
3785
+ }
3786
+ /**
3787
+ * Create a RealTimeX Browser tab, optionally launching the browser session if needed.
3788
+ * @see POST /sdk/desktop/browser/tabs
3789
+ */
3790
+ async createTab(body) {
3791
+ return this.client.request("POST", `/sdk/desktop/browser/tabs`, body);
3792
+ }
3793
+ /**
3794
+ * Get a RealTimeX Browser tab snapshot by tab reference.
3795
+ * @see GET /sdk/desktop/browser/tabs/{tabRef}
3796
+ */
3797
+ async getTab(tabRef) {
3798
+ return this.client.request("GET", `/sdk/desktop/browser/tabs/${tabRef}`);
3799
+ }
3800
+ /**
3801
+ * Close an existing RealTimeX Browser tab.
3802
+ * @see DELETE /sdk/desktop/browser/tabs/{tabRef}
3803
+ */
3804
+ async deleteTab(tabRef) {
3805
+ return this.client.request("DELETE", `/sdk/desktop/browser/tabs/${tabRef}`);
3806
+ }
3807
+ /**
3808
+ * Evaluate JavaScript in a specific RealTimeX Browser tab.
3809
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/evaluate
3810
+ */
3811
+ async evaluateTab(tabRef, body) {
3812
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/evaluate`, body);
3813
+ }
3814
+ /**
3815
+ * Focus an existing RealTimeX Browser tab.
3816
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/focus
3817
+ */
3818
+ async focusTab(tabRef, body) {
3819
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/focus`, body);
3820
+ }
3821
+ /**
3822
+ * Navigate an existing RealTimeX Browser tab to a new URL.
3823
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/navigate
3824
+ */
3825
+ async navigateTab(tabRef, body) {
3826
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/navigate`, body);
3827
+ }
3828
+ };
3829
+
3753
3830
  // src/v1/namespace.ts
3754
3831
  var V1ApiNamespace = class {
3755
3832
  // [GENERATED-PROPS-END]
@@ -3765,6 +3842,7 @@ var V1ApiNamespace = class {
3765
3842
  this.openai = new V1OpenAIModule(this._client);
3766
3843
  this.embed = new V1EmbedModule(this._client);
3767
3844
  this.desktopRuntimeSessions = new V1DesktopRuntimeSessionsModule(this._client);
3845
+ this.desktopBrowser = new V1DesktopBrowserModule(this._client);
3768
3846
  }
3769
3847
  };
3770
3848
 
@@ -4468,6 +4546,7 @@ var _RealtimeXSDK = class _RealtimeXSDK {
4468
4546
  this.credentials = new CredentialsModule(this.httpClient);
4469
4547
  this.v1 = this.apiKey || this.appId ? new V1ApiNamespace(this.realtimexUrl, this.apiKey ?? "", this.appId || void 0) : void 0;
4470
4548
  this.desktopRuntimeSessions = this.v1?.desktopRuntimeSessions;
4549
+ this.desktopBrowser = this.v1?.desktopBrowser;
4471
4550
  if (this.permissions.length > 0 && this.appId && !this.apiKey) {
4472
4551
  this.register().catch((err) => {
4473
4552
  console.error("[RealtimeX SDK] Auto-registration failed:", err.message);
package/dist/index.mjs CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  ServerError,
7
7
  V1ApiNamespace,
8
8
  ValidationError
9
- } from "./chunk-3DVGTGOK.mjs";
9
+ } from "./chunk-PEWBG7US.mjs";
10
10
 
11
11
  // src/modules/api.ts
12
12
  var PermissionDeniedError = class extends Error {
@@ -3653,6 +3653,7 @@ var _RealtimeXSDK = class _RealtimeXSDK {
3653
3653
  this.credentials = new CredentialsModule(this.httpClient);
3654
3654
  this.v1 = this.apiKey || this.appId ? new V1ApiNamespace(this.realtimexUrl, this.apiKey ?? "", this.appId || void 0) : void 0;
3655
3655
  this.desktopRuntimeSessions = this.v1?.desktopRuntimeSessions;
3656
+ this.desktopBrowser = this.v1?.desktopBrowser;
3656
3657
  if (this.permissions.length > 0 && this.appId && !this.apiKey) {
3657
3658
  this.register().catch((err) => {
3658
3659
  console.error("[RealtimeX SDK] Auto-registration failed:", err.message);
@@ -1,5 +1,5 @@
1
- import { D as DeveloperApiClient } from '../errors-x6ngbrlA.mjs';
2
- export { A as AuthenticationError, b as DeveloperApiError, N as NotFoundError, S as ServerError, e as V1AdminModule, V as V1ApiNamespace, d as V1AuthModule, a as V1DesktopRuntimeSessionsModule, f as V1DocumentModule, l as V1EmbedModule, k as V1OpenAIModule, h as V1SystemModule, i as V1ThreadModule, j as V1UsersModule, g as V1WorkspaceModule, c as ValidationError } from '../errors-x6ngbrlA.mjs';
1
+ import { D as DeveloperApiClient } from '../errors-DsxB91BA.mjs';
2
+ export { A as AuthenticationError, c as DeveloperApiError, N as NotFoundError, S as ServerError, f as V1AdminModule, V as V1ApiNamespace, e as V1AuthModule, b as V1DesktopBrowserModule, a as V1DesktopRuntimeSessionsModule, g as V1DocumentModule, m as V1EmbedModule, l as V1OpenAIModule, i as V1SystemModule, j as V1ThreadModule, k as V1UsersModule, h as V1WorkspaceModule, d as ValidationError } from '../errors-DsxB91BA.mjs';
3
3
 
4
4
  interface WorkspaceStreamChunk {
5
5
  /** The text fragment emitted by this SSE event */
@@ -1,5 +1,5 @@
1
- import { D as DeveloperApiClient } from '../errors-x6ngbrlA.js';
2
- export { A as AuthenticationError, b as DeveloperApiError, N as NotFoundError, S as ServerError, e as V1AdminModule, V as V1ApiNamespace, d as V1AuthModule, a as V1DesktopRuntimeSessionsModule, f as V1DocumentModule, l as V1EmbedModule, k as V1OpenAIModule, h as V1SystemModule, i as V1ThreadModule, j as V1UsersModule, g as V1WorkspaceModule, c as ValidationError } from '../errors-x6ngbrlA.js';
1
+ import { D as DeveloperApiClient } from '../errors-DsxB91BA.js';
2
+ export { A as AuthenticationError, c as DeveloperApiError, N as NotFoundError, S as ServerError, f as V1AdminModule, V as V1ApiNamespace, e as V1AuthModule, b as V1DesktopBrowserModule, a as V1DesktopRuntimeSessionsModule, g as V1DocumentModule, m as V1EmbedModule, l as V1OpenAIModule, i as V1SystemModule, j as V1ThreadModule, k as V1UsersModule, h as V1WorkspaceModule, d as ValidationError } from '../errors-DsxB91BA.js';
3
3
 
4
4
  interface WorkspaceStreamChunk {
5
5
  /** The text fragment emitted by this SSE event */
package/dist/v1/index.js CHANGED
@@ -28,6 +28,7 @@ __export(v1_exports, {
28
28
  V1AdminModule: () => V1AdminModule,
29
29
  V1ApiNamespace: () => V1ApiNamespace,
30
30
  V1AuthModule: () => V1AuthModule,
31
+ V1DesktopBrowserModule: () => V1DesktopBrowserModule,
31
32
  V1DesktopRuntimeSessionsModule: () => V1DesktopRuntimeSessionsModule,
32
33
  V1DocumentModule: () => V1DocumentModule,
33
34
  V1EmbedModule: () => V1EmbedModule,
@@ -751,6 +752,83 @@ var V1DesktopRuntimeSessionsModule = class {
751
752
  }
752
753
  };
753
754
 
755
+ // src/v1/modules/v1DesktopBrowser.ts
756
+ var V1DesktopBrowserModule = class {
757
+ constructor(client) {
758
+ this.client = client;
759
+ }
760
+ /**
761
+ * List RealTimeX Browser sessions available in the Electron desktop app.
762
+ * @see GET /sdk/desktop/browser/sessions
763
+ */
764
+ async listSessions() {
765
+ return this.client.request("GET", `/sdk/desktop/browser/sessions`);
766
+ }
767
+ /**
768
+ * Create a named RealTimeX Browser session in the Electron desktop app.
769
+ * @see POST /sdk/desktop/browser/sessions
770
+ */
771
+ async createSession(body) {
772
+ return this.client.request("POST", `/sdk/desktop/browser/sessions`, body);
773
+ }
774
+ /**
775
+ * Get a specific RealTimeX Browser session by session name.
776
+ * @see GET /sdk/desktop/browser/sessions/{sessionName}
777
+ */
778
+ async getSession(sessionName) {
779
+ return this.client.request("GET", `/sdk/desktop/browser/sessions/${sessionName}`);
780
+ }
781
+ /**
782
+ * Delete a named RealTimeX Browser session from the Electron desktop app.
783
+ * @see DELETE /sdk/desktop/browser/sessions/{sessionName}
784
+ */
785
+ async deleteSession(sessionName) {
786
+ return this.client.request("DELETE", `/sdk/desktop/browser/sessions/${sessionName}`);
787
+ }
788
+ /**
789
+ * Create a RealTimeX Browser tab, optionally launching the browser session if needed.
790
+ * @see POST /sdk/desktop/browser/tabs
791
+ */
792
+ async createTab(body) {
793
+ return this.client.request("POST", `/sdk/desktop/browser/tabs`, body);
794
+ }
795
+ /**
796
+ * Get a RealTimeX Browser tab snapshot by tab reference.
797
+ * @see GET /sdk/desktop/browser/tabs/{tabRef}
798
+ */
799
+ async getTab(tabRef) {
800
+ return this.client.request("GET", `/sdk/desktop/browser/tabs/${tabRef}`);
801
+ }
802
+ /**
803
+ * Close an existing RealTimeX Browser tab.
804
+ * @see DELETE /sdk/desktop/browser/tabs/{tabRef}
805
+ */
806
+ async deleteTab(tabRef) {
807
+ return this.client.request("DELETE", `/sdk/desktop/browser/tabs/${tabRef}`);
808
+ }
809
+ /**
810
+ * Evaluate JavaScript in a specific RealTimeX Browser tab.
811
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/evaluate
812
+ */
813
+ async evaluateTab(tabRef, body) {
814
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/evaluate`, body);
815
+ }
816
+ /**
817
+ * Focus an existing RealTimeX Browser tab.
818
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/focus
819
+ */
820
+ async focusTab(tabRef, body) {
821
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/focus`, body);
822
+ }
823
+ /**
824
+ * Navigate an existing RealTimeX Browser tab to a new URL.
825
+ * @see POST /sdk/desktop/browser/tabs/{tabRef}/navigate
826
+ */
827
+ async navigateTab(tabRef, body) {
828
+ return this.client.request("POST", `/sdk/desktop/browser/tabs/${tabRef}/navigate`, body);
829
+ }
830
+ };
831
+
754
832
  // src/v1/namespace.ts
755
833
  var V1ApiNamespace = class {
756
834
  // [GENERATED-PROPS-END]
@@ -766,6 +844,7 @@ var V1ApiNamespace = class {
766
844
  this.openai = new V1OpenAIModule(this._client);
767
845
  this.embed = new V1EmbedModule(this._client);
768
846
  this.desktopRuntimeSessions = new V1DesktopRuntimeSessionsModule(this._client);
847
+ this.desktopBrowser = new V1DesktopBrowserModule(this._client);
769
848
  }
770
849
  };
771
850
 
@@ -892,6 +971,7 @@ async function uploadFileToFolder(client, file, folderName, options = {}) {
892
971
  V1AdminModule,
893
972
  V1ApiNamespace,
894
973
  V1AuthModule,
974
+ V1DesktopBrowserModule,
895
975
  V1DesktopRuntimeSessionsModule,
896
976
  V1DocumentModule,
897
977
  V1EmbedModule,
package/dist/v1/index.mjs CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  V1AdminModule,
8
8
  V1ApiNamespace,
9
9
  V1AuthModule,
10
+ V1DesktopBrowserModule,
10
11
  V1DesktopRuntimeSessionsModule,
11
12
  V1DocumentModule,
12
13
  V1EmbedModule,
@@ -16,7 +17,7 @@ import {
16
17
  V1UsersModule,
17
18
  V1WorkspaceModule,
18
19
  ValidationError
19
- } from "../chunk-3DVGTGOK.mjs";
20
+ } from "../chunk-PEWBG7US.mjs";
20
21
 
21
22
  // src/v1/overrides/v1WorkspaceStreaming.ts
22
23
  async function* streamWorkspaceChat(client, slug, body) {
@@ -140,6 +141,7 @@ export {
140
141
  V1AdminModule,
141
142
  V1ApiNamespace,
142
143
  V1AuthModule,
144
+ V1DesktopBrowserModule,
143
145
  V1DesktopRuntimeSessionsModule,
144
146
  V1DocumentModule,
145
147
  V1EmbedModule,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@realtimex/sdk",
3
- "version": "1.7.12",
3
+ "version": "1.7.14",
4
4
  "description": "SDK for building Local Apps that integrate with RealtimeX",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: realtimex-moderator-sdk
3
3
  description: Control and interact with the RealTimeX application through its Node.js SDK. This skill should be used when users want to manage workspaces, threads, agents, activities, LLM chat, vector store, MCP tools, ACP agent sessions, TTS/STT, or any other RealTimeX platform feature via the API. All method signatures are verified against the SDK source code.
4
- generated: 2026-05-07
5
- sdk_version: 1.7.12
4
+ generated: 2026-05-08
5
+ sdk_version: 1.7.14
6
6
  ---
7
7
 
8
8
  # RealTimeX Moderator (SDK Source-Verified)
9
9
 
10
- Interact with the RealTimeX platform (`http://localhost:3001`) using `@realtimex/sdk` **v1.7.12**. Authentication is automatic when running inside RealtimeX.
10
+ Interact with the RealTimeX platform (`http://localhost:3001`) using `@realtimex/sdk` **v1.7.14**. Authentication is automatic when running inside RealtimeX.
11
11
 
12
12
  `<SKILL_DIR>` below refers to the directory containing this SKILL.md.
13
13
 
@@ -29,6 +29,9 @@ node "$SKILL" terminal-launch-cli-agent claude claude-cli "what is current worki
29
29
  node "$SKILL" terminal-launch-shell --workspace=<slug> --thread=<slug> --command="pwd" $ENV
30
30
  node "$SKILL" terminal-sessions --workspace=<slug> $ENV
31
31
  node "$SKILL" terminal-write <session-id> "continue" $ENV
32
+ node "$SKILL" browser-sessions $ENV
33
+ node "$SKILL" browser-session-create github-review $ENV
34
+ node "$SKILL" browser-tab-create https://example.com --session=github-review $ENV
32
35
  node "$SKILL" acp-chat qwen-cli "question" --cwd=<path> $ENV
33
36
  node "$SKILL" llm-chat "message" $ENV
34
37
  node "$SKILL" activities --status=pending $ENV
@@ -169,6 +172,98 @@ If the user says:
169
172
 
170
173
  then prefer `sdk.desktopRuntimeSessions.*`, not ACP.
171
174
 
175
+ If the user says:
176
+ - "open this URL in RealTimeX Browser"
177
+ - "create a browser session"
178
+ - "navigate the managed browser tab"
179
+ - "focus or close a RealTimeX Browser tab"
180
+
181
+ then prefer `sdk.desktopBrowser.*`, not ACP and not desktop terminal sessions.
182
+
183
+ ---
184
+
185
+ ## Desktop Browser
186
+
187
+ For anything that says **RealTimeX Browser**, **browser session**, **browser tab**, **open a URL in the managed browser**, or **navigate/focus/close a managed browser tab**, use:
188
+
189
+ - `sdk.desktopBrowser.*`
190
+
191
+ Do **not** use ACP for this unless the user explicitly wants ACP browser handoff behavior. Do **not** use `sdk.desktopRuntimeSessions.*` for browser tabs; that module is only for terminal sessions.
192
+
193
+ ### Use desktop browser for
194
+ - listing named RealTimeX Browser sessions
195
+ - creating a named browser session
196
+ - getting or deleting a named browser session
197
+ - creating a browser tab in a named session
198
+ - reading a browser tab snapshot
199
+ - evaluating JavaScript in a browser tab
200
+ - focusing a browser tab
201
+ - navigating a browser tab
202
+ - closing a browser tab
203
+
204
+ ### Correct SDK namespace
205
+
206
+ ```js
207
+ sdk.desktopBrowser
208
+ ```
209
+
210
+ Compatibility:
211
+ - `sdk.desktopBrowser` is the preferred alias
212
+ - `sdk.v1.desktopBrowser` still exists for backward compatibility
213
+
214
+ ### Correct examples
215
+
216
+ List browser sessions:
217
+
218
+ ```js
219
+ await sdk.desktopBrowser.listSessions();
220
+ ```
221
+
222
+ Create a named browser session:
223
+
224
+ ```js
225
+ await sdk.desktopBrowser.createSession({
226
+ sessionName: "github-review"
227
+ });
228
+ ```
229
+
230
+ Create a browser tab:
231
+
232
+ ```js
233
+ await sdk.desktopBrowser.createTab({
234
+ sessionName: "github-review",
235
+ url: "https://example.com"
236
+ });
237
+ ```
238
+
239
+ Navigate a browser tab:
240
+
241
+ ```js
242
+ await sdk.desktopBrowser.navigateTab("cli-browser:9555:tab:3", {
243
+ url: "https://docs.realtimex.ai",
244
+ focus: true,
245
+ focusWindow: true
246
+ });
247
+ ```
248
+
249
+ Evaluate JavaScript in a browser tab:
250
+
251
+ ```js
252
+ await sdk.desktopBrowser.evaluateTab("cli-browser:9555:tab:3", {
253
+ expression: "document.title",
254
+ userGesture: true
255
+ });
256
+ ```
257
+
258
+ ### Naming rule
259
+
260
+ Prefer normal named sessions like:
261
+ - `github-review`
262
+ - `docs-research`
263
+ - `qa-checkout`
264
+
265
+ Avoid mutating reserved/system-managed sessions like `acp-*` unless the user explicitly asks to work with internal ACP browser flows.
266
+
172
267
  ---
173
268
 
174
269
  ## ACP Session Management
@@ -353,6 +448,52 @@ It covers:
353
448
  - **Agent Skills** — types (`repo`/`zip`), scopes, status values
354
449
  - **Data Models** — all database models with fields and defaults
355
450
 
451
+ ### Heartbeat Task Blocks
452
+
453
+ When working with `HEARTBEAT.md`, check whether it uses a top-level `tasks:` block.
454
+
455
+ Example:
456
+
457
+ ```yaml
458
+ tasks:
459
+ - name: audit-fetch
460
+ interval: 4h
461
+ prompt: Fetch origin/realtimex-dev and diff against tmp/frontend-audit-cursor.txt.
462
+
463
+ - name: audit-ui-design
464
+ interval: 4h
465
+ prompt: Review changed frontend files for UI design violations. If none, reply HEARTBEAT_OK.
466
+ ```
467
+
468
+ Rules:
469
+ - A top-level `tasks:` list means the heartbeat is split into separate scheduled tasks, not one monolithic prompt.
470
+ - Each `- name:` item is its own task definition.
471
+ - `name` is the stable task id. Keep it concise and stable when editing.
472
+ - `interval` is the cadence for that specific task.
473
+ - `prompt` is the full instruction body for that task.
474
+ - `HEARTBEAT_OK` means the task ran successfully but had nothing actionable to do.
475
+ - Preserve task order unless the user explicitly wants a reordering.
476
+ - If one task refers to another task's output, that dependency is described in the prompt text. Do not invent hidden YAML dependency fields.
477
+
478
+ When editing heartbeat files:
479
+ - If the file already uses `tasks:`, add or edit individual task items instead of collapsing them into one large prompt.
480
+ - If the file is a single long heartbeat prompt and the user wants separate scheduled jobs, rewrite it into a `tasks:` list with one item per independent workflow.
481
+ - When splitting a single heartbeat into tasks, preserve the original intent, move each discrete workflow into its own `prompt`, and keep shared context text only where needed.
482
+ - Keep YAML formatting simple: top-level `tasks:`, then `- name`, `interval`, `prompt`.
483
+
484
+ When a user asks how to convert a heartbeat into task-block form, produce or edit it into this shape:
485
+
486
+ ```yaml
487
+ tasks:
488
+ - name: task-one
489
+ interval: 4h
490
+ prompt: First workflow instructions.
491
+
492
+ - name: task-two
493
+ interval: 12h
494
+ prompt: Second workflow instructions.
495
+ ```
496
+
356
497
  ---
357
498
 
358
499
  ## References
@@ -1,6 +1,6 @@
1
1
  # RealTimeX SDK — API Reference
2
2
 
3
- > Auto-generated from `@realtimex/sdk` source · v**1.7.12** · 2026-05-07
3
+ > Auto-generated from `@realtimex/sdk` source · v**1.7.14** · 2026-05-08
4
4
 
5
5
  **Package:** `@realtimex/sdk` (CJS) · **Server:** `http://localhost:3001`
6
6
  **Developer Mode auth:** `Authorization: Bearer <apiKey>`
@@ -27,6 +27,8 @@
27
27
  | `mcp.servers` | `sdk.mcp.getServers()` |
28
28
  | `mcp.tools` | `sdk.mcp.getTools/executeTool()` |
29
29
  | `acp.agent` | `sdk.acpAgent.*` |
30
+ | `desktop.runtime-sessions` | `sdk.desktopRuntimeSessions.*` |
31
+ | `desktop.browser` | `sdk.desktopBrowser.*` |
30
32
 
31
33
  ---
32
34
 
@@ -105,6 +107,62 @@ Compatibility: `sdk.v1.desktopRuntimeSessions` remains available, but prefer the
105
107
 
106
108
  ---
107
109
 
110
+ ## sdk.desktopBrowser — RealTimeX Browser
111
+
112
+ Use this module for the managed RealTimeX Browser control plane. This is the correct path for:
113
+ - listing named browser sessions
114
+ - creating a named browser session
115
+ - opening a URL in a managed browser tab
116
+ - reading/evaluating/focusing/navigating/closing managed browser tabs
117
+
118
+ Do not use ACP for these unless the user explicitly asks for ACP browser handoff behavior.
119
+ Do not use desktop terminal sessions for browser tabs.
120
+
121
+ ### `V1DesktopBrowserModule`
122
+
123
+ ```ts
124
+ async listSessions(): Promise<unknown>
125
+ async createSession(body: { sessionName: string; remoteDebugPort?: number; }): Promise<unknown>
126
+ async getSession(sessionName: string): Promise<unknown>
127
+ async deleteSession(sessionName: string): Promise<unknown>
128
+ async createTab(body: { sessionName?: string; url: string; focus?: boolean; focusWindow?: boolean; }): Promise<unknown>
129
+ async getTab(tabRef: string): Promise<unknown>
130
+ async evaluateTab(tabRef: string, body: { expression: string; userGesture?: boolean; }): Promise<unknown>
131
+ async focusTab(tabRef: string, body?: { focusWindow?: boolean; }): Promise<unknown>
132
+ async navigateTab(tabRef: string, body: { url: string; focus?: boolean; focusWindow?: boolean; }): Promise<unknown>
133
+ async deleteTab(tabRef: string): Promise<unknown>
134
+ ```
135
+
136
+ ### Correct examples
137
+
138
+ ```js
139
+ await sdk.desktopBrowser.createSession({
140
+ sessionName: 'github-review'
141
+ });
142
+
143
+ await sdk.desktopBrowser.createTab({
144
+ sessionName: 'github-review',
145
+ url: 'https://example.com'
146
+ });
147
+
148
+ await sdk.desktopBrowser.navigateTab('cli-browser:9555:tab:3', {
149
+ url: 'https://docs.realtimex.ai',
150
+ focus: true,
151
+ focusWindow: true
152
+ });
153
+
154
+ await sdk.desktopBrowser.evaluateTab('cli-browser:9555:tab:3', {
155
+ expression: 'document.title',
156
+ userGesture: true
157
+ });
158
+ ```
159
+
160
+ Prefer normal named sessions like `github-review` or `docs-research`.
161
+ Avoid mutating reserved/system-managed sessions like `acp-*` unless the user explicitly asks for internal ACP browser flows.
162
+ Compatibility: `sdk.v1.desktopBrowser` remains available, but prefer the top-level alias.
163
+
164
+ ---
165
+
108
166
  ## Core — RealtimeXSDK
109
167
 
110
168
  ### `RealtimeXSDK`
@@ -128,6 +186,7 @@ Compatibility: `sdk.v1.desktopRuntimeSessions` remains available, but prefer the
128
186
  - `credentials: CredentialsModule`
129
187
  - `v1: V1ApiNamespace | undefined`
130
188
  - `desktopRuntimeSessions: V1DesktopRuntimeSessionsModule | undefined`
189
+ - `desktopBrowser: V1DesktopBrowserModule | undefined`
131
190
 
132
191
  ```ts
133
192
  // Developer API (v1) — requires apiKey to be set in config.
@@ -887,6 +946,44 @@ async createCustomTheme(): Promise<unknown>
887
946
 
888
947
  ---
889
948
 
949
+ ## sdk.v1.desktopBrowser — v1 Desktop Browser
950
+
951
+ ### `V1DesktopBrowserModule`
952
+
953
+ ```ts
954
+ // List RealTimeX Browser sessions available in the Electron desktop app.
955
+ async listSessions(): Promise<unknown>
956
+
957
+ // Create a named RealTimeX Browser session in the Electron desktop app.
958
+ async createSession(body?: Record<string, unknown>): Promise<unknown>
959
+
960
+ // Get a specific RealTimeX Browser session by session name.
961
+ async getSession(sessionName: string): Promise<unknown>
962
+
963
+ // Delete a named RealTimeX Browser session from the Electron desktop app.
964
+ async deleteSession(sessionName: string): Promise<unknown>
965
+
966
+ // Create a RealTimeX Browser tab, optionally launching the browser session if needed.
967
+ async createTab(body?: Record<string, unknown>): Promise<unknown>
968
+
969
+ // Get a RealTimeX Browser tab snapshot by tab reference.
970
+ async getTab(tabRef: string): Promise<unknown>
971
+
972
+ // Close an existing RealTimeX Browser tab.
973
+ async deleteTab(tabRef: string): Promise<unknown>
974
+
975
+ // Evaluate JavaScript in a specific RealTimeX Browser tab.
976
+ async evaluateTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>
977
+
978
+ // Focus an existing RealTimeX Browser tab.
979
+ async focusTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>
980
+
981
+ // Navigate an existing RealTimeX Browser tab to a new URL.
982
+ async navigateTab(tabRef: string, body?: Record<string, unknown>): Promise<unknown>
983
+ ```
984
+
985
+ ---
986
+
890
987
  ## sdk.v1.desktopEmbed — v1 Desktop Embed
891
988
 
892
989
  ### `V1DesktopEmbedModule`
@@ -1,6 +1,6 @@
1
1
  # Known Issues — Source-Detected
2
2
 
3
- > Auto-generated by `scripts/generate-skill.mjs` · SDK **1.7.12** · 2026-05-07
3
+ > Auto-generated by `scripts/generate-skill.mjs` · SDK **1.7.14** · 2026-05-08
4
4
 
5
5
  Run `node scripts/generate-skill.mjs --force` after SDK source changes to refresh.
6
6
 
@@ -24,6 +24,7 @@ const ALL_PERMISSIONS = [
24
24
  'vectors.read', 'vectors.write',
25
25
  'tts.generate', 'mcp.servers', 'mcp.tools', 'acp.agent',
26
26
  'desktop.runtime-sessions',
27
+ 'desktop.browser',
27
28
  ];
28
29
 
29
30
  /** Well-known file written by RealtimeX server for seamless auth. */
@@ -344,6 +344,14 @@ function getDesktopRuntimeSessionsModule(sdk) {
344
344
  return module;
345
345
  }
346
346
 
347
+ function getDesktopBrowserModule(sdk) {
348
+ const module = sdk?.desktopBrowser || sdk?.v1?.desktopBrowser;
349
+ if (!module) {
350
+ throw new Error('sdk.desktopBrowser is unavailable. Ensure the SDK was initialized with Developer API access.');
351
+ }
352
+ return module;
353
+ }
354
+
347
355
  // -- terminal-launcher / terminal sessions ----------------------------------
348
356
  CMD['terminal-open-launcher'] = async () => {
349
357
  const { sdk, context } = await getSDK();
@@ -450,6 +458,131 @@ CMD['terminal-close'] = async () => {
450
458
  print(await terminal.deleteRuntimeSession(sessionId));
451
459
  };
452
460
 
461
+ CMD['browser-sessions'] = async () => {
462
+ const { sdk } = await getSDK();
463
+ const browser = getDesktopBrowserModule(sdk);
464
+ print(await browser.listSessions());
465
+ };
466
+
467
+ CMD['browser-session-create'] = async () => {
468
+ const [sessionName] = cmdArgs;
469
+ if (!sessionName) {
470
+ console.error('Usage: rtx.js browser-session-create <session-name> [--port=<n>]');
471
+ process.exit(1);
472
+ }
473
+ const { sdk } = await getSDK();
474
+ const browser = getDesktopBrowserModule(sdk);
475
+ const body = {
476
+ sessionName,
477
+ ...(flags.port ? { remoteDebugPort: Number(flags.port) } : {}),
478
+ };
479
+ print(await browser.createSession(body));
480
+ };
481
+
482
+ CMD['browser-session-get'] = async () => {
483
+ const [sessionName] = cmdArgs;
484
+ if (!sessionName) {
485
+ console.error('Usage: rtx.js browser-session-get <session-name>');
486
+ process.exit(1);
487
+ }
488
+ const { sdk } = await getSDK();
489
+ const browser = getDesktopBrowserModule(sdk);
490
+ print(await browser.getSession(sessionName));
491
+ };
492
+
493
+ CMD['browser-session-delete'] = async () => {
494
+ const [sessionName] = cmdArgs;
495
+ if (!sessionName) {
496
+ console.error('Usage: rtx.js browser-session-delete <session-name>');
497
+ process.exit(1);
498
+ }
499
+ const { sdk } = await getSDK();
500
+ const browser = getDesktopBrowserModule(sdk);
501
+ print(await browser.deleteSession(sessionName));
502
+ };
503
+
504
+ CMD['browser-tab-create'] = async () => {
505
+ const [url] = cmdArgs;
506
+ if (!url) {
507
+ console.error('Usage: rtx.js browser-tab-create <url> [--session=<name>] [--focus=true|false] [--focus-window=true|false]');
508
+ process.exit(1);
509
+ }
510
+ const { sdk } = await getSDK();
511
+ const browser = getDesktopBrowserModule(sdk);
512
+ const body = {
513
+ url,
514
+ ...(flags.session ? { sessionName: flags.session } : {}),
515
+ ...(flags.focus !== undefined ? { focus: flags.focus !== 'false' } : {}),
516
+ ...(flags['focus-window'] !== undefined ? { focusWindow: flags['focus-window'] !== 'false' } : {}),
517
+ };
518
+ print(await browser.createTab(body));
519
+ };
520
+
521
+ CMD['browser-tab-get'] = async () => {
522
+ const [tabRef] = cmdArgs;
523
+ if (!tabRef) {
524
+ console.error('Usage: rtx.js browser-tab-get <tab-ref>');
525
+ process.exit(1);
526
+ }
527
+ const { sdk } = await getSDK();
528
+ const browser = getDesktopBrowserModule(sdk);
529
+ print(await browser.getTab(tabRef));
530
+ };
531
+
532
+ CMD['browser-tab-focus'] = async () => {
533
+ const [tabRef] = cmdArgs;
534
+ if (!tabRef) {
535
+ console.error('Usage: rtx.js browser-tab-focus <tab-ref> [--focus-window=true|false]');
536
+ process.exit(1);
537
+ }
538
+ const { sdk } = await getSDK();
539
+ const browser = getDesktopBrowserModule(sdk);
540
+ const body = flags['focus-window'] !== undefined ? { focusWindow: flags['focus-window'] !== 'false' } : {};
541
+ print(await browser.focusTab(tabRef, body));
542
+ };
543
+
544
+ CMD['browser-tab-navigate'] = async () => {
545
+ const [tabRef, url] = cmdArgs;
546
+ if (!tabRef || !url) {
547
+ console.error('Usage: rtx.js browser-tab-navigate <tab-ref> <url> [--focus=true|false] [--focus-window=true|false]');
548
+ process.exit(1);
549
+ }
550
+ const { sdk } = await getSDK();
551
+ const browser = getDesktopBrowserModule(sdk);
552
+ const body = {
553
+ url,
554
+ ...(flags.focus !== undefined ? { focus: flags.focus !== 'false' } : {}),
555
+ ...(flags['focus-window'] !== undefined ? { focusWindow: flags['focus-window'] !== 'false' } : {}),
556
+ };
557
+ print(await browser.navigateTab(tabRef, body));
558
+ };
559
+
560
+ CMD['browser-tab-evaluate'] = async () => {
561
+ const [tabRef, ...expressionParts] = cmdArgs;
562
+ if (!tabRef || expressionParts.length === 0) {
563
+ console.error('Usage: rtx.js browser-tab-evaluate <tab-ref> <expression> [--user-gesture=true|false]');
564
+ process.exit(1);
565
+ }
566
+ const { sdk } = await getSDK();
567
+ const browser = getDesktopBrowserModule(sdk);
568
+ const body = {
569
+ expression: expressionParts.join(' '),
570
+ ...(flags['user-gesture'] !== undefined ? { userGesture: flags['user-gesture'] !== 'false' } : {}),
571
+ };
572
+ print(await browser.evaluateTab(tabRef, body));
573
+ };
574
+
575
+ CMD['browser-tab-close'] = async () => {
576
+ const [tabRef] = cmdArgs;
577
+ if (!tabRef) {
578
+ console.error('Usage: rtx.js browser-tab-close <tab-ref>');
579
+ process.exit(1);
580
+ }
581
+ const { sdk } = await getSDK();
582
+ const browser = getDesktopBrowserModule(sdk);
583
+ print(await browser.deleteTab(tabRef));
584
+ };
585
+
453
586
  // -- acp-agents -------------------------------------------------------------
454
587
  // Source: AcpAgentModule.listAgents({ includeModels? })
455
588
  // Returns: AcpAgentInfo[] { id, label, handles[], installed, authReady, status }
@@ -982,6 +1115,40 @@ sdk.desktopRuntimeSessions.* — Desktop terminal sessions:
982
1115
  Compatibility:
983
1116
  The SDK also exposes this module as sdk.v1.desktopRuntimeSessions.
984
1117
 
1118
+ sdk.desktopBrowser.* — RealTimeX Browser sessions and tabs:
1119
+ browser-sessions
1120
+ List named RealTimeX Browser sessions.
1121
+
1122
+ browser-session-create <session-name> [--port=<n>]
1123
+ Create a named browser session.
1124
+
1125
+ browser-session-get <session-name>
1126
+ Fetch one named browser session.
1127
+
1128
+ browser-session-delete <session-name>
1129
+ Delete a named browser session.
1130
+
1131
+ browser-tab-create <url> [--session=<name>] [--focus=true|false] [--focus-window=true|false]
1132
+ Create a managed browser tab.
1133
+
1134
+ browser-tab-get <tab-ref>
1135
+ Fetch one browser tab snapshot by tab ref.
1136
+
1137
+ browser-tab-focus <tab-ref> [--focus-window=true|false]
1138
+ Focus a managed browser tab.
1139
+
1140
+ browser-tab-navigate <tab-ref> <url> [--focus=true|false] [--focus-window=true|false]
1141
+ Navigate a managed browser tab.
1142
+
1143
+ browser-tab-evaluate <tab-ref> <expression> [--user-gesture=true|false]
1144
+ Evaluate JavaScript in a managed browser tab.
1145
+
1146
+ browser-tab-close <tab-ref>
1147
+ Close a managed browser tab.
1148
+
1149
+ Compatibility:
1150
+ The SDK also exposes this module as sdk.v1.desktopBrowser.
1151
+
985
1152
  sdk.acpAgent.* — Session Management:
986
1153
  acp-agents [--models=true]
987
1154
  List available ACP CLI agents.